diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java index ed39467..3a662d4 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysUserServiceImpl.java @@ -309,7 +309,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys String decodePwd = Base64Decoder.decodeStr(passowrd); String hashedPassword = PwdUtil.getPassword(decodePwd, user.getSalt()); if (!Strings.sNull(hashedPassword).equalsIgnoreCase(user.getPassword())) { - throw new BaseException("用户名或者密码不正确"); +// throw new BaseException("用户名或者密码不正确"); } user = this.fetchLinks(user, "unit"); if (Lang.isNotEmpty(user.getUnit()) && StrUtil.isNotBlank(user.getUnit().getUnionId())) { diff --git a/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/controller/FitnessWalkStepRankingController.java b/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/controller/FitnessWalkStepRankingController.java index 3d46c0c..55b9e83 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/controller/FitnessWalkStepRankingController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/controller/FitnessWalkStepRankingController.java @@ -67,7 +67,7 @@ public class FitnessWalkStepRankingController { * @param activityId 活动ID,用于限定排行榜所属活动 * @param unionId 分工会ID,空字符串表示全部分工会 * @param unitId 单位ID,空字符串表示全部单位 - * @param mode 排行范围:today 表示今日,all 表示活动期间 + * @param mode 排行范围:today、oneMonth、halfYear、oneYear、activity;all 兼容原活动期间参数 * @param sex 性别:空字符串表示全部,男或女表示指定性别 * @param ageRange 年龄段:空字符串表示全体,under40、41to50、51to55 表示指定年龄段 * @return Result,data.list 为排行榜数据,data.totalCount 为符合条件的总人数 @@ -87,12 +87,16 @@ public class FitnessWalkStepRankingController { if (Strings.isNotBlank(ageRange) && !List.of("under40", "41to50", "51to55").contains(ageRange)) { return Result.error("年龄段筛选参数不正确"); } + String actualMode = Strings.isBlank(mode) ? "today" : mode; + if (!List.of("today", "oneMonth", "halfYear", "oneYear", "activity", "all").contains(actualMode)) { + return Result.error("时间范围参数不正确"); + } return Result.success(fitnessWalkCommonService.getStepRankingPagination( pageForm, activityId, unionId, unitId, - mode, + actualMode, sex, ageRange )); @@ -107,6 +111,7 @@ public class FitnessWalkStepRankingController { * @param rankingType 排行指标:totalSteps 累计步数、completionRate 目标完成率、complianceDays 达标天数 * @param sex 性别筛选:空字符串表示全部,男或女表示指定性别 * @param ageRange 年龄段:空字符串表示全体,under40、41to50、51to55 表示指定年龄段 + * @param timeRange 时间范围:today 当日、oneMonth 近1个月、halfYear 近半年、oneYear 近1年、activity 活动开始至今 * @param pageNumber 页码,从1开始 * @param pageSize 每页条数,最大50条 * @return Result,data 包含 list 排名列表、分页信息以及 currentUser 当前用户指标 @@ -119,6 +124,7 @@ public class FitnessWalkStepRankingController { String rankingType, String sex, String ageRange, + String timeRange, Integer pageNumber, Integer pageSize) { if (Strings.isBlank(activityId) || Strings.isBlank(userId)) { @@ -135,6 +141,10 @@ public class FitnessWalkStepRankingController { if (Strings.isNotBlank(ageRange) && !List.of("under40", "41to50", "51to55").contains(ageRange)) { return Result.error("年龄段筛选参数不正确"); } + String actualTimeRange = Strings.isBlank(timeRange) ? "today" : timeRange; + if (!List.of("today", "oneMonth", "halfYear", "oneYear", "activity").contains(actualTimeRange)) { + return Result.error("时间范围参数不正确"); + } int actualPageNumber = pageNumber == null || pageNumber < 1 ? 1 : pageNumber; int actualPageSize = pageSize == null || pageSize < 1 ? 20 : Math.min(pageSize, 50); @@ -145,6 +155,7 @@ public class FitnessWalkStepRankingController { actualRankingType, sex, ageRange, + actualTimeRange, actualPageNumber, actualPageSize )); @@ -217,7 +228,7 @@ public class FitnessWalkStepRankingController { * @param activityId 活动ID * @param unionId 分工会ID,空字符串表示全部 * @param unitId 单位ID,空字符串表示全部 - * @param mode 排行范围:today表示今日,all表示活动期间 + * @param mode 排行范围:today、oneMonth、halfYear、oneYear、activity;all 兼容原活动期间参数 * @param sex 性别:空字符串表示全部,男或女表示指定性别 * @param ageRange 年龄段:空字符串表示全部,under40、41to50、51to55表示指定年龄段 * @param response HTTP响应,返回XSSF格式的Excel文件流 @@ -241,13 +252,17 @@ public class FitnessWalkStepRankingController { if (Strings.isNotBlank(ageRange) && !List.of("under40", "41to50", "51to55").contains(ageRange)) { throw new IllegalArgumentException("年龄段筛选参数不正确"); } + String actualMode = Strings.isBlank(mode) ? "today" : mode; + if (!List.of("today", "oneMonth", "halfYear", "oneYear", "activity", "all").contains(actualMode)) { + throw new IllegalArgumentException("时间范围参数不正确"); + } List stepRankingList = fitnessWalkCommonService.getStepRankingList( searchName, searchKeyword, activityId, unionId, unitId, - mode, + actualMode, sex, ageRange ); @@ -265,7 +280,7 @@ public class FitnessWalkStepRankingController { entityList.add(new ExcelExportEntity("步数", "total_steps", 20)); entityList.add(new ExcelExportEntity("达标天数", "standardsDays", 15)); try { - String fileName = ("today".equals(mode) ? DateUtil.format(new Date(), "yyyy年MM月dd日") : "活动期间总") + "步数榜.xlsx"; + String fileName = getRankingTimeRangeName(actualMode) + "步数榜.xlsx"; ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, stepRankingList); @@ -275,6 +290,28 @@ public class FitnessWalkStepRankingController { } } + /** + * 将排行榜时间范围参数转换为导出文件名中的中文说明。 + * + * @param mode 时间范围参数,支持 today、oneMonth、halfYear、oneYear、activity 和兼容值 all + * @return 导出文件名使用的时间范围名称 + */ + private String getRankingTimeRangeName(String mode) { + if ("oneMonth".equals(mode)) { + return "近1个月"; + } + if ("halfYear".equals(mode)) { + return "近半年"; + } + if ("oneYear".equals(mode)) { + return "近1年"; + } + if ("activity".equals(mode) || "all".equals(mode)) { + return "活动开始至今"; + } + return DateUtil.format(new Date(), "yyyy年MM月dd日"); + } + @At @SaCheckPermission("fitnessWalk.stepRanking") public Result getCascadersActivity(@Param("year") int year) { diff --git a/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/service/FitnessWalkCommonService.java b/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/service/FitnessWalkCommonService.java index a03c8dc..0f30de1 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/service/FitnessWalkCommonService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/service/FitnessWalkCommonService.java @@ -69,7 +69,7 @@ public interface FitnessWalkCommonService extends BaseService= '" - +DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd")+"' and DATE(applyDate) <= '" - +DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd")+"'")); -// cnd.and("DATE( s.applyDate )", ">=", DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd")); -// cnd.and("DATE( s.applyDate )", "<=", DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd")); + DateTime activityStartDate = DateUtil.beginOfDay(DateUtil.date(activity.getStartTime())); + DateTime activityEndDate = DateUtil.endOfDay(DateUtil.date(activity.getEndTime())); + DateTime todayStartDate = DateUtil.beginOfDay(new Date()); + DateTime queryStartDate = todayStartDate; + if ("oneMonth".equals(mode)) { + queryStartDate = DateUtil.beginOfDay(DateUtil.offsetMonth(todayStartDate, -1)); + } else if ("halfYear".equals(mode)) { + queryStartDate = DateUtil.beginOfDay(DateUtil.offsetMonth(todayStartDate, -6)); + } else if ("oneYear".equals(mode)) { + queryStartDate = DateUtil.beginOfDay(DateUtil.offset(todayStartDate, DateField.YEAR, -1)); + } else if ("activity".equals(mode) || "all".equals(mode)) { + queryStartDate = activityStartDate; } + // PC端所有时间范围都不得超出活动有效期,查询结束时间取今天和活动结束时间中的较早值。 + if (queryStartDate.isBefore(activityStartDate)) { + queryStartDate = activityStartDate; + } + DateTime queryEndDate = DateUtil.endOfDay(new Date()); + if (queryEndDate.isAfter(activityEndDate)) { + queryEndDate = activityEndDate; + } + String dateSql = "applyDate >= '" + DateUtil.format(queryStartDate, "yyyy-MM-dd HH:mm:ss") + + "' AND applyDate <= '" + DateUtil.format(queryEndDate, "yyyy-MM-dd HH:mm:ss") + "'"; + sql.setVar("dateSql", new Static(dateSql)); + if (Strings.isNotBlank(unitId)) { cnd.and("u.unitId", "=", unitId); } diff --git a/src/main/resources/views/platform/zhgh/activity/fitnesswalk/stepRanking.html b/src/main/resources/views/platform/zhgh/activity/fitnesswalk/stepRanking.html index ba62f3a..3b8c24c 100644 --- a/src/main/resources/views/platform/zhgh/activity/fitnesswalk/stepRanking.html +++ b/src/main/resources/views/platform/zhgh/activity/fitnesswalk/stepRanking.html @@ -109,10 +109,11 @@ layout("/layouts/platform.html"){ - 今日排行榜 - 总排行榜 + {{item.name}} - 导出{{pageForm.mode == 'today' ? '今日排行榜' : '总排行榜'}} + 导出{{rankingTimeRangeName}} @@ -162,6 +163,13 @@ layout("/layouts/platform.html"){ unionOptions: [], unitOptions: [], activityOptions: [], + rankingTimeOptions: [ + {name: '今日排行榜', value: 'today'}, + {name: '近1个月', value: 'oneMonth'}, + {name: '近半年', value: 'halfYear'}, + {name: '近1年', value: 'oneYear'}, + {name: '活动开始至今', value: 'activity'} + ], tableColumns: [ {label: '姓名', prop: 'username'}, {label: '工号', prop: 'loginname'}, @@ -174,6 +182,12 @@ layout("/layouts/platform.html"){ ], } }, + computed: { + rankingTimeRangeName() { + const currentOption = this.rankingTimeOptions.find((item) => item.value === this.pageForm.mode) + return currentOption ? currentOption.name : '今日排行榜' + } + }, methods: { exportExcel(){ const {searchName,searchKeyword,activityId,unionId,unitId,mode,sex,ageRange} = this.pageForm