From 6243a033eb7776cbaf92a57a5c62d8ec3554b013 Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Tue, 23 Sep 2025 17:30:54 +0800 Subject: [PATCH] commit --- .../family/constant/ColumnFormTypeEnum.java | 1 + .../constant/ColumnFormTypeEnum.java | 1 + .../manage/TrainSignUpAdjustController.java | 18 +- .../manage/TrainSignUpApplyController.java | 34 +- .../manage/TrainSignUpManageController.java | 22 +- .../manage/TrainSignUpTypeController.java | 18 +- .../TrainSignUpUserManageController.java | 20 +- .../manage/TrainsignUpMineController.java | 16 +- ...ainSignUpActivityStatisticsController.java | 20 +- .../models/TrainMobileSignColumn.java | 7 +- .../models/TrainSignUpActivity.java | 14 +- .../models/TrainSignUpActivityCourse.java | 10 +- .../models/TrainSignUpBlackList.java | 12 +- .../trainSignUp/models/TrainSignUpCourse.java | 10 +- .../trainSignUp/models/TrainSignUpType.java | 11 +- .../models/TrainSignUpTypeLimit.java | 12 +- .../trainSignUp/models/TrainSignUpUser.java | 10 +- .../models/TrainSignUpUserCourse.java | 10 +- .../constant/IntegralOtherModelConstant.java | 2 +- .../literacy/constant/ColumnFormTypeEnum.java | 25 + .../manage/LiteracyAdjustController.java | 174 +++++++ .../manage/LiteracyApplyController.java | 426 ++++++++++++++++ .../manage/LiteracyManageController.java | 195 ++++++++ .../manage/LiteracyMineController.java | 156 ++++++ .../manage/LiteracyTypeController.java | 162 ++++++ .../manage/LiteracyUserManageController.java | 347 +++++++++++++ .../LiteracyActivityStatisticsController.java | 248 ++++++++++ .../literacy/models/LiteracyActivity.java | 134 +++++ .../models/LiteracyActivityCourse.java | 54 ++ .../literacy/models/LiteracyBlackList.java | 31 ++ .../literacy/models/LiteracyCourse.java | 163 ++++++ .../models/LiteracyMobileSignColumn.java | 80 +++ .../literacy/models/LiteracyType.java | 65 +++ .../literacy/models/LiteracyTypeLimit.java | 40 ++ .../literacy/models/LiteracyUser.java | 86 ++++ .../literacy/models/LiteracyUserCourse.java | 87 ++++ .../service/LiteracyActivityService.java | 119 +++++ .../LiteracyActivityStatisticsService.java | 63 +++ .../service/LiteracyBlackListService.java | 43 ++ .../impl/LiteracyActivityServiceImpl.java | 468 ++++++++++++++++++ ...LiteracyActivityStatisticsServiceImpl.java | 255 ++++++++++ .../service/impl/LiteracyUserServiceImpl.java | 98 ++++ .../apply/applyForm.js | 8 +- .../apply/courseList.js | 6 +- .../apply/index.html | 16 +- .../manage/basicForm.js | 12 +- .../manage/courseTime.js | 0 .../manage/customForm.js | 0 .../manage/index.html | 2 +- .../manage/info.js | 2 +- .../manage/makeQrcode.js | 2 +- .../manage/unionForm.js | 2 +- .../statistics/index.html | 0 .../statistics/info.js | 0 .../type/basicForm.js | 0 .../type/index.html | 0 .../userAdjust/index.html | 0 .../userAdjust/userInfo.js | 0 .../userManage/index.html | 6 +- .../activity/trainSignUp/apply/index.html | 27 +- .../activity/trainSignUp/common/times.js | 2 +- .../activity/trainSignUp/list/applyForm.js | 8 +- .../activity/trainSignUp/list/index.html | 12 +- .../activity/trainSignUp/mine/index.html | 4 +- 64 files changed, 3696 insertions(+), 180 deletions(-) create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/constant/ColumnFormTypeEnum.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyAdjustController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyApplyController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyManageController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyMineController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyTypeController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyUserManageController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/statistics/LiteracyActivityStatisticsController.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyActivity.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyActivityCourse.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyBlackList.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyCourse.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyMobileSignColumn.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyType.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyTypeLimit.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyUser.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyUserCourse.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyActivityService.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyActivityStatisticsService.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyBlackListService.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityServiceImpl.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java create mode 100644 src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyUserServiceImpl.java rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/apply/applyForm.js (98%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/apply/courseList.js (99%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/apply/index.html (88%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/manage/basicForm.js (99%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/manage/courseTime.js (100%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/manage/customForm.js (100%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/manage/index.html (99%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/manage/info.js (98%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/manage/makeQrcode.js (98%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/manage/unionForm.js (99%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/statistics/index.html (100%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/statistics/info.js (100%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/type/basicForm.js (100%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/type/index.html (100%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/userAdjust/index.html (100%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/userAdjust/userInfo.js (100%) rename src/main/resources/views/platform/zhgh/activity/{trainSingUp => trainSignUp}/userManage/index.html (98%) diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/constant/ColumnFormTypeEnum.java b/src/main/java/com/budwk/app/zhgh/activity/family/constant/ColumnFormTypeEnum.java index 9acbcd08..343af1ab 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/constant/ColumnFormTypeEnum.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/constant/ColumnFormTypeEnum.java @@ -16,6 +16,7 @@ public enum ColumnFormTypeEnum { INPUT("INPUT", "输入框"), SELECT("SELECT", "选择框"), + STEPPER("STEPPER", "步进器"), //RADIO("RADIO", "单选框"),//选项数组 FILE("FILE", "文件"); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/constant/ColumnFormTypeEnum.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/constant/ColumnFormTypeEnum.java index 52d6c98e..cbc2e70b 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/constant/ColumnFormTypeEnum.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/constant/ColumnFormTypeEnum.java @@ -16,6 +16,7 @@ public enum ColumnFormTypeEnum { INPUT("INPUT", "输入框"), SELECT("SELECT", "选择框"), + STEPPER("STEPPER", "步进器"), //RADIO("RADIO", "单选框"),//选项数组 FILE("FILE", "文件"); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpAdjustController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpAdjustController.java index 85d03b7f..998a9c16 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpAdjustController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpAdjustController.java @@ -36,7 +36,7 @@ import java.util.List; @IocBean @Ok("json:full") @Api(tags = "品牌活动人员调整") -@At("/platform/trainSingUp/adjust") +@At("/platform/trainSignUp/adjust") public class TrainSignUpAdjustController { @Inject @@ -49,8 +49,8 @@ public class TrainSignUpAdjustController { private TrainSignUpActivityStatisticsService trainSignUpActivityStatisticsService; @At("") - @SaCheckPermission("trainSingUp.adjust") - @Ok("beetl:/platform/zhgh/activity/trainSingUp/userAdjust/index.html") + @SaCheckPermission("trainSignUp.adjust") + @Ok("beetl:/platform/zhgh/activity/trainSignUp/userAdjust/index.html") public void index() { } @@ -61,7 +61,7 @@ public class TrainSignUpAdjustController { */ @At @ApiOperation("活动列表") - @SaCheckPermission("trainSingUp.adjust") + @SaCheckPermission("trainSignUp.adjust") public Result activityList(@Param(value = "year") Integer year) { List activityList = dao.query(TrainSignUpActivity.class, Cnd.NEW().andEX("year", "=", year).andEX("isDisabled", "=", false).desc("activityStartTime")); return Result.success(activityList); @@ -69,7 +69,7 @@ public class TrainSignUpAdjustController { @At @ApiOperation("分页查询") - @SaCheckPermission("trainSingUp.adjust") + @SaCheckPermission("trainSignUp.adjust") public Result pageData(PageForm pageForm, @Param(value = "activityId") String activityId) { Pagination pagination = trainSignUpActivityStatisticsService.pageData(pageForm, activityId); @@ -78,7 +78,7 @@ public class TrainSignUpAdjustController { @At @ApiOperation("子活动查询") - @SaCheckPermission("trainSingUp.adjust") + @SaCheckPermission("trainSignUp.adjust") public Result getCourse(String activityId) { Sql sql = Sqls.create(""" SELECT @@ -108,7 +108,7 @@ public class TrainSignUpAdjustController { @At @ApiOperation("报名用户列表") - @SaCheckPermission("trainSingUp.adjust") + @SaCheckPermission("trainSignUp.adjust") public Result registerUserList(@Param("courseId") String courseId, @Param(value = "unionId") String unionId, @Param(value = "unitId") String unitId, @@ -120,7 +120,7 @@ public class TrainSignUpAdjustController { @At @ApiOperation("人员调整") - @SaCheckPermission("trainSingUp.adjust") + @SaCheckPermission("trainSignUp.adjust") @SLog(tag = "品牌活动-人员调整", msg = "人员调整") public Result adjust(String activityId, String oldCourseId, String newCourseId, String userId) { @@ -159,7 +159,7 @@ public class TrainSignUpAdjustController { @At @ApiOperation("删除报名人员") - @SaCheckPermission("trainSingUp.adjust") + @SaCheckPermission("trainSignUp.adjust") @SLog(tag = "品牌活动-人员调整", msg = "删除报名人员") public Result deleteSignUser(String activityId, String courseId, String userId) { diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpApplyController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpApplyController.java index b35323d4..5e043ad6 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpApplyController.java @@ -45,7 +45,7 @@ import java.util.stream.Collectors; @IocBean @Ok("json:full") @Api(tags = "活动报名") -@At("/platform/trainSingUp/apply") +@At("/platform/trainSignUp/apply") public class TrainSignUpApplyController { private final ReentrantLock lock = new ReentrantLock(true); @@ -60,26 +60,26 @@ public class TrainSignUpApplyController { private Dao dao; @At("/") - @SaCheckPermission("trainSingUp.apply") - @Ok("beetl:/platform/zhgh/activity/trainSingUp/apply/index.html") + @SaCheckPermission("trainSignUp.apply") + @Ok("beetl:/platform/zhgh/activity/trainSignUp/apply/index.html") public void index() { } @At("/h5") - @SaCheckPermission("h5.trainSingUp.apply") + @SaCheckPermission("h5.trainSignUp.apply") @Ok("beetl:/platform/zhghh5/activity/trainSignUp/apply/index.html") public void h5Index() { } @At("/list/h5") - @SaCheckPermission("h5.trainSingUp.apply") + @SaCheckPermission("h5.trainSignUp.apply") @Ok("beetl:/platform/zhghh5/activity/trainSignUp/list/index.html") public void listIndex() { } @At @ApiOperation("活动查询") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) public Result activityPageData(PageForm pageForm, @Param(value = "year") Integer year, @Param(value = "activityType") Integer activityType, @@ -90,12 +90,10 @@ public class TrainSignUpApplyController { cnd.andEX("`year`", "=", year); //查询报名中 if (activityType == 2) { - cnd.and(new Static("now() > activitySignUpStartTime and now() < activitySignUpEndTime")); + cnd.and(new Static("now() < activitySignUpEndTime")); }//查询已结束的 else if (activityType == 3) { - cnd.and(new Static("now() > activitySignUpEndTime")); - } else if (activityType == 4) { - cnd.and(new Static("now() < activitySignUpStartTime")); + cnd.and(new Static("now() >= activityEndTime")); } if (AuthUtil.hasRole("H04") && !AuthUtil.hasRoleOr("sysadmin, A06")) { @@ -115,7 +113,7 @@ public class TrainSignUpApplyController { @At @ApiOperation("分活动查询") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) public Result pageData(PageForm pageForm, @Param(value = "courseTypeId") String courseTypeId, @Param(value = "activityId") String activityId, @@ -196,7 +194,7 @@ public class TrainSignUpApplyController { @At @ApiOperation("获取分活动时间") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) public Result getCourseTime(String id) { List list = trainSignUpActivityService.dao().query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", id)); return Result.success(list); @@ -204,7 +202,7 @@ public class TrainSignUpApplyController { @At @ApiOperation("查询分类标识集合") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) public Result queryCourseAssort(String activityId) { List courseList = trainSignUpActivityService.dao().query(TrainSignUpCourse.class, Cnd.where(TrainSignUpCourse::getActivityId, "=", activityId).asc(TrainSignUpCourse::getOrderNum)); if (Lang.isEmpty(courseList)) { @@ -216,7 +214,7 @@ public class TrainSignUpApplyController { @At @ApiOperation("验证是否能报名") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) public Result validateSignUp(String courseId, @Param(value = "currentFamilyNumber") Integer currentFamilyNumber) { try { @@ -282,7 +280,7 @@ public class TrainSignUpApplyController { @At @ApiOperation("查询子活动时间段") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) public Result getCourseTimeSelectList(String courseId) { // 查课程的时间段 List courseList = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", courseId).asc("courseStartTime")); @@ -316,7 +314,7 @@ public class TrainSignUpApplyController { @At @ApiOperation("验证子活动是否能报名") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) public Result validateSourceSignUp(String activityCourseId, String courseId) { try { lock.lock(); @@ -346,7 +344,7 @@ public class TrainSignUpApplyController { @At @ApiOperation("活动报名") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) @SLog(tag = "品牌活动-活动报名", msg = "活动报名") public Result doSignUp(TrainSignUpUser trainSignUpUser) { try { @@ -386,7 +384,7 @@ public class TrainSignUpApplyController { @At @ApiOperation("取消报名") - @SaCheckPermission(value = {"trainSingUp.apply", "h5.trainSingUp.apply"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.apply", "h5.trainSignUp.apply"}, mode = SaMode.OR) @SLog(tag = "品牌活动-活动报名", msg = "取消报名") public Result cancelSignUp(@Param("activityId") String activityId, @Param("courseId") String courseId) { String userId = SecurityUtil.getUserId(); 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 a78f3406..ebd5209a 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 @@ -40,7 +40,7 @@ import java.util.stream.Collectors; @IocBean @Ok("json:full") @Api(tags = "活动管理") -@At("/platform/trainSingUp/manage") +@At("/platform/trainSignUp/manage") public class TrainSignUpManageController { @Inject @@ -49,14 +49,14 @@ public class TrainSignUpManageController { private Dao dao; @At("") - @SaCheckPermission("trainSingUp.manage") - @Ok("beetl:/platform/zhgh/activity/trainSingUp/manage/index.html") + @SaCheckPermission("trainSignUp.manage") + @Ok("beetl:/platform/zhgh/activity/trainSignUp/manage/index.html") public void index() { } @At @ApiOperation("分页查询") - @SaCheckPermission("trainSingUp.manage") + @SaCheckPermission("trainSignUp.manage") public Result pageData(PageForm pageForm, @Param(value = "year") Integer year, @Param(value = "activityName") String activityName) { @@ -69,7 +69,7 @@ public class TrainSignUpManageController { @At @ApiOperation("活动删除") - @SaCheckPermission("trainSingUp.manage") + @SaCheckPermission("trainSignUp.manage") @SLog(tag = "品牌活动-活动管理", msg = "删除活动") public Result onDelete(String id) { Trans.exec(() -> { @@ -87,7 +87,7 @@ public class TrainSignUpManageController { @At @ApiOperation("活动状态变更") - @SaCheckPermission("trainSingUp.manage") + @SaCheckPermission("trainSignUp.manage") public Result activityStatusChange(TrainSignUpActivity activity) { trainSignUpActivityManageService.updateActivityStatus(activity); dao.update(Sys_home_activity.class, @@ -98,7 +98,7 @@ public class TrainSignUpManageController { @At @ApiOperation("查询单个活动") - @SaCheckPermission("trainSingUp") + @SaCheckPermission("trainSignUp") public Result findOne(@Param("id") @NotNull String id) { NutMap dataMap = trainSignUpActivityManageService.findOne(id, null, ""); String activityStartTime = dataMap.getString("activityStartTime"); @@ -146,7 +146,7 @@ public class TrainSignUpManageController { @At @Ok("json:full") @ApiOperation("品牌活动新增/修改") - @SaCheckPermission("trainSingUp.manage") + @SaCheckPermission("trainSignUp.manage") @SLog(tag = "品牌活动-活动管理", msg = "新增/修改活动") public Result doHandle(TrainSignUpActivity activity) { if (StrUtil.isBlank(activity.getId())) { @@ -160,7 +160,7 @@ public class TrainSignUpManageController { @At @Ok("json:full") @ApiOperation("获取分工会人数限制") - @SaCheckPermission("trainSingUp.manage") + @SaCheckPermission("trainSignUp.manage") public Result getUnionLimit(@Param(value = "activityScopeId") String activityScopeId) { Sql sql = Sqls.create(""" SELECT @@ -184,7 +184,7 @@ public class TrainSignUpManageController { @At @Ok("json:full") @ApiOperation("获取报名人员数量") - @SaCheckPermission("trainSingUp.manage") + @SaCheckPermission("trainSignUp.manage") public Result getRegisterUserCount(@Param(value = "courseId") String courseId) { return Result.success().addData(dao.count(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId))); } @@ -192,7 +192,7 @@ public class TrainSignUpManageController { @At @Ok("json:full") @ApiOperation("获取历史活动列表") - @SaCheckPermission("trainSingUp.manage") + @SaCheckPermission("trainSignUp.manage") public Result getHistoricalActList() { List query = dao.query(TrainSignUpActivity.class, Cnd.NEW().desc("activityStartTime")); return Result.success().addData(query); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpTypeController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpTypeController.java index 4925acec..3061d769 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpTypeController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpTypeController.java @@ -42,7 +42,7 @@ import java.util.List; @IocBean @Ok("json:full") @Api(tags = "活动类型管理") -@At("/platform/trainSingUp/type") +@At("/platform/trainSignUp/type") public class TrainSignUpTypeController { @Inject @@ -51,14 +51,14 @@ public class TrainSignUpTypeController { private BaseService baseService; @At("") - @SaCheckPermission("trainSingUp.type") - @Ok("beetl:/platform/zhgh/activity/trainSingUp/type/index.html") + @SaCheckPermission("trainSignUp.type") + @Ok("beetl:/platform/zhgh/activity/trainSignUp/type/index.html") public void index() { } @At @ApiOperation("分页查询") - @SaCheckPermission("trainSingUp.type") + @SaCheckPermission("trainSignUp.type") public Result pageData(PageForm pageForm, @Param(value = "typeName") String typeName) { Cnd cnd = Cnd.NEW(); @@ -89,7 +89,7 @@ public class TrainSignUpTypeController { @At @ApiOperation("活动类型新增") - @SaCheckPermission("trainSingUp.type") + @SaCheckPermission("trainSignUp.type") @SLog(tag = "品牌活动-类型管理", msg = "活动类型新增") public Result doAdd(@Param("data") String data) throws Exception { TrainSignUpType type = Json.fromJson(TrainSignUpType.class, data); @@ -105,7 +105,7 @@ public class TrainSignUpTypeController { @At @ApiOperation("活动类型修改") - @SaCheckPermission("trainSingUp.type") + @SaCheckPermission("trainSignUp.type") @SLog(tag = "品牌活动-类型管理", msg = "活动类型修改") public Result doEdit(TrainSignUpType type) { int count = dao.count(TrainSignUpType.class, Cnd.where("code", "=", type.getCode()).and("id", "!=", type.getId())); @@ -120,7 +120,7 @@ public class TrainSignUpTypeController { @At @ApiOperation("活动类型删除") - @SaCheckPermission("trainSingUp.type") + @SaCheckPermission("trainSignUp.type") @SLog(tag = "品牌活动-类型管理", msg = "活动类型删除") public Object doDelete(@Param(value = "id") String id) { dao.clear(TrainSignUpType.class, Cnd.where("id", "=", id)); @@ -131,7 +131,7 @@ public class TrainSignUpTypeController { @At @Aop(TransAop.READ_COMMITTED) @ApiOperation("排序号变更") - @SaCheckPermission("trainSingUp.type") + @SaCheckPermission("trainSignUp.type") public Object xhChange(String id, Integer xh, boolean toDown) { if (toDown) { TrainSignUpType next = dao.fetch(TrainSignUpType.class, Cnd.where("xh", "=", xh + 1)); @@ -158,7 +158,7 @@ public class TrainSignUpTypeController { @At @ApiOperation("自定义表单字段类型") - @SaCheckPermission("trainSingUp.type") + @SaCheckPermission("trainSignUp.type") public Result getColumnType() { List names = EnumUtil.getNames(ColType.class); names.add("JSON"); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpUserManageController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpUserManageController.java index 9d3043f4..5b3a7656 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpUserManageController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpUserManageController.java @@ -44,8 +44,8 @@ import java.util.stream.Collectors; */ @IocBean @Ok("json:full") -@Api(tags = "亲子活动人员黑名单") -@At("/platform/trainSingUp/userManage") +@Api(tags = "品牌活动人员黑名单") +@At("/platform/trainSignUp/userManage") public class TrainSignUpUserManageController { @Inject @@ -54,14 +54,14 @@ public class TrainSignUpUserManageController { private TrainSignUpBlackListService trainSignUpBlackListService; @At("") - @SaCheckPermission("trainSingUp.userManage") - @Ok("beetl:/platform/zhgh/activity/trainSingUp/userManage/index.html") + @SaCheckPermission("trainSignUp.userManage") + @Ok("beetl:/platform/zhgh/activity/trainSignUp/userManage/index.html") public void index() { } @At @ApiOperation("分页查询") - @SaCheckPermission("trainSingUp.userManage") + @SaCheckPermission("trainSignUp.userManage") public Result pageData(PageForm pageForm, @Param(value = "activityId") String activityId, @Param(value = "courseId") String courseId, @@ -85,7 +85,7 @@ public class TrainSignUpUserManageController { @At @ApiOperation("报名人员处理") - @SaCheckPermission("trainSingUp.userManage") + @SaCheckPermission("trainSignUp.userManage") @SLog(tag = "品牌活动-人员管理", msg = "报名人员处理") public Result doHandleUser(@Param("userId") String userId) { trainSignUpBlackListService.doHandleUser(userId); @@ -94,7 +94,7 @@ public class TrainSignUpUserManageController { @At @ApiOperation("根据活动Id获取子活动") - @SaCheckPermission("trainSingUp.userManage") + @SaCheckPermission("trainSignUp.userManage") public Result getCourseByActivityId(@Param("activityId") String activityId) { List list = dao.query(TrainSignUpCourse.class, Cnd.where("activityId", "=", activityId)); return Result.success(list); @@ -102,7 +102,7 @@ public class TrainSignUpUserManageController { @At @ApiOperation("获取子活动具体时间") - @SaCheckPermission("trainSingUp.userManage") + @SaCheckPermission("trainSignUp.userManage") public Result attendClassRecord(String userId) { trainSignUpBlackListService.attendClassRecord(userId); return Result.success(); @@ -110,7 +110,7 @@ public class TrainSignUpUserManageController { @At @ApiOperation("获取候补人员") - @SaCheckPermission("trainSingUp.userManage") + @SaCheckPermission("trainSignUp.userManage") public Result getReserveUser(String courseId) { Sql sql = Sqls.create(""" SELECT @@ -131,7 +131,7 @@ public class TrainSignUpUserManageController { @At @ApiOperation("补充人员") - @SaCheckPermission("trainSingUp.userManage") + @SaCheckPermission("trainSignUp.userManage") @SLog(tag = "品牌活动-人员管理", msg = "补充人员") public Result reserveSingUp(String[] ids, String courseId) { //先查询这个课程有多少个未签到的人员 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 60ae634d..ac4031ae 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 @@ -40,7 +40,7 @@ import java.util.List; @IocBean @Ok("json:full") @Api(tags = "活动报名") -@At("/platform/trainSingUp/mine") +@At("/platform/trainSignUp/mine") public class TrainsignUpMineController { @Inject @@ -49,13 +49,13 @@ public class TrainsignUpMineController { private TrainSignUpActivityService activityService; @At("/") - @SaCheckPermission("trainSingUp.mine") - @Ok("beetl:/platform/zhgh/activity/trainSingUp/mine/index.html") + @SaCheckPermission("trainSignUp.mine") + @Ok("beetl:/platform/zhgh/activity/trainSignUp/mine/index.html") public void index() { } @At("/h5") - @SaCheckPermission("h5.trainSingUp.mine") + @SaCheckPermission("h5.trainSignUp.mine") @Ok("beetl:/platform/zhghh5/activity/trainSignUp/mine/index.html") public void h5Index() { } @@ -63,7 +63,7 @@ public class TrainsignUpMineController { @At @ApiOperation("主动扫码签到") @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission(value = {"trainSingUp.mine", "h5.trainSingUp.mine"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.mine", "h5.trainSignUp.mine"}, mode = SaMode.OR) @SLog(tag = "品牌活动-活动签到", msg = "主动扫码签到") public Result drivingScan(String courseId) { @@ -96,7 +96,7 @@ public class TrainsignUpMineController { @At @ApiOperation("被动扫码签到") @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission(value = {"trainSingUp.mine", "h5.trainSingUp.mine"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.mine", "h5.trainSignUp.mine"}, mode = SaMode.OR) @SLog(tag = "品牌活动-活动签到", msg = "被动扫码签到") public Result passiveScan(String id) { @@ -124,7 +124,7 @@ public class TrainsignUpMineController { @At @ApiOperation("分活动查询") - @SaCheckPermission(value = {"trainSingUp.mine", "h5.trainSingUp.mine"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.mine", "h5.trainSignUp.mine"}, mode = SaMode.OR) public Result queryCourseSign(String courseId) { Sql sql = Sqls.create(""" SELECT @@ -143,7 +143,7 @@ public class TrainsignUpMineController { @At @ApiOperation("获取我报名的课程") - @SaCheckPermission(value = {"trainSingUp.mine", "h5.trainSingUp.mine"}, mode = SaMode.OR) + @SaCheckPermission(value = {"trainSignUp.mine", "h5.trainSignUp.mine"}, mode = SaMode.OR) public Result queryMineCourse(String activityId) { Sql sql = Sqls.create(""" diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java index ea4eac52..7363ee5b 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java @@ -60,7 +60,7 @@ import java.util.zip.ZipOutputStream; @IocBean @Ok("json:full") @Api(tags = "品牌活动统计") -@At("/platform/trainSingUp/statistics") +@At("/platform/trainSignUp/statistics") public class TrainSignUpActivityStatisticsController { @Inject @@ -71,14 +71,14 @@ public class TrainSignUpActivityStatisticsController { private Dao dao; @At("") - @SaCheckPermission("trainSingUp.statistics") - @Ok("beetl:/platform/zhgh/activity/trainSingUp/statistics/index.html") + @SaCheckPermission("trainSignUp.statistics") + @Ok("beetl:/platform/zhgh/activity/trainSignUp/statistics/index.html") public void index() { } @At @ApiOperation("分页查询") - @SaCheckPermission("trainSingUp.statistics") + @SaCheckPermission("trainSignUp.statistics") public Result pageData(PageForm pageForm, @Param(value = "activityId") String activityId) { Pagination pagination = trainSignUpActivityStatisticsService.pageData(pageForm, activityId); @@ -93,7 +93,7 @@ public class TrainSignUpActivityStatisticsController { */ @At @ApiOperation("活动列表") - @SaCheckPermission("trainSingUp.statistics") + @SaCheckPermission("trainSignUp.statistics") public Result activityList(@Param(value = "year") Integer year) { List list = dao.query(TrainSignUpActivity.class, Cnd.NEW().andEX("year", "=", year).desc("activityStartTime")); return Result.success(list); @@ -107,14 +107,14 @@ public class TrainSignUpActivityStatisticsController { */ @At @ApiOperation("报名人员列表") - @SaCheckPermission("trainSingUp.statistics") + @SaCheckPermission("trainSignUp.statistics") public Result registerUserList(@Param(value = "courseId") String courseId) { return Result.success(trainSignUpActivityStatisticsService.registerUserList(courseId)); } @At @ApiOperation("报名动态列") - @SaCheckPermission("trainSingUp.statistics") + @SaCheckPermission("trainSignUp.statistics") public Object getTaleColumnInfo(@Param(value = "courseId") String courseId) { return Result.success(trainSignUpActivityStatisticsService.getTaleColumnInfo(courseId)); } @@ -127,14 +127,14 @@ public class TrainSignUpActivityStatisticsController { */ @At @ApiOperation("获取签到信息") - @SaCheckPermission("trainSingUp.statistics") + @SaCheckPermission("trainSignUp.statistics") public Result getSignInfo(@Param("courseId") String courseId) { return Result.success(trainSignUpActivityStatisticsService.getSignInfo(courseId)); } @At @ApiOperation("开放报名") - @SaCheckPermission("trainSingUp.statistics") + @SaCheckPermission("trainSignUp.statistics") public Result signChange(@Param("courseId") String courseId, @Param("openOtherUnion") Boolean openOtherUnion) { dao.update(TrainSignUpCourse.class, Chain.make("openOtherUnion", openOtherUnion) , Cnd.where("id", "=", courseId)); @@ -144,7 +144,7 @@ public class TrainSignUpActivityStatisticsController { @At @Ok("void") @ApiOperation("导出签到名单") - @SaCheckPermission("trainSingUp.statistics") + @SaCheckPermission("trainSignUp.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/trainSignUp/models/TrainMobileSignColumn.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainMobileSignColumn.java index 2af52125..26860d25 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainMobileSignColumn.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainMobileSignColumn.java @@ -1,13 +1,18 @@ package com.budwk.app.zhgh.activity.trainSignUp.models; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; import java.util.List; -@Table("train_mobile_sign_column") @Data +@Accessors(chain = true) +@Comment("品牌活动移动端动态表单") +@Table("train_mobile_sign_column") +@EqualsAndHashCode(callSuper = false) public class TrainMobileSignColumn { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java index 22c9ab15..9da05d61 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java @@ -4,6 +4,7 @@ import com.budwk.app.base.model.BaseModel; import com.budwk.app.sys.models.Sys_home_activity; import com.budwk.app.sys.services.SysHomeConvert; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; @@ -13,14 +14,11 @@ import java.io.Serializable; import java.util.Date; import java.util.List; -/** - * @author zxy - * @Description 培训报名活动 - * @createTime 2022年02月23日 08:57:00 - */ -@Table @Data @Accessors(chain = true) +@Comment("品牌活动") +@Table +@EqualsAndHashCode(callSuper = false) public class TrainSignUpActivity extends BaseModel implements Serializable, SysHomeConvert { @Name @@ -122,8 +120,8 @@ public class TrainSignUpActivity extends BaseModel implements Serializable, SysH sysHomeActivity.setId(this.getId()); sysHomeActivity.setName(this.getActivityName()); sysHomeActivity.setCover(this.getCover()); - sysHomeActivity.setUrl("/platform/trainSingUp/apply"); - sysHomeActivity.setH5Url("/platform/trainSingUp/apply/h5?id=" + this.getId()); + sysHomeActivity.setUrl("/platform/trainSignUp/apply"); + sysHomeActivity.setH5Url("/platform/trainSignUp/apply/h5?id=" + this.getId()); if (Lang.isNotEmpty(this.getActivitySignUpStartTime())) { sysHomeActivity.setStartDate(this.getActivitySignUpStartTime()); sysHomeActivity.setEndDate(this.getActivitySignUpEndTime()); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivityCourse.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivityCourse.java index a40eed01..e9244f4f 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivityCourse.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivityCourse.java @@ -1,20 +1,18 @@ package com.budwk.app.zhgh.activity.trainSignUp.models; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; import java.util.Date; -/** - * @author zxy - * @Description 活动下的课程 - * @createTime 2022年02月23日 09:26:00 - */ -@Table @Data @Accessors(chain = true) +@Comment("品牌活动下的子活动") +@Table +@EqualsAndHashCode(callSuper = false) public class TrainSignUpActivityCourse { @Name diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpBlackList.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpBlackList.java index a806d4ba..b08196c1 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpBlackList.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpBlackList.java @@ -1,16 +1,16 @@ package com.budwk.app.zhgh.activity.trainSignUp.models; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; -/** - * @author zxy - * @Description 黑名单 - * @createTime 2022年03月07日 14:32:00 - */ -@Table @Data +@Accessors(chain = true) +@Comment("品牌活动黑名单") +@Table +@EqualsAndHashCode(callSuper = false) public class TrainSignUpBlackList { @Name diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpCourse.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpCourse.java index 8300693d..45d43584 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpCourse.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpCourse.java @@ -2,6 +2,7 @@ package com.budwk.app.zhgh.activity.trainSignUp.models; import com.budwk.app.base.model.BaseModel; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; @@ -10,14 +11,11 @@ import org.nutz.lang.util.NutMap; import java.io.Serializable; import java.util.List; -/** - * @author zxy - * @Description 培训班信息 - * @createTime 2022年02月23日 09:04:00 - */ -@Table @Data @Accessors(chain = true) +@Comment("品牌活动的子活动") +@Table +@EqualsAndHashCode(callSuper = false) public class TrainSignUpCourse extends BaseModel implements Serializable { @Name diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpType.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpType.java index 413e5947..4e8f31fd 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpType.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpType.java @@ -3,6 +3,7 @@ package com.budwk.app.zhgh.activity.trainSignUp.models; import com.budwk.app.base.model.BaseModel; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; @@ -10,15 +11,11 @@ import java.io.Serial; import java.io.Serializable; import java.util.List; -/** - * TODO - * - * @author 赵欣雨 - * @date 2020/8/18 9:16 - */ @Data +@Accessors(chain = true) +@Comment("品牌活动的子活动类型") @Table("train_sign_up_type") -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode(callSuper = false) public class TrainSignUpType extends BaseModel implements Serializable { @Serial diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpTypeLimit.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpTypeLimit.java index 879dc409..bc7b8f89 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpTypeLimit.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpTypeLimit.java @@ -1,18 +1,18 @@ package com.budwk.app.zhgh.activity.trainSignUp.models; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; import java.io.Serializable; -/** - * @Author JyuHsin - * @Date 2022/9/22 - * @Description - */ -@Table("train_sign_up_type_limit") @Data +@Accessors(chain = true) +@Comment("品牌活动类型限制条件") +@Table("train_sign_up_type_limit") +@EqualsAndHashCode(callSuper = false) public class TrainSignUpTypeLimit implements Serializable { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpUser.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpUser.java index d39da0c5..af3d7473 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpUser.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpUser.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.activity.trainSignUp.models; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; @@ -10,14 +11,11 @@ import java.io.Serializable; import java.util.Date; import java.util.List; -/** - * @author zxy - * @Description 报名人员 报名记录 - * @createTime 2022年02月23日 09:34:00 - */ -@Table @Data @Accessors(chain = true) +@Comment("品牌活动报名人员") +@Table +@EqualsAndHashCode(callSuper = false) @TableIndexes({@Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSEID", fields = {"courseId"}, unique = false)}) public class TrainSignUpUser implements Serializable { diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpUserCourse.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpUserCourse.java index 0ce45901..1dde65f6 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpUserCourse.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpUserCourse.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.activity.trainSignUp.models; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; import org.nutz.dao.interceptor.annotation.PrevInsert; @@ -8,14 +9,11 @@ import org.nutz.dao.interceptor.annotation.PrevInsert; import java.io.Serializable; import java.util.Date; -/** - * @author zxy - * @Description 用户课程表 - * @createTime 2022年02月23日 09:38:00 - */ -@Table @Data @Accessors(chain = true) +@Comment("品牌活动报名人员子活动表") +@Table +@EqualsAndHashCode(callSuper = false) @TableIndexes({ @Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSE_USERID", fields = {"userId"}, unique = false), @Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSE_COURSEID", fields = {"courseId"}, unique = false) diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/integral/constant/IntegralOtherModelConstant.java b/src/main/java/com/budwk/app/zhgh/dayofficework/integral/constant/IntegralOtherModelConstant.java index ac3dc18b..f8fabecd 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/integral/constant/IntegralOtherModelConstant.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/integral/constant/IntegralOtherModelConstant.java @@ -16,7 +16,7 @@ import lombok.Getter; public enum IntegralOtherModelConstant { PROPOSAL_DETERMINE("proposalDetermine", "写一条提案(立案)获得积分", false), PROPOSAL_OPINION("proposalOpinion", "写一条提案(作为意见)获得积分", false), - TRAIN_SING_UP("trainSingUp", "参加品牌活动获得积分", false), + TRAIN_SING_UP("trainSignUp", "参加品牌活动获得积分", false), ACTIVITY_SCHOOL("activitySchool", "参加体育活动获得积分", false), ACTIVITY_TISSUE("activityTissue", "参加文化活动获得积分", false), WMHD("wmhd", "参加教工作品征集获得积分", false), diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/constant/ColumnFormTypeEnum.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/constant/ColumnFormTypeEnum.java new file mode 100644 index 00000000..42819bbe --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/constant/ColumnFormTypeEnum.java @@ -0,0 +1,25 @@ +package com.budwk.app.zhgh.dayofficework.literacy.constant; + +import com.budwk.app.base.annotation.DictEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author JyuHsin + * @Date 2022/11/18 + * @Description + */ +@Getter +@DictEnum(key = "ColumnFormTypeEnum", name = "控件类型") +@AllArgsConstructor +public enum ColumnFormTypeEnum { + + INPUT("INPUT", "输入框"), + SELECT("SELECT", "选择框"), + STEPPER("STEPPER", "步进器"), + //RADIO("RADIO", "单选框"),//选项数组 + FILE("FILE", "文件"); + + private String code; + private String description; +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyAdjustController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyAdjustController.java new file mode 100644 index 00000000..246cdfec --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyAdjustController.java @@ -0,0 +1,174 @@ +package com.budwk.app.zhgh.dayofficework.literacy.controller.manage; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +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.service.BaseService; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyActivityCourse; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyUser; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyUserCourse; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityStatisticsService; +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.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 java.util.ArrayList; +import java.util.List; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "职工素养人员调整") +@At("/platform/literacy/adjust") +public class LiteracyAdjustController { + + @Inject + private Dao dao; + @Inject + private BaseService baseService; + @Inject + private LiteracyActivityService literacyActivityManageService; + @Inject + private LiteracyActivityStatisticsService literacyActivityStatisticsService; + + @At("") + @SaCheckPermission("literacy.adjust") + @Ok("beetl:/platform/zhgh/activity/literacy/userAdjust/index.html") + public void index() { + } + + /** + * 活动list + * @param year 年度 + * @return + */ + @At + @ApiOperation("活动列表") + @SaCheckPermission("literacy.adjust") + public Result activityList(@Param(value = "year") Integer year) { + List activityList = dao.query(LiteracyActivity.class, Cnd.NEW().andEX("year", "=", year).andEX("isDisabled", "=", false).desc("activityStartTime")); + return Result.success(activityList); + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.adjust") + public Result pageData(PageForm pageForm, + @Param(value = "activityId") String activityId) { + Pagination pagination = literacyActivityStatisticsService.pageData(pageForm, activityId); + return Result.success(pagination); + } + + @At + @ApiOperation("子活动查询") + @SaCheckPermission("literacy.adjust") + public Result getCourse(String activityId) { + Sql sql = Sqls.create(""" + SELECT + tsuc.id, + tsuc.courseName, + tsuc.coursePeopleNumber, + tsuc.courseType, + tsuc.courseLocation, + tsuc.courseInstructor, + tsuc.courseReservedNumber, + tsuc.waitingNum, + tsuc.reserveMode + FROM + `literacy_course` tsuc + WHERE + tsuc.activityId = @activityId + ORDER BY courseName asc + """); + sql.setParam("activityId", activityId); + List courseList = baseService.listMap(sql); + courseList.forEach(c -> { + c.put("registerNum", literacyActivityStatisticsService.queryCourseCount(c.getString("id"), c.getString("courseType"))); + c.put("hasWaitingNum", literacyActivityStatisticsService.queryCourseWaitCount(c.getString("id"), c.getString("courseType"))); + }); + return Result.success(courseList); + } + + @At + @ApiOperation("报名用户列表") + @SaCheckPermission("literacy.adjust") + public Result registerUserList(@Param("courseId") String courseId, + @Param(value = "unionId") String unionId, + @Param(value = "unitId") String unitId, + @Param(value = "searchName") String searchName, + @Param(value = "searchKeyword") String searchKeyword) { + List list = literacyActivityStatisticsService.registerUserList(courseId, unionId, unitId, searchName, searchKeyword); + return Result.success(list); + } + + @At + @ApiOperation("人员调整") + @SaCheckPermission("literacy.adjust") + @SLog(tag = "职工素养-人员调整", msg = "人员调整") + public Result adjust(String activityId, String oldCourseId, String newCourseId, String userId) { + + Cnd oldCnd = Cnd.where("activityId", "=", activityId) + .and("courseId", "=", oldCourseId).and("userId", "=", userId); + + Cnd newCnd = Cnd.where("activityId", "=", activityId) + .and("courseId", "=", newCourseId).and("userId", "=", userId); + + //旧的报名信息 + LiteracyUser oldliteracyUser = dao.fetch(LiteracyUser.class, oldCnd); + oldliteracyUser.setCourseId(newCourseId); + oldliteracyUser.setSignUpTime(DateUtil.date()); + dao.update(oldliteracyUser); + + //新的课程的信息,上课时间 + List activityCourseList = dao.query(LiteracyActivityCourse.class, Cnd.where("activityId", "=", activityId) + .and("courseId", "=", newCourseId)); + //先清楚旧的信息 + dao.clear(LiteracyUserCourse.class, oldCnd); + //添加新的信息 + List literacyUserCourseList = new ArrayList<>(); + activityCourseList.forEach(item -> { + LiteracyUserCourse course = new LiteracyUserCourse(); + course.setActivityCourseId(activityId); + course.setCourseId(newCourseId); + course.setUserId(userId); + course.setCourseStartTime(item.getCourseStartTime()); + course.setCourseEndTime(item.getCourseEndTime()); + course.setActivityCourseId(item.getId()); + literacyUserCourseList.add(course); + }); + dao.insert(literacyUserCourseList); + return Result.success(); + } + + @At + @ApiOperation("删除报名人员") + @SaCheckPermission("literacy.adjust") + @SLog(tag = "职工素养-人员调整", msg = "删除报名人员") + public Result deleteSignUser(String activityId, String courseId, String userId) { + + //删除 + Cnd cnd = Cnd.NEW(); + cnd.and("activityId", "=", activityId); + cnd.and("courseId", "=", courseId); + cnd.and("userId", "=", userId); + + dao.clear(LiteracyUser.class, cnd); + dao.clear(LiteracyUserCourse.class, cnd); + return Result.success(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyApplyController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyApplyController.java new file mode 100644 index 00000000..6e4210b7 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyApplyController.java @@ -0,0 +1,426 @@ +package com.budwk.app.zhgh.dayofficework.literacy.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.dayofficework.literacy.models.*; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityStatisticsService; +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; +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 org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动报名") +@At("/platform/literacy/apply") +public class LiteracyApplyController { + + private final ReentrantLock lock = new ReentrantLock(true); + + @Inject + private LiteracyActivityService literacyActivityService; + @Inject + private SysDictService dictService; + @Inject + private LiteracyActivityStatisticsService statisticsService; + @Inject + private Dao dao; + + @At("/") + @SaCheckPermission("literacy.apply") + @Ok("beetl:/platform/zhgh/activity/literacy/apply/index.html") + public void index() { + } + + @At("/h5") + @SaCheckPermission("h5.literacy.apply") + @Ok("beetl:/platform/zhghh5/activity/literacy/apply/index.html") + public void h5Index() { + } + + @At("/list/h5") + @SaCheckPermission("h5.literacy.apply") + @Ok("beetl:/platform/zhghh5/activity/literacy/list/index.html") + public void listIndex() { + } + + @At + @ApiOperation("活动查询") + @SaCheckPermission(value = {"literacy.apply", "h5.literacy.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) { + cnd.and(new Static("now() < activitySignUpEndTime")); + }//查询已结束的 + else if (activityType == 3) { + cnd.and(new Static("now() >= activityEndTime")); + } + + 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 literacy_user where userId = '%s')".formatted(SecurityUtil.getUserId()))); + } + + Pagination pagination = literacyActivityService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + List literacyActivities = pagination.getList(); + Map literacyTypeMap = dictService.getSubListByCode("LITERACY_SIGNUP_TYPE").stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName)); + literacyActivities.forEach(v -> v.setTrainType(literacyTypeMap.get(v.getTrainType()))); + return Result.success(pagination); + } + + @At + @ApiOperation("分活动查询") + @SaCheckPermission(value = {"literacy.apply", "h5.literacy.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 = "dataType") String dataType) { + 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, + tsuc.introduce, + type.typeName, + tsuc.courseIsLimitApply + FROM + `literacy_course` tsuc + LEFT JOIN literacy_type type ON type.id = tsuc.courseType + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("type.id", "=", courseTypeId); + cnd.and("tsuc.activityId", "=", activityId); + + if (Lang.isNotEmpty(assortTypes)) { + cnd.and("tsuc.assort", "in", assortTypes); + } + + if("mine".equals(dataType)) { + cnd.and(new Static("tsuc.id in (select courseId from literacy_user where userId = '%s')".formatted(SecurityUtil.getUserId()))); + } + + List courseArray = literacyActivityService.dao().query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + courseArray = literacyActivityService.filterCourseByHostUnion(courseArray); + cnd.and("tsuc.id", "in", courseArray.stream().map(LiteracyCourse::getId).toList()); + + cnd.asc("tsuc.orderNum"); + cnd.asc("type.code"); + sql.setCondition(cnd); + + Pagination pagination = literacyActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List courseList = pagination.getList(); + + courseList.forEach(c -> { + List courseTimes = dao.query(LiteracyActivityCourse.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"))); + //当前用户是否报过 + c.put("isSign", literacyActivityService.isSignCourseByUser(c.getString("id"), SecurityUtil.getUserId())); + + if (StrUtil.isNotBlank(c.getString("unionLimit"))) { + List unionLimit = Json.fromJsonAsList(NutMap.class, c.getString("unionLimit")); + if (Lang.isNotEmpty(unionLimit)) { + NutMap nutMap = unionLimit.stream().filter(o -> o.getString("id").equals(SecurityUtil.getUnionId())).findFirst().orElse(null); + if (nutMap != null) { + c.put("coursePeopleNumber", nutMap.getInt("limitCount")); + } + } + } + }); + return Result.success(pagination); + } + + @At + @ApiOperation("获取分活动时间") + @SaCheckPermission(value = {"literacy.apply", "h5.literacy.apply"}, mode = SaMode.OR) + public Result getCourseTime(String id) { + List list = literacyActivityService.dao().query(LiteracyActivityCourse.class, Cnd.where("courseId", "=", id)); + return Result.success(list); + } + + @At + @ApiOperation("查询分类标识集合") + @SaCheckPermission(value = {"literacy.apply", "h5.literacy.apply"}, mode = SaMode.OR) + public Result queryCourseAssort(String activityId) { + List courseList = literacyActivityService.dao().query(LiteracyCourse.class, Cnd.where(LiteracyCourse::getActivityId, "=", activityId).asc(LiteracyCourse::getOrderNum)); + if (Lang.isEmpty(courseList)) { + return Result.success(new ArrayList<>()); + } + List assortList = courseList.stream().map(LiteracyCourse::getAssort).filter(StrUtil::isNotBlank).toList(); + return Result.success(assortList); + } + + @At + @ApiOperation("验证是否能报名") + @SaCheckPermission(value = {"literacy.apply", "h5.literacy.apply"}, mode = SaMode.OR) + 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; + LiteracyCourse course = dao.fetch(LiteracyCourse.class, courseId); + LiteracyActivity activity = dao.fetch(LiteracyActivity.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 = literacyActivityService.isSignCourseByUser(courseId, SecurityUtil.getUserId()); + if (courseByUser) { + return Result.error("抱歉,您已经报名"); + } + + //判断活动人数 + boolean signFull = literacyActivityService.isSignFull(course, currentFamilyNumber); + if (signFull) { + return Result.error("名额剩余数量不足"); + } + + //判断活动限制 + boolean signCourse = literacyActivityService.isSignCourse(course, activity); + if (!signCourse) { + if (activity.getRestrictLimit() != 3) { + return Result.error("您选择的类型已达上限,不能再报该类型的了"); + } else { + return Result.error(activity.getActivityName() + "限制报" + activity.getLimitNum() + "个活动,已达上限"); + } + } + + //判断分工会人数限制 + boolean signFullByUnionId = literacyActivityService.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(value = {"literacy.apply", "h5.literacy.apply"}, mode = SaMode.OR) + public Result getCourseTimeSelectList(String courseId) { + // 查课程的时间段 + List courseList = dao.query(LiteracyActivityCourse.class, Cnd.where("courseId", "=", courseId).asc("courseStartTime")); + + // 查课程的报名人数 + List applyUserList = dao.query(LiteracyUserCourse.class, Cnd.where("courseId", "=", courseId)); + + List userList = dao.query(LiteracyUser.class, Cnd.where("courseId", "=", courseId).and("state", "=", 1)); + List idList = userList.stream().map(LiteracyUser::getUserId).toList(); + + applyUserList = applyUserList.stream().filter(o -> idList.contains(o.getUserId())).toList(); + + // 按照课程下面时间段去分组 + Map> collectMap = applyUserList.stream().collect(Collectors.groupingBy(LiteracyUserCourse::getActivityCourseId)); + List list = courseList.stream().map(v -> { + String id = v.getId(); + NutMap nutMap = NutMap.NEW(); + List literacyUserCourses = collectMap.get(id); + int remainingNum = v.getCourseLimitNum() != null ? v.getCourseLimitNum() : 0; + if (Lang.isNotEmpty(literacyUserCourses)) { + remainingNum = v.getCourseLimitNum() - literacyUserCourses.size(); + } + nutMap.put("remainingNum", remainingNum); + nutMap.put("text", DateUtil.format(v.getCourseStartTime(), "MM月dd日 HH:mm") + "至" + DateUtil.format(v.getCourseEndTime(), "HH:mm") + "段(剩" + remainingNum + ")"); + nutMap.put("value", id); + nutMap.put("disabled", remainingNum == 0); + return nutMap; + }).toList(); + return Result.success(list); + } + + @At + @ApiOperation("验证子活动是否能报名") + @SaCheckPermission(value = {"literacy.apply", "h5.literacy.apply"}, mode = SaMode.OR) + public Result validateSourceSignUp(String activityCourseId, String courseId) { + try { + lock.lock(); + + List userList = dao.query(LiteracyUser.class, Cnd.where("courseId", "=", courseId).and("state", "=", 1)); + List isList = userList.stream().map(LiteracyUser::getUserId).toList(); + + // 该时间段下已报名的人数 + int count = dao.count(LiteracyUserCourse.class, Cnd.where("activityCourseId", "=", activityCourseId) + .and("courseId", "=", courseId).and("userId", "in", isList)); + // 获取该时间段下的活动课程限制报名人数 + LiteracyActivityCourse course = dao.fetch(LiteracyActivityCourse.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(value = {"literacy.apply", "h5.literacy.apply"}, mode = SaMode.OR) + @SLog(tag = "职工素养-活动报名", msg = "活动报名") + public Result doSignUp(LiteracyUser literacyUser) { + try { + lock.lock(); + boolean courseByUser = literacyActivityService.isSignCourseByUser(literacyUser.getCourseId(), SecurityUtil.getUserId()); + if (courseByUser) { + return Result.error("您已报过该活动"); + } + //判断人数 + int number = 0; + LiteracyCourse course = literacyActivityService.dao().fetch(LiteracyCourse.class, literacyUser.getCourseId()); + LiteracyType type = literacyActivityService.dao().fetch(LiteracyType.class, course.getCourseType()); + if (type != null) { + if (type.getIsBringFamily() && type.getIsAddFamily()) { + List mobileColumnsValue = literacyUser.getMobileColumnsValue(); + NutMap map = mobileColumnsValue.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); + number = map != null ? map.getInt("columnValue") : 0; + } + } + boolean signFull = literacyActivityService.isSignFull(course, number); + if (signFull) { + return Result.error("当前报名人数已满"); + } + boolean signFullByUnionId = literacyActivityService.isSignFullByUnionId(course, number); + if (signFullByUnionId) { + return Result.error("该活动您所在的分工会名额不足"); + } + literacyActivityService.doSignUp(literacyUser); + return Result.success("报名成功"); + } catch (Exception e) { + e.printStackTrace(); + return Result.success("报名失败"); + } finally { + lock.unlock(); + } + } + + @At + @ApiOperation("取消报名") + @SaCheckPermission(value = {"literacy.apply", "h5.literacy.apply"}, mode = SaMode.OR) + @SLog(tag = "职工素养-活动报名", msg = "取消报名") + public Result cancelSignUp(@Param("activityId") String activityId, @Param("courseId") String courseId) { + String userId = SecurityUtil.getUserId(); + //取消分两种情况 + //第一种没有设置分工会人数限制,那么将候补的人按时间倒叙往上补 + //第二种如果设置了分工会人数限制,那么只将本分工会的候补人员按照时间倒叙往上补,如果本分工会没有候补人员,则名额空出来,由校工会手动调整 + LiteracyCourse course = dao.fetch(LiteracyCourse.class, courseId); + LiteracyType type = dao.fetch(LiteracyType.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(LiteracyUser.class, cnd); + int thisSignUpUserCount = dao.count(LiteracyUser.class, + Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId) + .and("state", "in", List.of(1, 3))); + if (!signUpUsers.isEmpty() && thisSignUpUserCount > 0) { + LiteracyUser literacyUser = signUpUsers.get(0); + literacyUser.setState(1); + dao.update(literacyUser); + Sys_user user = dao.fetch(Sys_user.class, literacyUser.getUserId()); + //msgApi.sendTextMsg("【" + activity.getActivityName() + "】已候补成功,请按时参加活动!", user.getLoginname()); + } + } + //删除报名记录 + dao.clear("literacy_user_course", Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId)); + + dao.clear("literacy_user", Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId)); + return Result.success(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyManageController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyManageController.java new file mode 100644 index 00000000..ed924ac2 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyManageController.java @@ -0,0 +1,195 @@ +package com.budwk.app.zhgh.dayofficework.literacy.controller.manage; + +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.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.sys.models.Sys_home_activity; +import com.budwk.app.zhgh.dayofficework.literacy.models.*; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; +import org.nutz.trans.Trans; + +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动管理") +@At("/platform/literacy/manage") +public class LiteracyManageController { + + @Inject + private LiteracyActivityService literacyActivityManageService; + @Inject + private Dao dao; + + @At("") + @SaCheckPermission("literacy.manage") + @Ok("beetl:/platform/zhgh/activity/literacy/manage/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.manage") + public Result pageData(PageForm pageForm, + @Param(value = "year") Integer year, + @Param(value = "activityName") String activityName) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("year", "=", year); + cnd.and(Cnd.likeEX("activityName", activityName)); + cnd.orderBy("createdAt", "desc"); + return Result.success().addData(literacyActivityManageService.pageData(pageForm, cnd)); + } + + @At + @ApiOperation("活动删除") + @SaCheckPermission("literacy.manage") + @SLog(tag = "职工素养-活动管理", msg = "删除活动") + public Result onDelete(String id) { + Trans.exec(() -> { + literacyActivityManageService.delete(id); + dao.clear(LiteracyCourse.class, Cnd.where("activityId", "=", id)); + dao.clear(LiteracyActivityCourse.class, Cnd.where("activityId", "=", id)); + dao.clear(LiteracyUser.class, Cnd.where("activityId", "=", id)); + dao.clear(LiteracyUserCourse.class, Cnd.where("activityId", "=", id)); + dao.clear(LiteracyActivity.class, Cnd.where("id", "=", id)); + dao.clear(LiteracyTypeLimit.class, Cnd.where("activityId", "=", id)); + dao.delete(Sys_home_activity.class, id); + }); + return Result.success(); + } + + @At + @ApiOperation("活动状态变更") + @SaCheckPermission("literacy.manage") + public Result activityStatusChange(LiteracyActivity activity) { + literacyActivityManageService.updateActivityStatus(activity); + dao.update(Sys_home_activity.class, + Chain.make("enable", !activity.isDisabled()), + Cnd.where("id", "=", activity.getId())); + return Result.success(); + } + + @At + @ApiOperation("查询单个活动") + @SaCheckPermission("literacy") + public Result findOne(@Param("id") @NotNull String id) { + NutMap dataMap = literacyActivityManageService.findOne(id, null, ""); + String activityStartTime = dataMap.getString("activityStartTime"); + String activityEndTime = dataMap.getString("activityEndTime"); + if(StrUtil.isNotBlank(activityStartTime) && StrUtil.isNotBlank(activityEndTime)) { + dataMap.put("activityTime", List.of(activityStartTime, activityEndTime)); + } else { + dataMap.put("activityTime", new ArrayList<>()); + } + + String activitySignUpStartTime = dataMap.getString("activitySignUpStartTime"); + String activitySignUpEndTime = dataMap.getString("activitySignUpEndTime"); + if(StrUtil.isNotBlank(activitySignUpStartTime) && StrUtil.isNotBlank(activitySignUpEndTime)) { + dataMap.put("activitySignTime", List.of(activitySignUpStartTime, activitySignUpEndTime)); + } else { + dataMap.put("activitySignTime", new ArrayList<>()); + } + + List courseList = dataMap.getList("courseList", NutMap.class); + + //查询所有的课程类型 + List literacyTypeList = dao.query(LiteracyType.class, Cnd.NEW()); + Map typeMap = literacyTypeList.stream().collect(Collectors.toMap(LiteracyType::getId, LiteracyType::getTypeName)); + + courseList.forEach(v -> { + + List courseTimeList = v.getList("courseTimeList", NutMap.class); + //选择课程日期 下拉框 + List setUpCourseData = courseTimeList.stream().map(cd -> cd.getString("courseDate")).distinct().collect(Collectors.toList()); + v.put("setUpCourseData", setUpCourseData); + + courseTimeList.forEach(ct -> { + String courseStartTime = DateUtil.format(ct.getTime("courseStartTime"), "HH:mm"); + String courseEndTime = DateUtil.format(ct.getTime("courseEndTime"), "HH:mm"); + ct.put("courseStartTime", courseStartTime); + ct.put("courseEndTime", courseEndTime); + }); + + v.put("courseTypeName", typeMap.get(v.getString("courseType"))); + }); + + return Result.success().addData(dataMap); + } + + @At + @Ok("json:full") + @ApiOperation("职工素养新增/修改") + @SaCheckPermission("literacy.manage") + @SLog(tag = "职工素养-活动管理", msg = "新增/修改活动") + public Result doHandle(LiteracyActivity activity) { + if (StrUtil.isBlank(activity.getId())) { + literacyActivityManageService.add(activity, null); + } else { + literacyActivityManageService.edit(activity); + } + return Result.success(); + } + + @At + @Ok("json:full") + @ApiOperation("获取分工会人数限制") + @SaCheckPermission("literacy.manage") + public Result getUnionLimit(@Param(value = "activityScopeId") String activityScopeId) { + Sql sql = Sqls.create(""" + SELECT + gh.id, + gh.name, + gh.unioncode, + (select count(1) from `vw_user` where unionid = gh.id $cnd) as teacherCount, + NULL as ratio, + NULL as limitCount + FROM + sys_union gh + order by gh.unioncode + """); + if (StrUtil.isNotBlank(activityScopeId)) { + sql.setVar("cnd", "AND id in (select userId from activity_user_scope where groupId = '" + activityScopeId + "')"); + } + List list = literacyActivityManageService.listMap(sql); + return Result.success().addData(list); + } + + @At + @Ok("json:full") + @ApiOperation("获取报名人员数量") + @SaCheckPermission("literacy.manage") + public Result getRegisterUserCount(@Param(value = "courseId") String courseId) { + return Result.success().addData(dao.count(LiteracyUser.class, Cnd.where("courseId", "=", courseId))); + } + + @At + @Ok("json:full") + @ApiOperation("获取历史活动列表") + @SaCheckPermission("literacy.manage") + public Result getHistoricalActList() { + List query = dao.query(LiteracyActivity.class, Cnd.NEW().desc("activityStartTime")); + return Result.success().addData(query); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyMineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyMineController.java new file mode 100644 index 00000000..665e5a6e --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyMineController.java @@ -0,0 +1,156 @@ +package com.budwk.app.zhgh.dayofficework.literacy.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.dayofficework.literacy.models.LiteracyUserCourse; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityService; +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; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动报名") +@At("/platform/literacy/mine") +public class LiteracyMineController { + + @Inject + private Dao dao; + @Inject + private LiteracyActivityService activityService; + + @At("/") + @SaCheckPermission("literacy.mine") + @Ok("beetl:/platform/zhgh/activity/literacy/mine/index.html") + public void index() { + } + + @At("/h5") + @SaCheckPermission("h5.literacy.mine") + @Ok("beetl:/platform/zhghh5/activity/literacy/mine/index.html") + public void h5Index() { + } + + @At + @ApiOperation("主动扫码签到") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"literacy.mine", "h5.literacy.mine"}, mode = SaMode.OR) + @SLog(tag = "职工素养-活动签到", msg = "主动扫码签到") + public Result drivingScan(String courseId) { + + // 主动扫码签到是用户自己打开扫一扫,扫二维码签到 + int count = dao.count(LiteracyUserCourse.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"); + LiteracyUserCourse userCourse = dao.fetch( + LiteracyUserCourse.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 = {"literacy.mine", "h5.literacy.mine"}, mode = SaMode.OR) + @SLog(tag = "职工素养-活动签到", msg = "被动扫码签到") + public Result passiveScan(String id) { + + // id表示课程的某个时间段,userId表示是谁出示的二维码 + LiteracyUserCourse userCourse = dao.fetch(LiteracyUserCourse.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 = {"literacy.mine", "h5.literacy.mine"}, mode = SaMode.OR) + public Result queryCourseSign(String courseId) { + Sql sql = Sqls.create(""" + SELECT + uc.*, + date(uc.courseStartTime) as courseDate + FROM + `literacy_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 = {"literacy.mine", "h5.literacy.mine"}, mode = SaMode.OR) + public Result queryMineCourse(String activityId) { + + Sql sql = Sqls.create(""" + SELECT + c.*, + u.mobileColumnsValue + FROM + literacy_user u + LEFT JOIN literacy_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/dayofficework/literacy/controller/manage/LiteracyTypeController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyTypeController.java new file mode 100644 index 00000000..00ba868b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyTypeController.java @@ -0,0 +1,162 @@ +package com.budwk.app.zhgh.dayofficework.literacy.controller.manage; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.EnumUtil; +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.service.BaseService; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyMobileSignColumn; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyType; +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.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.entity.annotation.ColType; +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.json.Json; +import org.nutz.lang.Strings; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动类型管理") +@At("/platform/literacy/type") +public class LiteracyTypeController { + + @Inject + private Dao dao; + @Inject + private BaseService baseService; + + @At("") + @SaCheckPermission("literacy.type") + @Ok("beetl:/platform/zhgh/activity/literacy/type/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.type") + public Result pageData(PageForm pageForm, + @Param(value = "typeName") String typeName) { + Cnd cnd = Cnd.NEW(); + Sql sql = Sqls.create(""" + select * from literacy_type $condition + """); + if (Strings.isNotBlank(typeName)) { + cnd.and("typeName", "like", "%" + typeName + "%"); + } + if(Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())){ + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } else { + cnd.asc("xh"); + } + sql.setCondition(cnd); + Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List list = pagination.getList(); + list.forEach(item -> { + Cnd c = Cnd.NEW(); + c.and("typeId", "=", item.getString("id")); + c.asc("columnIndex"); + List signColumns = dao.query(LiteracyMobileSignColumn.class, c); + item.put("mobileSignColumnList", signColumns); + + }); + return Result.success().addData(pagination); + } + + @At + @ApiOperation("活动类型新增") + @SaCheckPermission("literacy.type") + @SLog(tag = "职工素养-类型管理", msg = "活动类型新增") + public Result doAdd(@Param("data") String data) throws Exception { + LiteracyType type = Json.fromJson(LiteracyType.class, data); + int count = dao.count(LiteracyType.class, Cnd.where("code", "=", type.getCode())); + if (count > 0) { + return Result.error("编码重复!"); + } + int totalCount = dao.count(LiteracyType.class); + type.setXh(totalCount + 1); + dao.insertWith(type, "mobileSignColumnList"); + return Result.success(); + } + + @At + @ApiOperation("活动类型修改") + @SaCheckPermission("literacy.type") + @SLog(tag = "职工素养-类型管理", msg = "活动类型修改") + public Result doEdit(LiteracyType type) { + int count = dao.count(LiteracyType.class, Cnd.where("code", "=", type.getCode()).and("id", "!=", type.getId())); + if (count > 0) { + return Result.error("编码重复!"); + } + dao.update(type); + dao.clear(LiteracyMobileSignColumn.class, Cnd.where("typeId", "=", type.getId())); + dao.insertLinks(type, "mobileSignColumnList"); + return Result.success(); + } + + @At + @ApiOperation("活动类型删除") + @SaCheckPermission("literacy.type") + @SLog(tag = "职工素养-类型管理", msg = "活动类型删除") + public Object doDelete(@Param(value = "id") String id) { + dao.clear(LiteracyType.class, Cnd.where("id", "=", id)); + dao.clear(LiteracyMobileSignColumn.class, Cnd.where("typeId", "=", id)); + return Result.success(); + } + + @At + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("排序号变更") + @SaCheckPermission("literacy.type") + public Object xhChange(String id, Integer xh, boolean toDown) { + if (toDown) { + LiteracyType next = dao.fetch(LiteracyType.class, Cnd.where("xh", "=", xh + 1)); + next.setXh(next.getXh() - 1); + dao.update(next); + dao.update(LiteracyType.class, Chain.make("xh", xh + 1), Cnd.where("id", "=", id)); + } else { + LiteracyType pre = dao.fetch(LiteracyType.class, Cnd.where("xh", "=", xh - 1)); + pre.setXh(pre.getXh() + 1); + dao.update(pre); + dao.update(LiteracyType.class, Chain.make("xh", xh - 1), Cnd.where("id", "=", id)); + } + return Result.success(); + } + + @At + @ApiOperation("获取所有类型") + @SaCheckLogin + public Result getAllType(@Param(value = "id") String id) { + List literacyTypeList = dao.query(LiteracyType.class, Cnd.NEW().andEX("id", "=", id).asc("xh")); + dao.fetchLinks(literacyTypeList, "mobileSignColumnList", Cnd.NEW().asc("columnIndex")); + return Result.success().addData(literacyTypeList); + } + + @At + @ApiOperation("自定义表单字段类型") + @SaCheckPermission("literacy.type") + public Result getColumnType() { + List names = EnumUtil.getNames(ColType.class); + names.add("JSON"); + return Result.success(names); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyUserManageController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyUserManageController.java new file mode 100644 index 00000000..2a7b6ff7 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/manage/LiteracyUserManageController.java @@ -0,0 +1,347 @@ +package com.budwk.app.zhgh.dayofficework.literacy.controller.manage; + +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.afterturn.easypoi.excel.export.ExcelExportService; +import cn.dev33.satoken.annotation.SaCheckPermission; +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.PageUtil; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyUser; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyBlackListService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.dao.Chain; +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.SqlExpressionGroup; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Strings; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author zxy + * @Description 人员管理 + * @createTime 2022年03月07日 14:27:00 + */ +@IocBean +@Ok("json:full") +@Api(tags = "品牌活动人员黑名单") +@At("/platform/literacy/userManage") +public class LiteracyUserManageController { + + @Inject + private Dao dao; + @Inject + private LiteracyBlackListService literacyBlackListService; + + @At("") + @SaCheckPermission("literacy.userManage") + @Ok("beetl:/platform/zhgh/activity/literacy/userManage/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.userManage") + public Result pageData(PageForm pageForm, + @Param(value = "activityId") String activityId, + @Param(value = "courseId") String courseId, + @Param(value = "year") Integer year, + @Param(value = "userKeyWord") String userKeyWord) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("tsuu.activityId", "=", activityId); + cnd.andEX("tsuu.courseId", "=", courseId); + cnd.andEX("act.year", "=", year); + if (StrUtil.isNotBlank(userKeyWord)) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + cnd.and(seg.andLike("u.username", userKeyWord).orLike("u.loginname", userKeyWord)); + } + if(Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())){ + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + + Pagination pagination = literacyBlackListService.pageData(pageForm, cnd, activityId, courseId); + return Result.success(pagination); + } + + @At + @ApiOperation("报名人员处理") + @SaCheckPermission("literacy.userManage") + @SLog(tag = "职工素养-人员管理", msg = "报名人员处理") + public Result doHandleUser(@Param("userId") String userId) { + literacyBlackListService.doHandleUser(userId); + return Result.success(); + } + + @At + @ApiOperation("根据活动Id获取子活动") + @SaCheckPermission("literacy.userManage") + public Result getCourseByActivityId(@Param("activityId") String activityId) { + List list = dao.query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + return Result.success(list); + } + + @At + @ApiOperation("获取子活动具体时间") + @SaCheckPermission("literacy.userManage") + public Result attendClassRecord(String userId) { + literacyBlackListService.attendClassRecord(userId); + return Result.success(); + } + + @At + @ApiOperation("获取候补人员") + @SaCheckPermission("literacy.userManage") + public Result getReserveUser(String courseId) { + Sql sql = Sqls.create(""" + SELECT + uc.* , + (select signUpTime from literacy_user su where su.activityId=uc.activityId and su.courseId = uc.courseId and su.userId=uc.userId) as signUpTime, + (select state from literacy_user su where su.activityId=uc.activityId and su.courseId = uc.courseId and su.userId=uc.userId) as state, + u.username, + u.loginname, + u.mobile, + u.unitName, + u.unionName + FROM + literacy_user_course uc LEFT JOIN `vw_user` u on uc.userId = u.id + WHERE uc.courseId = @courseId and uc.isAttend = false HAVING state = 2 order by signUpTime desc + """).setParam("courseId", courseId); + return Result.success(literacyBlackListService.listMap(sql)); + } + + @At + @ApiOperation("补充人员") + @SaCheckPermission("literacy.userManage") + @SLog(tag = "职工素养-人员管理", msg = "补充人员") + public Result reserveSingUp(String[] ids, String courseId) { + //先查询这个课程有多少个未签到的人员 + Sql sql = Sqls.create(""" + SELECT + uc.* , + (select signUpTime from literacy_user su where su.activityId=uc.activityId and su.courseId = uc.courseId and su.userId=uc.userId) as signUpTime, + (select state from literacy_user su where su.activityId=uc.activityId and su.courseId = uc.courseId and su.userId=uc.userId) as state + FROM + literacy_user_course uc + WHERE uc.courseId = @courseId and uc.isAttend = false HAVING state = 1 order by signUpTime desc + """).setParam("courseId", courseId); + List list = literacyBlackListService.listMap(sql); + if(ids.length > list.size()) { + return Result.error("您选择了" + ids.length + "位,未签到人员只有" + list.size() + "位"); + } + //ids的长度为几,就搞几个 + List mapList = list.subList(0, ids.length); + List idList = mapList.stream().map(o -> o.getString("userId")).collect(Collectors.toList()); + //将这几个没签到的设置为4 + dao.update(LiteracyUser.class, Chain.make("state", 4), Cnd.where("courseId", "=", courseId) + .and("userId", "in", idList)); + //将补充的设置为1 + dao.update(LiteracyUser.class, Chain.make("state", 1), Cnd.where("courseId", "=", courseId) + .and("userId", "in", ids)); + return Result.success(); + } + + @At + @Ok("void") + @ApiOperation("导出签到人员") + public void exportSignPerson(@Param(value = "activityId") String activityId, + HttpServletResponse response) { + LiteracyActivity activity = dao.fetch(LiteracyActivity.class, activityId); + + Sql sql = Sqls.create(""" + SELECT + uc.*, + DATE_FORMAT(uc.courseStartTime, '%Y-%m-%d %H:%i:%s') as courseStartTimeExcel, + DATE_FORMAT(uc.courseEndTime, '%Y-%m-%d %H:%i:%s') as courseEndTimeExcel, + DATE_FORMAT(uc.attendTime, '%Y-%m-%d %H:%i:%s') as attendTimeExcel, + u.username, + u.loginname, + u.unitName, + u.unionName, + u.sex + FROM + literacy_user_course uc + left join literacy_course course on uc.courseId = course.id + left join `vw_user` u on u.id = uc.userId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("uc.activityId", "=", activityId); + cnd.and("course.isMobileSign", "=", true); + cnd.desc("isAttend").desc("attendTime"); + sql.setCondition(cnd); + + List userList = literacyBlackListService.listMap(sql); + + List courseList = dao.query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + + List> sheetsList = new ArrayList<>(); + + List excelCommonExportEntity = new ArrayList<>(); + excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("开始时间", "courseStartTimeExcel", 22)); + excelCommonExportEntity.add(new ExcelExportEntity("结束时间", "courseEndTimeExcel", 22)); + excelCommonExportEntity.add(new ExcelExportEntity("是否签到", "isAttend", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("签到时间", "attendTimeExcel", 22)); + + for (LiteracyCourse c : courseList) { + String courseId = c.getId(); + String courseName = c.getCourseName(); + List v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList()); + ExportParams userExportParams = new ExportParams(); + userExportParams.setSheetName(courseName); + + List currentEntities = new ArrayList<>(excelCommonExportEntity); + for (NutMap userSignData : v) { + if(!userSignData.getBoolean("isAttend")) { + userSignData.put("isAttend", "未签到"); + userSignData.put("attendTimeExcel", "未签到"); + }else { + userSignData.put("isAttend", "已签到"); + } + } + + Map userExportMap = new HashMap<>(); + userExportMap.put("name", courseName); + userExportMap.put("title", userExportParams); + userExportMap.put("entity", currentEntities); + userExportMap.put("data", v); + + sheetsList.add(userExportMap); + } + try { + String fileName = activity.getActivityName() + "签到人员名单.xls"; + String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"); + response.setCharacterEncoding("utf-8"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", disposition); + + Workbook workbook = new HSSFWorkbook(); + for (Map map : sheetsList) { + ExcelExportService service = new ExcelExportService(); + service.createSheetForMap(workbook,(ExportParams) map.get("title"),(List) map.get("entity"),(Collection) map.get("data")); + } + + workbook.write(response.getOutputStream()); + workbook.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @At + @Ok("void") + @ApiOperation("导出领取人员") + public void exportGiftPerson(@Param(value = "activityId") String activityId, + HttpServletResponse response) { + LiteracyActivity activity = dao.fetch(LiteracyActivity.class, activityId); + + Sql sql = Sqls.create(""" + SELECT + uc.*, + DATE_FORMAT(uc.courseStartTime, '%Y-%m-%d %H:%i:%s') as courseStartTimeExcel, + DATE_FORMAT(uc.courseEndTime, '%Y-%m-%d %H:%i:%s') as courseEndTimeExcel, + DATE_FORMAT(uc.receiveTime, '%Y-%m-%d %H:%i:%s') as receiveTimeExcel, + u.username, + u.loginname, + u.unitName, + u.unionName, + u.sex + FROM + literacy_user_course uc + left join literacy_course course on uc.courseId = course.id + left join `vw_user` u on u.id = uc.userId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("uc.activityId", "=", activityId); + cnd.and("course.isReceiveGift", "=", true).and("course.giftType" ,"=", 1); + cnd.desc("isReceive").desc("receiveTime"); + sql.setCondition(cnd); + + List userList = literacyBlackListService.listMap(sql); + + List courseList = dao.query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + + List> sheetsList = new ArrayList<>(); + + List excelCommonExportEntity = new ArrayList<>(); + excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("开始时间", "courseStartTimeExcel", 22)); + excelCommonExportEntity.add(new ExcelExportEntity("结束时间", "courseEndTimeExcel", 22)); + excelCommonExportEntity.add(new ExcelExportEntity("是否领取", "isReceive", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("领取时间", "receiveTimeExcel", 22)); + + for (LiteracyCourse c : courseList) { + String courseId = c.getId(); + String courseName = c.getCourseName(); + List v = userList.stream().filter(x -> x.getString("courseId").equals(courseId)).collect(Collectors.toList()); + ExportParams userExportParams = new ExportParams(); + userExportParams.setSheetName(courseName); + + List currentEntities = new ArrayList<>(excelCommonExportEntity); + for (NutMap userSignData : v) { + if(!userSignData.getBoolean("isReceive")) { + userSignData.put("isReceive", "未领取"); + userSignData.put("receiveTimeExcel", "未领取"); + }else { + userSignData.put("isReceive", "已领取"); + } + } + + Map userExportMap = new HashMap<>(); + userExportMap.put("name", courseName); + userExportMap.put("title", userExportParams); + userExportMap.put("entity", currentEntities); + userExportMap.put("data", v); + + sheetsList.add(userExportMap); + } + try { + String fileName = activity.getActivityName() + "礼品领取人员名单.xls"; + String disposition = "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"); + response.setCharacterEncoding("utf-8"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", disposition); + + Workbook workbook = new HSSFWorkbook(); + for (Map map : sheetsList) { + ExcelExportService service = new ExcelExportService(); + service.createSheetForMap(workbook,(ExportParams) map.get("title"),(List) map.get("entity"),(Collection) map.get("data")); + } + + workbook.write(response.getOutputStream()); + workbook.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/statistics/LiteracyActivityStatisticsController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/statistics/LiteracyActivityStatisticsController.java new file mode 100644 index 00000000..4a905b27 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/controller/statistics/LiteracyActivityStatisticsController.java @@ -0,0 +1,248 @@ +package com.budwk.app.zhgh.dayofficework.literacy.controller.statistics; + +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.afterturn.easypoi.excel.export.ExcelExportService; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +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.sys.models.Sys_file; +import com.budwk.app.sys.utils.SysFileMinIoUtil; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyMobileSignColumn; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyType; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityStatisticsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.json.Json; +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 javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "职工素养统计") +@At("/platform/literacy/statistics") +public class LiteracyActivityStatisticsController { + + @Inject + private LiteracyActivityService literacyActivityManageService; + @Inject + private LiteracyActivityStatisticsService literacyActivityStatisticsService; + @Inject + private Dao dao; + + @At("") + @SaCheckPermission("literacy.statistics") + @Ok("beetl:/platform/zhgh/activity/literacy/statistics/index.html") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("literacy.statistics") + public Result pageData(PageForm pageForm, + @Param(value = "activityId") String activityId) { + Pagination pagination = literacyActivityStatisticsService.pageData(pageForm, activityId); + return Result.success(pagination); + } + + /** + * 活动list + * + * @param year 年度 + * @return + */ + @At + @ApiOperation("活动列表") + @SaCheckPermission("literacy.statistics") + public Result activityList(@Param(value = "year") Integer year) { + List list = dao.query(LiteracyActivity.class, Cnd.NEW().andEX("year", "=", year).desc("activityStartTime")); + return Result.success(list); + } + + /** + * 培训班报名人员list + * + * @param courseId + * @return + */ + @At + @ApiOperation("报名人员列表") + @SaCheckPermission("literacy.statistics") + public Result registerUserList(@Param(value = "courseId") String courseId) { + return Result.success(literacyActivityStatisticsService.registerUserList(courseId)); + } + + @At + @ApiOperation("报名动态列") + @SaCheckPermission("literacy.statistics") + public Object getTaleColumnInfo(@Param(value = "courseId") String courseId) { + return Result.success(literacyActivityStatisticsService.getTaleColumnInfo(courseId)); + } + + /** + * 培训班上课签到信息 + * + * @param courseId + * @return + */ + @At + @ApiOperation("获取签到信息") + @SaCheckPermission("literacy.statistics") + public Result getSignInfo(@Param("courseId") String courseId) { + return Result.success(literacyActivityStatisticsService.getSignInfo(courseId)); + } + + @At + @ApiOperation("开放报名") + @SaCheckPermission("literacy.statistics") + public Result signChange(@Param("courseId") String courseId, @Param("openOtherUnion") Boolean openOtherUnion) { + dao.update(LiteracyCourse.class, Chain.make("openOtherUnion", openOtherUnion) + , Cnd.where("id", "=", courseId)); + return Result.success(); + } + + @At + @Ok("void") + @ApiOperation("导出签到名单") + @SaCheckPermission("literacy.statistics") + public void exportSignUser(@Param(value = "activityId") String activityId, + HttpServletResponse response) throws IOException { + try { + LiteracyActivity activity = dao.fetch(LiteracyActivity.class, activityId); + Sql sql = Sqls.create(""" + SELECT + ts.*, + CONCAT(DATE_FORMAT(ac.courseStartTime, '%H:%i:%s'),'至',DATE_FORMAT(ac.courseEndTime, '%H:%i:%s')) AS courseTime, + u.username, + u.loginname, + u.sex, + ifnull(ts.mobile, u.mobile) as mobile, + u.birthday, + tsc.courseName + FROM + literacy_user ts + left join literacy_activity_course ac on ts.activityCourseId = ac.id + left join `vw_user` u on u.id = ts. userId + left join literacy_course tsc on tsc.id = ts.courseId + WHERE + ts.activityId = @activityId + """).setParam("activityId", activityId); + List userList = literacyActivityManageService.listMap(sql); + + List courseList = dao.query(LiteracyCourse.class, Cnd.where("activityId", "=", activityId)); + + List literacyTypeList = dao.query(LiteracyType.class, Cnd.NEW()); + dao.fetchLinks(literacyTypeList, "mobileSignColumnList", Cnd.NEW().asc("columnIndex")); + Map typeMap = literacyTypeList.stream().collect(Collectors.toMap(LiteracyType::getId, o -> o)); + + List> sheetsList = new ArrayList<>(); + + List excelCommonExportEntity = new ArrayList<>(); + excelCommonExportEntity.add(new ExcelExportEntity("姓名", "username", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("工号", "loginname", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("单位", "unitName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionName", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("手机号", "mobile", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("生日", "birthday", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("报名时段", "courseTime", 20)); + + for (LiteracyCourse c : courseList) { + String k = c.getCourseName(); + List v = userList.stream().filter(x -> x.getString("courseName").equals(k)).collect(Collectors.toList()); + ExportParams userExportParams = new ExportParams(); + userExportParams.setSheetName(k); + userExportParams.setType(ExcelType.HSSF); + + List currentEntities = new ArrayList<>(); + currentEntities.addAll(excelCommonExportEntity); + + LiteracyType signUpType = typeMap.get(c.getCourseType()); + if (Lang.isNotEmpty(signUpType.getMobileSignColumnList())) { + for (LiteracyMobileSignColumn column : signUpType.getMobileSignColumnList()) { + ExcelExportEntity entity = new ExcelExportEntity(); + entity.setName(column.getColumnName()); + entity.setKey(column.getColumnCode()); + entity.setWidth(20); + if (column.getColumnFormType().equals("FILE")) { + entity.setType(2); + entity.setExportImageType(2); + } + currentEntities.add(entity); + } + } + for (NutMap userSignData : v) { + String mobileColumnsValueStr = userSignData.getString("mobileColumnsValue"); + if (StrUtil.isNotBlank(mobileColumnsValueStr)) { + List mobileColumnsValue = Json.fromJsonAsList(NutMap.class, mobileColumnsValueStr); + for (NutMap cv : mobileColumnsValue) { + if (!"FILE".equals(cv.getString("columnFormType"))) { + userSignData.put(cv.getString("columnCode"), cv.getString("columnValue")); + } else { + if (StrUtil.isNotBlank(cv.getString("columnValue"))) { + List columnValue = Json.fromJsonAsList(JSONObject.class, cv.getString("columnValue")); + if (columnValue.size() == 1) { + JSONObject sysFile = columnValue.get(0); + Sys_file file = dao.fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", sysFile.get("url"))); + byte[] imageBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath()); + if (imageBytes.length > 0) { + userSignData.put(cv.getString("columnCode"), imageBytes); + } + } + } + } + } + + } + } + + Map userExportMap = new HashMap<>(); + userExportMap.put("name", k); + userExportMap.put("title", userExportParams); + userExportMap.put("entity", currentEntities); + userExportMap.put("data", v); + + sheetsList.add(userExportMap); + } + + Workbook workbook = new HSSFWorkbook(); + for (Map map : sheetsList) { + ExcelExportService service = new ExcelExportService(); + service.createSheetForMap(workbook, (ExportParams) map.get("title"), (List) map.get("entity"), (Collection) map.get("data")); + } + workbook.write(response.getOutputStream()); + workbook.close(); + + CommonDownloadUtil.download(activity.getActivityName() + "报名人员名单" + ".xlsx", workbook, response); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyActivity.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyActivity.java new file mode 100644 index 00000000..735ab1f8 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyActivity.java @@ -0,0 +1,134 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import com.budwk.app.base.model.BaseModel; +import com.budwk.app.sys.models.Sys_home_activity; +import com.budwk.app.sys.services.SysHomeConvert; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; +import org.nutz.lang.Lang; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Data +@Accessors(chain = true) +@Comment("职工素养") +@Table +@EqualsAndHashCode(callSuper = false) +public class LiteracyActivity extends BaseModel implements Serializable, SysHomeConvert { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("活动名称") + private String activityName; + + @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 activitySignUpEndTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动开始时间") + private Date activityStartTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动结束时间") + private Date activityEndTime; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否禁用") + private boolean isDisabled; + + @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 limitNum; + + @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.BOOLEAN) + @Comment("上课前是否通知") + private boolean notice; + + @Column + @Comment("活动范围Id") + @ColDefine(type = ColType.INT, width = 32) + private Integer activityGroupId; + + @Column + @Comment("活动范围名称") + @ColDefine(type = ColType.VARCHAR, width = 40) + private String activityGroupName; + + /** + * 所有的培训班 + */ + @Many(field = "activityId") + private List courseList; + + @Many(field = "activityId") + private List typeLimits; + + @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/literacy/apply"); + sysHomeActivity.setH5Url("/platform/literacy/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/dayofficework/literacy/models/LiteracyActivityCourse.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyActivityCourse.java new file mode 100644 index 00000000..bd8cde93 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyActivityCourse.java @@ -0,0 +1,54 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.Date; + +@Data +@Accessors(chain = true) +@Comment("职工素养下的子活动") +@Table +@EqualsAndHashCode(callSuper = false) +public class LiteracyActivityCourse { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动ID") + private String activityId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("课程ID") + private String courseId; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("课程开始时间") + private Date courseStartTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("课程结束时间") + private Date courseEndTime; + + @Column + @ColDefine(type = ColType.DATE) + @Comment("课程时间") + private Date courseDate; + + @Column + @ColDefine(type = ColType.INT, width = 4) + @Comment("限制人数") + private Integer courseLimitNum; + + private Integer hasRegisterNum; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyBlackList.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyBlackList.java new file mode 100644 index 00000000..40145e6a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyBlackList.java @@ -0,0 +1,31 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +@Data +@Accessors(chain = true) +@Comment("职工素养黑名单") +@Table +@EqualsAndHashCode(callSuper = false) +public class LiteracyBlackList { + + @Name + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("用户id") + private String userId; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否禁用") + private Boolean isDisabled; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyCourse.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyCourse.java new file mode 100644 index 00000000..a9d692fc --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyCourse.java @@ -0,0 +1,163 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; +import org.nutz.lang.util.NutMap; + +import java.io.Serializable; +import java.util.List; + +@Data +@Accessors(chain = true) +@Comment("职工素养的子活动") +@Table +@EqualsAndHashCode(callSuper = false) +public class LiteracyCourse extends BaseModel implements Serializable { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("活动ID") + private String activityId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("课程名称") + private String courseName; + + @Column + @ColDefine(type = ColType.INT) + @Comment("课程人数") + private int coursePeopleNumber; + + @Column + @ColDefine(type = ColType.INT) + @Default(value = "0") + @Comment("预留名额") + private int courseReservedNumber; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("课程地点") + private String courseLocation; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("课程类型") + private String courseType; + + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("课程地点坐标") + private List courseLocationCoordinates; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("课程讲师") + private String courseInstructor; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("校区") + private String campus; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("报名人数是否限制") + private Boolean courseIsLimitApply; + + @Column + @ColDefine(type = ColType.INT) + @Comment("序号") + private int orderNum; + + @Column + @ColDefine(customType = "longtext") + @Comment("详细信息") + private String introduce; + + @Many(field = "courseId") + private List courseTimeList; + + //已报人数 + private Integer hasRegisterNum; + + private Boolean isBringFamily; + + private Boolean isAddFamily; + + //是否报过该课程 + private Boolean isSign; + + //还能报该类型的课程吗 + private Boolean canSignThisCourseType; + + @Column + @Comment("分工会人数限制") + @ColDefine(type = ColType.MYSQL_JSON) + private List unionLimit; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("移动端是否签到") + private boolean isMobileSign; + + @Column + @ColDefine(type = ColType.INT) + @Comment("签到方式 1.扫描二维码签到 2.被扫 3.gps签到") + private Integer signType; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("移动端是否签收礼品") + private boolean isReceiveGift; + + @Column + @ColDefine(type = ColType.INT) + @Comment("领取礼品方式 1.扫描二维码 2.线下") + private Integer giftType; + + @Column + @ColDefine(type = ColType.INT) + @Comment("预留名额方式 1.报名人员减少模式 2.报名人数不变模式") + private Integer reserveMode; + + @Column + @Comment("承办工会") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String hostUnionId; + + @Column + @Comment("对内报名时间") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String interTime; + + @Column + @Comment("是否开放给其他工会") + @ColDefine(type = ColType.BOOLEAN, width = 4) + private Boolean openOtherUnion; + + @Column + @Comment("分类标识") + @ColDefine(type = ColType.VARCHAR, width = 30) + private String assort; + + @Column + @ColDefine(type = ColType.INT) + @Default(value = "0") + @Comment("候补名额数") + private Integer waitingNum; + + //候补已报人数 + private Integer hasWaitingNum; + + private String courseTimeName; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyMobileSignColumn.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyMobileSignColumn.java new file mode 100644 index 00000000..8e4f23e1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyMobileSignColumn.java @@ -0,0 +1,80 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.List; + +@Data +@Accessors(chain = true) +@Comment("职工素养移动端动态表单") +@Table("literacy_mobile_sign_column") +@EqualsAndHashCode(callSuper = false) +public class LiteracyMobileSignColumn { + + private static final long serialVersionUID = 1L; + + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("类型id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String typeId; + + @Column + @Comment("字段名称") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnName; + + @Column + @Comment("字段编码") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnCode; + + @Column + @Comment("字段值") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnValue; + + @Column + @Comment("字段类型") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnType; + + @Column + @Comment("下拉框的值") + @ColDefine(type = ColType.MYSQL_JSON) + private List selectValues; + + @Column + @Comment("是否必填") + @ColDefine(type = ColType.BOOLEAN) + private Boolean isRequired; + + @Column + @Comment("控件类型") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String columnFormType; + + @Column + @Comment("文件个数") + @ColDefine(type = ColType.INT) + private Integer fileNumber; + + @Column + @Comment("文件类型") + @ColDefine(type = ColType.MYSQL_JSON) + private List fileType; + + @Column + @Comment("序号") + @ColDefine(type = ColType.INT, width = 1) + private Integer columnIndex; +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyType.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyType.java new file mode 100644 index 00000000..94787cc6 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyType.java @@ -0,0 +1,65 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +@Data +@Accessors(chain = true) +@Comment("职工素养的子活动类型") +@Table("literacy_type") +@EqualsAndHashCode(callSuper = false) +public class LiteracyType extends BaseModel implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("类型编码") + @ColDefine(type = ColType.VARCHAR, width = 80) + private String code; + + @Column + @Comment("类型名称") + @ColDefine(type = ColType.VARCHAR, width = 80) + private String typeName; + + @Column + @Comment("序号") + @ColDefine(type = ColType.INT, width = 1) + private Integer xh; + + @Column + @Comment("是否携带家属") + @ColDefine(type = ColType.BOOLEAN) + @Default("0") + private Boolean isBringFamily; + + @Column + @Comment("家属纳入总人数") + @ColDefine(type = ColType.BOOLEAN) + @Default("0") + private Boolean isAddFamily; + + @Column + @Comment("本人纳入总人数") + @ColDefine(type = ColType.BOOLEAN) + @Default("1") + private Boolean selfAddFamily; + + @Many(field = "typeId") + private List mobileSignColumnList; +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyTypeLimit.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyTypeLimit.java new file mode 100644 index 00000000..f6bbbde6 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyTypeLimit.java @@ -0,0 +1,40 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serializable; + +@Data +@Accessors(chain = true) +@Comment("职工素养类型限制条件") +@Table("literacy_type_limit") +@EqualsAndHashCode(callSuper = false) +public class LiteracyTypeLimit implements Serializable { + + private static final long serialVersionUID = 1L; + + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @Comment("活动id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String activityId; + + @Column + @Comment("活动类型id") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String typeId; + + @Column + @Comment("限制个数") + @ColDefine(type = ColType.INT, width = 10) + private int limitNum; +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyUser.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyUser.java new file mode 100644 index 00000000..d581fad0 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyUser.java @@ -0,0 +1,86 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; +import org.nutz.lang.util.NutMap; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +@Data +@Accessors(chain = true) +@Comment("职工素养报名人员") +@Table +@EqualsAndHashCode(callSuper = false) +@TableIndexes({@Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSEID", fields = {"courseId"}, unique = false)}) +public class LiteracyUser implements Serializable { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动ID") + private String activityId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("课程ID") + private String courseId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("用户ID") + private String userId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("工会ID") + private String unionId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("单位ID") + private String unitId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("工会") + private String unionName; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("单位") + private String unitName; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("联系方式") + private String mobile; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("报名时间") + private Date signUpTime; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动课程时段id") + private String activityCourseId; + + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("手机端报名字段和值") + private List mobileColumnsValue; + + @Column + @ColDefine(type = ColType.INT) + @Comment("用户报名状态(1.正常 2.待报名成功 3.也是正常,但是是从2变为1的 4.废弃[就是没签到的意思])") + private Integer state; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyUserCourse.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyUserCourse.java new file mode 100644 index 00000000..dbef4c26 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/models/LiteracyUserCourse.java @@ -0,0 +1,87 @@ +package com.budwk.app.zhgh.dayofficework.literacy.models; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serializable; +import java.util.Date; + +@Data +@Accessors(chain = true) +@Comment("职工素养报名人员子活动表") +@Table +@EqualsAndHashCode(callSuper = false) +@TableIndexes({ + @Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSE_USERID", fields = {"userId"}, unique = false), + @Index(name = "INDEX_TRAIN_SIGN_UP_USER_COURSE_COURSEID", fields = {"courseId"}, unique = false) +}) +public class LiteracyUserCourse implements Serializable { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动ID") + private String activityId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("课程ID") + private String courseId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("用户ID") + private String userId; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("课程开始时间") + private Date courseStartTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("课程结束时间") + private Date courseEndTime; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否上课") + private boolean isAttend; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("上课打卡时间") + private Date attendTime; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否领取礼品") + private Boolean isReceive; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("领取礼品时间") + private Date receiveTime; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("签到扫码人员id(二维码模式)") + private String signScannerCodeUserId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("礼品扫码人员id(二维码模式)") + private String giftScannerCodeUserId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("关联literacy_activity_course表的id") + private String activityCourseId; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyActivityService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyActivityService.java new file mode 100644 index 00000000..d17061db --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyActivityService.java @@ -0,0 +1,119 @@ +package com.budwk.app.zhgh.dayofficework.literacy.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyActivity; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyUser; +import org.nutz.dao.Cnd; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +public interface LiteracyActivityService extends BaseService { + + /** + * 添加活动 + * + * @param activity 活动信息 + * @param course 培训班信息 + */ + void add(LiteracyActivity activity, LiteracyCourse course); + + /** + * 编辑活动 + * + * @param activity 活动信息 + */ + void edit(LiteracyActivity activity); + + /** + * 更新活动状态 + * + * @param activity 活动信息 + */ + void updateActivityStatus(LiteracyActivity activity); + + /** + * 查询单条活动信息 + * + * @param id 活动ID + * @return 返回的数据与前端符合 + */ + NutMap findOne(String id, Cnd cnd, String fromMode); + + /** + * 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); + + void doSignUp(LiteracyUser literacyUser) throws Exception; + + /** + * 异步插入每个报名成功人员的课程数据 + * + * @param activityId + * @param courseId + * @param userId + */ + void asyncInsertUserCourse(String activityId, String courseId, String userId); + + /** + * 该培训班每个分工会名额是否报满 + * @return + */ + boolean isSignFullByUnionId(LiteracyCourse course, Integer currentFamilyNumber); + + /** + * 该培训班是否报满 + */ + boolean isSignFull(LiteracyCourse course, Integer currentFamilyNumber); + + /** + * 还能报该类型的培训班吗 比如书画班最多报一项 健身班两项 + * @return + */ + boolean isSignCourse(LiteracyCourse course, LiteracyActivity activity); + + /** + * 当前用户是否已报过该培训班 + * + * @param courseId + * @param userId + * @return + */ + boolean isSignCourseByUser(String courseId, String userId); + + /** + * 手机端签到 + * + * @param id 每个培训班每节课每个用户的记录ID + */ + void doQd(String id); + + /** + * 某个用户的签到信息 + * + * @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/dayofficework/literacy/service/LiteracyActivityStatisticsService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyActivityStatisticsService.java new file mode 100644 index 00000000..65acf0dc --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyActivityStatisticsService.java @@ -0,0 +1,63 @@ +package com.budwk.app.zhgh.dayofficework.literacy.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyUser; +import org.nutz.lang.util.NutMap; + +import java.util.List; +import java.util.Map; + +public interface LiteracyActivityStatisticsService extends BaseService { + + /** + * 统计分页 + * + * @param pageForm + * @param activityId + * @return + */ + Pagination pageData(PageForm pageForm, String activityId); + + /** + * 该课程下的报名人员信息 + * + * @param courseId + * @return + */ + List registerUserList(String courseId); + + List getTaleColumnInfo(String courseId); + + /** + * 该课程下的报名人员信息 + * + * @param courseId + * @return + */ + List registerUserList(String courseId, String unionId, String unitId, String searchName, String searchKeyword); + + /** + * 获取每个课程的签到情况 + * + * @param courseId + * @return k->每个培训班每节课的上课时间 v->上课记录list + */ + Map> getSignInfo(String courseId); + + /** + * 报名人员list 导出 + * @param activityId + * @return + */ + List baoMingUserList(String activityId); + + int queryCourseCount(String courseId, String courseType); + + int queryCourseWaitCount(String courseId, String courseType); + + int queryCourseCount(String courseId, String courseType, String unionId); + + int queryCourseWaitCount(String courseId, String courseType, String unionId); +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyBlackListService.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyBlackListService.java new file mode 100644 index 00000000..10968608 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/LiteracyBlackListService.java @@ -0,0 +1,43 @@ +package com.budwk.app.zhgh.dayofficework.literacy.service; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyBlackList; +import org.nutz.dao.Cnd; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * @author zxy + * @Description TODO + * @createTime 2022年03月07日 14:29:00 + */ +public interface LiteracyBlackListService extends BaseService { + + /** + * 分页 + * + * @param pageForm 分页 + * @return Pagination + */ + Pagination pageData(PageForm pageForm, Cnd cnd, String activityId, String courseId); + + /** + * 拉黑、解封用户 + * + * @param userId + */ + void doHandleUser(String userId); + + /** + * 上课记录 + * + * @param userId + * @return + */ + List attendClassRecord(String userId); + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityServiceImpl.java new file mode 100644 index 00000000..dfc935a3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityServiceImpl.java @@ -0,0 +1,468 @@ +package com.budwk.app.zhgh.dayofficework.literacy.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.sys.models.Sys_home_activity; +import com.budwk.app.sys.views.View_user; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.literacy.models.*; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityService; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityStatisticsService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.async.Async; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +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; +import org.nutz.ioc.aop.Aop; +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 java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@IocBean(args = {"refer:dao"}) +public class LiteracyActivityServiceImpl extends BaseServiceImpl implements LiteracyActivityService { + + @Inject + private LiteracyActivityStatisticsService statisticsService; + + public LiteracyActivityServiceImpl(Dao dao) { + super(dao); + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void add(LiteracyActivity activity, LiteracyCourse course) { + + dao().insert(activity); + + //插入类型限制 + List typeLimits = activity.getTypeLimits(); + typeLimits.forEach(v -> v.setActivityId(activity.getId())); + dao().insert(typeLimits); + + List courseList = activity.getCourseList(); + for (LiteracyCourse v : courseList) { + v.setActivityId(activity.getId()); + v.setOpenOtherUnion(false); + dao().insert(v); + this.setCourseTimeAndInsert(v); + } + + if (!activity.isDisabled()) { + Sys_home_activity sysHomeActivity = activity.covertToSysHomeActivity(); + dao().insertOrUpdate(sysHomeActivity); + } + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void edit(LiteracyActivity activity) { + + //修改活动 + update(activity); + + //修改类型限制 + List typeLimits = activity.getTypeLimits(); + typeLimits.forEach(v -> v.setActivityId(activity.getId())); + if(Lang.isNotEmpty(typeLimits)) { + insertOrUpdate(typeLimits); + } + + List courseList = activity.getCourseList(); + courseList.forEach(v -> { + v.setActivityId(activity.getId()); + dao().insertOrUpdate(v); + if (Lang.isNotEmpty(v.getCourseTimeList())) { + this.setCourseTimeAndInsert(v); + } + }); + + //查询原来的活动 + List oldCourseList = dao().query(LiteracyCourse.class, Cnd.where("activityId", "=", activity.getId())); + //原来的培训班id + List oldCourseIdList = oldCourseList.stream().map(LiteracyCourse::getId).toList(); + + //原来的上课时间 + List oldActCourseTimeList = dao().query(LiteracyActivityCourse.class, Cnd.where("activityId", "=", activity.getId())); + + //现在的上课时间 + List nowCourseTimeListId = new ArrayList<>(); + activity.getCourseList().forEach(v -> { + if (v.getCourseTimeList() != null) { + nowCourseTimeListId.addAll(v.getCourseTimeList().stream().map(LiteracyActivityCourse::getId).toList()); + } + }); + + List deleteCourseTimeListId = oldActCourseTimeList.stream().map(LiteracyActivityCourse::getId).filter(id -> !nowCourseTimeListId.contains(id)).collect(Collectors.toList()); + List courseIdList = courseList.stream().map(LiteracyCourse::getId).collect(Collectors.toList()); + + //删除关联的培训班 + List deleteIdList = oldCourseIdList.stream().filter(v -> !courseIdList.contains(v)).collect(Collectors.toList()); + dao().clear(LiteracyCourse.class, Cnd.where("id", "in", deleteIdList)); + + dao().clear(LiteracyActivityCourse.class, Cnd.where("id", "in", deleteCourseTimeListId)); + dao().clear(LiteracyUser.class, Cnd.where("courseId", "not in", courseIdList).and("activityId", "=", activity.getId())); + dao().clear(LiteracyUserCourse.class, Cnd.where("courseId", "not in", courseIdList).and("activityId", "=", activity.getId())); + + //查询修改过培训时间的记录 + Sql tsuucSql = Sqls.create(""" + SELECT + tsuuc.id, + tsuac.courseStartTime, + tsuac.courseEndTime + FROM + `literacy_user_course` tsuuc + LEFT JOIN literacy_activity_course tsuac ON tsuac.id = tsuuc.activityCourseId + where tsuuc.courseStartTime != tsuac.courseStartTime or tsuuc.courseEndTime != tsuac.courseEndTime + """); + List tsuucList = listMap(tsuucSql); + tsuucList.forEach(v -> { + Chain chain = Chain.make("courseStartTime", v.getTime("courseStartTime")); + chain.add("courseEndTime", v.getTime("courseEndTime")); + Cnd cnd = Cnd.where("id", "=", v.getString("id")); + dao().update("literacy_user_course", chain, cnd); + }); + + if (!activity.isDisabled()) { + Sys_home_activity sysHomeActivity = activity.covertToSysHomeActivity(); + dao().insertOrUpdate(sysHomeActivity); + } else { + dao().delete(Sys_home_activity.class, activity.getId()); + } + } + + private void setCourseTimeAndInsert(LiteracyCourse course) { + course.getCourseTimeList().forEach(courseTime -> { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(courseTime.getCourseDate()); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DATE); + + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(courseTime.getCourseStartTime()); + startCalendar.set(year, month, day); + courseTime.setCourseStartTime(startCalendar.getTime()); + + Calendar endCalendar = Calendar.getInstance(); + endCalendar.setTime(courseTime.getCourseEndTime()); + endCalendar.set(year, month, day); + courseTime.setCourseEndTime(endCalendar.getTime()); + + courseTime.setActivityId(course.getActivityId()); + courseTime.setCourseId(course.getId()); + dao().insertOrUpdate(courseTime); + }); + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void updateActivityStatus(LiteracyActivity activity) { + updateIgnoreNull(activity); + } + + @Override + public NutMap findOne(String id, Cnd cnd, String fromMode) { + if (Lang.isEmpty(cnd)) { + cnd = Cnd.NEW(); + } + + cnd.asc("orderNum").asc("campus").desc("courseLocation").asc("courseType").asc("courseName"); + List courseArray = dao().query(LiteracyCourse.class, cnd.and("activityId", "=", id)); + + if (StrUtil.isNotBlank(fromMode) && "mobile".equals(fromMode)) { + courseArray = this.filterCourseByHostUnion(courseArray); + } + + LiteracyActivity activity = fetchLinks(dao().fetch(LiteracyActivity.class, id), "^(conditionStructure|typeLimits)$"); + activity.setCourseList(courseArray); + + List courseList = activity.getCourseList(); + + courseList.forEach(c -> { + if (StrUtil.isNotBlank(c.getCourseType())) { + dao().fetchLinks(c, "^(courseTimeList)$", Cnd.NEW().asc("courseStartTime")); + int courseCount = statisticsService.queryCourseCount(c.getId(), c.getCourseType()); + c.setHasRegisterNum(courseCount); + int courseWaitCount = statisticsService.queryCourseWaitCount(c.getId(), c.getCourseType()); + c.setHasWaitingNum(courseWaitCount); + //当前用户是否报过 + c.setIsSign(isSignCourseByUser(c.getId(), SecurityUtil.getUserId())); + } + }); + return Lang.obj2nutmap(activity); + } + + @Override + public Pagination pageData(PageForm pageForm, Cnd cnd) { + Pagination pagination = listPageLinks(pageForm.getPageNumber(), pageForm.getPageSize(), cnd, "^(courseList)$"); + return pagination; + } + + @Override + public Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, Integer activityType) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("year", "=", year); + switch (activityStatus) { + case 2 -> { + cnd.and(new Static("activitySignUpStartTime < now()")); + cnd.and(new Static("activitySignUpEndTime > now()")); + } + case 3 -> { + cnd.and(new Static("activityStartTime < now()")); + cnd.and(new Static("activityEndTime > now()")); + } + case 4 -> cnd.and(new Static("activityEndTime < now()")); + case 5 -> cnd.and(new Static("activityStartTime < now()")); + case 6 -> cnd.and(new Static("activityStartTime > now()")); + } + if (activityType != null && activityType == 1) { + cnd.and(new Static("id in (select activityId from literacy_user where userId = '%s')".formatted(SecurityUtil.getUserId()))); + } + cnd.and("isDisabled", "=", 0); + cnd.orderBy("activityEndTime", "desc"); + cnd.orderBy("isDisabled", "desc"); + cnd.orderBy("createdAt", "desc"); + return listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void doSignUp(LiteracyUser literacyUser) throws Exception { + String userId = SecurityUtil.getUserId(); + + //查询课程 + LiteracyCourse course = dao().fetch(LiteracyCourse.class, literacyUser.getCourseId()); + LiteracyType type = dao().fetch(LiteracyType.class, course.getCourseType()); + //如果这个课程的预留名额方式为报名人数不变 + if (course.getReserveMode() == 2) { + //如果当前报名+已报小于这个课程限制人数 + //课程已报人数 + int normalCount = statisticsService.queryCourseCount(course.getId(), course.getCourseType()); + //+1是算自己 + int hasRegisterNum = type.getSelfAddFamily() ? normalCount + 1 : 0; + literacyUser.setState((hasRegisterNum + course.getCourseReservedNumber()) > course.getCoursePeopleNumber() ? 2 : 1); + } else { + literacyUser.setState(1); + } + + View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())); + literacyUser.setUnionId(SecurityUtil.getUnionId()); + literacyUser.setUnionName(user.getUnionName()); + literacyUser.setUnitId(SecurityUtil.getUnitId()); + literacyUser.setUnitName(user.getUnitName()); + literacyUser.setUserId(userId); + literacyUser.setSignUpTime(new Date()); + + dao().insert(literacyUser); + + if (StrUtil.isNotBlank(literacyUser.getActivityCourseId())) { + LiteracyActivityCourse fetch = dao().fetch(LiteracyActivityCourse.class, literacyUser.getActivityCourseId()); + LiteracyUserCourse userCourse = new LiteracyUserCourse(); + userCourse.setActivityId(literacyUser.getActivityId()); + userCourse.setCourseId(literacyUser.getCourseId()); + userCourse.setUserId(literacyUser.getUserId()); + userCourse.setCourseStartTime(fetch.getCourseStartTime()); + userCourse.setCourseEndTime(fetch.getCourseEndTime()); + userCourse.setAttend(false); + userCourse.setAttendTime(null); + userCourse.setActivityCourseId(fetch.getId()); + dao().insert(userCourse); + } else { + asyncInsertUserCourse(literacyUser.getActivityId(), literacyUser.getCourseId(), literacyUser.getUserId()); + } + } + + @Async + @Override + public void asyncInsertUserCourse(String activityId, String courseId, String userId) { + log.info("异步插入{}的上课信息,课程ID为{},活动ID为{}", userId, courseId, activityId); + List courseList = dao().query(LiteracyActivityCourse.class, Cnd.where("courseId", "=", courseId)); + List list = new ArrayList<>(); + courseList.forEach(v -> { + LiteracyUserCourse userCourse = new LiteracyUserCourse(); + userCourse.setActivityId(activityId); + userCourse.setCourseId(courseId); + userCourse.setUserId(userId); + userCourse.setCourseStartTime(v.getCourseStartTime()); + userCourse.setCourseEndTime(v.getCourseEndTime()); + userCourse.setAttend(false); + userCourse.setAttendTime(null); + userCourse.setActivityCourseId(v.getId()); + list.add(userCourse); + }); + dao().insert(list); + } + + /** + * 该培训班每个分工会名额是否报满 + * @return + */ + @Override + public boolean isSignFullByUnionId(LiteracyCourse course, Integer currentFamilyNumber) { + List unionLimit = course.getUnionLimit(); + if (Lang.isEmpty(unionLimit)) { + return false; + } + String unionId = SecurityUtil.getUnionId(); + NutMap unionLimitMap = unionLimit.stream().filter(v -> v.getString("id").equals(unionId)).findAny().orElse(null); + if (Lang.isEmpty(unionLimitMap)) { + return true; + } + + LiteracyType type = dao().fetch(LiteracyType.class, course.getCourseType()); + //分工会限制人数 + int limitCount = unionLimitMap.getInt("limitCount"); + + //该课程已经报名的总人数 + int hasSignCount = statisticsService.queryCourseCount(course.getId(), course.getCourseType(), unionId); + int hasWaitCount = statisticsService.queryCourseWaitCount(course.getId(), course.getCourseType()); + + //+1是算自己 + int current = type.getSelfAddFamily() ? 1 : 0; + currentFamilyNumber = type.getIsBringFamily() && type.getIsAddFamily() ? currentFamilyNumber : 0; + //如果还有正常名额 + if(limitCount - hasSignCount > 0) { + return (hasSignCount + current + currentFamilyNumber) > limitCount; + } else { + return (hasWaitCount + current + currentFamilyNumber) > course.getWaitingNum(); + } + } + + @Override + public boolean isSignFull(LiteracyCourse course, Integer currentFamilyNumber) { + //课程限制人数 + int coursePeopleNumber = course.getCoursePeopleNumber(); + if (coursePeopleNumber == 0) { + return true; + } + //查询课程对应的类型 + LiteracyType type = dao().fetch(LiteracyType.class, course.getCourseType()); + //课程已报人数 + int hasSignCount = statisticsService.queryCourseCount(course.getId(), course.getCourseType()); + int hasWaitCount = statisticsService.queryCourseWaitCount(course.getId(), course.getCourseType()); + + //+1是算自己 + int current = type.getSelfAddFamily() ? 1 : 0; + currentFamilyNumber = type.getIsBringFamily() && type.getIsAddFamily() ? currentFamilyNumber : 0; + //如果还有正常名额 + if(coursePeopleNumber - hasSignCount > 0) { + return (hasSignCount + current + currentFamilyNumber + course.getCourseReservedNumber()) > coursePeopleNumber; + } else { + return (hasWaitCount + current + currentFamilyNumber) > course.getWaitingNum(); + } + } + + @Override + public boolean isSignCourse(LiteracyCourse course, LiteracyActivity activity) { + //培训班类型 + String courseType = course.getCourseType(); + + Sql sql = Sqls.create(""" + SELECT + count( tsus.id ) + FROM + `literacy_user` tsus + LEFT JOIN literacy_course tsuc ON tsuc.id = tsus.courseId + WHERE + tsuc.courseType = @courseType + AND tsus.userId = @userId + AND tsus.activityId = @activityId + """); + sql.setParam("courseType", courseType); + sql.setParam("activityId", activity.getId()); + sql.setParam("userId", SecurityUtil.getUserId()); + int hasRegisterNum = count(sql); + + //第一种无限制报名 + if (activity.getRestrictLimit() == null || activity.getRestrictLimit() == 1) { + return true; + } else if (activity.getRestrictLimit() == 2) { + LiteracyTypeLimit literacyTypeLimit = dao().fetch(LiteracyTypeLimit.class, Cnd.where("typeId", "=", courseType).and("activityId", "=", activity.getId())); + if (literacyTypeLimit == null) { + return true; + } + //此类型的班最多可报几项 + int personMaxRegisterNum = literacyTypeLimit.getLimitNum(); + if (personMaxRegisterNum == 0) { + return true; + } + return hasRegisterNum < personMaxRegisterNum; + } else if (activity.getRestrictLimit() == 3) { + //第三种,限制报几个,不跟类型挂钩 + int aCount = dao().count(LiteracyUser.class, Cnd.where("activityId", "=", activity.getId()).and("userId", "=", SecurityUtil.getUserId())); + return aCount < activity.getLimitNum(); + } + return false; + } + + @Override + public boolean isSignCourseByUser(String courseId, String userId) { + return dao().count(LiteracyUser.class, Cnd.where("courseId", "=", courseId).and("userId", "=", userId)) > 0; + } + + @Override + public void doQd(String id) { + NutMap updateMap = NutMap.NEW(); + updateMap.put("isAttend", true); + updateMap.put("attendTime", new Date()); + dao().update(LiteracyUserCourse.class, Chain.from(updateMap), Cnd.where("id", "=", id)); + } + + @Override + public List qdInfoByUserId(String userId, String activityId) { + Sql sql = Sqls.create(""" + SELECT + c.*, + t.courseLocationCoordinates, + t.isMobileSign, + t.signType, + t.isReceiveGift, + t.giftType, + (select state from literacy_user su where su.activityId = c.activityId and su.courseId = c.courseId and su.userId = c.userId) as state + FROM + `literacy_user_course` c + LEFT JOIN literacy_course t ON t.id = c.courseId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("c.activityId", "=", activityId); + cnd.and("c.userId", "=", userId); + cnd.asc("c.courseStartTime"); + + sql.setCondition(cnd); + return listMap(sql); + } + + @Override + public List filterCourseByHostUnion(List courseList) { + if (Lang.isEmpty(courseList)) { + return new ArrayList<>(); + } + return courseList.stream().filter(o -> { + if (StrUtil.isBlank(o.getInterTime()) || o.getOpenOtherUnion() == null || o.getOpenOtherUnion()) { + return true; + } else { + if (SecurityUtil.getUnionId().equals(o.getHostUnionId())) { + return true; + } else { + int compare = cn.hutool.core.date.DateUtil.compare(cn.hutool.core.date.DateUtil.date(), cn.hutool.core.date.DateUtil.parse(o.getInterTime()), "yyyy-MM-dd HH:mm"); + return compare >= 0; + } + } + }).toList(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java new file mode 100644 index 00000000..e1d42e87 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java @@ -0,0 +1,255 @@ +package com.budwk.app.zhgh.dayofficework.literacy.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyMobileSignColumn; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyCourse; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyType; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyUser; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyActivityStatisticsService; +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.SqlExpressionGroup; +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.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +@IocBean(args = {"refer:dao"}) +@Slf4j +public class LiteracyActivityStatisticsServiceImpl extends BaseServiceImpl implements LiteracyActivityStatisticsService { + + public LiteracyActivityStatisticsServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Pagination pageData(PageForm pageForm, String activityId) { + Sql sql = Sqls.create(""" + SELECT + tsuc.id, + tsuc.courseName, + tsuc.coursePeopleNumber, + tsuc.courseReservedNumber, + type.typeName as courseType, + tsuc.courseLocation, + tsuc.courseInstructor, + tsuc.reserveMode, + tsuc.isMobileSign, + tsuc.hostUnionId, + tsuc.interTime, + tsuc.waitingNum, + tsuc.openOtherUnion, + tsuc.courseType as cType + FROM + `literacy_course` tsuc + LEFT JOIN + literacy_type type on tsuc.courseType = type.id + WHERE + tsuc.activityId = @activityId + ORDER BY tsuc.orderNum + """); + sql.setParam("activityId", activityId); + Pagination pagination = listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List courseList = pagination.getList(); + courseList.forEach(c -> { + c.put("registerNum", queryCourseCount(c.getString("id"), c.getString("cType"))); + c.put("hasWaitingNum", queryCourseWaitCount(c.getString("id"), c.getString("cType"))); + }); + return pagination; + } + + @Override + public List registerUserList(String courseId) { + Sql sql = Sqls.create(""" + SELECT + u.loginname, + u.username, + u.sex, + tsuu.unionId, + tsuu.unionName, + tsuu.unitId, + tsuu.unitName, + ifnull(tsuu.mobile, u.mobile) as mobile, + tsuu.signUpTime, + tsuu.state, + tsuu.mobileColumnsValue + FROM + literacy_user tsuu + LEFT JOIN `vw_user` u ON u.id = tsuu.userId + $condition + ORDER BY FIELD( tsuu.state, 1, 3, 2, 4 ),tsuu.signUpTime desc,u.unionid desc, u.unitid desc + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("tsuu.courseId", "=", courseId); + sql.setCondition(cnd); + List list = listMap(sql); + list.forEach(o -> { + List mobileColumnsValue = Json.fromJsonAsList(NutMap.class, o.getString("mobileColumnsValue")); + if(Lang.isNotEmpty(mobileColumnsValue)) { + mobileColumnsValue.forEach(m -> { + o.put(m.getString("columnCode"), m.getString("columnValue")); + }); + } + }); + return list; + } + + @Override + public List getTaleColumnInfo(String courseId) { + LiteracyCourse course = dao().fetch(LiteracyCourse.class, courseId); + LiteracyType upType = dao().fetch(LiteracyType.class, course.getCourseType()); + dao().fetchLinks(upType, "mobileSignColumnList", Cnd.NEW().asc("columnIndex")); + + List columnList = upType.getMobileSignColumnList(); + List columnTableList = columnList.stream().map(o -> NutMap.NEW().setv("label", o.getColumnName()).setv("prop", o.getColumnCode())).collect(Collectors.toList()); + return columnTableList; + } + + @Override + public List registerUserList(String courseId, String unionId, String unitId, String searchName, String searchKeyword) { + Sql sql = Sqls.create(""" + SELECT + tsuu.id, + u.id as userId, + u.loginname, + u.username, + u.unitname, + u.unionname, + u.sex, + ifnull(tsuu.mobile, u.mobile) as mobile, + tsuu.signUpTime, + tsuu.state + FROM + literacy_user tsuu + LEFT JOIN `vw_user` u ON u.id = tsuu.userId + $condition + ORDER BY FIELD( tsuu.state, 1, 3, 2, 4 ),tsuu.signUpTime desc,u.unionid desc, u.unitid desc + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("tsuu.courseId", "=", courseId); + cnd.andEX("u.unionid", "=", unionId); + cnd.andEX("u.unitid", "=", unitId); + if (StrUtil.isNotBlank(searchKeyword)) { + SqlExpressionGroup group = new SqlExpressionGroup(); + group.andLike("username", searchKeyword).orLike("loginname", searchKeyword); + cnd.and(group); + } + sql.setCondition(cnd); + return listMap(sql); + } + + @Override + public Map> getSignInfo(String courseId) { + Sql sql = Sqls.create(""" + SELECT + tsuuc.courseStartTime, + tsuuc.courseEndTime, + tsuuc.isAttend, + tsuuc.attendTime, + u.username, + u.loginname, + u.unitname, + u.unionname + FROM + `literacy_user_course` tsuuc + LEFT JOIN `vw_user` u ON u.id = tsuuc.userId + WHERE + tsuuc.courseId = @courseId + """); + sql.setParam("courseId", courseId); + List list = listMap(sql); + + Map> courseTimeMap = list.stream().map(v -> { + String courseTime = v.getString("courseStartTime") + " 至 " + v.getString("courseEndTime"); + v.put("courseTime", courseTime); + return v; + }).collect(Collectors.groupingBy(v -> v.getString("courseTime"))); + + // 使用Stream API进行降序排序 + Map> sortedDataMap = courseTimeMap.entrySet().stream() + .sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); + + return sortedDataMap; + } + + @Override + public List baoMingUserList(String activityId) { + Sql sql = Sqls.create(""" + SELECT + u.loginname, + u.username, + u.unitname, + u.unionname, + u.sex, + u.mobile, + uc.courseName, + uc.campus + FROM + `literacy_user` uu + RIGHT JOIN literacy_course uc ON uc.id = uu.courseId + LEFT JOIN `vw_user` u ON u.id = uu.userId + WHERE + uc.activityId = @activityId + ORDER BY u.unitCode,u.unioncode,u.sex + """); + sql.setParam("activityId", activityId); + return listMap(sql); + } + + @Override + public int queryCourseCount(String courseId, String courseType) { + return this.queryCourseCount(courseId, courseType, null); + } + + @Override + public int queryCourseWaitCount(String courseId, String courseType) { + return this.queryCourseWaitCount(courseId, courseType, null); + } + + @Override + public int queryCourseCount(String courseId, String courseType, String unionId) { + return this.calcSignCount(courseId, courseType, unionId, List.of(1, 3)); + } + + @Override + public int queryCourseWaitCount(String courseId, String courseType, String unionId) { + return this.calcSignCount(courseId, courseType, unionId, List.of(2)); + } + + private int calcSignCount(String courseId, String courseType, String unionId, List stateList) { + if(StrUtil.isBlank(courseId) || StrUtil.isBlank(courseType)) { + return 0; + } + LiteracyType type = dao().fetch(LiteracyType.class, courseType); + AtomicInteger hasRegisterNum = new AtomicInteger(); + List signUpUsers = dao().query(LiteracyUser.class, Cnd.where("courseId", "=", courseId) + .and("state", "in", stateList) + .andEX("unionId", "=", unionId)); + signUpUsers.forEach(item -> { + if (type.getSelfAddFamily()) { + hasRegisterNum.getAndIncrement(); + } + if(type.getIsBringFamily() && type.getIsAddFamily()) { + List mobileColumnsValue = item.getMobileColumnsValue(); + NutMap map = mobileColumnsValue.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); + int number = map != null ? map.getInt("columnValue") : 0; + hasRegisterNum.addAndGet(number); + } + }); + return hasRegisterNum.get(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyUserServiceImpl.java new file mode 100644 index 00000000..9747a95c --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyUserServiceImpl.java @@ -0,0 +1,98 @@ +package com.budwk.app.zhgh.dayofficework.literacy.service.impl; + +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.dayofficework.literacy.models.LiteracyBlackList; +import com.budwk.app.zhgh.dayofficework.literacy.service.LiteracyBlackListService; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Criteria; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +@IocBean(args = {"refer:dao"}) +public class LiteracyUserServiceImpl extends BaseServiceImpl implements LiteracyBlackListService { + + public LiteracyUserServiceImpl(Dao dao) { + super(dao); + } + + @Override + public Pagination pageData(PageForm pageForm, Cnd cnd, String activityId, String courseId) { + Sql sql = Sqls.create(""" + SELECT + u.id AS userId, + u.username, + u.loginname, + ifnull(tsuu.mobile, u.mobile) as mobile, + u.unitname, + u.unionname, + tsuc.courseName, + tsuu.state, + ( SELECT count( 1 ) FROM literacy_user_course WHERE userId = tsuu.userId $var) courseTotal, + ( SELECT count( 1 ) FROM literacy_user_course WHERE userId = tsuu.userId AND isAttend = 0 and tsuu.state!=2 AND now()> courseEndTime $var) AS absentCount, + if(tsubl.isDisabled=1,true,false) isDisabled, + group_CONCAT( tsuc.courseName ) AS courseNames + FROM + `literacy_user` tsuu + LEFT JOIN `vw_user` u ON u.id = tsuu.userId + LEFT JOIN literacy_activity act on act.id = tsuu.activityId + LEFT JOIN literacy_course tsuc ON tsuc.id = tsuu.courseId + LEFT JOIN literacy_black_list tsubl on tsubl.userId = tsuu.userId + $condition + ORDER BY FIELD( tsuu.state, 1, 3, 2, 4 ) + """); + cnd.groupBy("tsuu.userId"); + Criteria varCnd = Cnd.cri(); + varCnd.where().setTop(false); + varCnd.where().andEX("activityId", "=", activityId); + varCnd.where().andEX("courseId", "=", courseId); + if (!varCnd.where().isEmpty()) { + sql.vars().set("var", "and " + varCnd.toSql(null)); + } + sql.setCondition(cnd); + return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + + @Override + public void doHandleUser(String userId) { + LiteracyBlackList blackRecord = dao().fetch(LiteracyBlackList.class, Cnd.where("userId", "=", userId)); + if (Lang.isEmpty(blackRecord)) { + LiteracyBlackList blackList = new LiteracyBlackList(); + blackList.setUserId(userId); + blackList.setIsDisabled(true); + dao().insert(blackList); + } else { +// blackRecord.setIsDisabled(!blackRecord.getIsDisabled()); +// dao().update(blackRecord); + dao().delete(blackRecord); + } + + } + + @Override + public List attendClassRecord(String userId) { + Sql sql = Sqls.create(""" + SELECT + c.courseName, + uc.courseStartTime, + courseEndTime, + uc.isAttend, + uc.attendTime + FROM + `literacy_user_course` uc + LEFT JOIN literacy_course c ON c.id = uc.courseId + WHERE + uc.userId = @userId + """); + sql.setParam("userId", userId); + return listMap(sql); + } +} diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/applyForm.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/applyForm.js similarity index 98% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/applyForm.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/applyForm.js index 9dc773ba..bc1aa080 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/applyForm.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/applyForm.js @@ -121,7 +121,7 @@ const applyForm = { }, methods: { async getCourseTimeSelectList(o) { - const resp = await $.post('/platform/trainSingUp/apply/getCourseTimeSelectList',{ courseId: o.id }) + const resp = await $.post('/platform/trainSignUp/apply/getCourseTimeSelectList',{ courseId: o.id }) if (resp.code === 0) { this.courseTimeSelectList = resp.data } else { @@ -144,14 +144,14 @@ const applyForm = { let familyCount = this.formData.trainMobileSignColumnList.filter(o => o.columnCode === 'xdqsrs').reduce((sum, item) => { return sum + (Number(item.columnValue) || 0) }, 0) - const res = await this.$axios.post("/platform/trainSingUp/apply/validateSignUp", { + const res = await this.$axios.post("/platform/trainSignUp/apply/validateSignUp", { courseId: this.formData.courseId, currentFamilyNumber: familyCount }) return res.code === 0 }, async validateCourseTime() { - const res = await this.$axios.post('/platform/trainSingUp/apply/validateSourceSignUp', { + const res = await this.$axios.post('/platform/trainSignUp/apply/validateSourceSignUp', { activityCourseId: this.formData.activityCourseId, courseId: this.courseRow.id }) @@ -177,7 +177,7 @@ const applyForm = { } }) this.formData.mobileColumnsValue = JSON.stringify(mobileColumnsValue) - const resp = await this.$axios.post("/platform/trainSingUp/apply/doSignUp", this.formData) + const resp = await this.$axios.post("/platform/trainSignUp/apply/doSignUp", this.formData) if (resp.code === 0) { this.signDialog = false this.$message.success(resp.msg) diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/courseList.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js similarity index 99% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/courseList.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js index 6dcbffc9..dc5d8693 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/courseList.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js @@ -188,7 +188,7 @@ const courseList = { }, onSign(row) { const course = this.courseTypeList.find((v) => v.id === row.courseType) - this.$axios.post("/platform/trainSingUp/apply/validateSignUp", {courseId: row.id}) + this.$axios.post("/platform/trainSignUp/apply/validateSignUp", {courseId: row.id}) .then((res) => { if (res.code !== 0) { this.$alert(res.msg, "提示", { @@ -213,7 +213,7 @@ const courseList = { cancelButtonText: "取消", type: "info" }).then(async () => { - const resp = await this.$axios.post("/platform/trainSingUp/apply/cancelSignUp", { + const resp = await this.$axios.post("/platform/trainSignUp/apply/cancelSignUp", { activityId: row.activityId, courseId: row.id }) @@ -226,7 +226,7 @@ const courseList = { }) }, async getCourseTypeList() { - const resp = await this.$axios.post("/platform/trainSingUp/type/getAllType") + const resp = await this.$axios.post("/platform/trainSignUp/type/getAllType") if (resp.code === 0) { this.courseTypeList = resp.data } diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/index.html similarity index 88% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/index.html rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/index.html index 846b4c4e..390d43f5 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/apply/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/index.html @@ -24,8 +24,7 @@ layout("/layouts/platform.html"){ - - + @@ -59,8 +58,13 @@ layout("/layouts/platform.html"){ @@ -111,7 +115,7 @@ layout("/layouts/platform.html"){ return { pageForm: { year: this.$moment().format("YYYY"), - activityType: 4 + activityType: 2 }, tableColumns: [ { label: "活动名称", prop: "activityName", width: 600}, @@ -144,7 +148,7 @@ layout("/layouts/platform.html"){ }) }, pageData() { - this.$axios.post("/platform/trainSingUp/apply/activityPageData", this.pageForm).then((res) => { + this.$axios.post("/platform/trainSignUp/apply/activityPageData", this.pageForm).then((res) => { if (res.code === 0) { this.tableData = res.data.list this.pageForm.totalCount = res.data.totalCount diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/basicForm.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/basicForm.js similarity index 99% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/basicForm.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/basicForm.js index 6e791c8a..8795c42a 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/basicForm.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/basicForm.js @@ -371,7 +371,7 @@ const basicForm = { } }, async getRegisterUserCount(courseId) { - const resp = await this.$axios.post("/platform/trainSingUp/manage/getRegisterUserCount", { courseId }) + const resp = await this.$axios.post("/platform/trainSignUp/manage/getRegisterUserCount", { courseId }) return resp.code === 0 ? resp.data : 0 }, courseTypeChange(val, row) { @@ -444,7 +444,7 @@ const basicForm = { this.formData.courseList.push({ courseTimeList: [], isMobileSign: false, isReceiveGift: false, reserveMode: 1, courseIsLimitApply: false }) }, async historicalActChange(val) { - const resp = await this.$axios.post("/platform/trainSingUp/manage/findOne", {id: val}) + const resp = await this.$axios.post("/platform/trainSignUp/manage/findOne", {id: val}) if (resp.code === 0) { this.formData = resp.data this.typeChange(this.formData.trainType) @@ -468,7 +468,7 @@ const basicForm = { return data }, async getHistoricalActList() { - const resp = await this.$axios.post("/platform/trainSingUp/manage/getHistoricalActList", {}) + const resp = await this.$axios.post("/platform/trainSignUp/manage/getHistoricalActList", {}) return resp.data }, async onSave() { @@ -543,7 +543,7 @@ const basicForm = { type: "warning" }) if (confirm !== "confirm") return - const resp = await this.$axios.post("/platform/trainSingUp/manage/doHandle", cloneData) + const resp = await this.$axios.post("/platform/trainSignUp/manage/doHandle", cloneData) if (resp.code === 0) { this.$message.success(resp.msg) this.step = 1 @@ -554,12 +554,12 @@ const basicForm = { } }, async getAllType() { - const resp = await this.$axios.post("/platform/trainSingUp/type/getAllType", {}) + const resp = await this.$axios.post("/platform/trainSignUp/type/getAllType", {}) return resp.data }, async init(row) { if (row && row.id) { - const resp = await this.$axios.post("/platform/trainSingUp/manage/findOne", {id: row.id}) + const resp = await this.$axios.post("/platform/trainSignUp/manage/findOne", {id: row.id}) if (resp.code === 0) { this.formData = resp.data this.typeChange(this.formData.trainType) diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/courseTime.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/courseTime.js similarity index 100% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/courseTime.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/courseTime.js diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/customForm.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/customForm.js similarity index 100% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/customForm.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/customForm.js diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/index.html similarity index 99% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/index.html rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/index.html index 29e96d81..c73623d7 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/index.html @@ -165,7 +165,7 @@ layout("/layouts/platform.html"){ }) }, openActivityCode(id) { - this.activityUrl = location.origin + "/platform/trainSingUp/apply/h5?id=" + id + this.activityUrl = location.origin + "/platform/trainSignUp/apply/h5?id=" + id this.codeDialogVisible = true }, makeCode(row) { diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/info.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/info.js similarity index 98% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/info.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/info.js index d9120a83..a997f578 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/info.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/info.js @@ -66,7 +66,7 @@ const info = { }, methods: { initData(id) { - this.$axios.post("/platform/trainSingUp/manage/findOne", { id: id }) + this.$axios.post("/platform/trainSignUp/manage/findOne", { id: id }) .then((resp) => { if (resp.code === 0) { this.viewData = resp.data diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/makeQrcode.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/makeQrcode.js similarity index 98% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/makeQrcode.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/makeQrcode.js index cafce505..c4f147e0 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/makeQrcode.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/makeQrcode.js @@ -66,7 +66,7 @@ const makeQrcode = { this.courseDialog = true }, makeCourseCode(row) { - const url = '/platform/trainSingUp/mine/drivingScan' + const url = '/platform/trainSignUp/mine/drivingScan' const data = url + '?courseId=' + row.id console.log(data) const content = jrQrcode.getQrBase64(data) diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/unionForm.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/unionForm.js similarity index 99% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/unionForm.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/unionForm.js index 23569d3a..448efbbe 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/manage/unionForm.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/unionForm.js @@ -150,7 +150,7 @@ const unionForm = { !this.formData.courseList[this.unionLimitIndex].unionLimit || this.formData.courseList[this.unionLimitIndex].unionLimit.length === 0 ) { - const resp = await this.$axios.get("/platform/trainSingUp/manage/getUnionLimit", { + const resp = await this.$axios.get("/platform/trainSignUp/manage/getUnionLimit", { activityScopeId: this.formData.activityGroupId }) if (resp.code === 0) { diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/statistics/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html similarity index 100% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/statistics/index.html rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/statistics/info.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/info.js similarity index 100% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/statistics/info.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/info.js diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/type/basicForm.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/type/basicForm.js similarity index 100% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/type/basicForm.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/type/basicForm.js diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/type/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/type/index.html similarity index 100% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/type/index.html rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/type/index.html diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/userAdjust/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html similarity index 100% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/userAdjust/index.html rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/userAdjust/userInfo.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/userInfo.js similarity index 100% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/userAdjust/userInfo.js rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/userInfo.js diff --git a/src/main/resources/views/platform/zhgh/activity/trainSingUp/userManage/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userManage/index.html similarity index 98% rename from src/main/resources/views/platform/zhgh/activity/trainSingUp/userManage/index.html rename to src/main/resources/views/platform/zhgh/activity/trainSignUp/userManage/index.html index 3c3bd7b3..cae74249 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSingUp/userManage/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userManage/index.html @@ -133,7 +133,7 @@ layout("/layouts/platform.html"){ }) return } - const resp = await this.$axios.post("/platform/trainSingUp/userManage/getReserveUser", { courseId: this.course.id }) + const resp = await this.$axios.post("/platform/trainSignUp/userManage/getReserveUser", { courseId: this.course.id }) this.reserveTableData = resp.data this.reserveDialogVisible = true }, @@ -149,7 +149,7 @@ layout("/layouts/platform.html"){ }) .then(async () => { const ids = this.multipleSelection.map((o) => o.userId) - const resp = await this.$axios.post("/platform/trainSingUp/userManage/reserveSingUp", { + const resp = await this.$axios.post("/platform/trainSignUp/userManage/reserveSingUp", { ids: JSON.stringify(ids), courseId: this.course.id }) @@ -212,7 +212,7 @@ layout("/layouts/platform.html"){ await this.doSearch() }, async getActivityList() { - const resp = await this.$axios.post("/platform/trainSingUp/statistics/activityList", { year: this.pageForm.year }) + const resp = await this.$axios.post("/platform/trainSignUp/statistics/activityList", { year: this.pageForm.year }) this.activityList = resp.data if (this.activityList && this.activityList.length > 0) { this.pageForm.activityId = this.activityList[0].id diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/apply/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/apply/index.html index 5d97cc25..39d1dd94 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/apply/index.html +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/apply/index.html @@ -37,7 +37,7 @@ layout("/layouts/platform_h5.html"){ - @@ -105,12 +107,11 @@ layout("/layouts/platform_h5.html"){ totalCount: 0, searchKeyword: '', year: new Date().getFullYear(), - activityType: 4, + activityType: 2, }, typeOptions: [ {text: '全部', value: 1}, - {text: '即将开始', value: 4}, - {text: '报名中', value: 2}, + {text: '即将开始 & 报名中', value: 2}, {text: '已结束', value: 3}, ], infoVisible: false, @@ -128,7 +129,7 @@ layout("/layouts/platform_h5.html"){ this.onView(row) return } - this.$pjaxReplace('/platform/trainSingUp/apply/list/h5?id=' + row.id) + this.$pjaxReplace('/platform/trainSignUp/apply/list/h5?id=' + row.id) }, onReady() { this.doSearch() diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/common/times.js b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/common/times.js index 5c4b4186..5a330c1e 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/common/times.js +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/common/times.js @@ -73,7 +73,7 @@ const times = { } }, makeCode() { - const url = '/platform/trainSingUp/mine/passiveScan' + const url = '/platform/trainSignUp/mine/passiveScan' const data = url + '?id=' + this.selectCourseTime.id console.log(data) const content = jrQrcode.getQrBase64(data) 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 a9cd3684..eaaa5101 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 @@ -89,7 +89,7 @@ const applyForm = { this.showCoursePicker = false }, async getCourseTimeSelectList(o) { - const resp = await this.$axios.post('/platform/trainSingUp/apply/getCourseTimeSelectList',{courseId: o.id}) + const resp = await this.$axios.post('/platform/trainSignUp/apply/getCourseTimeSelectList',{courseId: o.id}) if (resp.code === 0) { this.courseTimeSelectList = resp.data } else { @@ -104,14 +104,14 @@ const applyForm = { return sum + (Number(item.columnValue) || 0) }, 0) - const res = await this.$axios.post("/platform/trainSingUp/apply/validateSignUp", { + const res = await this.$axios.post("/platform/trainSignUp/apply/validateSignUp", { courseId: this.formData.courseId, currentFamilyNumber: familyCount }) return res.code === 0 }, async validateCourseTime() { - const res = await this.$axios.post('/platform/trainSingUp/apply/validateSourceSignUp', { + const res = await this.$axios.post('/platform/trainSignUp/apply/validateSourceSignUp', { activityCourseId: this.formData.activityCourseId, courseId: this.row.id }) @@ -138,7 +138,7 @@ const applyForm = { } }) this.formData.mobileColumnsValue = JSON.stringify(mobileColumnsValue) - this.$axios.post("/platform/trainSingUp/apply/doSignUp", this.formData).then(res => { + this.$axios.post("/platform/trainSignUp/apply/doSignUp", this.formData).then(res => { if (res.code === 0) { this.$toast(res.msg) this.visible = false diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/index.html index 4ffbf40d..002986f0 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/index.html +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/index.html @@ -24,7 +24,7 @@ layout("/layouts/platform_h5.html"){ - v.id === row.courseType) - this.$axios.post('/platform/trainSingUp/apply/validateSignUp', { + this.$axios.post('/platform/trainSignUp/apply/validateSignUp', { courseId: row.id }) .then((res) => { @@ -167,7 +167,7 @@ layout("/layouts/platform_h5.html"){ message: "您确定要取消【" + row.courseName + "】吗?", confirmButtonColor: '#1867b0', }).then(async () => { - const resp = await this.$axios.post('/platform/trainSingUp/apply/cancelSignUp', { + const resp = await this.$axios.post('/platform/trainSignUp/apply/cancelSignUp', { activityId: row.activityId, courseId: row.id }) @@ -206,13 +206,13 @@ layout("/layouts/platform_h5.html"){ this.fetchActivity() }, fetchActivity() { - this.$axios.post('/platform/trainSingUp/manage/findOne', {id: this.pageForm.activityId}) + this.$axios.post('/platform/trainSignUp/manage/findOne', {id: this.pageForm.activityId}) .then((res) => { this.activity = res.data }) }, async getCourseTypeList() { - const resp = await this.$axios.post("/platform/trainSingUp/type/getAllType") + const resp = await this.$axios.post("/platform/trainSignUp/type/getAllType") return resp.data }, doSearch() { 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 9952233b..edfa1e89 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 @@ -37,7 +37,7 @@ layout("/layouts/platform_h5.html"){ -