From d1a95f17884e4d2fa3d397c9c8cdb79932b174db Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Tue, 27 May 2025 15:07:37 +0800 Subject: [PATCH] commit --- ...ssWalkActivityBindingRecordController.java | 6 +- .../FitnessWalkActivityManageController.java | 35 +- .../FitnessWalkCommonController.java | 69 ++++ .../FitnessWalkPunchLotteryController.java | 256 ------------ .../FitnessWalkPunchStatisticsController.java | 17 +- .../FitnessWalkStepManageController.java | 52 +-- .../FitnessWalkStepRaffleController.java | 293 +++++++++++++ .../FitnessWalkStepRankingController.java | 91 ++-- .../FitnessWalkStepStatisticsController.java | 18 +- .../FitnessWalkStepWiningController.java | 49 ++- .../controller/loginController.java | 75 ++++ .../model/FitnessWalkActivity.java | 17 +- .../model/FitnessWalkAwardUser.java | 21 + .../model/FitnessWalkPunchLottery.java | 33 +- .../model/FitnessWalkRaffleRules.java | 53 +++ .../model/FitnessWalkRaffleUser.java | 61 +++ .../service/FitnessWalkCommonService.java | 1 + .../service/FitnessWalkStepRaffleService.java | 34 ++ .../impl/FitnessWalkCommonServiceImpl.java | 74 ++-- ...FitnessWalkPunchStatisticsServiceImpl.java | 4 +- .../FitnessWalkStepRaffleServiceImpl.java | 346 ++++++++++++++++ .../platform/fitnessWalk/activityManage.html | 178 +++++--- .../platform/fitnessWalk/stepRaffle.html | 390 ++++++++++++++++++ .../platform/fitnessWalk/stepRanking.html | 1 - .../platform/fitnessWalk/stepStatistics.html | 6 +- .../platform/fitnessWalk/stepWining.html | 6 +- 26 files changed, 1645 insertions(+), 541 deletions(-) create mode 100644 src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkCommonController.java delete mode 100644 src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkPunchLotteryController.java create mode 100644 src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepRaffleController.java create mode 100644 src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/loginController.java create mode 100644 src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkRaffleRules.java create mode 100644 src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkRaffleUser.java create mode 100644 src/main/java/io/v/nutz/zhgh/fitnessWalk/service/FitnessWalkStepRaffleService.java create mode 100644 src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkStepRaffleServiceImpl.java create mode 100644 src/main/resources/views/platform/fitnessWalk/stepRaffle.html diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkActivityBindingRecordController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkActivityBindingRecordController.java index 446bd58..8cafccd 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkActivityBindingRecordController.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkActivityBindingRecordController.java @@ -8,8 +8,8 @@ import com.alibaba.fastjson.JSONObject; import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.WxHttpUtil; -import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.fitnessWalk.utils.WeAppCloudUtil; +import io.v.nutz.web.commons.utils.ShiroUtil; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; @@ -22,7 +22,6 @@ import org.nutz.mvc.annotation.Param; import java.io.IOException; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; @IocBean @@ -81,14 +80,13 @@ public class FitnessWalkActivityBindingRecordController { } catch (Exception e){ return Result.error(e.getMessage()); } - } @At @ViReturn @RequiresPermissions("fitnessWalk.bindingRecord") - public Object delete(String[] ids){ + public Object delete(String[] ids) { try { String sql = "db.collection('login_record').where({_id:_.in(" + Json.toJson(ids) + ")}).remove()"; weAppCloudUtil.request(WeAppCloudUtil.CRUD.DELETE,sql); diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkActivityManageController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkActivityManageController.java index 3542df0..1a0bbf1 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkActivityManageController.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkActivityManageController.java @@ -1,26 +1,23 @@ package io.v.nutz.zhgh.fitnessWalk.controller; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.base.Result; import cn.wizzer.framework.page.Pagination; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.WxHttpUtil; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; +import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; +import io.v.nutz.zhgh.fitnessWalk.utils.WeAppCloudUtil; import io.v.nutz.sys.models.Sys_task; import io.v.nutz.sys.services.SysTaskService; import io.v.nutz.sys.services.SysUserService; import io.v.nutz.task.services.TaskPlatformService; import io.v.nutz.web.commons.utils.ShiroUtil; -import io.v.nutz.web.commons.base.Globals; -import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; -import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; -import io.v.nutz.zhgh.fitnessWalk.utils.WeAppCloudUtil; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.dao.Cnd; import org.nutz.ioc.loader.annotation.Inject; @@ -28,8 +25,6 @@ import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; import org.nutz.lang.Lang; import org.nutz.lang.Strings; -import org.nutz.lang.random.R; -import org.nutz.lang.tmpl.Tmpl; import org.nutz.lang.util.NutMap; import org.nutz.log.Log; import org.nutz.log.Logs; @@ -39,17 +34,11 @@ import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; import org.nutz.mvc.upload.TempFile; import org.nutz.mvc.upload.UploadAdaptor; -import org.nutz.plugins.wkcache.annotation.CacheRemove; -import org.nutz.plugins.wkcache.annotation.CacheRemoveAll; -import org.nutz.trans.Trans; -import java.io.IOException; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; - @At("/platform/fitnessWalk/activityManage") @Ok("json") @IocBean @@ -152,14 +141,6 @@ public class FitnessWalkActivityManageController { fitnessWalkActivity.setUnionId(""); } - //判断打卡抽奖的奖品列表是否有value - if (Lang.isNotEmpty(fitnessWalkActivity.getPunchLotteryPrizes())){ - fitnessWalkActivity.getPunchLotteryPrizes().forEach(v->{ - if (StrUtil.isNotBlank(v.getValue())) return; - v.setValue(R.UU32()); - }); - } - fitnessWalkActivity.setNote(fitnessWalkActivity.getNote().replace("\"", "'")); StringBuilder sql = new StringBuilder(); sql.append("db.collection('activity').add({data:").append(Json.toJson(fitnessWalkActivity)).append("})"); @@ -246,13 +227,7 @@ public class FitnessWalkActivityManageController { } else { fitnessWalkActivity.setUnionId(""); } - //判断打卡抽奖的奖品列表是否有value - if (Lang.isNotEmpty(fitnessWalkActivity.getPunchLotteryPrizes())){ - fitnessWalkActivity.getPunchLotteryPrizes().forEach(v->{ - if (StrUtil.isNotBlank(v.getValue())) return; - v.setValue(R.UU32()); - }); - } + fitnessWalkActivity.setNote(fitnessWalkActivity.getNote().replace("\"", "'")); StringBuilder sql = new StringBuilder(); @@ -287,6 +262,7 @@ public class FitnessWalkActivityManageController { taskPlatformService.delete(v.getId(), v.getId()); sysTaskService.delete(v.getId()); }); + } return Result.success(); } catch (Exception e) { @@ -294,7 +270,6 @@ public class FitnessWalkActivityManageController { } } - /** * 健身走健步模式通知提醒 * diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkCommonController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkCommonController.java new file mode 100644 index 0000000..b7fb09a --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkCommonController.java @@ -0,0 +1,69 @@ +package io.v.nutz.zhgh.fitnessWalk.controller; + +import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.utils.DateUtil; +import io.v.nutz.zhgh.question.model.Question_issue; +import io.v.nutz.zhgh.question.model.Question_reply; +import io.v.nutz.zhgh.question.service.QuestionIssueService; +import io.v.nutz.zhgh.question.service.QuestionReplyService; +import io.v.nutz.zhgh.question.service.QuestionService; +import io.v.nutz.zhgh.question.service.QuestionWorService; +import org.nutz.dao.Cnd; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.random.R; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * 健身走公共答题 + */ +@IocBean +@At("/platform/fitnessWalk/common") +@Ok("json:full") +public class FitnessWalkCommonController { + + @Inject + private QuestionService questionService; + + @Inject + private QuestionIssueService questionIssueService; + + @Inject + private QuestionWorService questionWorService; + + @Inject + private QuestionReplyService questionReplyService; + + @At + @ViReturn + public Object getQuestion() { + return questionService.query(Cnd.where("qflag", "=", 2)); + } + + @At + @ViReturn + public Object getIssueById(String id) { + List questionIssues = questionIssueService.query(Cnd.where("iqid", "=", id).asc("ipxbh")); + questionIssues.forEach(issue -> { + issue.setWors(questionWorService.query(Cnd.where("wiid", "=", issue.getIid()).asc("wpxbh"))); + }); + return questionIssues; + } + + @At + @ViReturn + public Object saveAnswer(@Param("reply") Question_reply[] replys) { + for (Question_reply reply : replys) { + reply.setSave(false); + reply.setRidentity(R.UU32()); + reply.setRtime(DateUtil.getDate()); + questionReplyService.insert(reply); + } + return null; + } + +} diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkPunchLotteryController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkPunchLotteryController.java deleted file mode 100644 index 3618f5c..0000000 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkPunchLotteryController.java +++ /dev/null @@ -1,256 +0,0 @@ -package io.v.nutz.zhgh.fitnessWalk.controller; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -import cn.wizzer.framework.base.Result; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.sys.models.Sys_user; -import io.v.nutz.web.commons.slog.annotation.SLog; -import io.v.nutz.web.commons.utils.ShiroUtil; -import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; -import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkPunchLottery; -import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; -import io.v.nutz.zhgh.fitnessWalk.utils.WeAppCloudUtil; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.nutz.dao.Chain; -import org.nutz.dao.Cnd; -import org.nutz.integration.jedis.RedisService; -import org.nutz.ioc.loader.annotation.Inject; -import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.lang.Lang; -import org.nutz.lang.random.R; -import org.nutz.lang.util.NutMap; -import org.nutz.mvc.annotation.At; -import org.nutz.mvc.annotation.Ok; - -import java.util.*; -import java.util.concurrent.locks.ReentrantLock; -import java.util.stream.Collectors; - -/** - * 打卡抽奖 - */ -@IocBean -@Ok("json") -@At("/platform/fitnessWalk/punchLottery") -public class FitnessWalkPunchLotteryController { - - private final ReentrantLock lock = new ReentrantLock(true); - - @Inject - private FitnessWalkCommonService fitnessWalkCommonService; - - @Inject - private WeAppCloudUtil weAppCloudUtil; - - @Inject - private RedisService redisService; - - @At("") - @Ok("beetl:/platform/fitnessWalk/punchLottery.html") - public void index() { - } - - - /** - * 打卡完成之后抽奖 - * - * @param activityId 活动Id - * @param userId 用户Id - * @return - */ - @At - public Result judgeWinningToPunch(String activityId, String userId) { - try { - if (StrUtil.isBlank(activityId) && StrUtil.isBlank(userId)) { - return Result.error("参数错误"); - } - - lock.lock(); - int winingCount = fitnessWalkCommonService.dao().count(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId)); - if (winingCount > 0) { - return null; - } - - String redisKey = this.getClass().getName() + "#judgeWinningToPunch#activityid:" + activityId + "#PRIZELIST:"; - String getPrizeIndexesKey = this.getClass().getName() + "#judgeWinningToPunch#activityid:" + activityId + "#GETPRIZEINDEXES:"; - -// redisService.del(getPrizeIndexesKey); - List punchLotteryPrizes = new ArrayList<>(); - String punchLotteryPrizesJson = redisService.get(redisKey); - if (StrUtil.isNotBlank(punchLotteryPrizesJson)) { - punchLotteryPrizes = JSON.parseArray(punchLotteryPrizesJson, FitnessWalkActivity.PunchLotteryPrize.class); - } else { - JSONObject prizeJsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, "db.collection('activity').doc('%s').field({punchLotteryPrizes: true}).get()".formatted(activityId)); - List prizeList = JSON.parseObject((String) prizeJsonObject.getJSONArray("data").get(0)).getJSONArray("punchLotteryPrizes").toJavaList(FitnessWalkActivity.PunchLotteryPrize.class); - redisService.set(redisKey, JSON.toJSONString(prizeList)); - punchLotteryPrizes = prizeList; - } - - List winningUserIndexList = null; - //奖项,抽取多少个 - int sum = punchLotteryPrizes.stream().mapToInt(v -> Integer.parseInt(v.getNum())).sum(); - //判断是否有key,可以获得奖项的下标数组 - if (!redisService.exists(getPrizeIndexesKey)) { - JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, "db.collection('register').where({activity_id:'%s'}).count()".formatted(activityId)); - JSONObject pager = jsonObject.getJSONObject("pager"); - String total = pager.getString("Total"); - //报名人数的一半,从这里的人中取数(最多抽取人数) - Integer lotteryNum = (int) Math.ceil(Double.parseDouble(total) / 2); - winningUserIndexList = generateRandomNumber(1, lotteryNum, sum); - redisService.set(getPrizeIndexesKey, JSON.toJSONString(winningUserIndexList)); - } else { - String data = redisService.get(getPrizeIndexesKey); - winningUserIndexList = JSONObject.parseArray(data, Integer.class); - } - - List punchLotteryList = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId)); - - Sys_user user = fitnessWalkCommonService.dao().fetch(Sys_user.class, Cnd.where("id", "=", userId)); - - FitnessWalkPunchLottery punchLottery = new FitnessWalkPunchLottery(); - punchLottery.setId(R.UU32()); - punchLottery.setActivityId(activityId); - punchLottery.setUserId(userId); - punchLottery.setLoginName(user.getLoginname()); - punchLottery.setUserName(user.getUsername()); - punchLottery.setWinDate(new Date()); - punchLottery.setIsRead(false); - punchLottery.setIsWin(false); - punchLottery.setIsExchange(false); - - if (winningUserIndexList.contains((punchLotteryList.size()))) { - - //奖项map - Map prizeMap = punchLotteryPrizes.stream().collect(Collectors.toMap(v -> v.getValue(), v -> v.getName())); - - //奖项池 - List prizeIdList = new ArrayList<>(); - - punchLotteryPrizes.forEach(v -> { - for (int i = 0; i < Integer.parseInt(v.getNum()); i++) { - prizeIdList.add(v.getValue()); - } - }); - - //已经中奖的奖项ID集合 - List winPrizeIdList = punchLotteryList.stream().filter(v -> v.getIsWin()).map(v -> v.getPrizeId()).collect(Collectors.toList()); - winPrizeIdList.forEach(prizeId -> { - int i = prizeIdList.indexOf(prizeId); - prizeIdList.remove(i); - }); - - Random random = new Random(); - if (prizeIdList.size() != 0) { - int index = random.nextInt(prizeIdList.size()); - - // 获取随机元素 - String winingPrizeId = prizeIdList.get(index); - String winingPrizeName = prizeMap.get(winingPrizeId); - punchLottery.setPrizeName(winingPrizeName); - punchLottery.setPrizeId(winingPrizeId); - punchLottery.setIsWin(true); - - } - - } - - fitnessWalkCommonService.dao().insert(punchLottery); - if (punchLottery.getIsWin()) { - return Result.success().addData(punchLottery.getPrizeId()); - } else { - return Result.success().addData(null); - } - } catch (Exception e) { - e.printStackTrace(); - return null; - } finally { - if (lock.isLocked()) { - lock.unlock(); - } - } - } - - @At - public Result getLotteryRecord(String activityId, String userId) { - List list = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class, Cnd.where("activityId", "=", activityId) - .and("userId", "=", userId)); - return Result.success(list); - } - - - /** - * 兑奖 - * - * @param id - * @return - */ - @At - public Result doExchange(String id) { - - int count = fitnessWalkCommonService.dao().count(FitnessWalkPunchLottery.class, Cnd.where("id", "=", id).and("isExchange", "=", 1)); - //返回2 "该二维码已兑奖!" - if (count > 0) return Result.success(2); - - int update = fitnessWalkCommonService.dao().update(FitnessWalkPunchLottery.class, - Chain.make("isExchange", 1).add("exchangeDate", new Date()), - Cnd.where("id", "=", id)); - return update > 0 ? Result.success() : Result.error(); - } - - - /** - * 改为已读 - * - * @param activityId - * @param userId - * @return - */ - @At - public Result doReadLottery(String activityId, String userId) { - fitnessWalkCommonService.dao().update(FitnessWalkPunchLottery.class, Chain.make("isRead", 1), - Cnd.where("userId", "=", userId).and("activityId", "=", activityId)); - return Result.success(); - } - - - /** - * 查看获奖人员 - * - * @return - */ - @At - public Result getPunchWining(String activityId) { - List punchLotteryList = fitnessWalkCommonService.dao().query(FitnessWalkPunchLottery.class, - Cnd.where("isWin", "=", 1).and("activityId", "=", activityId)); - return Result.success(punchLotteryList); - } - - - /** - * 生成随机数,该随机数为中奖人 - * - * @param minNum 最小值 - * @param maxNum 最多抽取多少人 - * @param count 抽几个 - * @return - */ - public List generateRandomNumber(Integer minNum, Integer maxNum, Integer count) { - Set randomNumbers = new HashSet<>(); - Random rand = new Random(); - //如果是 抽奖人数小于了 奖品数量,会陷入死循环 - if (maxNum <= count) { - for (int i = 0; i <= maxNum; i++) { - randomNumbers.add(i + 1); - } - } else { - while (randomNumbers.size() < count) { - int randomNum = rand.nextInt(maxNum - minNum + 1) + minNum; - randomNumbers.add(randomNum); - } - } - return new ArrayList<>(randomNumbers); - } -} diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkPunchStatisticsController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkPunchStatisticsController.java index 4786ec2..26a9df2 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkPunchStatisticsController.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkPunchStatisticsController.java @@ -3,33 +3,21 @@ package io.v.nutz.zhgh.fitnessWalk.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.URLUtil; import cn.wizzer.framework.base.Result; import com.alibaba.fastjson.JSONObject; import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.service.BaseService; -import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.ViTool; -import io.v.nutz.sys.models.Sys_union; -import io.v.nutz.zhgh.fitnessWalk.contants.Cascader; import io.v.nutz.zhgh.fitnessWalk.contants.FitnessWalkMode; -import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkPunchStatisticsService; import io.v.nutz.zhgh.fitnessWalk.utils.WeAppCloudUtil; -import org.apache.commons.lang3.StringUtils; +import io.v.nutz.sys.models.Sys_union; import org.apache.poi.ss.usermodel.Workbook; import org.apache.shiro.authz.annotation.RequiresPermissions; -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.Strings; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; @@ -37,12 +25,9 @@ import org.nutz.mvc.annotation.Param; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; /** * 打卡统计 diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepManageController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepManageController.java index 59f613c..b7bcd9b 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepManageController.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepManageController.java @@ -1,16 +1,11 @@ package io.v.nutz.zhgh.fitnessWalk.controller; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.date.DateBetween; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.base.Result; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.base.page.Pagination; import io.v.nutz.base.service.BaseService; import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkAwardUser; @@ -35,7 +30,10 @@ import org.nutz.mvc.annotation.Ok; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @IocBean @@ -75,8 +73,19 @@ public class FitnessWalkStepManageController { return Result.error("上传步数失败,请重新登录后再次上传!"); } - DateTime activityStartDate = DateUtil.date(start_time); - DateTime activityEndDate = DateUtil.date(end_time); + /*DateTime activityStartDate = DateUtil.date(start_time); + DateTime activityEndDate = DateUtil.date(end_time);*/ + +// FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId); +// +// Date startDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"), "yyyy-MM-dd"); +// Date endDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"), "yyyy-MM-dd"); + Date startDate = DateUtil.parse("2025-04-01 00:00:00", "yyyy-MM-dd HH:mm:ss"); + Date endDate = DateUtil.parse("2025-05-06 23:59:59", "yyyy-MM-dd HH:mm:ss"); + if (!DateUtil.isIn(DateUtil.date(), startDate, endDate)) { + return Result.error("已过活动时间,无法上传步数"); + } + List steps = Json.fromJsonAsList(NutMap.class, monthSteps); @@ -195,7 +204,6 @@ public class FitnessWalkStepManageController { // cnd.and("DATE(applyDate)",">=",DateUtil.format(startDate, "yyyy-MM-dd")); // cnd.and("DATE(applyDate)","<=",DateUtil.format(endDate, "yyyy-MM-dd")); // } - FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId); DateTime startTime = DateUtil.date(activity.getStartTime()); DateTime endTime = DateUtil.date(activity.getEndTime()); @@ -209,7 +217,7 @@ public class FitnessWalkStepManageController { List stepList = baseService.dao().query(FitnessWalkStep.class, cnd); return stepList.stream().map(v -> { - return Map.of("step", v.getStep(), "timestamp", v.getApplyDate().getTime()/1000); + return Map.of("step", v.getStep(), "timestamp", v.getApplyDate().getTime()); }).collect(Collectors.toList()); // userStepList.addAll(stepList.stream().map(FitnessWalkStep::getStep).collect(Collectors.toList())); @@ -280,7 +288,6 @@ public class FitnessWalkStepManageController { .and("activityId", "=", activityId) .and("DATE(applyDate)", ">=", DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd")) .and("DATE(applyDate)", "<=", DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd")) - .groupBy("applyDate") ); List result = new ArrayList<>(); @@ -308,10 +315,6 @@ public class FitnessWalkStepManageController { nutMap.put("userComplianceSumDay", partSteps.stream().filter(s -> s.getStep() > lotteryQualificationStep).count()); //总达标天数 nutMap.put("complianceSumDay", lotteryQualificationDay); - //开始时间 - nutMap.put("startDate",rule.getStartDate()); - //结束时间 - nutMap.put("endDate",rule.getEndDate()); } else if (lotteryQualificationDay == null && lotteryQualificationStep != null) { //总步数 nutMap.put("mode", "customLotterySumStepMode"); @@ -319,6 +322,9 @@ public class FitnessWalkStepManageController { nutMap.put("userSumStep", partSteps.stream().mapToInt(s -> s.getStep()).sum()); //总达标步数 nutMap.put("complianceSumStep", lotteryQualificationStep); + + nutMap.put("title", DateUtil.format(rule.getStartDate(), "MM月dd日") + "至" + DateUtil.format(rule.getEndDate(), "MM月dd日")); + } result.add(nutMap); } @@ -337,19 +343,19 @@ public class FitnessWalkStepManageController { @At @Ok("json:full") public Result winningRecord(String activityId, String userId) { - /*List awardUsers = baseService.dao().query(FitnessWalkAwardUser.class, + Sql sql = Sqls.create(""" + select awardName,startDate,endDate from fitness_walk_award_user where activityId=@activityId and userId=@userId and isRead=@isRead + """).setParam("activityId",activityId).setParam("userId", userId).setParam("isRead",true); + + /* List awardUsers = baseService.dao().query(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId) - .and("userId", "=", userId)); - baseService.dao().update(FitnessWalkAwardUser.class, Chain.make("isRead", 1), - Cnd.where("activityId", "=", activityId) - .and("userId", "=", userId));*/ - return Result.success(new ArrayList<>()); + .and("userId", "=", userId).and("isRead", "=", true));*/ + return Result.success(baseService.listMap(sql)); } @At @Ok("json:full") - public Result hasReadAward(String id) { - baseService.dao().update(FitnessWalkAwardUser.class, Chain.make("isRead", 1), Cnd.where("id", "=", id)); + public Result hasReadAward(String activityId) { return Result.success(); } diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepRaffleController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepRaffleController.java new file mode 100644 index 0000000..2cd7287 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepRaffleController.java @@ -0,0 +1,293 @@ +package io.v.nutz.zhgh.fitnessWalk.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.wizzer.framework.base.Result; +import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.service.BaseService; +import io.v.nutz.base.utils.ViTool; +import io.v.nutz.zhgh.fitnessWalk.contants.FitnessWalkMode; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkAwardUser; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkRaffleRules; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkRaffleUser; +import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; +import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkStepRaffleService; +import io.v.nutz.base.query.PageForm; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.shiro.authz.annotation.RequiresPermissions; +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.SqlExpressionGroup; +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 org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:FitnessWalkStepRaffleController + * @Date 2024/12/27 14:43 + * @注释 健步走抽奖控制器 + */ +@Ok("json") +@IocBean +@At("/platform/fitnessWalk/stepRaffle") +public class FitnessWalkStepRaffleController { + + @Inject + private BaseService baseService; + @Inject + private FitnessWalkCommonService fitnessWalkCommonService; + @Inject + private FitnessWalkStepRaffleService fitnessWalkStepRaffleService; + + + + @At("") + @Ok("beetl:/platform/fitnessWalk/stepRaffle.html") + @RequiresPermissions("fitnessWalk.stepRaffle") + public void index() { + } + + @At + @ViReturn + @RequiresPermissions("fitnessWalk.stepRaffle") + public Object pageData(PageForm pageForm, + @Param(value = "activityId", required = false) String activityId, + @Param(value = "unionId", required = false) String unionId, + @Param(value = "unitId", required = false) String unitId){ + Sql sql = fitnessWalkStepRaffleService.getRaffleSql(pageForm, activityId, unionId, unitId); + return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + + + @At + @ViReturn + @RequiresPermissions("fitnessWalk.stepRaffle") + public Object getCascadersActivity(@Param(value = "year") int year) { + return fitnessWalkCommonService.cascaderActivity(year, FitnessWalkMode.STEP_COUNT); + } + + + /** + * 手动抽奖规则 + * @param fitnessWalkRaffleRules + * @return + */ + @At + @ViReturn + @Aop(TransAop.READ_COMMITTED) + @RequiresPermissions("fitnessWalk.stepRaffle") + public Object saveRaffle(FitnessWalkRaffleRules fitnessWalkRaffleRules){ + baseService.dao().insertOrUpdate(fitnessWalkRaffleRules); + fitnessWalkStepRaffleService.manualLottery(fitnessWalkRaffleRules.getActivityId()); + return null; + } + + + @At + @ViReturn + @RequiresPermissions("fitnessWalk.stepRaffle") + public Object getRaffle(String activityId){ + return baseService.dao().fetch(FitnessWalkRaffleRules.class, Cnd.where("activityId", "=", activityId)); + } + + + /** + * 小程序获取奖项信息 + * @param activityId + * @return + */ + @At + @ViReturn + public Object getAwardList(String activityId){ + return fitnessWalkStepRaffleService.getActivityAwardList(activityId); + } + + + /** + * 小程序获取自己的中奖信息 + * @return + */ + @At + @ViReturn + public Object getAwardInfo(String activityId, String userId){ + Dao dao = fitnessWalkStepRaffleService.dao(); + FitnessWalkAwardUser awardUser = dao.fetch(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId)); + FitnessWalkRaffleUser raffleUser = dao.fetch(FitnessWalkRaffleUser.class, Cnd.where("activityId", "=", activityId).and("userId", "=", userId)); + + NutMap map = NutMap.NEW(); + if (Lang.isNotEmpty(raffleUser) && !raffleUser.getIsRaffle()) { + if (Lang.isNotEmpty(awardUser)) { + map.put("awardName", awardUser.getAwardName()); + } else { + map.put("awardName", "没有中奖"); + } + map.put("raffleNum", 1); + } else { + map.put("raffleNum", 0); + } + return map; + } + + + /** + * 小程序获取查询是否可以抽奖 + * @return + */ + @At + public Object checkRaffle(String activityId, String userId){ + Dao dao = fitnessWalkStepRaffleService.dao(); + FitnessWalkRaffleUser raffleUser = dao.fetch(FitnessWalkRaffleUser.class, + Cnd.where("activityId", "=", activityId) + .and("userId", "=", userId)); + if (Lang.isNotEmpty(raffleUser)) { + return raffleUser.getIsRaffle() ? Result.error() : Result.success(); + } else { + return Result.error(); + } + } + + + /** + * 抽奖成功后,修改数据库状态 + * @param activityId + * @param userId + * @return + */ + @At + @ViReturn + @Aop(TransAop.READ_COMMITTED) + public Object updateUserAward(String activityId, String userId) { + fitnessWalkStepRaffleService.dao().update(FitnessWalkAwardUser.class, + Chain.make("isRead", true).add("applyDate", DateUtil.date()), + Cnd.where("activityId", "=", activityId).and("userId", "=", userId)); + + fitnessWalkStepRaffleService.dao().update(FitnessWalkRaffleUser.class, + Chain.make("isRaffle", true), + Cnd.where("activityId", "=", activityId).and("userId", "=", userId)); + return null; + } + + + @At + @ViReturn + @Ok("void") + @RequiresPermissions("fitnessWalk.stepRaffle") + public void exportAwardExcel(String searchKeyword, String activityId, + String lotteryTime, HttpServletResponse response) { + Cnd cnd = Cnd.NEW(); + cnd.andEX("activityId", "=", activityId); + cnd.andEX("awardName", "=", lotteryTime); + if (StrUtil.isNotBlank(searchKeyword)) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("username", searchKeyword); + seg.orLike("loginName", searchKeyword); + cnd.and(seg); + } + cnd.and("isRead", "=", true); + List list = fitnessWalkCommonService.dao().query(FitnessWalkAwardUser.class, cnd); + + for (FitnessWalkAwardUser awardUser : list) { + awardUser.setApplyDate2(DateUtil.formatDateTime(awardUser.getApplyDate())); + } + + List entityList = new ArrayList<>(); + ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); + no.setFormat("isAddIndex"); + entityList.add(no); + entityList.add(new ExcelExportEntity("工号", "loginName", 20)); + entityList.add(new ExcelExportEntity("姓名", "username", 20)); + entityList.add(new ExcelExportEntity("分工会", "unionName", 20)); + entityList.add(new ExcelExportEntity("单位", "unitName", 40)); + entityList.add(new ExcelExportEntity("奖项名称", "awardName", 20)); + entityList.add(new ExcelExportEntity("中奖时间", "applyDate2", 20)); + + try { + ViTool.excelResponse(response, "健步走中奖人员名单.xlsx"); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list); + workbook.write(response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + + @At + @ViReturn + @Ok("void") + @RequiresPermissions("fitnessWalk.stepRaffle") + public void exportExcel(String searchKeyword, String activityId, String unionId, + String unitId, HttpServletResponse response) { + PageForm pageForm = new PageForm(); + pageForm.setSearchKeyword(searchKeyword); + Sql sql = fitnessWalkStepRaffleService.getRaffleSql(pageForm, activityId, unionId, unitId); + + +// Sql sql = Sqls.create(""" +// SELECT +// ru.*, +// u.sex, +// u.unionname AS unionName, +// u.unitname AS unitName +// FROM +// fitness_walk_raffle_user ru left join `user` u on ru.userId = u.id +// $condition +// """); +// Cnd cnd = Cnd.NEW(); +// cnd.andEX("ru.activityId", "=", activityId); +// cnd.andEX("u.unionid", "=", unionId); +// cnd.andEX("u.unitid", "=", unitId); +// if (StrUtil.isNotBlank(searchKeyword)) { +// SqlExpressionGroup seg = new SqlExpressionGroup(); +// seg.orLike("ru.username", searchKeyword); +// seg.orLike("ru.loginName", searchKeyword); +// cnd.and(seg); +// } +// sql.setCondition(cnd); + List list = fitnessWalkStepRaffleService.listMap(sql); + + List entityList = new ArrayList<>(); + ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); + no.setFormat("isAddIndex"); + entityList.add(no); + entityList.add(new ExcelExportEntity("工号", "loginname", 20)); + entityList.add(new ExcelExportEntity("姓名", "username", 20)); + entityList.add(new ExcelExportEntity("分工会", "unionname", 20)); + entityList.add(new ExcelExportEntity("单位", "unitname", 40)); + entityList.add(new ExcelExportEntity("达标天数", "standardsDays", 20)); + entityList.add(new ExcelExportEntity("步数", "total_steps", 20)); + + try { + ViTool.excelResponse(response, "健步走达标人员名单.xlsx"); + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list); + workbook.write(response.getOutputStream()); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepRankingController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepRankingController.java index ac73f92..c10a513 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepRankingController.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepRankingController.java @@ -7,16 +7,13 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.base.dao.CndPlus; -import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.BaseService; import io.v.nutz.base.utils.ViTool; -import io.v.nutz.sys.models.Sys_user; -import io.v.nutz.web.commons.slog.annotation.SLog; -import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.fitnessWalk.contants.FitnessWalkMode; import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.web.commons.slog.annotation.SLog; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; import org.apache.shiro.authz.annotation.RequiresPermissions; @@ -24,8 +21,6 @@ import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.lang.Lang; -import org.nutz.lang.Strings; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; @@ -35,7 +30,6 @@ import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Map; /** * 步数排行榜 @@ -63,7 +57,6 @@ public class FitnessWalkStepRankingController { @At @ViReturn @RequiresPermissions("fitnessWalk.stepRanking") - @SLog(type = "健身走", tag = "步数排行榜", msg = "获取排行榜", param = true, result = false) public Object pageData(PageForm pageForm, @Param(value = "activityId", required = false) String activityId, @Param(value = "unionId", required = false) String unionId, @@ -77,13 +70,13 @@ public class FitnessWalkStepRankingController { * 获取所有教工 今天的步数及活动时间范围内的步数 * * @param activityId - * @param mode day:今天 week:周 month:月 all:所有 + * @param mode day:今天 all:所有 * @return {@link Object} */ @At @Ok("json:full") @ViReturn -// @SLog(type = "校工会特色活动",tag = "健身走-计步步数排行榜",msg = "小程序接口(获取今日步数及活动范围内步数)",param = true,result = true) + @SLog(type = "校工会特色活动", tag = "健身走-计步步数排行榜", msg = "小程序接口(获取今日步数及活动范围内步数)", param = true, result = true) public Object getUserStepRanking(String activityId, String mode, Integer pageNumber, Integer pageSize) { if (mode.equals("day")) { Sql sql = Sqls.create(""" @@ -97,83 +90,88 @@ public class FitnessWalkStepRankingController { WHERE t.activityId = @activityId AND t.applyDate = @today - GROUP BY - t.userId - ORDER BY t.step DESC,u.loginname DESC + ORDER BY t.step DESC """); sql.setParam("activityId", activityId); sql.setParam("today", DateUtil.today()); return baseService.listPageMap(pageNumber, pageSize, sql); - }else if(mode.equals("week")){ + } else if (mode.equals("week")) { Date startOfWeek = DateUtil.beginOfWeek(new Date()); Date endOfWeek = DateUtil.endOfWeek(new Date()); Sql sql = Sqls.create(""" SELECT - t.userId, - sum( t.step ) AS step, - u.username + sum( t.step ) AS step, + u.username FROM - `fitness_walk_step` t - LEFT JOIN sys_user u ON u.id = t.userId + `fitness_walk_step` t + LEFT JOIN sys_user u ON u.id = t.userId WHERE t.activityId = @activityId AND t.applyDate >= @startTime AND t.applyDate <= @endTime GROUP BY - t.userId + t.userId ORDER BY - step DESC + step DESC """); sql.setParam("activityId", activityId); sql.setParam("startTime", startOfWeek); sql.setParam("endTime", endOfWeek); return baseService.listPageMap(pageNumber, pageSize, sql); - } else if(mode.equals("month")){ + } else if (mode.equals("month")) { Date firstDayOfMonth = DateUtil.beginOfMonth(new Date()); Date lastDayOfMonth = DateUtil.endOfMonth(new Date()); Sql sql = Sqls.create(""" SELECT - t.userId, - sum( t.step ) AS step, - u.username + sum( t.step ) AS step, + u.username FROM - `fitness_walk_step` t - LEFT JOIN sys_user u ON u.id = t.userId + `fitness_walk_step` t + LEFT JOIN sys_user u ON u.id = t.userId WHERE t.activityId = @activityId AND t.applyDate >= @startTime AND t.applyDate <= @endTime GROUP BY - t.userId + t.userId ORDER BY - step DESC + step DESC """); sql.setParam("activityId", activityId); sql.setParam("startTime", firstDayOfMonth); sql.setParam("endTime", lastDayOfMonth); return baseService.listPageMap(pageNumber, pageSize, sql); - }else if (mode.equals("all")) { + } else if (mode.equals("all")) { FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId); DateTime startTime = DateUtil.date(activity.getStartTime()); DateTime endTime = DateUtil.date(activity.getEndTime()); Sql sql = Sqls.create(""" SELECT - t.userId, - sum( t.step ) AS step, - u.username - FROM - `fitness_walk_step` t - LEFT JOIN sys_user u ON u.id = t.userId - WHERE - t.activityId = @activityId - AND t.applyDate >= @startTime - AND t.applyDate <= @endTime + SUM(sub.max_step) AS step, + u.username + FROM ( + SELECT + userId, + activityId, + applyDate, + MAX(step) AS max_step + FROM + fitness_walk_step + WHERE + activityId = @activityId + AND applyDate >= @startTime AND applyDate <= @endTime + GROUP BY + userId, + activityId, + applyDate + ) sub + left join `user` u ON u.id = sub.userId GROUP BY - t.userId + userId ORDER BY - step DESC + step desc """); sql.setParam("activityId", activityId); sql.setParam("startTime", startTime); @@ -187,7 +185,7 @@ public class FitnessWalkStepRankingController { @At @Ok("void") - @SLog(type = "校工会特色活动",tag = "健身走-计步步数排行榜",msg = "步数排行榜导出",param = true,result = true) + @SLog(type = "校工会特色活动", tag = "健身走-计步步数排行榜", msg = "步数排行榜导出", param = true, result = true) @RequiresPermissions("fitnessWalk.stepRanking") public void exportExcel(@Param(value = "searchName", required = false) String searchName, @Param(value = "searchKeyword", required = false) String searchKeyword, @@ -206,10 +204,9 @@ public class FitnessWalkStepRankingController { entityList.add(new ExcelExportEntity("工号", "loginname", 20)); entityList.add(new ExcelExportEntity("分工会", "unionname", 20)); entityList.add(new ExcelExportEntity("单位", "unitname", 20)); - entityList.add(new ExcelExportEntity("today".equals(mode) ? "今日步数" :"活动期间总步数", "total_steps", 20)); - entityList.add(new ExcelExportEntity("达标天数(天)","standardsDays",20)); + entityList.add(new ExcelExportEntity("today".equals(mode) ? "今日步数" : "活动期间总步数", "total_steps", 20)); try { - ViTool.excelResponse(response, ( "today".equals(mode) ? DateUtil.format(new Date(),"yyyy年MM月dd日") : "活动期间总") + "步数榜.xlsx"); + ViTool.excelResponse(response, ("today".equals(mode) ? DateUtil.format(new Date(), "yyyy年MM月dd日") : "活动期间总") + "步数榜.xlsx"); ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, stepRankingList); diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepStatisticsController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepStatisticsController.java index b186dae..5033d2c 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepStatisticsController.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepStatisticsController.java @@ -5,23 +5,15 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; -import cn.wizzer.framework.base.Result; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.BaseService; import io.v.nutz.base.utils.ViTool; import io.v.nutz.zhgh.fitnessWalk.contants.FitnessWalkMode; -import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; -import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkStep; import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; import io.v.nutz.zhgh.fitnessWalk.utils.WeAppCloudUtil; +import io.v.nutz.base.query.PageForm; import org.apache.poi.ss.usermodel.Workbook; -import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; @@ -31,15 +23,14 @@ import org.nutz.integration.jedis.RedisService; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; -import org.nutz.lang.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.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; @IocBean @Ok("json") @@ -110,7 +101,7 @@ public class FitnessWalkStepStatisticsController { cnd.andEX("u.unitId", "=", unitId); cnd.desc("al.applyDate"); cnd.desc("u.unioncode"); - cnd.groupBy("al.applyDate","al.userId"); + cnd.groupBy("al.applyDate", "al.userId"); sql.setCondition(cnd); return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); @@ -141,7 +132,6 @@ public class FitnessWalkStepStatisticsController { cnd.andEX("u.unitId", "=", unitId); cnd.desc("al.applyDate"); cnd.desc("u.unioncode"); - cnd.groupBy("al.applyDate","al.userId"); sql.setCondition(cnd); List exportList = baseService.listMap(sql); diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepWiningController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepWiningController.java index 8a61651..6e2d80f 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepWiningController.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/FitnessWalkStepWiningController.java @@ -3,26 +3,21 @@ package io.v.nutz.zhgh.fitnessWalk.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.base.Result; import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.base.expression.Exp; -import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.BaseService; -import io.v.nutz.web.commons.slog.annotation.SLog; import io.v.nutz.zhgh.fitnessWalk.contants.FitnessWalkMode; -import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkAwardUser; import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; +import io.v.nutz.web.commons.slog.annotation.SLog; import org.apache.poi.ss.usermodel.Workbook; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.dao.Cnd; -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.Lang; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; @@ -32,9 +27,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.BufferedOutputStream; import java.net.URLEncoder; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -69,7 +62,7 @@ public class FitnessWalkStepWiningController { @At @Ok("json:full") @ViReturn - @SLog(type = "校工会特色活动", tag = "健身走-计步步数中奖榜", msg = "获取中奖榜", param = true, result = true) + @SLog(type = "校工会特色活动",tag = "健身走-计步步数中奖榜",msg = "获取中奖榜",param = true,result = true) public Object getUserStepWining(String activityId) { return fitnessWalkCommonService.getWiningRankingUserList(activityId); } @@ -84,9 +77,9 @@ public class FitnessWalkStepWiningController { @At @Ok("void") - @SLog(type = "校工会特色活动", tag = "健身走-计步步数中奖榜", msg = "导出中奖榜", param = true, result = true) + @SLog(type = "校工会特色活动",tag = "健身走-计步步数中奖榜",msg = "导出中奖榜",param = true,result = true) @RequiresPermissions("fitnessWalk.stepWining") - public void exportUserStepWining(String activityId, HttpServletResponse response) { + public void exportUserStepWining(String activityId, HttpServletResponse response){ List winingRankingUserList = fitnessWalkCommonService.getWiningRankingUserList(activityId); List entityList = new ArrayList<>(); ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); @@ -95,8 +88,9 @@ public class FitnessWalkStepWiningController { entityList.add(new ExcelExportEntity("工号", "loginName", 20)); entityList.add(new ExcelExportEntity("姓名", "username", 20)); entityList.add(new ExcelExportEntity("分工会", "unionName", 20)); - entityList.add(new ExcelExportEntity("单位", "unitName", 20)); + entityList.add(new ExcelExportEntity("单位", "unitName", 40)); entityList.add(new ExcelExportEntity("奖项名称", "awardName", 20)); + entityList.add(new ExcelExportEntity("步数", "awardSteps", 20)); entityList.add(new ExcelExportEntity("中奖时间", "applyDate", 20)); try { response.setContentType("application/octet-stream"); @@ -105,8 +99,8 @@ public class FitnessWalkStepWiningController { ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream())); for (NutMap map : winingRankingUserList) { List awardList = map.getAsList("awardList", NutMap.class); - awardList.forEach(v -> v.setv("applyDate", DateUtil.format(v.getTime("applyDate"), "yyyy-MM-dd"))); - zipOutputStream.putNextEntry(new ZipEntry(map.getString("title") + ".xls")); + awardList.forEach(v->v.setv("applyDate",DateUtil.format(v.getTime("applyDate"),"yyyy-MM-dd"))); + zipOutputStream.putNextEntry(new ZipEntry(map.getString("title") + ".xlsx")); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, awardList); workbook.write(zipOutputStream); zipOutputStream.closeEntry(); @@ -126,6 +120,7 @@ public class FitnessWalkStepWiningController { * @return */ @At + @ViReturn public Result prizeOption(String activityId) { List list = fitnessWalkCommonService.prizeOption(activityId); return Result.success(list); @@ -133,16 +128,28 @@ public class FitnessWalkStepWiningController { /** * 中奖用户 - * * @param lotteryTime * @param activityId * @return */ @At - public Result prizeUsers(String lotteryTime, String activityId) { -// List list = fitnessWalkCommonService.prizeOption(activityId); - List awardUserList = fitnessWalkCommonService.dao().query(FitnessWalkAwardUser.class, - Cnd.where("activityId", "=", activityId).and("applyDate", "like", lotteryTime.substring(0, lotteryTime.length() - 3) + "%")); + public Result prizeUsers(String lotteryTime, String activityId, String searchKeyword) { + + Cnd cnd = Cnd.NEW(); + cnd.andEX("activityId", "=", activityId); + cnd.andEX("awardName", "=", lotteryTime); + if (StrUtil.isNotBlank(searchKeyword)) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("username", searchKeyword); + seg.orLike("loginName", searchKeyword); + cnd.and(seg); + } + cnd.and("isRead", "=", true); + List awardUserList = fitnessWalkCommonService.dao().query(FitnessWalkAwardUser.class, cnd); +// String lotteryDate = lotteryTime.substring(0, 10); +// List awardUserList = fitnessWalkCommonService.dao().query(FitnessWalkAwardUser.class, +// Cnd.where("activityId", "=", activityId).and("date(applyDate)", "=", lotteryDate)); return Result.success(awardUserList); } + } diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/loginController.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/loginController.java new file mode 100644 index 0000000..8756e32 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/controller/loginController.java @@ -0,0 +1,75 @@ +package io.v.nutz.zhgh.fitnessWalk.controller; + +import cn.hutool.core.util.StrUtil; +import cn.wizzer.framework.base.Result; +import io.v.nutz.sys.services.SysUserService; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +/** + * @author: Aaron + * @create: 2020-09-11 13:50 + * @description: 小程序登录 + **/ +@At("/platform/jsz/login") +@Ok("json:full") +@IocBean +public class loginController { + + @Inject + private SysUserService sysUserService; + + @At("/") + public Object index(String username, String loginname) { + try { + Sql sql = Sqls.create(""" + SELECT + u.id userid, + u.username, + u.loginname, + u.sex, + u.mobile, + u.birthday, + unit.`name` unitname, + u.unitid, + u.member, + unit.unionid, + un.unionname, + group_concat(sr.`code`) roles + FROM + sys_user u + LEFT JOIN sys_unit unit ON u.unitid = unit.id + LEFT JOIN sys_union un ON unit.unionid = un.id + LEFT JOIN sys_user_role sur ON sur.userId = u.id + LEFT JOIN sys_role sr ON sr.id = sur.roleId + $condition + """).setParam("loginname", loginname).setParam("username", username); + + Cnd cnd = Cnd.NEW(); + cnd.and("LOWER(u.loginname)", "=", loginname.trim().toLowerCase()); + cnd.and("LOWER(u.username)", "=", username.trim().toLowerCase()); + sql.setCondition(cnd); + sql.setCallback(Sqls.callback.map()); + sysUserService.dao().execute(sql); + NutMap user = (NutMap) sql.getResult(); + if (StrUtil.isBlank(user.getString("userid"))) { + return Result.error().addMsg("系统查询不到您的信息,请与工会管理员联系!"); + } +// if(user.getInt("member",0)==0){ +// return Result.error().addMsg("您没有权限参加本次健步行,请与工会管理员联系!"); +// } + /*if (user.getInt("member", 0) != 1 && !user.getString("sex", "").equals("女")) { + return Result.error().addMsg("您没有权限参加本次健步行,请与工会管理员联系!"); + }*/ + return Result.success().addData(user); + } catch (Exception e) { + return Result.error(); + } + } +} diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkActivity.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkActivity.java index 9cb601a..f01a300 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkActivity.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkActivity.java @@ -45,9 +45,11 @@ public class FitnessWalkActivity { private Boolean isQuestion; + private String questionId; + private String speedControlMode; - //打卡完成之后 gift_voucher:礼品券 cert:完赛证书 + //打卡完成之后 gift_voucher:礼品券 cert:完赛证书 null啥也不干 private String punchFinishAfter; //完赛证书 @@ -62,6 +64,8 @@ public class FitnessWalkActivity { //打卡模式奖品列表 private List punchLotteryPrizes; + private Boolean showGiftTicket; + private List pts; private List linePoints; @@ -97,6 +101,17 @@ public class FitnessWalkActivity { //是否开启距离限制 private Boolean enableDistance; + //签到几个点位算完成 + private Integer finishPointNum; + + // 是否自动抽奖 + private Boolean isAutoLottery; + + // 手动抽奖,抽奖资格天数 + private Integer lotteryQualificationDays; + // 手动抽奖,抽奖资格步数 + private Integer lotteryQualificationSteps; + @Data public static class Point implements Serializable { private String type; diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkAwardUser.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkAwardUser.java index e283d75..ad32ad7 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkAwardUser.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkAwardUser.java @@ -59,6 +59,16 @@ public class FitnessWalkAwardUser extends BaseModel { @Comment("单位id") private String unitId; + @Column + @ColDefine(type = ColType.INT) + @Comment("达标天数") + private Integer standardsDays; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("中奖步数") + private String awardSteps; + @Column @ColDefine(type = ColType.VARCHAR, width = 50) @Comment("单位名称") @@ -68,9 +78,20 @@ public class FitnessWalkAwardUser extends BaseModel { @ColDefine(type = ColType.DATETIME) @Comment("中奖时间") private Date applyDate; + private String applyDate2; @Column @ColDefine(type = ColType.BOOLEAN) @Comment("是否已读") private Boolean isRead; + + @Column + @ColDefine(type = ColType.DATE) + @Comment("开始时间") + private Date startDate; + + @Column + @ColDefine(type = ColType.DATE) + @Comment("结束时间") + private Date endDate; } diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkPunchLottery.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkPunchLottery.java index 4c0ba6c..ece343f 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkPunchLottery.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkPunchLottery.java @@ -20,20 +20,10 @@ public class FitnessWalkPunchLottery extends BaseModel { @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 userId; - @Column @ColDefine(type = ColType.VARCHAR, width = 50) - @Comment("用户工号") - private String loginName; + @Comment("活动") + private String activityId; @Column @ColDefine(type = ColType.VARCHAR, width = 50) @@ -46,7 +36,7 @@ public class FitnessWalkPunchLottery extends BaseModel { private String prizeName; @Column - @ColDefine(type = ColType.VARCHAR, width = 32) + @ColDefine(type = ColType.VARCHAR, width = 20) @Comment("奖品") private String prizeId; @@ -57,22 +47,7 @@ public class FitnessWalkPunchLottery extends BaseModel { @Column @ColDefine(type = ColType.DATETIME) - @Comment("中奖时间") + @Comment("是否中奖") private Date winDate; - @Column - @ColDefine(type = ColType.BOOLEAN) - @Comment("是否已读") - private Boolean isRead; - - @Column - @ColDefine(type = ColType.DATETIME) - @Comment("兑奖时间") - private Date exchangeDate; - - - @Column - @ColDefine(type = ColType.BOOLEAN) - @Comment("是否兑换") - private Boolean isExchange; } diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkRaffleRules.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkRaffleRules.java new file mode 100644 index 0000000..85ff2b1 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkRaffleRules.java @@ -0,0 +1,53 @@ +package io.v.nutz.zhgh.fitnessWalk.model; + +import io.v.nutz.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.io.Serializable; +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:FitenssWalkRaffleRules + * @Date 2024/12/28 10:05 + * @注释 + */ +@Data +@Table +@EqualsAndHashCode(callSuper = true) +public class FitnessWalkRaffleRules extends BaseModel { + + @Column + @Name + @ColDefine(type = ColType.VARCHAR, width = 32) + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR) + @Comment("活动id") + private String activityId; + + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("手动抽奖规则") + private List manualLotteryRules; + + @Data + public static class ManualLotteryRules implements Serializable { + // 奖项名称 + private String awardName; + // 抽奖人数 + private Integer lotteryUserNum; + // 抽奖类型 + private String raffleType; + // 排名位次 + private Integer rankingPosition; + // 是否兼得 + private Boolean isSimultaneously; + } +} diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkRaffleUser.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkRaffleUser.java new file mode 100644 index 0000000..0daf482 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/model/FitnessWalkRaffleUser.java @@ -0,0 +1,61 @@ +package io.v.nutz.zhgh.fitnessWalk.model; + +import io.v.nutz.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +/** + * @version 1.0 + * @Author zzr + * @name:FitnessWalkRaffleUser + * @Date 2024/12/28 17:10 + * @注释 + */ +@Data +@Table +@EqualsAndHashCode(callSuper = true) +public class FitnessWalkRaffleUser extends BaseModel { + + @Column + @Name + @ColDefine(type = ColType.VARCHAR, width = 32) + @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 userId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("用户工号") + private String loginName; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("用户姓名") + private String username; + + @Column + @ColDefine(type = ColType.INT) + @Comment("达标天数") + private Integer standardsDays; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("中奖步数") + private String awardSteps; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否已抽奖") + private Boolean isRaffle; +} diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/FitnessWalkCommonService.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/FitnessWalkCommonService.java index 283c005..80f0e5d 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/FitnessWalkCommonService.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/FitnessWalkCommonService.java @@ -82,4 +82,5 @@ public interface FitnessWalkCommonService extends ViService { * @return */ List prizeOption(String activityId); + } diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/FitnessWalkStepRaffleService.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/FitnessWalkStepRaffleService.java new file mode 100644 index 0000000..23bddf7 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/FitnessWalkStepRaffleService.java @@ -0,0 +1,34 @@ +package io.v.nutz.zhgh.fitnessWalk.service; + +import io.v.nutz.base.service.BaseService; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkRaffleRules; +import io.v.nutz.base.query.PageForm; +import org.nutz.dao.sql.Sql; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * @version 1.0 + * @Author zzr + * @name:FitnessWalkStepRaffleService + * @Date 2024/12/28 11:13 + * @注释 + */ +public interface FitnessWalkStepRaffleService extends BaseService { + + Sql getRaffleSql(PageForm pageForm, String activityId, String unionId, String unitId); + + /** + * 获取活动的奖项 + * @param activityId + * @return + */ + List getActivityAwardList(String activityId); + + /** + * 手动抽奖 + * @param activityId 活动id + */ + void manualLottery(String activityId); +} diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkCommonServiceImpl.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkCommonServiceImpl.java index dab6535..504abc8 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkCommonServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkCommonServiceImpl.java @@ -2,25 +2,23 @@ package io.v.nutz.zhgh.fitnessWalk.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.db.Page; import cn.wizzer.framework.page.Pagination; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import io.v.nutz.base.dao.CndPlus; -import io.v.nutz.base.query.PageForm; -import io.v.nutz.base.service.impl.ViServiceImpl; import io.v.nutz.base.utils.Vi; -import io.v.nutz.sys.models.Sys_task; -import io.v.nutz.sys.models.Sys_user; -import io.v.nutz.sys.services.SysTaskService; -import io.v.nutz.task.services.TaskPlatformService; -import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.fitnessWalk.contants.Cascader; import io.v.nutz.zhgh.fitnessWalk.contants.FitnessWalkMode; import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkAwardUser; import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; import io.v.nutz.zhgh.fitnessWalk.utils.WeAppCloudUtil; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.service.impl.ViServiceImpl; +import io.v.nutz.sys.models.Sys_task; +import io.v.nutz.sys.services.SysTaskService; +import io.v.nutz.task.services.TaskPlatformService; +import io.v.nutz.web.commons.utils.ShiroUtil; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; @@ -37,7 +35,6 @@ import org.nutz.lang.util.NutMap; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; @IocBean(args = {"refer:dao"}) @@ -72,6 +69,7 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne String redisKey = "FitnessWalk:" + activityId; Boolean exists = redisService.exists("FitnessWalk:" + activityId); FitnessWalkActivity activity = null; + exists = false; if (exists) { String string = redisService.get(redisKey); activity = JSONObject.parseObject(string, FitnessWalkActivity.class); @@ -90,7 +88,7 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne activity.setTempCover(tempUrl); } - if (Strings.isNotBlank(activity.getCompletionCertificateCover())) { + if(Strings.isNotBlank(activity.getCompletionCertificateCover())){ String tempUrl = weAppCloudUtil.httpFile(activity.getCompletionCertificateCover()); activity.setTempCompletionCertificateCover(tempUrl); } @@ -114,20 +112,21 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne activity.setTempCover(tempCover); } - if (Strings.isNotBlank(activity.getCompletionCertificateCover())) { + if(Strings.isNotBlank(activity.getCompletionCertificateCover())){ String tempUrl = weAppCloudUtil.httpFile(activity.getCompletionCertificateCover()); activity.setTempCompletionCertificateCover(tempUrl); } redisService.setex(redisKey, CACHE_TIME, JSONObject.toJSONString(activity)); } catch (Exception e) { + e.printStackTrace(); throw new RuntimeException("获取数据异常!"); } } -// if (ShiroUtil.hasRole("H04") && !ShiroUtil.hasAnyRoles("sysadmin,A06")) { -// return Vi.getUnionId().equals(activity.getUnionId()) ? activity : null; -// } + if (ShiroUtil.hasRole("H04") && !ShiroUtil.hasAnyRoles("sysadmin,A06")) { + return Vi.getUnionId().equals(activity.getUnionId()) ? activity : null; + } return activity; } @@ -146,6 +145,7 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne .append("activityModel:true,") .append("endTime:true,") .append("startTime:true,") + .append("unionId:true") .append("}).orderBy('startTime', 'desc').get()"); JSONObject jsonObject = weAppCloudUtil.request(WeAppCloudUtil.CRUD.QUERY, sql.toString()); fitnessWalkActivities = jsonObject.getJSONArray("data").stream().map(v -> JSON.parseObject((String) v, FitnessWalkActivity.class)).collect(Collectors.toList()); @@ -203,13 +203,16 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne @Override public void addLotteryTask(FitnessWalkActivity fitnessWalkActivity) { + //删除和该活动关联的定时任务 List sys_tasks = sysTaskService.query(Cnd.where("note", "=", fitnessWalkActivity.get_id())); - if (sys_tasks != null) { + if (CollectionUtil.isNotEmpty(sys_tasks)) { sys_tasks.forEach(v -> { taskPlatformService.delete(v.getId(), v.getId()); sysTaskService.delete(v.getId()); }); } + + if ("everyday".equals(fitnessWalkActivity.getLotteryMode())) { FitnessWalkActivity.DayLotteryRule dayLotteryRule = fitnessWalkActivity.getDayLotteryRule(); if (Lang.isNotEmpty(dayLotteryRule)) { @@ -284,7 +287,7 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne //查询结束时间 map.put("endDate", rule.getEndDate()); //抽奖天数 - map.put("lotteryQualificationDay", rule.getLotteryQualificationDay().toString()); + map.put("lotteryQualificationDay", rule.getLotteryQualificationDay()); //获奖名称 map.put("awardName", rule.getAwardName()); //抽奖模式 @@ -376,19 +379,31 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne @Override public List prizeOption(String activityId) { - FitnessWalkActivity activity = getActivity(activityId); - if ("custom".equals(activity.getLotteryMode())) { - List customLotteryRules = activity.getCustomLotteryRules(); - return customLotteryRules.stream().map(rule -> { - NutMap map = new NutMap(); - map.put("text", DateUtil.format(DateUtil.date(rule.getStartDate()), "MM-dd") + "至" + DateUtil.format(DateUtil.date(rule.getEndDate()), "MM-dd") + rule.getAwardName() + "中奖榜"); - map.put("value", rule.getLotteryTime()); - return map; - }).collect(Collectors.toList()); - } - return null; + List list = dao().query(FitnessWalkAwardUser.class, + Cnd.where("activityId", "=", activityId).groupBy("awardName").asc("awardName")); + + List collect = list.stream().map(v -> { + NutMap map = new NutMap(); + map.put("text", v.getAwardName()); + map.put("value", v.getAwardName()); + return map; + }).collect(Collectors.toList()); + + +// FitnessWalkActivity activity = getActivity(activityId); +// if ("custom".equals(activity.getLotteryMode())) { +// List customLotteryRules = activity.getCustomLotteryRules(); +// return customLotteryRules.stream().map(rule -> { +// NutMap map = new NutMap(); +// map.put("text", DateUtil.format(DateUtil.date(rule.getStartDate()), "MM-dd") + "至" + DateUtil.format(DateUtil.date(rule.getEndDate()), "MM-dd") + rule.getAwardName() + "中奖榜"); +// map.put("value", rule.getLotteryTime()); +// return map; +// }).collect(Collectors.toList()); +// } + return collect; } + private Sql rankingListSql(String searchName, String searchKeyword, String activityId, String unionId, String unitId, String mode) { FitnessWalkActivity activity = getActivity(activityId); CndPlus cnd = CndPlus.create(); @@ -446,7 +461,6 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne // cnd.and("DATE( s.applyDate )", "<=", DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd")); } - if (Strings.isNotBlank(unitId)) { cnd.and("u.unitId", "=", unitId); } @@ -457,10 +471,10 @@ public class FitnessWalkCommonServiceImpl extends ViServiceImpl implements Fitne if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) { cnd.and(searchName, "LIKE", "%" + searchKeyword + "%"); } - cnd.and("u.id","in",Sqls.create("select userId from activity_user_scope where groupId = @groupId").setParam("groupId",activity.getGroupId())); - cnd.and("over3k.standardsDays","is not",null); +// cnd.and("u.id","in",Sqls.create("select userId from activity_user_scope where groupId = @groupId").setParam("groupId",activity.getGroupId())); cnd.groupBy("u.id","u.username","u.loginname","u.unionname","u.unitname","over3k.standardsDays"); cnd.desc("total_steps"); + cnd.having(Cnd.NEW().and("COALESCE(SUM(sub.step), 0)",">",0)); sql.setCondition(cnd); return sql; } diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkPunchStatisticsServiceImpl.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkPunchStatisticsServiceImpl.java index 38d3292..f3cda89 100644 --- a/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkPunchStatisticsServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkPunchStatisticsServiceImpl.java @@ -3,10 +3,10 @@ package io.v.nutz.zhgh.fitnessWalk.service.impl; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import io.v.nutz.base.service.impl.ViServiceImpl; -import io.v.nutz.sys.models.Sys_union; import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkPunchStatisticsService; import io.v.nutz.zhgh.fitnessWalk.utils.WeAppCloudUtil; +import io.v.nutz.base.service.impl.ViServiceImpl; +import io.v.nutz.sys.models.Sys_union; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.ioc.loader.annotation.Inject; diff --git a/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkStepRaffleServiceImpl.java b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkStepRaffleServiceImpl.java new file mode 100644 index 0000000..a6849db --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/fitnessWalk/service/impl/FitnessWalkStepRaffleServiceImpl.java @@ -0,0 +1,346 @@ +package io.v.nutz.zhgh.fitnessWalk.service.impl; + +import cn.hutool.core.date.DateUtil; +import io.v.nutz.base.service.impl.BaseServiceImpl; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkActivity; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkAwardUser; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkRaffleRules; +import io.v.nutz.zhgh.fitnessWalk.model.FitnessWalkRaffleUser; +import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkCommonService; +import io.v.nutz.zhgh.fitnessWalk.service.FitnessWalkStepRaffleService; +import io.v.nutz.base.query.PageForm; +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.dao.util.cri.SqlExpressionGroup; +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.Strings; +import org.nutz.lang.random.R; +import org.nutz.lang.util.NutMap; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @version 1.0 + * @Author zzr + * @name:FitnessWalkStepRaffleServiceImpl + * @Date 2024/12/28 11:17 + * @注释 + */ +@IocBean(args = {"refer:dao"}) +public class FitnessWalkStepRaffleServiceImpl extends BaseServiceImpl implements FitnessWalkStepRaffleService { + public FitnessWalkStepRaffleServiceImpl(Dao dao) { + super(dao); + } + + @Inject + private FitnessWalkCommonService fitnessWalkCommonService; + + @Override + public Sql getRaffleSql(PageForm pageForm, String activityId, String unionId, String unitId) { + FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId); + + Integer lotteryQualificationDays = activity.getLotteryQualificationDays(); + Integer lotteryQualificationSteps = activity.getLotteryQualificationSteps(); + Date startDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"), "yyyy-MM-dd"); + Date endDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"), "yyyy-MM-dd"); + + Cnd cnd = Cnd.NEW(); + Sql sql = Sqls.create(""" + SELECT + u.id, + COALESCE(SUM(sub.step), 0) AS total_steps, + u.loginname, + u.username, + u.unionid, + u.unionname, + u.unitid, + u.unitname, + over3k.standardsDays + FROM + `user` u + LEFT JOIN ( + SELECT + userId, + applyDate, + step + FROM + `fitness_walk_step` + WHERE + activityId = @activityId + AND DATE(applyDate) >= @startDate + AND DATE(applyDate) <= @endDate + $lotteryQualificationDaySql + GROUP BY + userId, + applyDate + ) AS sub ON u.id = sub.userId + LEFT JOIN ( + SELECT + userId, + COUNT(DISTINCT DATE(applyDate)) AS standardsDays + FROM + `fitness_walk_step` + WHERE + activityId = @activityId + AND DATE(applyDate) >= @startDate + AND DATE(applyDate) <= @endDate + $lotteryQualificationDaySql + GROUP BY + userId + ) AS over3k ON u.id = over3k.userId + $condition + """); + if (lotteryQualificationDays != null) { + sql.setVar("lotteryQualificationDaySql", new Static(" AND step >= '%s' ".formatted(lotteryQualificationSteps))); + cnd.having(cnd.and(new Static(" over3k.standardsDays >= '%s' ".formatted(lotteryQualificationDays)))); + +// sql.setVar("stepHavingSql", new Static(" over3k.standardsDays >= '%s' ".formatted(lotteryQualificationDays))); + } else { + cnd.having(cnd.and(new Static(" COALESCE(SUM(sub.step), 0) >= '%s' ".formatted(lotteryQualificationSteps)))); +// sql.setVar("stepHavingSql", new Static(" COALESCE(SUM(sub.step), 0) >= '%s' ".formatted(lotteryQualificationSteps))); + } + sql.setParam("activityId", activityId); + sql.setParam("step", lotteryQualificationSteps); + sql.setParam("startDate", startDate); + sql.setParam("endDate", endDate); + + if (Strings.isNotBlank(unitId)) { + cnd.and("u.unitId", "=", unitId); + } + if (Strings.isNotBlank(unionId)) { + cnd.and("u.unionId", "=", unionId); + } + + if (pageForm != null && Strings.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("u.loginname", pageForm.getSearchKeyword()); + seg.orLike("u.username", pageForm.getSearchKeyword()); + cnd.and(seg); + } +// cnd.and("u.id","in",Sqls.create("select userId from activity_user_scope where groupId = @groupId").setParam("groupId",activity.getGroupId())); + cnd.groupBy("u.id", "u.username", "u.loginname", "u.unionname", "u.unitname"); + cnd.desc("total_steps"); + sql.setCondition(cnd); + return sql; + } + + + /** + * 获取活动的奖项 + * @param activityId + * @return { index: 0, name: '奖项名称', type: 0 } + */ + @Override + public List getActivityAwardList(String activityId) { + FitnessWalkRaffleRules rules = fetch(Cnd.where("activityId", "=", activityId)); + List manualLotteryRules = rules.getManualLotteryRules(); + // 存放奖品列表 + List ruleList = new ArrayList<>(); + // 奖品数量 + int size = manualLotteryRules.size(); + if (size == 1) { + String prize = manualLotteryRules.get(0).getAwardName(); + for (int i = 0; i < 8; i++) { + ruleList.add(prize); + if (ruleList.size() < 8) { + ruleList.add("没有中奖"); + } + } + } else if (size == 2) { + for (int i = 0; i < 8; i++) { + String prize = manualLotteryRules.get(i % size).getAwardName(); + ruleList.add(prize); + if (ruleList.size() < 8) { + ruleList.add("没有中奖"); + } + } + } else if (size == 3) { + for (int i = 0; i < 8; ) { + for (int j = 0; j < size && i < 8; j++) { + String prize = manualLotteryRules.get(j).getAwardName(); + ruleList.add(prize); + if (ruleList.size() < 8) { + ruleList.add("没有中奖"); + i += 2; + } + } + } + } else if (size == 4) { + for (int i = 0; i < 8; ) { + for (int j = 0; j < size && i < 8; j++) { + String prize = manualLotteryRules.get(j).getAwardName(); + ruleList.add(prize); + if (ruleList.size() < 8) { + ruleList.add("没有中奖"); + i += 2; + } + } + } + } else if (size == 5) { + ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList()); + ruleList.add(2, "没有中奖"); + ruleList.add(4, "没有中奖"); + ruleList.add(7, "没有中奖"); + } else if (size == 6) { + ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList()); + ruleList.add(2, "没有中奖"); + ruleList.add(6, "没有中奖"); + } else { + ruleList = manualLotteryRules.stream().map(FitnessWalkRaffleRules.ManualLotteryRules::getAwardName).collect(Collectors.toList()); + ruleList.add("没有中奖"); + } + + List finalRuleList = ruleList; + List awardList = IntStream.range(0, ruleList.size()) + .mapToObj(index -> { + String awardName = finalRuleList.get(index); + NutMap map = NutMap.NEW(); + map.put("index", index); + map.put("name", awardName); + map.put("type", "没有中奖".equals(awardName) ? 1 : 0); + return map; + }).collect(Collectors.toList()); + return awardList; + } + + /** + * 手动抽奖 + * + * @param activityId 活动id + */ + @Override + @Aop(TransAop.READ_COMMITTED) + public void manualLottery(String activityId) { + // 删除此活动下的获奖记录 + dao().clear(FitnessWalkAwardUser.class, Cnd.where("activityId", "=", activityId)); + dao().clear(FitnessWalkRaffleUser.class, Cnd.where("activityId", "=", activityId)); + + FitnessWalkActivity activity = fitnessWalkCommonService.getActivity(activityId); + Date startDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getStartTime()), "yyyy-MM-dd"), "yyyy-MM-dd"); + Date endDate = DateUtil.parse(DateUtil.format(DateUtil.date(activity.getEndTime()), "yyyy-MM-dd"), "yyyy-MM-dd"); + + // 获取达标的所有人,按照步数倒序 + Sql sql = getRaffleSql(null, activityId, null, null); + List list = listMap(sql); + + List raffleUserList = list.stream().map(v -> { + FitnessWalkRaffleUser raffleUser = new FitnessWalkRaffleUser(); + raffleUser.setId(R.UU32()); + raffleUser.setActivityId(activityId); + raffleUser.setUserId(v.getString("id")); + raffleUser.setLoginName(v.getString("loginname")); + raffleUser.setUsername(v.getString("username")); + raffleUser.setAwardSteps(v.getString("total_steps")); + raffleUser.setStandardsDays(v.getInt("standardsDays")); + raffleUser.setIsRaffle(false); + return raffleUser; + }).collect(Collectors.toList()); + dao().fastInsert(raffleUserList); + + Set winningRankLoginNames = new HashSet<>(); + + // 获奖人员 + List winningUsers = new ArrayList<>(); + + // 获取抽奖规则 + FitnessWalkRaffleRules rules = fetch(Cnd.where("activityId", "=", activityId)); + List manualLotteryRules = rules.getManualLotteryRules(); + + // 找出是按照排名来颁奖的奖项 + List ranks = manualLotteryRules.stream().filter(v -> "排名".equals(v.getRaffleType())) + .sorted(Comparator.comparing(FitnessWalkRaffleRules.ManualLotteryRules::getRankingPosition)).collect(Collectors.toList()); + + for (FitnessWalkRaffleRules.ManualLotteryRules rank : ranks) { + String awardName = rank.getAwardName(); + Integer lotteryUserNum = rank.getLotteryUserNum(); + + // 排除之前获奖的人,再倒序排列 + List canLotteryUsers = list.stream() + .filter(v -> !winningRankLoginNames.contains(v.getString("loginname"))) + .sorted(Comparator.comparingInt((NutMap v) -> v.getInt("total_steps")).reversed()) + .collect(Collectors.toList()); + + // 截取当前奖项的中奖人员 + List rankNutMaps = canLotteryUsers.subList(0, lotteryUserNum); + // 收集成中奖人员存储 + List collect = rankNutMaps.stream().map(v -> { + FitnessWalkAwardUser awardUser = new FitnessWalkAwardUser(); + awardUser.setId(R.UU32()); + awardUser.setActivityId(activityId); + awardUser.setUserId(v.getString("id")); + awardUser.setLoginName(v.getString("loginname")); + awardUser.setUsername(v.getString("username")); + awardUser.setAwardName(awardName); + awardUser.setStartDate(startDate); + awardUser.setEndDate(endDate); + awardUser.setUnionId(v.getString("unionid")); + awardUser.setUnionName(v.getString("unionname")); + awardUser.setUnitId(v.getString("unitid")); + awardUser.setUnitName(v.getString("unitname")); + awardUser.setStandardsDays(v.getInt("standardsDays")); + awardUser.setAwardSteps(v.getString("total_steps")); + return awardUser; + }).collect(Collectors.toList()); + + winningRankLoginNames.addAll(collect.stream().map(FitnessWalkAwardUser::getLoginName).collect(Collectors.toList())); + + winningUsers.addAll(collect); + } + + + List reachList = manualLotteryRules.stream().filter(v -> "达标".equals(v.getRaffleType())) + .sorted(Comparator.comparing(FitnessWalkRaffleRules.ManualLotteryRules::getRankingPosition)).collect(Collectors.toList()); + + for (FitnessWalkRaffleRules.ManualLotteryRules reach : reachList) { + List nutMaps; + if (reach.getIsSimultaneously() != null && reach.getIsSimultaneously()) { + // 可以兼得 + nutMaps = list; + } else { + // 不可兼得 + nutMaps = list.stream().filter(v -> !winningRankLoginNames.contains(v.getString("loginname"))).collect(Collectors.toList()); + } + + Integer lotteryUserNum = reach.getLotteryUserNum(); + String awardName = reach.getAwardName(); + + List reachNutMaps = nutMaps.stream().collect(Collectors.collectingAndThen(Collectors.toList(), collected -> { + Collections.shuffle(collected); + return collected.subList(0, lotteryUserNum - 1); + })); + + List collect = reachNutMaps.stream().map(v -> { + FitnessWalkAwardUser awardUser = new FitnessWalkAwardUser(); + awardUser.setId(R.UU32()); + awardUser.setActivityId(activityId); + awardUser.setUserId(v.getString("id")); + awardUser.setLoginName(v.getString("loginname")); + awardUser.setUsername(v.getString("username")); + awardUser.setAwardName(awardName); + awardUser.setStartDate(startDate); + awardUser.setEndDate(endDate); + awardUser.setUnionId(v.getString("unionid")); + awardUser.setUnionName(v.getString("unionname")); + awardUser.setUnitId(v.getString("unitid")); + awardUser.setUnitName(v.getString("unitname")); + awardUser.setStandardsDays(v.getInt("standardsDays")); + awardUser.setAwardSteps(v.getString("total_steps")); + return awardUser; + }).collect(Collectors.toList()); + + winningRankLoginNames.addAll(collect.stream().map(FitnessWalkAwardUser::getLoginName).collect(Collectors.toList())); + + winningUsers.addAll(collect); + } + + dao().fastInsert(winningUsers); + } +} diff --git a/src/main/resources/views/platform/fitnessWalk/activityManage.html b/src/main/resources/views/platform/fitnessWalk/activityManage.html index 4310817..3c8599f 100644 --- a/src/main/resources/views/platform/fitnessWalk/activityManage.html +++ b/src/main/resources/views/platform/fitnessWalk/activityManage.html @@ -234,7 +234,7 @@ layout("/layouts/platform.html"){ - @@ -308,6 +308,7 @@ layout("/layouts/platform.html"){ 礼品券 完赛证书 + @@ -372,52 +374,6 @@ layout("/layouts/platform.html"){ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -