From 5ad48c3713017360a7cf2c07ce9a342d2e5f6988 Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Wed, 30 Apr 2025 13:41:57 +0800 Subject: [PATCH] commit --- .../controller/ActScoreEnterController.java | 55 +++++++++++++- .../module/activity/vo/ActItemScoreVo.java | 20 +++++ .../platform/activity/scoreEnter/index.html | 76 ++++++++++++++----- 3 files changed, 128 insertions(+), 23 deletions(-) create mode 100644 backend/src/main/java/com/budwk/app/module/activity/vo/ActItemScoreVo.java diff --git a/backend/src/main/java/com/budwk/app/module/activity/controller/ActScoreEnterController.java b/backend/src/main/java/com/budwk/app/module/activity/controller/ActScoreEnterController.java index e361ccc..1e834fa 100644 --- a/backend/src/main/java/com/budwk/app/module/activity/controller/ActScoreEnterController.java +++ b/backend/src/main/java/com/budwk/app/module/activity/controller/ActScoreEnterController.java @@ -1,25 +1,30 @@ package com.budwk.app.module.activity.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; import com.budwk.app.base.result.Result; -import com.budwk.app.module.activity.models.ActGroup; -import com.budwk.app.module.activity.models.Activity; -import com.budwk.app.module.activity.models.ActivityItem; +import com.budwk.app.module.activity.models.*; import com.budwk.app.module.activity.service.ActivityManageService; +import com.budwk.app.module.activity.vo.ActItemScoreVo; import com.budwk.app.module.activity.vo.page.ActScoreEnterPageForm; import com.budwk.app.module.activity.vo.page.ActSignInUserPageForm; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; /** @@ -96,9 +101,53 @@ public class ActScoreEnterController { @SaCheckPermission("activity.scoreEnter") @ApiOperation(value = "获取项目列表", nickname = "/list-item", httpMethod = "GET") public Result listItem(Long activityId) { + Sql sql = Sqls.create(""" + + """); List items = dao.query(ActivityItem.class, Cnd.where(ActivityItem::getActivityId, "=", activityId).asc(ActivityItem::getSort)); return Result.success(items); } + @At("/list-item-score/?") + @SaCheckPermission("activity.scoreEnter") + @ApiOperation(value = "获取项目列表", nickname = "/list-item-score", httpMethod = "GET") + public Result listItemScore(Long activityId) { + List scoreList = dao.query(ActItemGroupScore.class, Cnd.where(ActItemGroupScore::getActivityId, "=", activityId)); + return Result.success(scoreList); + } + + @At("/save-score") + @SaCheckPermission("activity.scoreEnter") + @Aop(TransAop.READ_COMMITTED) + @ApiOperation(value = "保存成绩", nickname = "/list-activity", httpMethod = "POST") + public Result saveScore(ActItemScoreVo actItemScoreVo) { + + List itemList = dao.query(ActivityItem.class, Cnd.where(ActivityItem::getActivityId, "=", actItemScoreVo.getActivityId())); + dao.clear(ActItemGroupScore.class, Cnd.where(ActItemGroupScore::getActivityId, "=", actItemScoreVo.getActivityId())); + List activityItemScores = new ArrayList<>(); + actItemScoreVo.getData().forEach(item -> { + itemList.forEach(i -> { + ActItemGroupScore score = new ActItemGroupScore(); + NutMap data = item.getAs(i.getId().toString(), NutMap.class); + if (Lang.isNotEmpty(data)) { + String totalScore = StrUtil.isNotEmpty(data.getString("totalScore")) ? data.getString("totalScore") : "0"; + score.setScore(new BigDecimal(totalScore)); + int totalRank = data.getInt("totalRank"); + score.setRanking(totalRank); + } else { + score.setScore(new BigDecimal(0)); + score.setRanking(0); + } + score.setItemId(i.getId()); + score.setActivityId(actItemScoreVo.getActivityId()); + score.setGroupId(item.getLong("groupId")); + activityItemScores.add(score); + }); + }); + + dao.insert(activityItemScores); + return Result.success(); + } + } diff --git a/backend/src/main/java/com/budwk/app/module/activity/vo/ActItemScoreVo.java b/backend/src/main/java/com/budwk/app/module/activity/vo/ActItemScoreVo.java new file mode 100644 index 0000000..136eff6 --- /dev/null +++ b/backend/src/main/java/com/budwk/app/module/activity/vo/ActItemScoreVo.java @@ -0,0 +1,20 @@ +package com.budwk.app.module.activity.vo; + +import lombok.Data; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +/** + * @author zhf + * @date 2025/4/30 10:57 + * @description + */ +@Data +public class ActItemScoreVo { + + // 活动ID + private Long activityId; + + private List data; +} diff --git a/backend/src/main/resources/views/platform/activity/scoreEnter/index.html b/backend/src/main/resources/views/platform/activity/scoreEnter/index.html index 92dff8a..2400ac4 100644 --- a/backend/src/main/resources/views/platform/activity/scoreEnter/index.html +++ b/backend/src/main/resources/views/platform/activity/scoreEnter/index.html @@ -8,13 +8,13 @@ layout("/layouts/platform_1.html"){
年度
@@ -23,10 +23,10 @@ layout("/layouts/platform_1.html"){
+ v-for="item in activityOptions" + :key="item.id" + :label="item.title" + :value="item.id">
@@ -59,7 +59,7 @@ layout("/layouts/platform_1.html"){ - + 保存 @@ -76,7 +76,8 @@ layout("/layouts/platform_1.html"){ }, activityOptions: [], groupOptions: [], - itemOptions: [] + itemOptions: [], + itemScoreList: [] } }, computed: { @@ -134,7 +135,22 @@ layout("/layouts/platform_1.html"){ async activityChange() { await this.listGroup() await this.listItem() + await this.listItemScore() this.buildTableData() + + }, + + async listItemScore() { + const { + code, + data, + msg + } = await $.get("/platform/activity/scoreEnter/list-item-score/" + this.pageForm.activityId) + if (code === 0) { + this.itemScoreList = data + } else { + this.$message.error(msg) + } }, // 构建表格数据 buildTableData() { @@ -144,21 +160,41 @@ layout("/layouts/platform_1.html"){ groupName: group.groupName } this.itemOptions.forEach((item) => { - row[item.id] = { - totalScore: item.totalScore, - totalRank: item.totalRank + let data = this.itemScoreList.find(s => s.groupId === group.id && s.itemId === item.id); + if (data) { + row[item.id] = { + totalScore: data.score ? data.score : null, + totalRank: data.ranking ? data.ranking : null + } + } else { + row[item.id] = { + totalScore: null, + totalRank: null + } } + }) return row }) - console.log(this.tableData) }, // 单元格点击 - cellClick(row, column){ - console.log(row, column) + cellClick(row, column) { }, // 保存成绩 - saveScore(){ + saveScore() { + const formData = { + activityId: this.pageForm.activityId, + data: JSON.stringify(this.tableData) + } + $.post("/platform/activity/scoreEnter/save-score", formData).then(async res => { + if (res.code === 0) { + await this.listItemScore() + this.buildTableData() + this.$message.success("保存成功") + } else { + this.$message.error(res.msg) + } + }) console.log(this.tableData) } },