增加活动表单设计的功能

This commit is contained in:
Wang 2026-01-15 09:43:18 +08:00
parent e9616a69c5
commit 6ce00db8fc
10 changed files with 40 additions and 46 deletions

View File

@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -40,7 +41,7 @@ public class AdminActivityFormController {
private final IAdminActivityFormService adminActivityFormService;
@Operation(summary = "创建表单")
@PostMapping("/save")
@PostMapping
@SaCheckPermission("mp:admin:activity:form:save")
public ResultBean<Boolean> save(@Valid @RequestBody ActivityFormReq request) {
Boolean result = adminActivityFormService.save(request);
@ -48,7 +49,7 @@ public class AdminActivityFormController {
}
@Operation(summary = "更新表单")
@PostMapping("/update")
@PutMapping
@SaCheckPermission("mp:admin:activity:form:update")
public ResultBean<Boolean> update(@Valid @RequestBody ActivityFormReq request) {
Boolean result = adminActivityFormService.update(request);

View File

@ -15,12 +15,6 @@ public class AdminActivityFormResp {
@Schema(description = "表单ID")
private Integer id;
/**
* 活动ID
*/
@Schema(description = "活动ID")
private Integer activityId;
/**
* 表单名称
*/
@ -31,7 +25,13 @@ public class AdminActivityFormResp {
* 表单描述
*/
@Schema(description = "表单描述")
private String fromDescription;
private String formDescription;
/**
* 表单配置
*/
@Schema(description = "表单配置")
private String config;
/**
* 表单字段

View File

@ -13,7 +13,6 @@ public interface AdminActivityFormConvert {
AdminActivityFormResp convertToResp(MpActivityFormEntity entity);
AdminActivityFormRelationResp convertToRelationResp(MpActivityFormEntity entity);
MpActivityFormEntity convertToEntity(ActivityFormReq request);

View File

@ -11,7 +11,7 @@ import com.seer.teach.mp.app.controller.req.ActivityFormSubmitReq;
import com.seer.teach.mp.app.controller.req.AppActivityFormExecutionQueryReq;
import com.seer.teach.mp.app.controller.resp.AppActivityFormExecutionResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormFieldResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormTemplateResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormResp;
import com.seer.teach.mp.app.service.IAppActivityFormService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -48,10 +48,10 @@ public class AppActivityFormController {
private final IAppActivityFormService appActivityFormService;
@Operation(summary = "获取活动可用的表单")
@GetMapping("/template/{activityId}")
@GetMapping("/{activityId}")
@SaCheckLogin
public ResultBean<AppActivityFormTemplateResp> getTemplateByActivity(@PathVariable Integer activityId) {
AppActivityFormTemplateResp result = appActivityFormService.getTemplateByActivity(activityId);
public ResultBean<AppActivityFormResp> getFormByActivity(@PathVariable Integer activityId) {
AppActivityFormResp result = appActivityFormService.getFormByActivity(activityId);
return ResultBean.success(result);
}

View File

@ -5,9 +5,9 @@ import lombok.Data;
import java.util.List;
@Schema(name = "AppActivityFormTemplateResp", description = "APP端活动表单模板响应参数")
@Schema(name = "AppActivityFormResp", description = "APP端活动表单模板响应参数")
@Data
public class AppActivityFormTemplateResp {
public class AppActivityFormResp {
private Integer id;

View File

@ -2,7 +2,7 @@ package com.seer.teach.mp.app.convert;
import com.seer.teach.mp.app.controller.resp.AppActivityFormExecutionResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormFieldResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormTemplateResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormResp;
import com.seer.teach.mp.entity.MpActivityFormExecutionEntity;
import com.seer.teach.mp.entity.MpActivityFormFieldEntity;
import com.seer.teach.mp.entity.MpActivityFormEntity;
@ -14,7 +14,8 @@ import org.mapstruct.factory.Mappers;
public interface AppActivityFormConvert {
AppActivityFormConvert INSTANCE = Mappers.getMapper(AppActivityFormConvert.class);
AppActivityFormTemplateResp convertToAppTemplateResp(MpActivityFormEntity entity);
@Mapping(source = "fields", target = "fields", ignore = true)
AppActivityFormResp convertToAppTemplateResp(MpActivityFormEntity entity);
AppActivityFormFieldResp convertToAppFieldResp(MpActivityFormFieldEntity entity);

View File

@ -4,7 +4,7 @@ import com.seer.teach.common.PageListBean;
import com.seer.teach.mp.app.controller.req.ActivityFormSubmitReq;
import com.seer.teach.mp.app.controller.req.AppActivityFormExecutionQueryReq;
import com.seer.teach.mp.app.controller.resp.AppActivityFormExecutionResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormTemplateResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormFieldResp;
import java.util.List;
@ -25,7 +25,7 @@ public interface IAppActivityFormService {
* @param activityId 活动ID
* @return 表单模板响应对象
*/
AppActivityFormTemplateResp getTemplateByActivity(Integer activityId);
AppActivityFormResp getFormByActivity(Integer activityId);
/**
* 根据模板ID获取字段列表

View File

@ -8,7 +8,7 @@ import com.seer.teach.common.utils.PageConverterUtils;
import com.seer.teach.mp.app.controller.req.ActivityFormSubmitReq;
import com.seer.teach.mp.app.controller.req.AppActivityFormExecutionQueryReq;
import com.seer.teach.mp.app.controller.resp.AppActivityFormExecutionResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormTemplateResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormResp;
import com.seer.teach.mp.app.controller.resp.AppActivityFormFieldResp;
import com.seer.teach.mp.app.convert.AppActivityFormConvert;
import com.seer.teach.mp.app.service.IAppActivityFormService;
@ -23,6 +23,7 @@ import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
@ -46,7 +47,7 @@ public class AppActivityFormServiceImpl implements IAppActivityFormService {
private final IMpActivityFormRelationService activityFormTemplateRelationService;
@Override
public AppActivityFormTemplateResp getTemplateByActivity(Integer activityId) {
public AppActivityFormResp getFormByActivity(Integer activityId) {
// 首先检查活动是否存在
MpActivityEntity activity = mpActivityService.getById(activityId);
if (activity == null) {
@ -55,19 +56,17 @@ public class AppActivityFormServiceImpl implements IAppActivityFormService {
}
// 从关联表中获取与活动关联的表单ID
Integer templateId = activityFormTemplateRelationService.getPrimaryTemplateIdByActivityId(activityId);
Integer formId = activityFormTemplateRelationService.getPrimaryFormIdByActivityId(activityId);
if (templateId != null) {
MpActivityFormEntity template = activityFormTemplateService.getById(templateId);
if (formId != null) {
MpActivityFormEntity template = activityFormTemplateService.getById(formId);
if (template != null) {
AppActivityFormTemplateResp resp = AppActivityFormConvert.INSTANCE.convertToAppTemplateResp(template);
AppActivityFormResp resp = AppActivityFormConvert.INSTANCE.convertToAppTemplateResp(template);
// 获取该表单的所有字段
List<MpActivityFormFieldEntity> fields = activityFormFieldService.list(
new LambdaQueryWrapper<MpActivityFormFieldEntity>()
.eq(MpActivityFormFieldEntity::getFormId, templateId)
.orderByAsc(MpActivityFormFieldEntity::getSortOrder)
.orderByDesc(MpActivityFormFieldEntity::getId)
.eq(MpActivityFormFieldEntity::getFormId, formId)
);
List<AppActivityFormFieldResp> fieldResps = fields.stream()
@ -78,26 +77,19 @@ public class AppActivityFormServiceImpl implements IAppActivityFormService {
return resp;
}
}
List<MpActivityFormRelationEntity> relations = activityFormTemplateRelationService.list(
new LambdaQueryWrapper<MpActivityFormRelationEntity>()
.eq(MpActivityFormRelationEntity::getActivityId, activityId)
.last("LIMIT 1")
);
Optional<MpActivityFormRelationEntity> relation = activityFormTemplateRelationService.getLatestVersionByActivityId(activityId);
if (!relations.isEmpty()) {
templateId = relations.get(0).getFormId();
MpActivityFormEntity template = activityFormTemplateService.getById(templateId);
if (relation.isPresent()) {
formId = relation.get().getFormId();
MpActivityFormEntity template = activityFormTemplateService.getById(formId);
if (template != null) {
AppActivityFormTemplateResp resp = AppActivityFormConvert.INSTANCE.convertToAppTemplateResp(template);
AppActivityFormResp resp = AppActivityFormConvert.INSTANCE.convertToAppTemplateResp(template);
// 获取该表单的所有字段
List<MpActivityFormFieldEntity> fields = activityFormFieldService.list(
new LambdaQueryWrapper<MpActivityFormFieldEntity>()
.eq(MpActivityFormFieldEntity::getFormId, templateId)
.orderByAsc(MpActivityFormFieldEntity::getSortOrder)
.orderByDesc(MpActivityFormFieldEntity::getId)
.eq(MpActivityFormFieldEntity::getFormId, formId)
);
List<AppActivityFormFieldResp> fieldResps = fields.stream()
.map(AppActivityFormConvert.INSTANCE::convertToAppFieldResp)
.collect(Collectors.toList());
@ -106,7 +98,6 @@ public class AppActivityFormServiceImpl implements IAppActivityFormService {
return resp;
}
}
log.warn("未找到活动 {} 关联的表单表单", activityId);
return null;
}

View File

@ -16,12 +16,12 @@ import java.util.Optional;
public interface IMpActivityFormRelationService extends IService<MpActivityFormRelationEntity> {
/**
* 根据活动ID获取关联的主要表单模板ID
* 根据活动ID获取关联的主要表单ID
*
* @param activityId 活动ID
* @return 表单模板ID如果不存在则返回null
*/
Integer getPrimaryTemplateIdByActivityId(Integer activityId);
Integer getPrimaryFormIdByActivityId(Integer activityId);
/**
* 根据活动ID获取关联的表单模板数量

View File

@ -2,6 +2,7 @@ package com.seer.teach.mp.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.seer.teach.common.constants.CommonConstant;
import com.seer.teach.mp.entity.MpActivityFormRelationEntity;
import com.seer.teach.mp.mapper.MpActivityFormRelationMapper;
import com.seer.teach.mp.service.IMpActivityFormRelationService;
@ -25,10 +26,11 @@ import java.util.Optional;
public class MpActivityFormRelationServiceImpl extends ServiceImpl<MpActivityFormRelationMapper, MpActivityFormRelationEntity> implements IMpActivityFormRelationService {
@Override
public Integer getPrimaryTemplateIdByActivityId(Integer activityId) {
public Integer getPrimaryFormIdByActivityId(Integer activityId) {
MpActivityFormRelationEntity relation = this.getOne(
new LambdaQueryWrapper<MpActivityFormRelationEntity>()
.eq(MpActivityFormRelationEntity::getActivityId, activityId)
.eq(MpActivityFormRelationEntity::getIsPrimary, CommonConstant.ENABLE)
);
return relation != null ? relation.getFormId() : null;
}