commit
This commit is contained in:
+13
-24
@@ -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));
|
||||
|
||||
+7
@@ -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");
|
||||
|
||||
+17
@@ -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);
|
||||
}
|
||||
+125
@@ -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 + "”下已有投稿,不能删除";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user