This commit is contained in:
=
2026-08-05 08:35:17 +08:00
parent ff3e8075b5
commit de5f8dc9ba
55 changed files with 1667 additions and 449 deletions
@@ -17,7 +17,7 @@ import com.budwk.app.zhgh.activity.sports.service.ActivitySportsApplyUserService
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.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.random.R;
@@ -26,8 +26,6 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.trans.Trans;
import java.util.Arrays;
/**
* @author zhf
* @date 2021/5/19 14:58
@@ -57,7 +55,8 @@ public class ActivitySportsResultsController {
PageForm page,
String activityId,
String eventId,
String[] isMenWomen) {
Integer isMenWomen,
Integer projectType) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT
@@ -79,22 +78,10 @@ public class ActivitySportsResultsController {
cnd.and("ase.activityId", "=", activityId);
cnd.andEX("abs.`name`", "=", groupName);
cnd.andEX("ae.`id`", "=", eventId);
SqlExpressionGroup sqlExpressionGroup = new SqlExpressionGroup();
if (Arrays.stream(isMenWomen).anyMatch(a -> a.equals("2"))) {
sqlExpressionGroup.and("ae.isMenWomen", "=", 1);
}
if (Arrays.stream(isMenWomen).anyMatch(a -> a.equals("3"))) {
sqlExpressionGroup.or("ae.isMenWomen", "=", 2);
}
if (Arrays.stream(isMenWomen).anyMatch(a -> a.equals("4"))) {
sqlExpressionGroup.and("ae.projectType", "=", 1);
}
if (Arrays.stream(isMenWomen).anyMatch(a -> a.equals("5"))) {
sqlExpressionGroup.or("ae.projectType", "=", 2);
}
if (sqlExpressionGroup.getExps().size() > 0) {
cnd.and(sqlExpressionGroup);
}
// 页面男子/女子选项值与活动项目性别字段保持一致:1 为男子,2 为女子。
cnd.andEX("ae.isMenWomen", "=", isMenWomen);
// 页面项目类型选项值与活动项目类型字段保持一致:1 为单项,2 为团体。
cnd.andEX("ae.projectType", "=", projectType);
cnd.desc("allName");
sql.setCondition(cnd);
return Result.success(baseService.listPageMap(page.getPageNumber(), page.getPageSize(), sql));
@@ -192,8 +179,9 @@ public class ActivitySportsResultsController {
cnd.and("asa.activityId", "=", activityId);
cnd.and("asa.eventId", "=", eventId);
cnd.and("asa.awardsMode", "=", 1);
if (isMenWomen != null && isMenWomen == 1) cnd.and("u.sex", "=", "男性");
if (isMenWomen != null && isMenWomen == 2) cnd.and("u.sex", "=", "女性");
// 兼容历史人员“男性/女性”和临时添加人员“男/女”的性别值。
if (isMenWomen != null && isMenWomen == 1) cnd.and(new Static("u.sex IN ('男', '男性')"));
if (isMenWomen != null && isMenWomen == 2) cnd.and(new Static("u.sex IN ('女', '女性')"));
sql.setCondition(cnd);
return Result.success(activitySchoolApplyViService.listMap(sql));
}
@@ -268,8 +256,9 @@ public class ActivitySportsResultsController {
""");
cnd.and("ar.activityId", "=", activityId);
cnd.and("ar.eventId", "=", eventId);
if (isMenWomen != null && isMenWomen == 1) cnd.and("u.sex", "=", "男性");
if (isMenWomen != null && isMenWomen == 2) cnd.and("u.sex", "=", "女性");
// 兼容历史人员“男性/女性”和临时添加人员“男/女”的性别值。
if (isMenWomen != null && isMenWomen == 1) cnd.and(new Static("u.sex IN ('男', '男性')"));
if (isMenWomen != null && isMenWomen == 2) cnd.and(new Static("u.sex IN ('女', '女性')"));
cnd.asc("ar.ranking");
sql.setCondition(cnd);
return Result.success(baseService.listMap(sql));
@@ -22,6 +22,7 @@ import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_collect
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_collection_upload;
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_subjectType;
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_worksType;
import com.budwk.app.zhgh.activity.workscollection.service.ActivityWorksCollectionService;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
@@ -50,6 +51,8 @@ public class ActivityWorksCollectionManageController {
@Inject
private Dao dao;
@Inject
private ActivityWorksCollectionService activityWorksCollectionService;
@Inject
private BaseService baseService;
@Inject
private SysMsgService sysMsgService;
@@ -202,6 +205,10 @@ public class ActivityWorksCollectionManageController {
@SaCheckPermission(value = {"activity.workscollection.manage", "activity.workscollection.new"}, mode = SaMode.OR)
@Aop(TransAop.READ_COMMITTED)
public Result update(@Param("data") @Valid Activity_works_collection worksCollection) {
String validateMessage = activityWorksCollectionService.validateReferencedTypesBeforeUpdate(worksCollection);
if (StrUtil.isNotBlank(validateMessage)) {
return Result.error(validateMessage);
}
dao.update(worksCollection);
dao.updateLinks(worksCollection, "subjectTypes");
dao.insertLinks(worksCollection, "subjectTypes");
@@ -0,0 +1,17 @@
package com.budwk.app.zhgh.activity.workscollection.service;
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_collection;
/**
* 作品征集活动配置服务。
*/
public interface ActivityWorksCollectionService {
/**
* 校验编辑活动时删除的主题类型、作品类型是否已被投稿引用。
*
* @param worksCollection 前端提交的活动及其主题、作品类型配置
* @return 校验通过返回 {@code null};校验不通过返回提示信息
*/
String validateReferencedTypesBeforeUpdate(Activity_works_collection worksCollection);
}
@@ -0,0 +1,125 @@
package com.budwk.app.zhgh.activity.workscollection.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_collection;
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_collection_upload;
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_subjectType;
import com.budwk.app.zhgh.activity.workscollection.models.Activity_works_worksType;
import com.budwk.app.zhgh.activity.workscollection.service.ActivityWorksCollectionService;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 作品征集活动配置服务实现。
*/
@IocBean(args = {"refer:dao"})
public class ActivityWorksCollectionServiceImpl implements ActivityWorksCollectionService {
private final Dao dao;
public ActivityWorksCollectionServiceImpl(Dao dao) {
this.dao = dao;
}
@Override
public String validateReferencedTypesBeforeUpdate(Activity_works_collection worksCollection) {
if (worksCollection == null || StrUtil.isBlank(worksCollection.getId())) {
return null;
}
List<Activity_works_subjectType> persistedSubjectTypes = dao.query(Activity_works_subjectType.class,
Cnd.where(Activity_works_subjectType::getActivityId, "=", worksCollection.getId()));
List<Activity_works_subjectType> submittedSubjectTypes = CollUtil.defaultIfEmpty(worksCollection.getSubjectTypes(), Collections.emptyList());
Set<String> submittedSubjectIds = submittedSubjectTypes.stream()
.map(Activity_works_subjectType::getId)
.filter(StrUtil::isNotBlank)
.collect(Collectors.toSet());
List<Activity_works_subjectType> deletedSubjectTypes = persistedSubjectTypes.stream()
.filter(subjectType -> !submittedSubjectIds.contains(subjectType.getId()))
.toList();
String subjectError = getReferencedSubjectTypeError(worksCollection.getId(), deletedSubjectTypes);
if (subjectError != null) {
return subjectError;
}
for (Activity_works_subjectType submittedSubjectType : submittedSubjectTypes) {
if (submittedSubjectType == null || StrUtil.isBlank(submittedSubjectType.getId())) {
continue;
}
List<Activity_works_worksType> persistedWorksTypes = dao.query(Activity_works_worksType.class,
Cnd.where(Activity_works_worksType::getSubjectId, "=", submittedSubjectType.getId()));
List<Activity_works_worksType> submittedWorksTypes = CollUtil.defaultIfEmpty(submittedSubjectType.getWorksTypes(), Collections.emptyList());
Set<String> submittedWorksIds = submittedWorksTypes.stream()
.map(Activity_works_worksType::getId)
.filter(StrUtil::isNotBlank)
.collect(Collectors.toSet());
List<Activity_works_worksType> deletedWorksTypes = persistedWorksTypes.stream()
.filter(worksType -> !submittedWorksIds.contains(worksType.getId()))
.toList();
String worksError = getReferencedWorksTypeError(worksCollection.getId(), deletedWorksTypes);
if (worksError != null) {
return worksError;
}
}
return null;
}
/**
* 校验待删除主题类型是否已有投稿,防止投稿的主题类型关联被清空。
*/
private String getReferencedSubjectTypeError(String activityId, List<Activity_works_subjectType> deletedSubjectTypes) {
if (CollUtil.isEmpty(deletedSubjectTypes)) {
return null;
}
List<String> deletedSubjectIds = deletedSubjectTypes.stream()
.map(Activity_works_subjectType::getId)
.collect(Collectors.toList());
List<Activity_works_collection_upload> uploads = dao.query(Activity_works_collection_upload.class,
Cnd.where(Activity_works_collection_upload::getActivityId, "=", activityId)
.and(Activity_works_collection_upload::getSubjectId, "in", deletedSubjectIds));
if (CollUtil.isEmpty(uploads)) {
return null;
}
Set<String> referencedSubjectIds = uploads.stream()
.map(Activity_works_collection_upload::getSubjectId)
.collect(Collectors.toSet());
String typeNames = deletedSubjectTypes.stream()
.filter(subjectType -> referencedSubjectIds.contains(subjectType.getId()))
.map(Activity_works_subjectType::getTypeName)
.collect(Collectors.joining(""));
return "主题类型“" + typeNames + "”下已有投稿,不能删除";
}
/**
* 校验待删除作品类型是否已有投稿,防止投稿的作品类型关联被清空。
*/
private String getReferencedWorksTypeError(String activityId, List<Activity_works_worksType> deletedWorksTypes) {
if (CollUtil.isEmpty(deletedWorksTypes)) {
return null;
}
List<String> deletedWorksIds = deletedWorksTypes.stream()
.map(Activity_works_worksType::getId)
.collect(Collectors.toList());
List<Activity_works_collection_upload> uploads = dao.query(Activity_works_collection_upload.class,
Cnd.where(Activity_works_collection_upload::getActivityId, "=", activityId)
.and(Activity_works_collection_upload::getWorksId, "in", deletedWorksIds));
if (CollUtil.isEmpty(uploads)) {
return null;
}
Set<String> referencedWorksIds = uploads.stream()
.map(Activity_works_collection_upload::getWorksId)
.collect(Collectors.toSet());
String typeNames = deletedWorksTypes.stream()
.filter(worksType -> referencedWorksIds.contains(worksType.getId()))
.map(Activity_works_worksType::getWorksTypeName)
.collect(Collectors.joining(""));
return "作品类型“" + typeNames + "”下已有投稿,不能删除";
}
}