diff --git a/seer-admin/src/main/java/com/seer/teach/admin/config/AdminApiConfig.java b/seer-admin/src/main/java/com/seer/teach/admin/config/AdminApiConfig.java
index 0764da5..7503e15 100644
--- a/seer-admin/src/main/java/com/seer/teach/admin/config/AdminApiConfig.java
+++ b/seer-admin/src/main/java/com/seer/teach/admin/config/AdminApiConfig.java
@@ -53,6 +53,14 @@ public class AdminApiConfig {
.build();
}
+ @Bean
+ public GroupedOpenApi mpAdminApi() {
+ return GroupedOpenApi.builder()
+ .group("admin-mp")
+ .pathsToMatch("/mp/**")
+ .build();
+ }
+
@Bean
public GroupedOpenApi payAdminApi() {
return GroupedOpenApi.builder()
diff --git a/seer-common/common-enums/src/main/java/com/seer/teach/common/enums/ResultCodeEnum.java b/seer-common/common-enums/src/main/java/com/seer/teach/common/enums/ResultCodeEnum.java
index d4444a2..ff2e9cf 100644
--- a/seer-common/common-enums/src/main/java/com/seer/teach/common/enums/ResultCodeEnum.java
+++ b/seer-common/common-enums/src/main/java/com/seer/teach/common/enums/ResultCodeEnum.java
@@ -319,7 +319,24 @@ public enum ResultCodeEnum {
RICH_TEXT_TEMPLATE_CONVERT_FAILED(1100419, "转换失败"),
- AI_MODEL_NOT_FOUND(12000, "未找到模型");
+ AI_MODEL_NOT_FOUND(12000, "未找到模型"),
+
+ PARENT_ALREADY_SIGNED_UP(13000, "家长已报名参加该活动"),
+ RELATION_NOT_FOUND(13001, "关系记录不存在"),
+ PARENT_NOT_SIGNED_UP(13002, "家长未报名参加该活动"),
+ INVALID_ACTIVITY(13003, "活动不存在或已失效"),
+ INVALID_AGENT(13004, "代理商不存在或已失效"),
+ AGENT_STATUS_INVALID(13005, "代理商状态无效"),
+ AGENT_EMPLOYEE_ALREADY_EXISTS(130051, "代理商员工已存在"),
+ AGENT_CONTACT_INFO_INVALID(13006, "联系信息无效"),
+ AGENT_NON_PARTICIPANT_ACTIVE(130061, "代理商没有参与该活动"),
+ ACTIVITY_NOT_FOUND(13007, "活动不存在"),
+ ACTIVITY_ALREADY_EXISTS(13008, "活动已存在"),
+ ACTIVITY_NOT_ACTIVE(13009, "活动未开始或已结束"),
+ PARTICIPATION_FAILED(13010, "参与活动失败"),
+ PARENT_NOT_FOUND(13011, "家长不存在"),
+ INVALID_ACTIVITY_STATUS(13012, "无效的活动状态"),
+ PARENT_ALREADY_SIGN_UP(130121, "已经报名参加该活动");
private int code;
private String msg;
diff --git a/seer-common/common-utils/src/main/java/com/seer/teach/common/utils/PageConverterUtils.java b/seer-common/common-utils/src/main/java/com/seer/teach/common/utils/PageConverterUtils.java
index 60c4bdd..c44a08b 100644
--- a/seer-common/common-utils/src/main/java/com/seer/teach/common/utils/PageConverterUtils.java
+++ b/seer-common/common-utils/src/main/java/com/seer/teach/common/utils/PageConverterUtils.java
@@ -17,27 +17,57 @@ public class PageConverterUtils {
* 将MyBatis-Plus的IPage分页结果转换为目标分页Bean
* 使用示例:
*
- * IPage iPage = goodsService.queryPageList(size, current, goods);
- * PageListBean result = PageConverterUtils.convertPageListBean(iPage, GoodConverter.INSTANCE::list);
+ * IPage iPage = goodsService.queryPageList(size, current, goods);
+ * PageListBean result = PageConverterUtils.convertPageListBean(iPage, GoodConverter.INSTANCE::list);
*
- *
+ *
* 通用分页对象转换方法
- * @param sourcePage MyBatis Plus 分页对象
- * @param converter 数据转换函数 (如 GoodConverter.INSTANCE::list)
- * @param 源数据类型
+ *
+ * @param sourcePage MyBatis Plus 分页对象
+ * @param converter 数据转换函数 (如 GoodConverter.INSTANCE::list)
+ * @param 源数据类型
* @return PageListBean 自定义分页响应对象
*/
public static PageListBean convertPageListBean(
IPage sourcePage,
Function, List> converter) {
PageListBean result = new PageListBean<>();
- if(null == sourcePage || sourcePage.getRecords() == null || sourcePage.getRecords().isEmpty()){
+ if (null == sourcePage || sourcePage.getRecords() == null || sourcePage.getRecords().isEmpty()) {
return result;
}
// 应用转换函数
result.setList(converter.apply(sourcePage.getRecords()));
- result.setPageSize((int) sourcePage.getSize());
- result.setTotalPage((int) sourcePage.getPages());
+ result.setPageSize(sourcePage.getSize());
+ result.setTotalPage(sourcePage.getPages());
+ result.setTotal(sourcePage.getTotal());
+ return result;
+ }
+
+ /**
+ * 分页数据转换方法
+ * 将MyBatis-Plus的IPage分页结果转换为目标分页Bean
+ * 使用示例:
+ *
+ * IPage iPage = goodsService.queryPageList(size, current, goods);
+ * PageListBean result = PageConverterUtils.convertPageList(iPage, GoodConverter.INSTANCE::one);
+ *
+ *
+ * 通用分页对象转换方法
+ * @param sourcePage MyBatis Plus 分页对象
+ * @param converter 数据转换函数 (如 GoodConverter.INSTANCE::one)
+ * @param 源数据类型
+ * @return PageListBean 自定义分页响应对象
+ */
+ public static PageListBean convertPageList(
+ IPage sourcePage,
+ Function converter) {
+ PageListBean result = new PageListBean<>();
+ if (null == sourcePage || sourcePage.getRecords() == null || sourcePage.getRecords().isEmpty()) {
+ return result;
+ }
+ result.setList(sourcePage.getRecords().stream().map(converter).toList());
+ result.setPageSize(sourcePage.getSize());
+ result.setTotalPage(sourcePage.getPages());
result.setTotal(sourcePage.getTotal());
return result;
}
diff --git a/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentActivityDTO.java b/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentActivityDTO.java
new file mode 100644
index 0000000..484edad
--- /dev/null
+++ b/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentActivityDTO.java
@@ -0,0 +1,37 @@
+package com.seer.teach.mp.api.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(name = "AgentActivityDTO", description = "代理商活动DTO")
+@Data
+public class AgentActivityDTO {
+
+ private Integer id;
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "活动描述")
+ private String description;
+
+ @Schema(description = "活动开始时间")
+ private LocalDateTime startTime;
+
+ @Schema(description = "活动结束时间")
+ private LocalDateTime endTime;
+
+ @Schema(description = "活动状态:0-禁用,1-启用")
+ private Integer status;
+
+ @Schema(description = "创建人ID")
+ private Integer creatorId;
+
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentDTO.java b/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentDTO.java
new file mode 100644
index 0000000..72dea7b
--- /dev/null
+++ b/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentDTO.java
@@ -0,0 +1,47 @@
+package com.seer.teach.mp.api.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 代理商DTO
+ */
+@Data
+@Schema(name = "代理商DTO")
+public class AgentDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(name = "代理商ID")
+ private Integer id;
+
+ @Schema(name = "代理商名称")
+ private String agentName;
+
+ @Schema(name = "代理商编码")
+ private String agentCode;
+
+ @Schema(name = "代理商等级")
+ private String agentLevel;
+
+ @Schema(name = "联系人姓名")
+ private String contactName;
+
+ @Schema(name = "联系电话")
+ private String contactPhone;
+
+ @Schema(name = "代理商地址")
+ private String address;
+
+ @Schema(name = "代理商状态:0-禁用,1-启用")
+ private Integer status;
+
+ @Schema(name = "创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(name = "更新时间")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentEmployeeRelationDTO.java b/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentEmployeeRelationDTO.java
new file mode 100644
index 0000000..f7797f4
--- /dev/null
+++ b/seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentEmployeeRelationDTO.java
@@ -0,0 +1,31 @@
+package com.seer.teach.mp.api.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(name = "AgentEmployeeRelationDTO", description = "代理商员工关联DTO")
+@Data
+public class AgentEmployeeRelationDTO {
+
+ private Integer id;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "员工用户ID")
+ private Integer employeeUserId;
+
+ @Schema(description = "员工职位")
+ private String position;
+
+ @Schema(description = "员工状态:0-禁用,1-启用")
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpActivityEntity.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpActivityEntity.java
new file mode 100644
index 0000000..037b524
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpActivityEntity.java
@@ -0,0 +1,55 @@
+package com.seer.teach.mp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seer.teach.common.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 代理商活动表
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Getter
+@Setter
+@TableName("mp_activities")
+@Schema(name = "MpAgentActivityEntity对象", description = "活动表")
+public class MpActivityEntity extends BaseEntity {
+
+ /**
+ * 活动名称,如千人助学计划
+ */
+ @TableField("activity_name")
+ private String activityName;
+
+ /**
+ * 活动描述
+ */
+ @TableField("description")
+ private String description;
+
+ /**
+ * 活动开始时间
+ */
+ @TableField("start_time")
+ private LocalDateTime startTime;
+
+ /**
+ * 活动结束时间
+ */
+ @TableField("end_time")
+ private LocalDateTime endTime;
+
+ /**
+ * 活动状态:0-禁用,1-启用
+ */
+ @TableField("status")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpActivityInfoCollectionEntity.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpActivityInfoCollectionEntity.java
new file mode 100644
index 0000000..3339512
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpActivityInfoCollectionEntity.java
@@ -0,0 +1,113 @@
+package com.seer.teach.mp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seer.teach.common.config.mybatis.hanler.IntegerListTypeHandler;
+import com.seer.teach.common.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Set;
+
+/**
+ *
+ * 活动信息收集表
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Getter
+@Setter
+@TableName("mp_activity_info_collection")
+@Schema(name = "MpActivityInfoCollectionEntity对象", description = "活动信息收集表")
+public class MpActivityInfoCollectionEntity extends BaseEntity {
+
+ /**
+ * 关联的家长参与代理商活动关系ID
+ */
+ @TableField("relation_id")
+ private Integer relationId;
+
+ /**
+ * 活动ID
+ */
+ @TableField("activity_id")
+ private Integer activityId;
+
+ /**
+ * 代理商ID
+ */
+ @TableField("agent_id")
+ private Integer agentId;
+
+ /**
+ * 家长ID
+ */
+ @TableField("parent_id")
+ private Integer parentId;
+
+ /**
+ * 孩子姓名
+ */
+ @TableField("child_name")
+ private String childName;
+
+ /**
+ * 孩子性别(M-男,F-女)
+ */
+ @TableField("child_gender")
+ private String childGender;
+
+ /**
+ * 出生年月
+ */
+ @TableField("child_birth_date")
+ private LocalDate childBirthDate;
+
+ /**
+ * 年级
+ */
+ @TableField("grade")
+ private String grade;
+
+ /**
+ * 学校
+ */
+ @TableField("school")
+ private String school;
+
+ /**
+ * 地区
+ */
+ @TableField("region")
+ private String region;
+
+ /**
+ * 家长身份(爸爸,妈妈)
+ */
+ @TableField("parent_identity")
+ private String parentIdentity;
+
+ /**
+ * 学习情况(优、良、中、差)
+ */
+ @TableField("learning_situation")
+ private String learningSituation;
+
+ /**
+ * 优势学科(数学、英语等)
+ */
+ @TableField(value = "strong_subject_ids",typeHandler = IntegerListTypeHandler.class)
+ private List strongSubjectIds;
+
+ /**
+ * 劣势学科(数学、英语等)
+ */
+ @TableField(value = "weak_subject_ids",typeHandler = IntegerListTypeHandler.class)
+ private List weakSubjectIds;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityLogEntity.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityLogEntity.java
new file mode 100644
index 0000000..19d1986
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityLogEntity.java
@@ -0,0 +1,60 @@
+package com.seer.teach.mp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seer.teach.common.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 代理商活动操作日志表
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Getter
+@Setter
+@TableName("mp_agent_activity_log")
+@Schema(name = "MpAgentActivityLogEntity对象", description = "代理商活动操作日志表")
+public class MpAgentActivityLogEntity extends BaseEntity {
+
+
+ /**
+ * 活动ID
+ */
+ @TableField("activity_id")
+ private Integer activityId;
+
+ /**
+ * 操作人ID
+ */
+ @TableField("operator_id")
+ private String operatorId;
+
+ /**
+ * 操作类型
+ */
+ @TableField("operation_type")
+ private String operationType;
+
+ /**
+ * 操作描述
+ */
+ @TableField("description")
+ private String description;
+
+ /**
+ * 操作前数据(JSON格式)
+ */
+ @TableField("before_data")
+ private String beforeData;
+
+ /**
+ * 操作后数据(JSON格式)
+ */
+ @TableField("after_data")
+ private String afterData;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityParticipantEntity.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityParticipantEntity.java
new file mode 100644
index 0000000..821d79d
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityParticipantEntity.java
@@ -0,0 +1,35 @@
+package com.seer.teach.mp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seer.teach.common.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 代理商活动参与记录表
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Getter
+@Setter
+@TableName("mp_agent_activity_participants")
+@Schema(name = "MpAgentActivityParticipantEntity对象", description = "代理商活动参与记录表")
+public class MpAgentActivityParticipantEntity extends BaseEntity {
+
+ /**
+ * 活动ID
+ */
+ @TableField("activity_id")
+ private Integer activityId;
+
+ /**
+ * 代理商ID(对应user表的ID)
+ */
+ @TableField("agent_id")
+ private Integer agentId;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentEmployeeRelationEntity.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentEmployeeRelationEntity.java
new file mode 100644
index 0000000..a11bd13
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentEmployeeRelationEntity.java
@@ -0,0 +1,47 @@
+package com.seer.teach.mp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seer.teach.common.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 代理商员工关联表
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Getter
+@Setter
+@TableName("mp_agent_employee_relations")
+@Schema(name = "MpAgentEmployeeRelationEntity对象", description = "代理商员工关联表")
+public class MpAgentEmployeeRelationEntity extends BaseEntity {
+
+ /**
+ * 代理商ID(对应user表的ID)
+ */
+ @TableField("agent_id")
+ private Integer agentId;
+
+ /**
+ * 员工用户ID(对应user表的ID)
+ */
+ @TableField("employee_user_id")
+ private Integer employeeUserId;
+
+ /**
+ * 员工职位
+ */
+ @TableField("position")
+ private String position;
+
+ /**
+ * 员工状态:0-禁用,1-启用
+ */
+ @TableField("status")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentEntity.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentEntity.java
new file mode 100644
index 0000000..c24be88
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentEntity.java
@@ -0,0 +1,49 @@
+package com.seer.teach.mp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seer.teach.common.entity.BaseEntity;
+import lombok.Data;
+
+/**
+ * 代理商实体类
+ */
+@Data
+@TableName("mp_agents")
+public class MpAgentEntity extends BaseEntity {
+
+ /**
+ * 代理商名称
+ */
+ private String agentName;
+
+ /**
+ * 代理商编码
+ */
+ private String agentCode;
+
+ /**
+ * 代理商等级
+ */
+ private String agentLevel;
+
+ /**
+ * 联系人姓名
+ */
+ private String contactName;
+
+ /**
+ * 联系电话
+ */
+ private String contactPhone;
+
+ /**
+ * 代理商地址
+ */
+ private String address;
+
+ /**
+ * 代理商状态:0-禁用,1-启用
+ */
+ private Integer status;
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpParentAgentActivityRelationEntity.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpParentAgentActivityRelationEntity.java
new file mode 100644
index 0000000..e477fcd
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpParentAgentActivityRelationEntity.java
@@ -0,0 +1,68 @@
+package com.seer.teach.mp.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.seer.teach.common.entity.BaseEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 家长参与代理商活动关系表
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Getter
+@Setter
+@TableName("mp_parent_agent_activity_relations")
+@Schema(name = "MpParentAgentActivityRelationEntity对象", description = "家长参与代理商活动关系表")
+public class MpParentAgentActivityRelationEntity extends BaseEntity {
+
+ /**
+ * 活动ID
+ */
+ @TableField("activity_id")
+ private Integer activityId;
+
+ /**
+ * 代理商ID
+ */
+ @TableField("agent_id")
+ private Integer agentId;
+
+ /**
+ * 家长ID
+ */
+ @TableField("parent_id")
+ private Integer parentId;
+
+ /**
+ * 活动名称(冗余字段)
+ */
+ @TableField("activity_name")
+ private String activityName;
+
+ /**
+ * 代理商名称(冗余字段)
+ */
+ @TableField("agent_name")
+ private String agentName;
+
+ /**
+ * 参与状态:0-取消参与,1-正常参与
+ */
+ @TableField("status")
+ private Integer status;
+
+ /**
+ * 报名时间
+ */
+ @TableField("sign_up_time")
+ private LocalDateTime signUpTime;
+
+}
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpActivityInfoCollectionMapper.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpActivityInfoCollectionMapper.java
new file mode 100644
index 0000000..21ac3dd
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpActivityInfoCollectionMapper.java
@@ -0,0 +1,18 @@
+package com.seer.teach.mp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.seer.teach.mp.entity.MpActivityInfoCollectionEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 活动信息收集表 Mapper 接口
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Mapper
+public interface MpActivityInfoCollectionMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityLogMapper.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityLogMapper.java
new file mode 100644
index 0000000..d34107f
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityLogMapper.java
@@ -0,0 +1,18 @@
+package com.seer.teach.mp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.seer.teach.mp.entity.MpAgentActivityLogEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 代理商活动操作日志表 Mapper 接口
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Mapper
+public interface MpAgentActivityLogMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityMapper.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityMapper.java
new file mode 100644
index 0000000..a624f70
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityMapper.java
@@ -0,0 +1,18 @@
+package com.seer.teach.mp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.seer.teach.mp.entity.MpActivityEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 代理商活动表 Mapper 接口
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Mapper
+public interface MpAgentActivityMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityParticipantMapper.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityParticipantMapper.java
new file mode 100644
index 0000000..e3f82b6
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityParticipantMapper.java
@@ -0,0 +1,18 @@
+package com.seer.teach.mp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 代理商活动参与记录表 Mapper 接口
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Mapper
+public interface MpAgentActivityParticipantMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentEmployeeRelationMapper.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentEmployeeRelationMapper.java
new file mode 100644
index 0000000..94a5442
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentEmployeeRelationMapper.java
@@ -0,0 +1,18 @@
+package com.seer.teach.mp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.seer.teach.mp.entity.MpAgentEmployeeRelationEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 代理商员工关联表 Mapper 接口
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Mapper
+public interface MpAgentEmployeeRelationMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentMapper.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentMapper.java
new file mode 100644
index 0000000..c8864fe
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentMapper.java
@@ -0,0 +1,12 @@
+package com.seer.teach.mp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.seer.teach.mp.entity.MpAgentEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 代理商Mapper接口
+ */
+@Mapper
+public interface MpAgentMapper extends BaseMapper {
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpParentAgentActivityRelationMapper.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpParentAgentActivityRelationMapper.java
new file mode 100644
index 0000000..9d3b2f1
--- /dev/null
+++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpParentAgentActivityRelationMapper.java
@@ -0,0 +1,18 @@
+package com.seer.teach.mp.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.seer.teach.mp.entity.MpParentAgentActivityRelationEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 家长参与代理商活动关系表 Mapper 接口
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Mapper
+public interface MpParentAgentActivityRelationMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminActivityController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminActivityController.java
new file mode 100644
index 0000000..2cbb360
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminActivityController.java
@@ -0,0 +1,60 @@
+package com.seer.teach.mp.admin.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.admin.controller.req.MpActivityQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpActivityReq;
+import com.seer.teach.mp.admin.controller.resp.AdminActivityResp;
+import com.seer.teach.mp.admin.service.IAdminActivityService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@LogPrint
+@RequiredArgsConstructor
+@RestController
+@Tag(name = "管理端 - 活动")
+@RequestMapping("/mp/agent/activity")
+public class AdminActivityController {
+
+ private final IAdminActivityService agentActivityService;
+
+ @Operation(summary = "活动列表")
+ @GetMapping("/page-list")
+ @SaCheckPermission("mp:admin:agent:activity:list")
+ public ResultBean> pageList(MpActivityQueryReq query) {
+ return ResultBean.success(agentActivityService.pageList(query));
+ }
+
+ @Operation(summary = "创建或更新活动")
+ @PostMapping("/save")
+ @SaCheckPermission("mp:admin:agent:activity:save")
+ public ResultBean save(@Valid @RequestBody MpActivityReq request) {
+ return ResultBean.success(agentActivityService.saveOrUpdateActivity(request));
+ }
+
+ @Operation(summary = "删除活动")
+ @DeleteMapping("/{id}")
+ @SaCheckPermission("mp:admin:agent:activity:delete")
+ public ResultBean delete(@PathVariable Integer id) {
+ return ResultBean.success(agentActivityService.deleteActivity(id));
+ }
+
+ @Operation(summary = "详情")
+ @GetMapping("/{id}")
+ @SaCheckPermission("mp:admin:agent:activity:get")
+ public ResultBean get(@PathVariable Integer id) {
+ AdminActivityResp result = agentActivityService.getById(id);
+ return ResultBean.success(result);
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityLogController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityLogController.java
new file mode 100644
index 0000000..847a7de
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityLogController.java
@@ -0,0 +1,50 @@
+package com.seer.teach.mp.admin.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.admin.controller.req.AgentActivityLogQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AdminAgentActivityLogResp;
+import com.seer.teach.mp.admin.service.IAdminAgentActivityLogService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@LogPrint
+@RequiredArgsConstructor
+@RestController
+@Tag(name = "管理端 - 代理商活动操作日志")
+@RequestMapping("/mp/agent/activity/log")
+public class AdminAgentActivityLogController {
+
+ private final IAdminAgentActivityLogService adminAgentActivityLogService;
+
+ @Operation(summary = "代理商活动操作日志列表")
+ @GetMapping("/page-list")
+ @SaCheckPermission("mp:admin:agent:activity:log:list")
+ public ResultBean> pageList(AgentActivityLogQueryReq query) {
+ return ResultBean.success(adminAgentActivityLogService.pageList(query));
+ }
+
+ @Operation(summary = "详情")
+ @GetMapping("/{id}")
+ @SaCheckPermission("mp:admin:agent:activity:log:get")
+ public ResultBean getLog(@PathVariable Integer id) {
+ return ResultBean.success(adminAgentActivityLogService.getById(id));
+ }
+
+ @Operation(summary = "删除")
+ @DeleteMapping
+ @SaCheckPermission("mp:admin:agent:activity:log:delete")
+ public ResultBean delete(@RequestBody List ids) {
+ boolean result = true;
+ for (Integer id : ids) {
+ result &= adminAgentActivityLogService.deleteLog(id);
+ }
+ return ResultBean.success(result);
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityParticipantController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityParticipantController.java
new file mode 100644
index 0000000..7bafbb9
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityParticipantController.java
@@ -0,0 +1,72 @@
+package com.seer.teach.mp.admin.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.admin.controller.req.AgentActivityParticipantQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AdminAgentActivityParticipantResp;
+import com.seer.teach.mp.admin.service.IAdminAgentActivityParticipantService;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+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;
+
+import java.util.List;
+
+@LogPrint
+@RequiredArgsConstructor
+@RestController
+@Tag(name = "管理端 - 代理商活动参与记录")
+@RequestMapping("/mp/agent/activity/participant")
+public class AdminAgentActivityParticipantController {
+
+ private final IAdminAgentActivityParticipantService adminAgentActivityParticipantService;
+
+ @Operation(summary = "代理商活动参与记录列表")
+ @GetMapping("/page-list")
+ @SaCheckPermission("mp:admin:agent:activity:participant:list")
+ public ResultBean> pageList(AgentActivityParticipantQueryReq query) {
+ return ResultBean.success(adminAgentActivityParticipantService.pageList(query));
+ }
+
+ @Operation(summary = "详情")
+ @GetMapping("/{id}")
+ @SaCheckPermission("mp:admin:agent:activity:participant:get")
+ public ResultBean getParticipant(@PathVariable Integer id) {
+ return ResultBean.success(adminAgentActivityParticipantService.getById(id));
+ }
+
+ @Operation(summary = "新增")
+ @PostMapping
+ @SaCheckPermission("mp:admin:agent:activity:participant:save")
+ public ResultBean save(@RequestBody MpAgentActivityParticipantEntity participantEntity) {
+ return ResultBean.success(adminAgentActivityParticipantService.saveParticipant(participantEntity));
+ }
+
+ @Operation(summary = "更新")
+ @PutMapping
+ @SaCheckPermission("mp:admin:agent:activity:participant:update")
+ public ResultBean update(@RequestBody MpAgentActivityParticipantEntity participantEntity) {
+ return ResultBean.success(adminAgentActivityParticipantService.updateParticipant(participantEntity));
+ }
+
+ @Operation(summary = "删除")
+ @DeleteMapping
+ @SaCheckPermission("mp:admin:agent:activity:participant:delete")
+ public ResultBean delete(@RequestBody List ids) {
+ boolean result = true;
+ for (Integer id : ids) {
+ result &= adminAgentActivityParticipantService.deleteParticipant(id);
+ }
+ return ResultBean.success(result);
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentController.java
new file mode 100644
index 0000000..f800081
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentController.java
@@ -0,0 +1,61 @@
+package com.seer.teach.mp.admin.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.admin.controller.req.AgentQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AgentResp;
+import com.seer.teach.mp.admin.service.AdminAgentService;
+import com.seer.teach.mp.entity.MpAgentEntity;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@LogPrint
+@RequiredArgsConstructor
+@RestController
+@Tag(name = "管理端 - 代理商")
+@RequestMapping("/mp/agent")
+public class AdminAgentController {
+
+ private final AdminAgentService adminAgentService;
+
+ @Operation(summary = "代理商列表")
+ @GetMapping("/page-list")
+ @SaCheckPermission("mp:admin:agent:list")
+ public ResultBean> pageList(AgentQueryReq query) {
+ return ResultBean.success(adminAgentService.pageList(query));
+ }
+
+ @Operation(summary = "详情")
+ @GetMapping("/{id}")
+ @SaCheckPermission("mp:admin:agent:get")
+ public ResultBean getAgent(@PathVariable Integer id) {
+ return ResultBean.success(adminAgentService.getAgentById(id));
+ }
+
+ @Operation(summary = "新增")
+ @PostMapping
+ @SaCheckPermission("mp:admin:agent:save")
+ public ResultBean save(@RequestBody MpAgentEntity agentEntity) {
+ return ResultBean.success(adminAgentService.saveAgent(agentEntity));
+ }
+
+ @Operation(summary = "更新")
+ @PutMapping
+ @SaCheckPermission("mp:admin:agent:update")
+ public ResultBean update(@RequestBody MpAgentEntity agentEntity) {
+ return ResultBean.success(adminAgentService.updateAgent(agentEntity));
+ }
+
+ @Operation(summary = "删除")
+ @DeleteMapping
+ @SaCheckPermission("mp:admin:agent:delete")
+ public ResultBean delete(@RequestBody List ids) {
+ return ResultBean.success(adminAgentService.deleteById(ids));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentEmployeeRelationController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentEmployeeRelationController.java
new file mode 100644
index 0000000..b0d0295
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentEmployeeRelationController.java
@@ -0,0 +1,67 @@
+package com.seer.teach.mp.admin.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.admin.controller.req.AgentEmployeeRelationQueryReq;
+import com.seer.teach.mp.admin.controller.req.AgentEmployeeRelationReq;
+import com.seer.teach.mp.admin.controller.resp.AgentEmployeeRelationResp;
+import com.seer.teach.mp.admin.service.IAdminAgentEmployeeRelationService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@LogPrint
+@RequiredArgsConstructor
+@RestController
+@Tag(name = "管理端 - 代理商员工")
+@RequestMapping("/mp/agent/employee")
+public class AdminAgentEmployeeRelationController {
+
+ private final IAdminAgentEmployeeRelationService agentEmployeeRelationService;
+
+ @Operation(summary = "代理商员工关联列表")
+ @GetMapping("/page-list")
+ @SaCheckPermission("mp:admin:agent:employee:list")
+ public ResultBean> pageList(AgentEmployeeRelationQueryReq query) {
+ return ResultBean.success(agentEmployeeRelationService.pageList(query));
+ }
+
+ @Operation(summary = "创建或更新代理商员工关联")
+ @PostMapping("/save")
+ @SaCheckPermission("mp:admin:agent:employee:save")
+ public ResultBean save(@Valid @RequestBody AgentEmployeeRelationReq request) {
+ return ResultBean.success(agentEmployeeRelationService.saveOrUpdateRelation(request));
+ }
+
+ @Operation(summary = "删除代理商员工关联")
+ @DeleteMapping("/{id}")
+ @SaCheckPermission("mp:admin:agent:employee:delete")
+ public ResultBean delete(@PathVariable Integer id) {
+ return ResultBean.success(agentEmployeeRelationService.deleteRelation(id));
+ }
+
+ @Operation(summary = "详情")
+ @GetMapping("/{id}")
+ @SaCheckPermission("mp:admin:agent:employee:get")
+ public ResultBean get(@PathVariable Integer id) {
+ AgentEmployeeRelationResp result = agentEmployeeRelationService.getById(id);
+ return ResultBean.success(result);
+ }
+
+ @Operation(summary = "根据代理商ID获取员工列表")
+ @GetMapping("/by-agent/{agentId}")
+ @SaCheckPermission("mp:admin:agent:employee:by-agent")
+ public ResultBean> getByAgent(@PathVariable Integer agentId) {
+ return ResultBean.success(agentEmployeeRelationService.getEmployeeRelationsByAgentId(agentId));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminDealerApplicationsController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminDealerApplicationsController.java
similarity index 90%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminDealerApplicationsController.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminDealerApplicationsController.java
index 9e7beee..dee72f7 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminDealerApplicationsController.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminDealerApplicationsController.java
@@ -1,13 +1,13 @@
-package com.seer.teach.mp.controller;
+package com.seer.teach.mp.admin.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.seer.teach.common.PageListBean;
import com.seer.teach.common.ResultBean;
import com.seer.teach.common.annotation.LogPrint;
-import com.seer.teach.mp.controller.req.MpDealerApplyQueryReq;
-import com.seer.teach.mp.controller.resp.MpDealerApplyResp;
+import com.seer.teach.mp.admin.controller.req.MpDealerApplyQueryReq;
+import com.seer.teach.mp.admin.controller.resp.MpDealerApplyResp;
import com.seer.teach.mp.request.DealerApplyReq;
-import com.seer.teach.mp.service.AdminDealerApplicationsService;
+import com.seer.teach.mp.admin.service.AdminDealerApplicationsService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMessageGroupController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMessageGroupController.java
similarity index 71%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMessageGroupController.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMessageGroupController.java
index c8fe3ec..5598c2e 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMessageGroupController.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMessageGroupController.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller;
+package com.seer.teach.mp.admin.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -6,11 +6,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.seer.teach.common.PageListBean;
import com.seer.teach.common.ResultBean;
import com.seer.teach.common.utils.PageConverterUtils;
-import com.seer.teach.mp.controller.req.MpMessageGroupReq;
-import com.seer.teach.mp.controller.req.MpMessageGroupQueryReq;
-import com.seer.teach.mp.controller.req.MpMessageGroupUpdateReq;
-import com.seer.teach.mp.controller.resp.MpMessageGroupResp;
-import com.seer.teach.mp.convert.MpMessageGroupConvert;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupReq;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupUpdateReq;
+import com.seer.teach.mp.admin.controller.resp.MpMessageGroupResp;
+import com.seer.teach.mp.admin.convert.MpMessageGroupConvert;
import com.seer.teach.mp.entity.MpMessageGroupEntity;
import com.seer.teach.mp.service.IMqMessageGroupService;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -33,9 +33,8 @@ public class AdminMessageGroupController {
@PostMapping
@Operation(summary = "创建消息组")
@SaCheckPermission("admin:mp:message-group:create")
- public ResultBean create(@RequestBody @Validated MpMessageGroupReq params) {
- mqMessageGroupService.crateMesGroup(MpMessageGroupConvert.INSTANCE.convertOne(params));
- return ResultBean.success() ;
+ public ResultBean create(@RequestBody @Validated MpMessageGroupReq params) {
+ return ResultBean.success(mqMessageGroupService.crateMesGroup(MpMessageGroupConvert.INSTANCE.convertOne(params))) ;
}
/**
@@ -59,7 +58,7 @@ public class AdminMessageGroupController {
Page pageParam = new Page<>(params.getPageNo(), params.getPageSize());
MpMessageGroupEntity queryParam = MpMessageGroupConvert.INSTANCE.convertQueryOne(params);
IPage pageList = mqMessageGroupService.pageList(pageParam, queryParam);
- PageListBean resultBean = PageConverterUtils.convertPageListBean(pageList, MpMessageGroupConvert.INSTANCE::convertRespList);
+ PageListBean resultBean = PageConverterUtils.convertPageListBean(pageList, MpMessageGroupConvert.INSTANCE::convertRespList);
return ResultBean.success(resultBean);
}
@@ -69,11 +68,10 @@ public class AdminMessageGroupController {
@PostMapping("/{id}")
@Operation(summary = "更新消息组")
@SaCheckPermission("admin:mp:message-group:update")
- public ResultBean update(@RequestBody @Validated MpMessageGroupUpdateReq params,
+ public ResultBean update(@RequestBody @Validated MpMessageGroupUpdateReq params,
@PathVariable Integer id) {
MpMessageGroupEntity entity = MpMessageGroupConvert.INSTANCE.convertUpdateOne( params);
- mqMessageGroupService.updateMesGroup(entity, id);
- return ResultBean.success();
+ return ResultBean.success(mqMessageGroupService.updateMesGroup(entity, id));
}
/**
@@ -82,8 +80,7 @@ public class AdminMessageGroupController {
@DeleteMapping("/{id}")
@Operation(summary = "根据ID删除消息组")
@SaCheckPermission("admin:mp:message-group:delete")
- public ResultBean delete(@PathVariable Integer id) {
- mqMessageGroupService.deleteById(id);
- return ResultBean.success();
+ public ResultBean delete(@PathVariable Integer id) {
+ return ResultBean.success(mqMessageGroupService.deleteById(id));
}
}
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMessageGroupUserController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMessageGroupUserController.java
similarity index 90%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMessageGroupUserController.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMessageGroupUserController.java
index 1fb1ff6..048dcd2 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMessageGroupUserController.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMessageGroupUserController.java
@@ -1,14 +1,14 @@
-package com.seer.teach.mp.controller;
+package com.seer.teach.mp.admin.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.seer.teach.common.PageListBean;
import com.seer.teach.common.ResultBean;
import com.seer.teach.common.utils.PageConverterUtils;
-import com.seer.teach.mp.controller.req.MpMessageGroupUserReq;
-import com.seer.teach.mp.controller.req.MpMessageGroupUserQueryReq;
-import com.seer.teach.mp.controller.resp.MpMessageGroupUserResp;
-import com.seer.teach.mp.convert.MpMessageGroupUserConvert;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupUserReq;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupUserQueryReq;
+import com.seer.teach.mp.admin.controller.resp.MpMessageGroupUserResp;
+import com.seer.teach.mp.admin.convert.MpMessageGroupUserConvert;
import com.seer.teach.mp.entity.MpMessageGroupUserEntity;
import com.seer.teach.mp.service.IMqMessageGroupUserService;
import io.swagger.v3.oas.annotations.tags.Tag;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpAccountController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpAccountController.java
similarity index 90%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpAccountController.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpAccountController.java
index bf88835..6ca8c03 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpAccountController.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpAccountController.java
@@ -1,12 +1,12 @@
-package com.seer.teach.mp.controller;
+package com.seer.teach.mp.admin.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.seer.teach.common.PageListBean;
import com.seer.teach.common.ResultBean;
-import com.seer.teach.mp.controller.req.MpAccountPageReq;
-import com.seer.teach.mp.controller.req.MpAccountReq;
-import com.seer.teach.mp.controller.resp.AdminMpAccountResp;
-import com.seer.teach.mp.service.AdminMpAccountService;
+import com.seer.teach.mp.admin.controller.req.MpAccountPageReq;
+import com.seer.teach.mp.admin.controller.req.MpAccountReq;
+import com.seer.teach.mp.admin.controller.resp.AdminMpAccountResp;
+import com.seer.teach.mp.admin.service.AdminMpAccountService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpTemplateMessageConfigController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpTemplateMessageConfigController.java
similarity index 92%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpTemplateMessageConfigController.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpTemplateMessageConfigController.java
index 30397f0..7ac5fed 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpTemplateMessageConfigController.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpTemplateMessageConfigController.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller;
+package com.seer.teach.mp.admin.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -8,10 +8,10 @@ import com.seer.teach.common.ResultBean;
import com.seer.teach.common.enums.ResultCodeEnum;
import com.seer.teach.common.utils.AssertUtils;
import com.seer.teach.common.utils.PageConverterUtils;
-import com.seer.teach.mp.controller.req.MpTemplateMessageConfigPageQueryReq;
-import com.seer.teach.mp.controller.req.MpTemplateMessageConfigReq;
-import com.seer.teach.mp.controller.resp.MpTemplateMessageConfigResp;
-import com.seer.teach.mp.convert.AdminMpTemplateMessageConfigConvert;
+import com.seer.teach.mp.admin.controller.req.MpTemplateMessageConfigPageQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpTemplateMessageConfigReq;
+import com.seer.teach.mp.admin.controller.resp.MpTemplateMessageConfigResp;
+import com.seer.teach.mp.admin.convert.AdminMpTemplateMessageConfigConvert;
import com.seer.teach.mp.entity.MpTemplateMessageConfigEntity;
import com.seer.teach.mp.service.IMpTemplateMessageConfigService;
import io.swagger.v3.oas.annotations.tags.Tag;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpTemplateMessageController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpTemplateMessageController.java
similarity index 88%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpTemplateMessageController.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpTemplateMessageController.java
index d0aa9f7..bc9cc82 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminMpTemplateMessageController.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminMpTemplateMessageController.java
@@ -1,15 +1,15 @@
-package com.seer.teach.mp.controller;
+package com.seer.teach.mp.admin.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import com.seer.teach.common.ResultBean;
-import com.seer.teach.mp.controller.req.MpTemplateMessageReq;
-import com.seer.teach.mp.controller.resp.MpTemplateMessageResp;
-import com.seer.teach.mp.controller.resp.MpWxMpTemplateResp;
-import com.seer.teach.mp.convert.MpWxMpTemplateConvert;
+import com.seer.teach.mp.admin.controller.req.MpTemplateMessageReq;
+import com.seer.teach.mp.admin.controller.resp.MpTemplateMessageResp;
+import com.seer.teach.mp.admin.controller.resp.MpWxMpTemplateResp;
+import com.seer.teach.mp.admin.convert.MpWxMpTemplateConvert;
import com.seer.teach.mp.entity.MpTemplateMessageEntity;
-import com.seer.teach.mp.service.AdminTemplateMessageService;
-import com.seer.teach.mp.utils.ClassFieldUtils;
+import com.seer.teach.mp.admin.service.AdminTemplateMessageService;
+import com.seer.teach.mp.admin.utils.ClassFieldUtils;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.Operation;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminParentAgentActivityController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminParentAgentActivityController.java
new file mode 100644
index 0000000..83205dd
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminParentAgentActivityController.java
@@ -0,0 +1,48 @@
+package com.seer.teach.mp.admin.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.common.utils.PageConverterUtils;
+import com.seer.teach.mp.admin.controller.req.ParentAgentActivityQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AdminParentAgentActivityResp;
+import com.seer.teach.mp.admin.controller.resp.MpParentAgentActivityResp;
+import com.seer.teach.mp.admin.service.AdminParentAgentActivityService;
+import com.seer.teach.mp.entity.MpParentAgentActivityRelationEntity;
+import com.seer.teach.mp.service.IMpParentAgentActivityRelationService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 家长参与代理商活动控制器 - 管理端
+ */
+@Tag(name = "管理端 - 家长参与代理商活动管理")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/mp/admin/parent/agent/activity")
+public class AdminParentAgentActivityController {
+
+ private final AdminParentAgentActivityService adminParentAgentActivityService;
+
+ @PostMapping("/page")
+ @SaCheckPermission("admin:parent:agent:activity:page")
+ @Operation(summary = "分页查询家长参与代理商活动记录")
+ @LogPrint
+ public ResultBean> pageList(
+ @RequestBody ParentAgentActivityQueryReq queryReq) {
+ return ResultBean.success(adminParentAgentActivityService.pageList(queryReq));
+ }
+
+ @GetMapping("/{id}")
+ @SaCheckPermission("admin:parent:agent:activity:detail")
+ @Operation(summary = "获取家长参与代理商活动记录详情")
+ @LogPrint
+ public ResultBean detail(@PathVariable Integer id) {
+ return ResultBean.success(adminParentAgentActivityService.getDetail(id));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminTemplateMessageMappingController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminTemplateMessageMappingController.java
similarity index 97%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminTemplateMessageMappingController.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminTemplateMessageMappingController.java
index 3b5b7a1..6706eeb 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/AdminTemplateMessageMappingController.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminTemplateMessageMappingController.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller;
+package com.seer.teach.mp.admin.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityLogQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityLogQueryReq.java
new file mode 100644
index 0000000..a7b78a6
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityLogQueryReq.java
@@ -0,0 +1,44 @@
+package com.seer.teach.mp.admin.controller.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 代理商活动操作日志查询请求对象
+ *
+ * @author
+ * @since 2025-12-30
+ */
+@Data
+@Schema(name = "代理商活动操作日志查询请求对象")
+public class AgentActivityLogQueryReq {
+
+ @Min(value = 1, message = "页码必须大于0")
+ @Schema(description = "页码")
+ private Integer pageNum = 1;
+
+ @Min(value = 1, message = "每页数量必须大于0")
+ @Schema(description = "每页数量")
+ private Integer pageSize = 10;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "操作人ID")
+ private Integer operatorId;
+
+ @Schema(description = "操作类型")
+ private String operationType;
+
+ @Schema(description = "开始时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime startTime;
+
+ @Schema(description = "结束时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime endTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityParticipantQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityParticipantQueryReq.java
new file mode 100644
index 0000000..f6cf8f3
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityParticipantQueryReq.java
@@ -0,0 +1,33 @@
+package com.seer.teach.mp.admin.controller.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import lombok.Data;
+
+/**
+ * 代理商活动参与记录查询请求对象
+ *
+ * @author
+ * @since 2025-12-30
+ */
+@Data
+@Schema(name = "代理商活动参与记录查询请求对象")
+public class AgentActivityParticipantQueryReq {
+
+ @Min(value = 1, message = "页码必须大于0")
+ @Schema(description = "页码")
+ private Integer pageNum = 1;
+
+ @Min(value = 1, message = "每页数量必须大于0")
+ @Schema(description = "每页数量")
+ private Integer pageSize = 10;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "家长ID")
+ private Integer parentId;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentEmployeeRelationQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentEmployeeRelationQueryReq.java
new file mode 100644
index 0000000..dd9a301
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentEmployeeRelationQueryReq.java
@@ -0,0 +1,19 @@
+package com.seer.teach.mp.admin.controller.req;
+
+import com.seer.teach.common.request.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(name = "AgentEmployeeRelationQueryReq", description = "代理商员工关联查询请求参数")
+@Data
+public class AgentEmployeeRelationQueryReq extends PageRequest {
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "员工用户ID")
+ private Integer employeeUserId;
+
+ @Schema(description = "员工状态:0-禁用,1-启用")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentEmployeeRelationReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentEmployeeRelationReq.java
new file mode 100644
index 0000000..230bc4f
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentEmployeeRelationReq.java
@@ -0,0 +1,28 @@
+package com.seer.teach.mp.admin.controller.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.NotNull;
+
+@Schema(name = "AgentEmployeeRelationReq", description = "代理商员工关联请求参数")
+@Data
+public class AgentEmployeeRelationReq {
+
+ @Schema(description = "关联ID")
+ private Integer id;
+
+ @NotNull(message = "代理商ID不能为空")
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @NotNull(message = "员工用户ID不能为空")
+ @Schema(description = "员工用户ID")
+ private Integer employeeUserId;
+
+ @Schema(description = "员工职位")
+ private String position;
+
+ @Schema(description = "员工状态:0-禁用,1-启用")
+ private Integer status = 1;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentQueryReq.java
new file mode 100644
index 0000000..aa3f95f
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentQueryReq.java
@@ -0,0 +1,28 @@
+package com.seer.teach.mp.admin.controller.req;
+
+import com.seer.teach.common.request.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "代理商查询参数")
+@Data
+public class AgentQueryReq extends PageRequest {
+
+ @Schema(description = "代理商名称")
+ private String agentName;
+
+ @Schema(description = "代理商编码")
+ private String agentCode;
+
+ @Schema(description = "代理商等级")
+ private String agentLevel;
+
+ @Schema(description = "联系人姓名")
+ private String contactName;
+
+ @Schema(description = "联系电话")
+ private String contactPhone;
+
+ @Schema(description = "代理商状态:0-禁用,1-启用")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpAccountPageReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpAccountPageReq.java
similarity index 81%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpAccountPageReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpAccountPageReq.java
index 38fd3c7..36a96b4 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpAccountPageReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpAccountPageReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import com.seer.teach.common.request.PageRequest;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpAccountReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpAccountReq.java
similarity index 93%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpAccountReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpAccountReq.java
index a44d3d8..8d11dd7 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpAccountReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpAccountReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import lombok.Data;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpActivityQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpActivityQueryReq.java
new file mode 100644
index 0000000..5666250
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpActivityQueryReq.java
@@ -0,0 +1,16 @@
+package com.seer.teach.mp.admin.controller.req;
+
+import com.seer.teach.common.request.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(name = "MpActivityQueryReq", description = "代理商活动查询请求参数")
+@Data
+public class MpActivityQueryReq extends PageRequest {
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "活动状态:0-禁用,1-启用")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpActivityReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpActivityReq.java
new file mode 100644
index 0000000..4e8ea77
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpActivityReq.java
@@ -0,0 +1,34 @@
+package com.seer.teach.mp.admin.controller.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+@Schema(name = "MpActivityReq", description = "代理商活动请求参数")
+@Data
+public class MpActivityReq {
+
+ @Schema(description = "活动ID")
+ private Integer id;
+
+ @NotBlank(message = "活动名称不能为空")
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "活动描述")
+ private String description;
+
+ @NotNull(message = "活动开始时间不能为空")
+ @Schema(description = "活动开始时间")
+ private LocalDateTime startTime;
+
+ @NotNull(message = "活动结束时间不能为空")
+ @Schema(description = "活动结束时间")
+ private LocalDateTime endTime;
+
+ @Schema(description = "活动状态:0-禁用,1-启用")
+ private Integer status = 1;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpDealerApplyQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpDealerApplyQueryReq.java
similarity index 86%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpDealerApplyQueryReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpDealerApplyQueryReq.java
index 5a9d9b5..7331372 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpDealerApplyQueryReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpDealerApplyQueryReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import com.seer.teach.common.request.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupQueryReq.java
similarity index 86%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupQueryReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupQueryReq.java
index 14d4238..5173e39 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupQueryReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupQueryReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import com.seer.teach.common.request.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupReq.java
similarity index 91%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupReq.java
index 9304e8c..400f001 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUpdateReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUpdateReq.java
similarity index 88%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUpdateReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUpdateReq.java
index 23bdd8c..39a74db 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUpdateReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUpdateReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUserQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUserQueryReq.java
similarity index 89%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUserQueryReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUserQueryReq.java
index 5ff2c89..191bed2 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUserQueryReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUserQueryReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import com.seer.teach.common.request.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUserReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUserReq.java
similarity index 91%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUserReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUserReq.java
index 7cf543d..5da8c88 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpMessageGroupUserReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpMessageGroupUserReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpSendMessageDTO.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpSendMessageDTO.java
similarity index 89%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpSendMessageDTO.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpSendMessageDTO.java
index 2c64e23..3d60ce7 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpSendMessageDTO.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpSendMessageDTO.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.api.dto;
+package com.seer.teach.mp.admin.controller.req;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageConfigPageQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageConfigPageQueryReq.java
similarity index 75%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageConfigPageQueryReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageConfigPageQueryReq.java
index c5fae16..943b2f9 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageConfigPageQueryReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageConfigPageQueryReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import com.seer.teach.common.request.PageRequest;
import lombok.Data;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageConfigReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageConfigReq.java
similarity index 95%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageConfigReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageConfigReq.java
index dad9eeb..aae28fe 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageConfigReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageConfigReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageReq.java
similarity index 95%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageReq.java
index ec7e7db..1e57ef8 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/MpTemplateMessageReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/MpTemplateMessageReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/ParentAgentActivityQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/ParentAgentActivityQueryReq.java
new file mode 100644
index 0000000..4903a19
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/ParentAgentActivityQueryReq.java
@@ -0,0 +1,51 @@
+package com.seer.teach.mp.admin.controller.req;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.seer.teach.common.request.PageRequest;
+import com.seer.teach.mp.entity.MpParentAgentActivityRelationEntity;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 家长参与代理商活动查询请求类
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(description = "家长参与代理商活动查询请求")
+public class ParentAgentActivityQueryReq extends PageRequest {
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "家长ID")
+ private Integer parentId;
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "代理商名称")
+ private String agentName;
+
+ @Schema(description = "参与状态:0-取消参与,1-正常参与")
+ private Integer status;
+
+ /**
+ * 转换为查询条件
+ * @return 查询条件
+ */
+ public LambdaQueryWrapper toQueryWrapper() {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(activityId != null, MpParentAgentActivityRelationEntity::getActivityId, activityId)
+ .eq(agentId != null, MpParentAgentActivityRelationEntity::getAgentId, agentId)
+ .eq(parentId != null, MpParentAgentActivityRelationEntity::getParentId, parentId)
+ .like(activityName != null && !activityName.isEmpty(), MpParentAgentActivityRelationEntity::getActivityName, activityName)
+ .like(agentName != null && !agentName.isEmpty(), MpParentAgentActivityRelationEntity::getAgentName, agentName)
+ .eq(status != null, MpParentAgentActivityRelationEntity::getStatus, status)
+ .orderByDesc(MpParentAgentActivityRelationEntity::getSignUpTime); // 按报名时间倒序排列
+ return wrapper;
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/TenantReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/TenantReq.java
similarity index 53%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/TenantReq.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/TenantReq.java
index b101bbb..c8a0491 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/req/TenantReq.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/TenantReq.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.req;
+package com.seer.teach.mp.admin.controller.req;
import lombok.Data;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminActivityResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminActivityResp.java
new file mode 100644
index 0000000..59e84b9
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminActivityResp.java
@@ -0,0 +1,37 @@
+package com.seer.teach.mp.admin.controller.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(name = "AdminActivityResp", description = "代理商活动响应参数")
+@Data
+public class AdminActivityResp {
+
+ private Integer id;
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "活动描述")
+ private String description;
+
+ @Schema(description = "活动开始时间")
+ private LocalDateTime startTime;
+
+ @Schema(description = "活动结束时间")
+ private LocalDateTime endTime;
+
+ @Schema(description = "活动状态:0-禁用,1-启用")
+ private Integer status;
+
+ @Schema(description = "创建人ID")
+ private Integer creatorId;
+
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminAgentActivityLogResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminAgentActivityLogResp.java
new file mode 100644
index 0000000..2fb7315
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminAgentActivityLogResp.java
@@ -0,0 +1,47 @@
+package com.seer.teach.mp.admin.controller.resp;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 代理商活动操作日志响应对象
+ *
+ * @author
+ * @since 2025-12-30
+ */
+@Data
+@Schema(name = "代理商活动操作日志响应对象")
+public class AdminAgentActivityLogResp {
+
+ @Schema(description = "日志ID")
+ private Integer id;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "操作人ID")
+ private String operatorId;
+
+ @Schema(description = "操作类型")
+ private String operationType;
+
+ @Schema(description = "操作描述")
+ private String description;
+
+ @Schema(description = "操作前数据")
+ private String beforeData;
+
+ @Schema(description = "操作后数据")
+ private String afterData;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminAgentActivityParticipantResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminAgentActivityParticipantResp.java
new file mode 100644
index 0000000..2c359a9
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminAgentActivityParticipantResp.java
@@ -0,0 +1,35 @@
+package com.seer.teach.mp.admin.controller.resp;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 代理商活动参与记录响应对象
+ *
+ * @author
+ * @since 2025-12-30
+ */
+@Data
+@Schema(name = "代理商活动参与记录响应对象")
+public class AdminAgentActivityParticipantResp {
+
+ @Schema(description = "参与记录ID")
+ private Integer id;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/AdminMpAccountResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminMpAccountResp.java
similarity index 93%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/AdminMpAccountResp.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminMpAccountResp.java
index c2bbb94..778c29c 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/AdminMpAccountResp.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminMpAccountResp.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.resp;
+package com.seer.teach.mp.admin.controller.resp;
import lombok.Data;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminParentAgentActivityResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminParentAgentActivityResp.java
new file mode 100644
index 0000000..0a7b152
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AdminParentAgentActivityResp.java
@@ -0,0 +1,45 @@
+package com.seer.teach.mp.admin.controller.resp;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 管理端家长参与代理商活动响应类
+ */
+@Data
+@Schema(description = "管理端家长参与代理商活动响应")
+public class AdminParentAgentActivityResp {
+
+ @Schema(description = "关系ID")
+ private Integer id;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "代理商名称")
+ private String agentName;
+
+ @Schema(description = "家长ID")
+ private Integer parentId;
+
+ @Schema(description = "参与状态:0-取消参与,1-正常参与")
+ private Integer status;
+
+ @Schema(description = "报名时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime signUpTime;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentEmployeeRelationResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentEmployeeRelationResp.java
new file mode 100644
index 0000000..99e19c0
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentEmployeeRelationResp.java
@@ -0,0 +1,31 @@
+package com.seer.teach.mp.admin.controller.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(name = "AgentEmployeeRelationResp", description = "代理商员工关联响应参数")
+@Data
+public class AgentEmployeeRelationResp {
+
+ private Integer id;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "员工用户ID")
+ private Integer employeeUserId;
+
+ @Schema(description = "员工职位")
+ private String position;
+
+ @Schema(description = "员工状态:0-禁用,1-启用")
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentResp.java
new file mode 100644
index 0000000..1e85a8b
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentResp.java
@@ -0,0 +1,40 @@
+package com.seer.teach.mp.admin.controller.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(name = "AgentResp", description = "代理商Response")
+@Data
+public class AgentResp {
+
+ private Integer id;
+
+ @Schema(description = "代理商名称")
+ private String agentName;
+
+ @Schema(description = "代理商编码")
+ private String agentCode;
+
+ @Schema(description = "代理商等级")
+ private String agentLevel;
+
+ @Schema(description = "联系人姓名")
+ private String contactName;
+
+ @Schema(description = "联系电话")
+ private String contactPhone;
+
+ @Schema(description = "代理商地址")
+ private String address;
+
+ @Schema(description = "代理商状态:0-禁用,1-启用")
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpDealerApplyResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpDealerApplyResp.java
similarity index 92%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpDealerApplyResp.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpDealerApplyResp.java
index 43571a7..1f3ab0c 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpDealerApplyResp.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpDealerApplyResp.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.resp;
+package com.seer.teach.mp.admin.controller.resp;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpMessageGroupResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpMessageGroupResp.java
similarity index 91%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpMessageGroupResp.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpMessageGroupResp.java
index 1eb2b9e..50ed475 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpMessageGroupResp.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpMessageGroupResp.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.resp;
+package com.seer.teach.mp.admin.controller.resp;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpMessageGroupUserResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpMessageGroupUserResp.java
similarity index 91%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpMessageGroupUserResp.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpMessageGroupUserResp.java
index 98e3221..0ced2ae 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpMessageGroupUserResp.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpMessageGroupUserResp.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.resp;
+package com.seer.teach.mp.admin.controller.resp;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpParentAgentActivityResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpParentAgentActivityResp.java
new file mode 100644
index 0000000..2246665
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpParentAgentActivityResp.java
@@ -0,0 +1,40 @@
+package com.seer.teach.mp.admin.controller.resp;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 家长参与代理商活动Resp
+ */
+@Data
+@Schema(description = "家长参与代理商活动Resp")
+public class MpParentAgentActivityResp {
+
+ @Schema(description = "关系ID")
+ private Integer id;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "代理商名称")
+ private String agentName;
+
+ @Schema(description = "家长ID")
+ private Integer parentId;
+
+ @Schema(description = "参与状态:0-取消参与,1-正常参与")
+ private Integer status;
+
+ @Schema(description = "报名时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime signUpTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpTemplateMessageConfigResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpTemplateMessageConfigResp.java
similarity index 96%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpTemplateMessageConfigResp.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpTemplateMessageConfigResp.java
index 6926e9b..fa6dda8 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpTemplateMessageConfigResp.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpTemplateMessageConfigResp.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.resp;
+package com.seer.teach.mp.admin.controller.resp;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpTemplateMessageResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpTemplateMessageResp.java
similarity index 96%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpTemplateMessageResp.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpTemplateMessageResp.java
index 2e6c581..b81e1ff 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpTemplateMessageResp.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpTemplateMessageResp.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.resp;
+package com.seer.teach.mp.admin.controller.resp;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpWxMpTemplateResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpWxMpTemplateResp.java
similarity index 92%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpWxMpTemplateResp.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpWxMpTemplateResp.java
index bbdec42..34e3019 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/controller/resp/MpWxMpTemplateResp.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/MpWxMpTemplateResp.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.controller.resp;
+package com.seer.teach.mp.admin.controller.resp;
import lombok.Data;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminActivityConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminActivityConvert.java
new file mode 100644
index 0000000..7fec4fa
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminActivityConvert.java
@@ -0,0 +1,24 @@
+package com.seer.teach.mp.admin.convert;
+
+import com.seer.teach.mp.admin.controller.req.MpActivityQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpActivityReq;
+import com.seer.teach.mp.admin.controller.resp.AdminActivityResp;
+import com.seer.teach.mp.entity.MpActivityEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public interface AdminActivityConvert {
+
+ AdminActivityConvert INSTANCE = Mappers.getMapper(AdminActivityConvert.class);
+
+ MpActivityEntity convert(MpActivityReq req);
+
+ MpActivityEntity convert(MpActivityQueryReq req);
+
+ AdminActivityResp convertToResp(MpActivityEntity entity);
+
+ List convertToRespList(List list);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentActivityParticipantConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentActivityParticipantConvert.java
new file mode 100644
index 0000000..d2f86ba
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentActivityParticipantConvert.java
@@ -0,0 +1,18 @@
+package com.seer.teach.mp.admin.convert;
+
+import com.seer.teach.mp.admin.controller.resp.AdminAgentActivityParticipantResp;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public interface AdminAgentActivityParticipantConvert {
+
+ AdminAgentActivityParticipantConvert INSTANCE = Mappers.getMapper(AdminAgentActivityParticipantConvert.class);
+
+ AdminAgentActivityParticipantResp convertToResp(MpAgentActivityParticipantEntity entity);
+
+ List convertToRespList(List entity);
+}
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentEmployeeRelationConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentEmployeeRelationConvert.java
new file mode 100644
index 0000000..8536d55
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentEmployeeRelationConvert.java
@@ -0,0 +1,24 @@
+package com.seer.teach.mp.admin.convert;
+
+import com.seer.teach.mp.admin.controller.req.AgentEmployeeRelationQueryReq;
+import com.seer.teach.mp.admin.controller.req.AgentEmployeeRelationReq;
+import com.seer.teach.mp.admin.controller.resp.AgentEmployeeRelationResp;
+import com.seer.teach.mp.entity.MpAgentEmployeeRelationEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public interface AdminAgentEmployeeRelationConvert {
+
+ AdminAgentEmployeeRelationConvert INSTANCE = Mappers.getMapper(AdminAgentEmployeeRelationConvert.class);
+
+ MpAgentEmployeeRelationEntity convert(AgentEmployeeRelationReq req);
+
+ MpAgentEmployeeRelationEntity convert(AgentEmployeeRelationQueryReq req);
+
+ AgentEmployeeRelationResp convertToResp(MpAgentEmployeeRelationEntity entity);
+
+ List convertToRespList(List mpAgentEmployeeRelationEntities);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminDealerApplicationsConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminDealerApplicationsConvert.java
similarity index 75%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminDealerApplicationsConvert.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminDealerApplicationsConvert.java
index 3d588f8..17f57a3 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminDealerApplicationsConvert.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminDealerApplicationsConvert.java
@@ -1,7 +1,7 @@
-package com.seer.teach.mp.convert;
+package com.seer.teach.mp.admin.convert;
-import com.seer.teach.mp.controller.req.MpDealerApplyQueryReq;
-import com.seer.teach.mp.controller.resp.MpDealerApplyResp;
+import com.seer.teach.mp.admin.controller.req.MpDealerApplyQueryReq;
+import com.seer.teach.mp.admin.controller.resp.MpDealerApplyResp;
import com.seer.teach.mp.entity.MpDealerApplicationsEntity;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminMpAccountConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminMpAccountConvert.java
similarity index 75%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminMpAccountConvert.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminMpAccountConvert.java
index bf12e36..52787b1 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminMpAccountConvert.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminMpAccountConvert.java
@@ -1,7 +1,7 @@
-package com.seer.teach.mp.convert;
+package com.seer.teach.mp.admin.convert;
-import com.seer.teach.mp.controller.req.MpAccountReq;
-import com.seer.teach.mp.controller.resp.AdminMpAccountResp;
+import com.seer.teach.mp.admin.controller.req.MpAccountReq;
+import com.seer.teach.mp.admin.controller.resp.AdminMpAccountResp;
import com.seer.teach.mp.entity.MpAccountEntity;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminMpTemplateMessageConfigConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminMpTemplateMessageConfigConvert.java
similarity index 74%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminMpTemplateMessageConfigConvert.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminMpTemplateMessageConfigConvert.java
index 8a5fb04..26c30ed 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/AdminMpTemplateMessageConfigConvert.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminMpTemplateMessageConfigConvert.java
@@ -1,8 +1,8 @@
-package com.seer.teach.mp.convert;
+package com.seer.teach.mp.admin.convert;
-import com.seer.teach.mp.controller.req.MpTemplateMessageConfigPageQueryReq;
-import com.seer.teach.mp.controller.req.MpTemplateMessageConfigReq;
-import com.seer.teach.mp.controller.resp.MpTemplateMessageConfigResp;
+import com.seer.teach.mp.admin.controller.req.MpTemplateMessageConfigPageQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpTemplateMessageConfigReq;
+import com.seer.teach.mp.admin.controller.resp.MpTemplateMessageConfigResp;
import com.seer.teach.mp.entity.MpTemplateMessageConfigEntity;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminParentAgentActivityConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminParentAgentActivityConvert.java
new file mode 100644
index 0000000..ff236ad
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminParentAgentActivityConvert.java
@@ -0,0 +1,18 @@
+package com.seer.teach.mp.admin.convert;
+
+import com.seer.teach.mp.admin.controller.resp.AdminParentAgentActivityResp;
+import com.seer.teach.mp.entity.MpParentAgentActivityRelationEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public interface AdminParentAgentActivityConvert {
+
+ AdminParentAgentActivityConvert INSTANCE = Mappers.getMapper(AdminParentAgentActivityConvert.class);
+
+ AdminParentAgentActivityResp convertToResp(MpParentAgentActivityRelationEntity entity);
+
+ List convertToRespList(List entityList);
+}
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AgentConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AgentConvert.java
new file mode 100644
index 0000000..c43a47b
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AgentConvert.java
@@ -0,0 +1,23 @@
+package com.seer.teach.mp.admin.convert;
+
+import com.seer.teach.mp.admin.controller.req.AgentQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AgentResp;
+import com.seer.teach.mp.entity.MpAgentEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public interface AgentConvert {
+
+ AgentConvert INSTANCE = Mappers.getMapper(AgentConvert.class);
+
+ AgentResp convertOne(MpAgentEntity entity);
+
+ List convertRespList(List list);
+
+ MpAgentEntity convertOne(AgentQueryReq req);
+
+ AgentQueryReq convertToReq(MpAgentEntity entity);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpMessageGroupConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpMessageGroupConvert.java
similarity index 66%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpMessageGroupConvert.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpMessageGroupConvert.java
index 4d6cf34..f087cce 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpMessageGroupConvert.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpMessageGroupConvert.java
@@ -1,9 +1,9 @@
-package com.seer.teach.mp.convert;
+package com.seer.teach.mp.admin.convert;
-import com.seer.teach.mp.controller.req.MpMessageGroupQueryReq;
-import com.seer.teach.mp.controller.req.MpMessageGroupReq;
-import com.seer.teach.mp.controller.req.MpMessageGroupUpdateReq;
-import com.seer.teach.mp.controller.resp.MpMessageGroupResp;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupReq;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupUpdateReq;
+import com.seer.teach.mp.admin.controller.resp.MpMessageGroupResp;
import com.seer.teach.mp.entity.MpMessageGroupEntity;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpMessageGroupUserConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpMessageGroupUserConvert.java
similarity index 70%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpMessageGroupUserConvert.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpMessageGroupUserConvert.java
index 484d807..32bcb07 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpMessageGroupUserConvert.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpMessageGroupUserConvert.java
@@ -1,8 +1,8 @@
-package com.seer.teach.mp.convert;
+package com.seer.teach.mp.admin.convert;
-import com.seer.teach.mp.controller.req.MpMessageGroupUserQueryReq;
-import com.seer.teach.mp.controller.req.MpMessageGroupUserReq;
-import com.seer.teach.mp.controller.resp.MpMessageGroupUserResp;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupUserQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpMessageGroupUserReq;
+import com.seer.teach.mp.admin.controller.resp.MpMessageGroupUserResp;
import com.seer.teach.mp.entity.MpMessageGroupUserEntity;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpWxMpTemplateConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpWxMpTemplateConvert.java
similarity index 80%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpWxMpTemplateConvert.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpWxMpTemplateConvert.java
index a0e3c94..ecfa7dd 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/convert/MpWxMpTemplateConvert.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/MpWxMpTemplateConvert.java
@@ -1,7 +1,7 @@
-package com.seer.teach.mp.convert;
+package com.seer.teach.mp.admin.convert;
-import com.seer.teach.mp.controller.resp.MpTemplateMessageResp;
-import com.seer.teach.mp.controller.resp.MpWxMpTemplateResp;
+import com.seer.teach.mp.admin.controller.resp.MpTemplateMessageResp;
+import com.seer.teach.mp.admin.controller.resp.MpWxMpTemplateResp;
import com.seer.teach.mp.entity.MpTemplateMessageEntity;
import me.chanjar.weixin.mp.bean.template.WxMpTemplate;
import org.mapstruct.Mapper;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminAgentService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminAgentService.java
new file mode 100644
index 0000000..dd4b521
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminAgentService.java
@@ -0,0 +1,98 @@
+package com.seer.teach.mp.admin.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.utils.PageConverterUtils;
+import com.seer.teach.mp.admin.controller.req.AgentQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AgentResp;
+import com.seer.teach.mp.admin.convert.AgentConvert;
+import com.seer.teach.mp.entity.MpAgentEntity;
+import com.seer.teach.mp.service.IMpAgentService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class AdminAgentService {
+
+ private final IMpAgentService mpAgentService;
+
+ /**
+ * 获取代理商列表
+ *
+ * @param pageReq 分页参数
+ * @return 代理商列表
+ */
+ public PageListBean pageList(AgentQueryReq pageReq) {
+ Page pageParam = new Page<>(pageReq.getPageNo(), pageReq.getPageSize());
+
+ MpAgentEntity query = AgentConvert.INSTANCE.convertOne(pageReq);
+ IPage resultPage = mpAgentService.page(pageParam, new LambdaQueryWrapper<>(MpAgentEntity.class)
+ .like(StringUtils.isNotBlank(query.getAgentName()), MpAgentEntity::getAgentName, query.getAgentName())
+ .like(StringUtils.isNotBlank(query.getContactName()), MpAgentEntity::getContactName, query.getContactName())
+ .like(StringUtils.isNotBlank(query.getContactPhone()), MpAgentEntity::getContactPhone, query.getContactPhone()));
+
+ return PageConverterUtils.convertPageListBean(resultPage, AgentConvert.INSTANCE::convertRespList);
+ }
+
+ /**
+ * 获取代理商详情
+ *
+ * @param id 代理商Id
+ * @return 代理商详情
+ */
+ public AgentResp getAgentById(Integer id) {
+ MpAgentEntity agentEntity = mpAgentService.getAgentById(id);
+ return AgentConvert.INSTANCE.convertOne(agentEntity);
+ }
+
+ /**
+ * 保存代理商
+ *
+ * @param agentEntity 代理商实体
+ * @return 是否成功
+ */
+ public Boolean saveAgent(MpAgentEntity agentEntity) {
+ boolean result = mpAgentService.saveAgent(agentEntity);
+ log.info("保存代理商结果: {}", result);
+ return result;
+ }
+
+ /**
+ * 更新代理商
+ *
+ * @param agentEntity 代理商实体
+ * @return 是否成功
+ */
+ public Boolean updateAgent(MpAgentEntity agentEntity) {
+ boolean result = mpAgentService.updateAgent(agentEntity);
+ log.info("更新代理商结果: {}", result);
+ return result;
+ }
+
+ /**
+ * 删除代理商
+ *
+ * @param ids 代理商ID列表
+ * @return 是否成功
+ */
+ public Boolean deleteById(List ids) {
+ if(ids == null || ids.isEmpty()){
+ log.warn("删除代理商时,ID列表为空");
+ return false;
+ }
+ boolean result = mpAgentService.removeByIds(ids);
+ log.info("删除代理商结果: {}", result);
+ if(result){
+ log.info("删除代理商成功,ID列表: {}", ids);
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminDealerApplicationsService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminDealerApplicationsService.java
similarity index 93%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminDealerApplicationsService.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminDealerApplicationsService.java
index c1165fc..6f3a456 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminDealerApplicationsService.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminDealerApplicationsService.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.service;
+package com.seer.teach.mp.admin.service;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -8,11 +8,12 @@ import com.seer.teach.common.enums.ResultCodeEnum;
import com.seer.teach.common.enums.RoleEnum;
import com.seer.teach.common.exception.CommonException;
import com.seer.teach.common.utils.PageConverterUtils;
-import com.seer.teach.mp.controller.req.MpDealerApplyQueryReq;
-import com.seer.teach.mp.controller.resp.MpDealerApplyResp;
-import com.seer.teach.mp.convert.AdminDealerApplicationsConvert;
+import com.seer.teach.mp.admin.controller.req.MpDealerApplyQueryReq;
+import com.seer.teach.mp.admin.controller.resp.MpDealerApplyResp;
+import com.seer.teach.mp.admin.convert.AdminDealerApplicationsConvert;
import com.seer.teach.mp.entity.MpDealerApplicationsEntity;
import com.seer.teach.mp.request.DealerApplyReq;
+import com.seer.teach.mp.service.IMpDealerApplicationsService;
import com.seer.teach.user.api.UserInfoServiceApi;
import com.seer.teach.user.api.dto.UserInfoDTO;
import lombok.RequiredArgsConstructor;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminMpAccountService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminMpAccountService.java
similarity index 94%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminMpAccountService.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminMpAccountService.java
index b0e4f3b..c755dbb 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminMpAccountService.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminMpAccountService.java
@@ -1,5 +1,5 @@
-package com.seer.teach.mp.service;
+package com.seer.teach.mp.admin.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -8,12 +8,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.seer.teach.common.PageListBean;
import com.seer.teach.common.utils.PageConverterUtils;
import com.seer.teach.mp.api.WechatOfficialAccountApi;
-import com.seer.teach.mp.controller.req.MpAccountPageReq;
-import com.seer.teach.mp.controller.req.MpAccountReq;
-import com.seer.teach.mp.controller.resp.AdminMpAccountResp;
-import com.seer.teach.mp.convert.AdminMpAccountConvert;
+import com.seer.teach.mp.admin.controller.req.MpAccountPageReq;
+import com.seer.teach.mp.admin.controller.req.MpAccountReq;
+import com.seer.teach.mp.admin.controller.resp.AdminMpAccountResp;
+import com.seer.teach.mp.admin.convert.AdminMpAccountConvert;
import com.seer.teach.mp.entity.MpAccountEntity;
import com.seer.teach.mp.factory.MpServiceFactory;
+import com.seer.teach.mp.service.IMpAccountService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminParentAgentActivityService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminParentAgentActivityService.java
new file mode 100644
index 0000000..175e5c5
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminParentAgentActivityService.java
@@ -0,0 +1,50 @@
+package com.seer.teach.mp.admin.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.utils.PageConverterUtils;
+import com.seer.teach.mp.admin.controller.req.ParentAgentActivityQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AdminParentAgentActivityResp;
+import com.seer.teach.mp.admin.controller.resp.MpParentAgentActivityResp;
+import com.seer.teach.mp.admin.convert.AdminParentAgentActivityConvert;
+import com.seer.teach.mp.entity.MpParentAgentActivityRelationEntity;
+import com.seer.teach.mp.service.IMpParentAgentActivityRelationService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+@RequiredArgsConstructor
+@Service
+@Slf4j
+public class AdminParentAgentActivityService {
+
+ private final IMpParentAgentActivityRelationService parentAgentActivityRelationService;
+
+ public PageListBean pageList(ParentAgentActivityQueryReq query) {
+
+ IPage pageParam = new Page<>(query.getPageNo(),query.getPageSize());
+
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(Objects.nonNull(query.getActivityId()), MpParentAgentActivityRelationEntity::getActivityId, query.getActivityId())
+ .eq(Objects.nonNull(query.getAgentId()), MpParentAgentActivityRelationEntity::getAgentId, query.getAgentId())
+ .eq(Objects.nonNull(query.getAgentId()), MpParentAgentActivityRelationEntity::getParentId, query.getAgentId())
+ .like(Objects.nonNull(query.getActivityName()) && !query.getActivityName().isEmpty(), MpParentAgentActivityRelationEntity::getActivityName, query.getActivityName())
+ .like(Objects.nonNull(query.getAgentName()) && !query.getAgentName().isEmpty(), MpParentAgentActivityRelationEntity::getAgentName, query.getAgentName())
+ .eq(Objects.nonNull(query.getStatus()), MpParentAgentActivityRelationEntity::getStatus, query.getStatus())
+ .orderByDesc(MpParentAgentActivityRelationEntity::getSignUpTime);
+
+ IPage pageResult = parentAgentActivityRelationService.page(pageParam, wrapper);
+
+ return PageConverterUtils.convertPageListBean(pageResult, AdminParentAgentActivityConvert.INSTANCE::convertToRespList);
+ }
+
+ public AdminParentAgentActivityResp getDetail(Integer id) {
+ MpParentAgentActivityRelationEntity entity = parentAgentActivityRelationService.getById(id);
+ return AdminParentAgentActivityConvert.INSTANCE.convertToResp(entity);
+ }
+}
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminTemplateMessageService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminTemplateMessageService.java
similarity index 94%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminTemplateMessageService.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminTemplateMessageService.java
index d503218..f57580f 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/service/AdminTemplateMessageService.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminTemplateMessageService.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.service;
+package com.seer.teach.mp.admin.service;
import cn.hutool.core.collection.CollectionUtil;
import com.seer.teach.common.enums.ResultCodeEnum;
@@ -7,9 +7,10 @@ import com.seer.teach.common.utils.AssertUtils;
import com.seer.teach.common.utils.BeanToMapConverter;
import com.seer.teach.mall.api.MallOrderApi;
import com.seer.teach.mall.api.resp.OrderDTO;
-import com.seer.teach.mp.controller.req.MpTemplateMessageReq;
+import com.seer.teach.mp.admin.controller.req.MpTemplateMessageReq;
import com.seer.teach.mp.entity.MpTemplateMessageEntity;
import com.seer.teach.mp.factory.MpServiceFactory;
+import com.seer.teach.mp.service.IMpTemplateMessageService;
import com.seer.teach.mp.service.dto.MpTemplateMessageDTO;
import com.seer.teach.user.api.UserInfoServiceApi;
import com.seer.teach.user.api.dto.UserInfoDTO;
@@ -34,7 +35,7 @@ public class AdminTemplateMessageService {
private MallOrderApi mallOrderApi;
@Resource
- private IMpTemplateMessageService mpTemplateMessageService;
+ private IMpTemplateMessageService mpTemplateMessageService;
@Resource
private MpServiceFactory mpServiceFactory;
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminActivityService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminActivityService.java
new file mode 100644
index 0000000..93a6fb3
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminActivityService.java
@@ -0,0 +1,49 @@
+package com.seer.teach.mp.admin.service;
+
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.mp.admin.controller.req.MpActivityQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpActivityReq;
+import com.seer.teach.mp.admin.controller.resp.AdminActivityResp;
+
+/**
+ *
+ * 管理端代理商活动服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+public interface IAdminActivityService {
+
+ /**
+ * 分页查询代理商活动列表(管理端)
+ *
+ * @param query 查询条件
+ * @return 代理商活动分页列表
+ */
+ PageListBean pageList(MpActivityQueryReq query);
+
+ /**
+ * 创建或更新代理商活动(管理端)
+ *
+ * @param request 活动请求对象
+ * @return 操作是否成功
+ */
+ boolean saveOrUpdateActivity(MpActivityReq request);
+
+ /**
+ * 删除代理商活动(管理端)
+ *
+ * @param id 活动ID
+ * @return 操作是否成功
+ */
+ boolean deleteActivity(Integer id);
+
+ /**
+ * 根据ID获取活动详情(管理端)
+ *
+ * @param id 活动ID
+ * @return 活动详情
+ */
+ AdminActivityResp getById(Integer id);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityLogService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityLogService.java
new file mode 100644
index 0000000..d882e1e
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityLogService.java
@@ -0,0 +1,41 @@
+package com.seer.teach.mp.admin.service;
+
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.mp.admin.controller.req.AgentActivityLogQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AdminAgentActivityLogResp;
+import com.seer.teach.mp.entity.MpAgentActivityLogEntity;
+
+/**
+ *
+ * 代理商活动操作日志表 管理端服务类
+ *
+ *
+ * @author
+ * @since 2025-12-30
+ */
+public interface IAdminAgentActivityLogService {
+
+ /**
+ * 分页查询代理商活动操作日志列表(管理端)
+ *
+ * @param query 查询条件
+ * @return 代理商活动操作日志分页列表
+ */
+ PageListBean pageList(AgentActivityLogQueryReq query);
+
+ /**
+ * 根据ID获取代理商活动操作日志详情(管理端)
+ *
+ * @param id 日志ID
+ * @return 操作日志详情
+ */
+ AdminAgentActivityLogResp getById(Integer id);
+
+ /**
+ * 根据ID删除代理商活动操作日志(管理端)
+ *
+ * @param id 日志ID
+ * @return 操作是否成功
+ */
+ boolean deleteLog(Integer id);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityParticipantService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityParticipantService.java
new file mode 100644
index 0000000..414076c
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityParticipantService.java
@@ -0,0 +1,57 @@
+package com.seer.teach.mp.admin.service;
+
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.mp.admin.controller.req.AgentActivityParticipantQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AdminAgentActivityParticipantResp;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+
+/**
+ *
+ * 代理商活动参与记录表 管理端服务类
+ *
+ *
+ * @author
+ * @since 2025-12-30
+ */
+public interface IAdminAgentActivityParticipantService {
+
+ /**
+ * 分页查询代理商活动参与记录列表(管理端)
+ *
+ * @param query 查询条件
+ * @return 代理商活动参与记录分页列表
+ */
+ PageListBean pageList(AgentActivityParticipantQueryReq query);
+
+ /**
+ * 创建代理商活动参与记录(管理端)
+ *
+ * @param entity 参与记录实体
+ * @return 操作是否成功
+ */
+ boolean saveParticipant(MpAgentActivityParticipantEntity entity);
+
+ /**
+ * 更新代理商活动参与记录(管理端)
+ *
+ * @param entity 参与记录实体
+ * @return 操作是否成功
+ */
+ boolean updateParticipant(MpAgentActivityParticipantEntity entity);
+
+ /**
+ * 根据ID删除代理商活动参与记录(管理端)
+ *
+ * @param id 参与记录ID
+ * @return 操作是否成功
+ */
+ boolean deleteParticipant(Integer id);
+
+ /**
+ * 根据ID获取代理商活动参与记录详情(管理端)
+ *
+ * @param id 参与记录ID
+ * @return 参与记录详情
+ */
+ AdminAgentActivityParticipantResp getById(Integer id);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentEmployeeRelationService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentEmployeeRelationService.java
new file mode 100644
index 0000000..dcc93c9
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentEmployeeRelationService.java
@@ -0,0 +1,59 @@
+package com.seer.teach.mp.admin.service;
+
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.mp.admin.controller.resp.AgentEmployeeRelationResp;
+import com.seer.teach.mp.admin.controller.req.AgentEmployeeRelationQueryReq;
+import com.seer.teach.mp.admin.controller.req.AgentEmployeeRelationReq;
+
+import java.util.List;
+
+/**
+ *
+ * 管理端代理商员工关系服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+public interface IAdminAgentEmployeeRelationService {
+
+ /**
+ * 分页查询代理商员工关联列表(管理端)
+ *
+ * @param query 查询条件
+ * @return 代理商员工关联分页列表
+ */
+ PageListBean pageList(AgentEmployeeRelationQueryReq query);
+
+ /**
+ * 创建或更新代理商员工关联(管理端)
+ *
+ * @param request 关联请求对象
+ * @return 操作是否成功
+ */
+ boolean saveOrUpdateRelation(AgentEmployeeRelationReq request);
+
+ /**
+ * 删除代理商员工关联(管理端)
+ *
+ * @param id 关联ID
+ * @return 操作是否成功
+ */
+ boolean deleteRelation(Integer id);
+
+ /**
+ * 根据ID获取详情(管理端)
+ *
+ * @param id 关联ID
+ * @return 关联详情
+ */
+ AgentEmployeeRelationResp getById(Integer id);
+
+ /**
+ * 根据代理商ID获取员工列表(管理端)
+ *
+ * @param agentId 代理商ID
+ * @return 员工关联列表
+ */
+ List getEmployeeRelationsByAgentId(Integer agentId);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminActivityServiceImpl.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminActivityServiceImpl.java
new file mode 100644
index 0000000..2fd4442
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminActivityServiceImpl.java
@@ -0,0 +1,59 @@
+package com.seer.teach.mp.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.utils.PageConverterUtils;
+import com.seer.teach.mp.admin.controller.req.MpActivityQueryReq;
+import com.seer.teach.mp.admin.controller.req.MpActivityReq;
+import com.seer.teach.mp.admin.controller.resp.AdminActivityResp;
+import com.seer.teach.mp.admin.service.IAdminActivityService;
+import com.seer.teach.mp.admin.convert.AdminActivityConvert;
+import com.seer.teach.mp.entity.MpActivityEntity;
+import com.seer.teach.mp.service.IMpActivityService;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ *
+ * 管理端代理商活动服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Service
+@RequiredArgsConstructor
+public class AdminActivityServiceImpl implements IAdminActivityService {
+
+ private final IMpActivityService agentActivityService;
+
+ @Override
+ public PageListBean pageList(MpActivityQueryReq query) {
+ Page page = new Page<>(query.getPageNo(), query.getPageSize());
+ var pageResult = agentActivityService.page(page, new LambdaQueryWrapper<>(MpActivityEntity.class)
+ .like(StringUtils.isNotBlank(query.getActivityName()), MpActivityEntity::getActivityName, query.getActivityName())
+ .eq(Objects.nonNull(query.getStatus()), MpActivityEntity::getStatus, query.getStatus()));
+ return PageConverterUtils.convertPageListBean(pageResult, AdminActivityConvert.INSTANCE::convertToRespList);
+ }
+
+ @Override
+ public boolean saveOrUpdateActivity(MpActivityReq request) {
+ MpActivityEntity entity = AdminActivityConvert.INSTANCE.convert(request);
+ return agentActivityService.saveOrUpdateActivity(entity);
+ }
+
+ @Override
+ public boolean deleteActivity(Integer id) {
+ return agentActivityService.deleteActivity(id);
+ }
+
+ @Override
+ public AdminActivityResp getById(Integer id) {
+ MpActivityEntity entity = agentActivityService.getById(id);
+ return AdminActivityConvert.INSTANCE.convertToResp(entity);
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityLogServiceImpl.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityLogServiceImpl.java
new file mode 100644
index 0000000..6503df2
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityLogServiceImpl.java
@@ -0,0 +1,93 @@
+package com.seer.teach.mp.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.utils.PageConverterUtils;
+import com.seer.teach.mp.admin.controller.req.AgentActivityLogQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AdminAgentActivityLogResp;
+import com.seer.teach.mp.admin.service.IAdminAgentActivityLogService;
+import com.seer.teach.mp.entity.MpAgentActivityLogEntity;
+import com.seer.teach.mp.service.IMpAgentActivityLogService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 代理商活动操作日志表 管理端服务实现类
+ *
+ *
+ * @author
+ * @since 2025-12-30
+ */
+@Service
+@RequiredArgsConstructor
+public class AdminAgentActivityLogServiceImpl implements IAdminAgentActivityLogService {
+
+ private final IMpAgentActivityLogService mpAgentActivityLogService;
+
+ @Override
+ public PageListBean pageList(AgentActivityLogQueryReq query) {
+ Page page = new Page<>(query.getPageNum(), query.getPageSize());
+
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+
+ // 根据活动ID查询
+ if (query.getActivityId() != null) {
+ wrapper.eq(MpAgentActivityLogEntity::getActivityId, query.getActivityId());
+ }
+
+ // 根据操作人ID查询
+ if (query.getOperatorId() != null) {
+ wrapper.eq(MpAgentActivityLogEntity::getOperatorId, query.getOperatorId());
+ }
+
+ // 根据操作类型查询
+ if (query.getOperationType() != null && !query.getOperationType().isEmpty()) {
+ wrapper.eq(MpAgentActivityLogEntity::getOperationType, query.getOperationType());
+ }
+
+ // 根据创建时间范围查询
+ if (query.getStartTime() != null) {
+ wrapper.ge(MpAgentActivityLogEntity::getCreateTime, query.getStartTime());
+ }
+ if (query.getEndTime() != null) {
+ wrapper.le(MpAgentActivityLogEntity::getCreateTime, query.getEndTime());
+ }
+
+ IPage result = mpAgentActivityLogService.page(page, wrapper);
+
+ return PageConverterUtils.convertPageList(result, this::convertToResp);
+ }
+
+ @Override
+ public AdminAgentActivityLogResp getById(Integer id) {
+ MpAgentActivityLogEntity entity = mpAgentActivityLogService.getById(id);
+ return convertToResp(entity);
+ }
+
+ @Override
+ public boolean deleteLog(Integer id) {
+ return mpAgentActivityLogService.removeById(id);
+ }
+
+ /**
+ * 将实体转换为响应对象
+ */
+ private AdminAgentActivityLogResp convertToResp(MpAgentActivityLogEntity entity) {
+ AdminAgentActivityLogResp resp = new AdminAgentActivityLogResp();
+ resp.setId(entity.getId());
+ resp.setActivityId(entity.getActivityId());
+ resp.setOperatorId(entity.getOperatorId());
+ resp.setOperationType(entity.getOperationType());
+ resp.setDescription(entity.getDescription());
+ resp.setBeforeData(entity.getBeforeData());
+ resp.setAfterData(entity.getAfterData());
+ resp.setCreateTime(entity.getCreateTime());
+ resp.setUpdateTime(entity.getUpdateTime());
+ return resp;
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityParticipantServiceImpl.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityParticipantServiceImpl.java
new file mode 100644
index 0000000..55abe5b
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityParticipantServiceImpl.java
@@ -0,0 +1,93 @@
+package com.seer.teach.mp.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.utils.PageConverterUtils;
+import com.seer.teach.mp.admin.controller.req.AgentActivityParticipantQueryReq;
+import com.seer.teach.mp.admin.controller.resp.AdminAgentActivityParticipantResp;
+import com.seer.teach.mp.admin.convert.AdminAgentActivityParticipantConvert;
+import com.seer.teach.mp.admin.service.IAdminAgentActivityParticipantService;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+import com.seer.teach.mp.service.IMpAgentActivityParticipantService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 代理商活动参与记录表 管理端服务实现类
+ *
+ *
+ * @author
+ * @since 2025-12-30
+ */
+@Service
+@RequiredArgsConstructor
+public class AdminAgentActivityParticipantServiceImpl implements IAdminAgentActivityParticipantService {
+
+ private final IMpAgentActivityParticipantService mpAgentActivityParticipantService;
+
+ @Override
+ public PageListBean pageList(AgentActivityParticipantQueryReq query) {
+ Page page = new Page<>(query.getPageNum(), query.getPageSize());
+
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+
+ // 根据活动ID查询
+ if (query.getActivityId() != null) {
+ wrapper.eq(MpAgentActivityParticipantEntity::getActivityId, query.getActivityId());
+ }
+
+ // 根据代理商ID查询
+ if (query.getAgentId() != null) {
+ wrapper.eq(MpAgentActivityParticipantEntity::getAgentId, query.getAgentId());
+ }
+ IPage result = mpAgentActivityParticipantService.page(page, wrapper);
+
+ return PageConverterUtils.convertPageListBean(result, AdminAgentActivityParticipantConvert.INSTANCE::convertToRespList);
+ }
+
+ @Override
+ public boolean saveParticipant(MpAgentActivityParticipantEntity entity) {
+ // 检查是否已存在相同的活动、代理商和家长记录
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(MpAgentActivityParticipantEntity::getActivityId, entity.getActivityId())
+ .eq(MpAgentActivityParticipantEntity::getAgentId, entity.getAgentId());
+
+ long count = mpAgentActivityParticipantService.count(wrapper);
+ if (count > 0) {
+ throw new RuntimeException("该代理商活动参与记录已存在");
+ }
+
+ return mpAgentActivityParticipantService.save(entity);
+ }
+
+ @Override
+ public boolean updateParticipant(MpAgentActivityParticipantEntity entity) {
+ // 检查是否存在相同的活动、代理商和家长记录(排除当前记录)
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(MpAgentActivityParticipantEntity::getActivityId, entity.getActivityId())
+ .eq(MpAgentActivityParticipantEntity::getAgentId, entity.getAgentId())
+ .ne(MpAgentActivityParticipantEntity::getId, entity.getId());
+
+ long count = mpAgentActivityParticipantService.count(wrapper);
+ if (count > 0) {
+ throw new RuntimeException("该代理商活动参与记录已存在");
+ }
+
+ return mpAgentActivityParticipantService.updateById(entity);
+ }
+
+ @Override
+ public boolean deleteParticipant(Integer id) {
+ return mpAgentActivityParticipantService.removeById(id);
+ }
+
+ @Override
+ public AdminAgentActivityParticipantResp getById(Integer id) {
+ MpAgentActivityParticipantEntity entity = mpAgentActivityParticipantService.getById(id);
+ return AdminAgentActivityParticipantConvert.INSTANCE.convertToResp(entity);
+ }
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentEmployeeRelationServiceImpl.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentEmployeeRelationServiceImpl.java
new file mode 100644
index 0000000..a37ac75
--- /dev/null
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentEmployeeRelationServiceImpl.java
@@ -0,0 +1,69 @@
+package com.seer.teach.mp.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.utils.PageConverterUtils;
+import com.seer.teach.mp.admin.service.IAdminAgentEmployeeRelationService;
+import com.seer.teach.mp.admin.controller.req.AgentEmployeeRelationQueryReq;
+import com.seer.teach.mp.admin.controller.req.AgentEmployeeRelationReq;
+import com.seer.teach.mp.admin.controller.resp.AgentEmployeeRelationResp;
+import com.seer.teach.mp.admin.convert.AdminAgentEmployeeRelationConvert;
+import com.seer.teach.mp.entity.MpAgentEmployeeRelationEntity;
+import com.seer.teach.mp.service.IMpAgentEmployeeRelationService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ *
+ * 管理端代理商员工关系服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Service
+@RequiredArgsConstructor
+public class AdminAgentEmployeeRelationServiceImpl implements IAdminAgentEmployeeRelationService {
+
+ private final IMpAgentEmployeeRelationService agentEmployeeRelationService;
+
+ @Override
+ public PageListBean pageList(AgentEmployeeRelationQueryReq query) {
+ Page pageParm = new Page<>(query.getPageNo(), query.getPageSize());
+ var pageResult = agentEmployeeRelationService.page(pageParm, new LambdaQueryWrapper<>(MpAgentEmployeeRelationEntity.class)
+ .eq(Objects.nonNull(query.getAgentId()), MpAgentEmployeeRelationEntity::getAgentId, query.getAgentId())
+ .eq(Objects.nonNull(query.getEmployeeUserId()), MpAgentEmployeeRelationEntity::getEmployeeUserId, query.getEmployeeUserId())
+ .eq(Objects.nonNull(query.getStatus()), MpAgentEmployeeRelationEntity::getStatus, query.getStatus()));
+
+ return PageConverterUtils.convertPageListBean(pageResult, AdminAgentEmployeeRelationConvert.INSTANCE::convertToRespList);
+ }
+
+ @Override
+ public boolean saveOrUpdateRelation(AgentEmployeeRelationReq request) {
+ MpAgentEmployeeRelationEntity entity = AdminAgentEmployeeRelationConvert.INSTANCE.convert(request);
+ return agentEmployeeRelationService.saveOrUpdateRelation(entity);
+ }
+
+ @Override
+ public boolean deleteRelation(Integer id) {
+ return agentEmployeeRelationService.deleteRelation(id);
+ }
+
+ @Override
+ public AgentEmployeeRelationResp getById(Integer id) {
+ MpAgentEmployeeRelationEntity entity = agentEmployeeRelationService.getById(id);
+ return AdminAgentEmployeeRelationConvert.INSTANCE.convertToResp(entity);
+ }
+
+ @Override
+ public List getEmployeeRelationsByAgentId(Integer agentId) {
+ var relations = agentEmployeeRelationService.getEmployeeRelationsByAgentId(agentId);
+ return relations.stream()
+ .map(AdminAgentEmployeeRelationConvert.INSTANCE::convertToResp)
+ .toList();
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/utils/ClassFieldUtils.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/utils/ClassFieldUtils.java
similarity index 99%
rename from seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/utils/ClassFieldUtils.java
rename to seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/utils/ClassFieldUtils.java
index dce7a8e..9e49519 100644
--- a/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/utils/ClassFieldUtils.java
+++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/utils/ClassFieldUtils.java
@@ -1,4 +1,4 @@
-package com.seer.teach.mp.utils;
+package com.seer.teach.mp.admin.utils;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.BeanDescription;
diff --git a/seer-mp/seer-mp-service-app-bootstrap/src/main/resources/db/mysql/V1.0.2__add_agent_activity_tables.sql b/seer-mp/seer-mp-service-app-bootstrap/src/main/resources/db/mysql/V1.0.2__add_agent_activity_tables.sql
new file mode 100644
index 0000000..78ca768
--- /dev/null
+++ b/seer-mp/seer-mp-service-app-bootstrap/src/main/resources/db/mysql/V1.0.2__add_agent_activity_tables.sql
@@ -0,0 +1,146 @@
+-- 创建代理商表
+DROP TABLE IF EXISTS `mp_agent`;
+CREATE TABLE `mp_agent` (
+ `id` int NOT NULL AUTO_INCREMENT COMMENT '代理商ID',
+ `agent_name` varchar(255) NOT NULL COMMENT '代理商名称',
+ `agent_code` varchar(100) NOT NULL COMMENT '代理商编码',
+ `agent_level` varchar(50) DEFAULT NULL COMMENT '代理商等级',
+ `contact_name` varchar(100) DEFAULT NULL COMMENT '联系人姓名',
+ `contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
+ `address` varchar(500) DEFAULT NULL COMMENT '代理商地址',
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '代理商状态:0-禁用,1-启用',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+ `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ `tenant_id` varchar(20) DEFAULT 'Default' COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_agent_code` (`agent_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理商表';
+
+-- 创建代理商员工关联表
+DROP TABLE IF EXISTS `mp_agent_employee_relation`;
+CREATE TABLE `mp_agent_employee_relation` (
+ `id` int NOT NULL AUTO_INCREMENT COMMENT '关联ID',
+ `agent_id` int NOT NULL COMMENT '代理商ID(对应user表的ID)',
+ `employee_user_id` int NOT NULL COMMENT '员工用户ID(对应user表的ID)',
+ `position` varchar(50) COMMENT '员工职位',
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '员工状态:0-禁用,1-启用',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+ `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ `tenant_id` varchar(20) DEFAULT 'Default' COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE KEY `uk_agent_employee` (`agent_id`, `employee_user_id`),
+ KEY `idx_agent_id` (`agent_id`),
+ KEY `idx_employee_user_id` (`employee_user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理商员工关联表';
+
+-- 创建活动表
+DROP TABLE IF EXISTS `mp_activity`;
+CREATE TABLE `mp_activity` (
+ `id` int NOT NULL AUTO_INCREMENT COMMENT '活动ID',
+ `activity_name` varchar(255) NOT NULL COMMENT '活动名称,如千人助学计划',
+ `description` text COMMENT '活动描述',
+ `start_time` datetime NOT NULL COMMENT '活动开始时间',
+ `end_time` datetime NOT NULL COMMENT '活动结束时间',
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '活动状态:0-禁用,1-启用',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+ `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ `tenant_id` varchar(20) DEFAULT 'Default' COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理商活动表';
+
+-- 创建代理商活动参与记录表
+DROP TABLE IF EXISTS `mp_agent_activity_participant`;
+CREATE TABLE `mp_agent_activity_participant` (
+ `id` int NOT NULL AUTO_INCREMENT COMMENT '参与记录ID',
+ `activity_id` int NOT NULL COMMENT '活动ID',
+ `agent_id` int NOT NULL COMMENT '代理商ID',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+ `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ `tenant_id` varchar(20) DEFAULT 'Default' COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE,
+ KEY `idx_activity_agent` (`activity_id`, `agent_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理商活动参与记录表';
+
+-- 创建代理商活动操作日志表
+DROP TABLE IF EXISTS `mp_agent_activity_log`;
+CREATE TABLE `mp_agent_activity_log` (
+ `id` int NOT NULL AUTO_INCREMENT COMMENT '日志ID',
+ `activity_id` int DEFAULT NULL COMMENT '活动ID',
+ `operator_id` int DEFAULT NULL COMMENT '操作人ID',
+ `operation_type` varchar(50) DEFAULT NULL COMMENT '操作类型',
+ `description` text COMMENT '操作描述',
+ `before_data` text COMMENT '操作前数据(JSON格式)',
+ `after_data` text COMMENT '操作后数据(JSON格式)',
+ `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除标记(0-正常,1-已删除)',
+ `create_by` varchar(20) DEFAULT NULL COMMENT '创建人',
+ `update_by` varchar(20) DEFAULT NULL COMMENT '修改人',
+ `tenant_id` varchar(20) DEFAULT 'Default' COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE,
+ KEY `idx_activity_id` (`activity_id`),
+ KEY `idx_operator_id` (`operator_id`),
+ KEY `idx_create_time` (`create_time`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代理商活动操作日志表';
+
+DROP TABLE IF EXISTS `mp_parent_agent_activity_relation`;
+CREATE TABLE `mp_parent_agent_activity_relation` (
+ `id` int NOT NULL AUTO_INCREMENT COMMENT '关系ID',
+ `activity_id` int NOT NULL COMMENT '活动ID',
+ `agent_id` int NOT NULL COMMENT '代理商ID',
+ `parent_id` int NOT NULL COMMENT '家长ID',
+ `activity_name` varchar(255) NULL COMMENT '活动名称(冗余字段)',
+ `agent_name` varchar(255) NULL COMMENT '代理商名称(冗余字段)',
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '参与状态:0-取消参与,1-正常参与',
+ `sign_up_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间',
+ `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+ `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
+ `deleted` bit(1) NULL DEFAULT b'0' COMMENT '是否删除',
+ `tenant_id` varchar(20) DEFAULT 'Default' COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE,
+ KEY `idx_activity_id` (`activity_id`),
+ KEY `idx_agent_id` (`agent_id`),
+ KEY `idx_parent_id` (`parent_id`),
+ KEY `idx_sign_up_time` (`sign_up_time`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='家长参与代理商活动关系表';
+
+DROP TABLE IF EXISTS `mp_activity_info_collection`;
+CREATE TABLE `mp_activity_info_collection` (
+ `id` int NOT NULL AUTO_INCREMENT COMMENT '信息收集ID',
+ `relation_id` int NOT NULL COMMENT '关联的家长参与代理商活动关系ID',
+ `activity_id` int NOT NULL COMMENT '活动ID',
+ `parent_id` int NOT NULL COMMENT '家长ID',
+ `child_name` varchar(100) COMMENT '孩子姓名',
+ `child_gender` varchar(10) COMMENT '孩子性别(M-男,F-女)',
+ `child_birth_date` date COMMENT '出生年月',
+ `grade` varchar(20) COMMENT '年级',
+ `school` varchar(255) COMMENT '学校',
+ `region` varchar(255) COMMENT '地区',
+ `parent_identity` varchar(20) COMMENT '家长身份(爸爸,妈妈)',
+ `learning_situation` varchar(20) COMMENT '学习情况(优、良、中、差)',
+ `weak_subject` varchar(50) COMMENT '偏科(数学、英语等)',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
+ `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
+ `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ `tenant_id` varchar(20) DEFAULT 'Default' COMMENT '租户id',
+ PRIMARY KEY (`id`) USING BTREE,
+ KEY `idx_activity_id` (`activity_id`),
+ KEY `idx_parent_id` (`parent_id`),
+ KEY `idx_relation_id` (`relation_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动信息收集表';
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/pom.xml b/seer-mp/seer-mp-service-app/pom.xml
index 349aab7..31a2b7f 100644
--- a/seer-mp/seer-mp-service-app/pom.xml
+++ b/seer-mp/seer-mp-service-app/pom.xml
@@ -29,6 +29,23 @@
org.springdoc
springdoc-openapi-starter-webmvc-ui
+
+
+ org.mapstruct
+ mapstruct
+
+
+
+ org.mapstruct
+ mapstruct-processor
+ provided
+
+
+
+ org.projectlombok
+ lombok-mapstruct-binding
+ provided
+
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityController.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityController.java
new file mode 100644
index 0000000..47db2c6
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityController.java
@@ -0,0 +1,54 @@
+package com.seer.teach.mp.app.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.DecryptionAnnotation;
+import com.seer.teach.common.annotation.EncryptionAnnotation;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.app.controller.req.AppAgentActivityQueryReq;
+import com.seer.teach.mp.app.controller.resp.AppActivityResp;
+import com.seer.teach.mp.app.service.IAppActivityService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 代理商活动App控制器
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Tag(name = "APP - 活动列表")
+@RestController
+@RequestMapping("/app/activity")
+@LogPrint
+@EncryptionAnnotation
+@DecryptionAnnotation
+@RequiredArgsConstructor
+public class AppAgentActivityController {
+
+ private final IAppActivityService agentActivityService;
+
+ @Operation(summary = "活动列表")
+ @GetMapping("/page-list")
+ @SaCheckPermission("mp:app:agent:activity:list")
+ public ResultBean> pageList(AppAgentActivityQueryReq query) {
+ Integer userId = StpUtil.getLoginIdAsInt();
+ return ResultBean.success(agentActivityService.pageList(query,userId));
+ }
+
+ @Operation(summary = "查看活动详情")
+ @GetMapping("/{id}")
+ @SaCheckPermission("mp:app:agent:activity:detail")
+ public ResultBean getDetail(@PathVariable Integer id) {
+ return ResultBean.success(agentActivityService.getById(id));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityParentInfoController.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityParentInfoController.java
new file mode 100644
index 0000000..9841036
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityParentInfoController.java
@@ -0,0 +1,49 @@
+package com.seer.teach.mp.app.controller;
+
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.dev33.satoken.stp.StpUtil;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.DecryptionAnnotation;
+import com.seer.teach.common.annotation.EncryptionAnnotation;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.app.controller.resp.AgentActivityParentInfoResp;
+import com.seer.teach.mp.app.service.IAppAgentActivityParentInfoService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ *
+ * 代理商活动参与家长信息App控制器
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Tag(name = "APP - 参与代理商活动家长信息")
+@RestController
+@RequestMapping("/app/agent/activity/parent-info")
+@LogPrint
+@EncryptionAnnotation
+@DecryptionAnnotation
+@RequiredArgsConstructor
+public class AppAgentActivityParentInfoController {
+
+ private final IAppAgentActivityParentInfoService agentActivityParentInfoService;
+
+ @Operation(summary = "获取参加指定活动的家长列表")
+ @GetMapping("/getActivityParents")
+ @SaCheckLogin
+ public ResultBean> getActivityParents(
+ @RequestParam("activityId") Integer activityId,
+ @RequestParam("agentId") Integer agentId) {
+ Integer userId = StpUtil.getLoginIdAsInt();
+ return ResultBean.success(agentActivityParentInfoService.getParentsByActivityAndAgent(activityId, agentId,userId));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityParticipantController.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityParticipantController.java
new file mode 100644
index 0000000..3f7af26
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityParticipantController.java
@@ -0,0 +1,47 @@
+package com.seer.teach.mp.app.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.DecryptionAnnotation;
+import com.seer.teach.common.annotation.EncryptionAnnotation;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.app.controller.resp.AgentActivityParticipantResp;
+import com.seer.teach.mp.app.service.IAppAgentActivityParticipantService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ *
+ * 代理商参与活动记录App控制器
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Tag(name = "APP - 代理商参与活动记录")
+@RestController
+@RequestMapping("/app/agent/activity/participant")
+@LogPrint
+@EncryptionAnnotation
+@DecryptionAnnotation
+@RequiredArgsConstructor
+public class AppAgentActivityParticipantController {
+
+ private final IAppAgentActivityParticipantService agentActivityParticipantService;
+
+ @Operation(summary = "获取代理商参加的活动列表")
+ @GetMapping()
+ @SaCheckPermission("mp:app:agent:participant:parents")
+ public ResultBean> getParentsByAgentAndActivity(@RequestParam("agentId") Integer agentId) {
+ Integer userId = StpUtil.getLoginIdAsInt();
+ return ResultBean.success(agentActivityParticipantService.getParticipantsByActivityAndAgent(agentId,userId));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentController.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentController.java
new file mode 100644
index 0000000..2df2e42
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentController.java
@@ -0,0 +1,44 @@
+package com.seer.teach.mp.app.controller;
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.common.annotation.DecryptionAnnotation;
+import com.seer.teach.common.annotation.EncryptionAnnotation;
+import com.seer.teach.common.annotation.LogPrint;
+import com.seer.teach.mp.app.controller.resp.AppMpAgentResp;
+import com.seer.teach.mp.app.service.IAppActivityService;
+import com.seer.teach.mp.app.service.IAppAgentService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 代理商App控制器
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Tag(name = "APP - 代理商管理接口")
+@RestController
+@RequestMapping("/app/agent")
+@LogPrint
+@EncryptionAnnotation
+@DecryptionAnnotation
+@RequiredArgsConstructor
+public class AppAgentController {
+
+ private final IAppActivityService agentActivityService;
+ private final IAppAgentService appAgentService;
+
+ @Operation(summary = "获取代理商详情")
+ @GetMapping("/detail")
+ public ResultBean getAgent() {
+ Integer userId = StpUtil.getLoginIdAsInt();
+ return ResultBean.success(appAgentService.getAgentRespByUserId(userId));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppParentAgentActivityController.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppParentAgentActivityController.java
new file mode 100644
index 0000000..35b1837
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppParentAgentActivityController.java
@@ -0,0 +1,62 @@
+package com.seer.teach.mp.app.controller;
+
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.dev33.satoken.stp.StpUtil;
+import com.seer.teach.common.ResultBean;
+import com.seer.teach.mp.app.controller.req.AppMpSignUpActivityReq;
+import com.seer.teach.mp.app.controller.resp.AppMpSignUpActivityResp;
+import com.seer.teach.mp.app.service.AppParentAgentActivityService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 家长参与代理商活动控制器 - 应用端
+ */
+@Tag(name = "应用端 - 家长参与代理商活动管理")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/app/parent/agent/activity")
+public class AppParentAgentActivityController {
+
+ private final AppParentAgentActivityService appParentAgentActivityService;
+
+ @PostMapping("/sign-up")
+ @SaCheckLogin
+ @Operation(summary = "家长报名参加代理商活动")
+ public ResultBean signUpForActivity(@RequestBody AppMpSignUpActivityReq request) {
+ Integer parentId = StpUtil.getLoginIdAsInt();
+ return ResultBean.success(appParentAgentActivityService.signUpForActivityWithInfo(request, parentId));
+ }
+
+ @PostMapping("/update-info")
+ @SaCheckLogin
+ @Operation(summary = "家长更新活动信息")
+ public ResultBean updateActivityInfo(@RequestBody AppMpSignUpActivityReq request) {
+ Integer parentId = StpUtil.getLoginIdAsInt();
+ return ResultBean.success(appParentAgentActivityService.updateActivityInfo(request, parentId));
+ }
+
+ @DeleteMapping("/cancel/{id}")
+ @SaCheckLogin
+ @Operation(summary = "取消报名参加代理商活动")
+ public ResultBean cancelSignUp(@PathVariable("id") Integer id) {
+ Integer parentId = StpUtil.getLoginIdAsInt();
+ return ResultBean.success(appParentAgentActivityService.cancelSignUp(id,parentId));
+ }
+
+ @GetMapping("/{agentId}/{activityId}/info")
+ @SaCheckLogin
+ @Operation(summary = "获取家长参与代理商活动详情")
+ public ResultBean getRelationById(@PathVariable("agentId") Integer agentId,@PathVariable("activityId") Integer activityId) {
+ Integer parentId = StpUtil.getLoginIdAsInt();
+ return ResultBean.success(appParentAgentActivityService.getByActivityIdAndParentId(agentId,activityId,parentId));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppAgentActivityQueryReq.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppAgentActivityQueryReq.java
new file mode 100644
index 0000000..b0b74b2
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppAgentActivityQueryReq.java
@@ -0,0 +1,16 @@
+package com.seer.teach.mp.app.controller.req;
+
+import com.seer.teach.common.request.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(name = "AppAgentActivityQueryReq", description = "代理商活动查询请求参数")
+@Data
+public class AppAgentActivityQueryReq extends PageRequest {
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "活动状态:0-禁用,1-启用")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppAgentEmployeeRelationQueryReq.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppAgentEmployeeRelationQueryReq.java
new file mode 100644
index 0000000..45caef8
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppAgentEmployeeRelationQueryReq.java
@@ -0,0 +1,16 @@
+package com.seer.teach.mp.app.controller.req;
+
+import com.seer.teach.common.request.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(name = "AppAgentEmployeeRelationQueryReq", description = "代理商员工关联查询请求参数")
+@Data
+public class AppAgentEmployeeRelationQueryReq extends PageRequest {
+
+ @Schema(description = "员工职位")
+ private String position;
+
+ @Schema(description = "员工状态:0-禁用,1-启用")
+ private Integer status;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppMpSignUpActivityReq.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppMpSignUpActivityReq.java
new file mode 100644
index 0000000..907729d
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppMpSignUpActivityReq.java
@@ -0,0 +1,52 @@
+package com.seer.teach.mp.app.controller.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Set;
+
+@Schema(name = "AppMpSignUpActivityReq", description = "家长报名参加代理商活动Req")
+@Data
+public class AppMpSignUpActivityReq {
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "手机号码")
+ private String mobile;
+
+ @Schema(description = "孩子姓名")
+ private String childName;
+
+ @Schema(description = "孩子性别")
+ private Integer childGender;
+
+ @Schema(description = "孩子出生日期")
+ private LocalDate childBirthDate;
+
+ @Schema(description = "年级")
+ private Integer grade;
+
+ @Schema(description = "学校")
+ private String school;
+
+ @Schema(description = "地区")
+ private String region;
+
+ @Schema(description = "家长身份")
+ private String parentIdentity;
+
+ @Schema(description = "学习情况")
+ private String learningSituation;
+
+ @Schema(description = "薄弱科目")
+ private List weakSubjectIds;
+
+ @Schema(description = "优势科目")
+ private List strongSubjectIds;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AgentActivityParentInfoResp.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AgentActivityParentInfoResp.java
new file mode 100644
index 0000000..7611267
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AgentActivityParentInfoResp.java
@@ -0,0 +1,59 @@
+package com.seer.teach.mp.app.controller.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Schema(name = "AgentActivityParentInfoResp", description = "代理商活动参与家长信息Resp")
+@Data
+public class AgentActivityParentInfoResp {
+
+ @Schema(description = "信息收集记录ID")
+ private Integer id;
+
+ @Schema(description = "关联的家长参与代理商活动关系ID")
+ private Integer relationId;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "家长ID")
+ private Integer parentId;
+
+ @Schema(description = "孩子姓名")
+ private String childName;
+
+ @Schema(description = "孩子性别(M-男,F-女)")
+ private String childGender;
+
+ @Schema(description = "出生年月")
+ private LocalDate childBirthDate;
+
+ @Schema(description = "年级")
+ private String grade;
+
+ @Schema(description = "学校")
+ private String school;
+
+ @Schema(description = "地区")
+ private String region;
+
+ @Schema(description = "家长身份(爸爸,妈妈)")
+ private String parentIdentity;
+
+ @Schema(description = "学习情况(优、良、中、差)")
+ private String learningSituation;
+
+ @Schema(description = "优势学科ID列表")
+ private List strongSubjectIds;
+
+ @Schema(description = "劣势学科ID列表")
+ private List weakSubjectIds;
+
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AgentActivityParticipantResp.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AgentActivityParticipantResp.java
new file mode 100644
index 0000000..2c50ec5
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AgentActivityParticipantResp.java
@@ -0,0 +1,21 @@
+package com.seer.teach.mp.app.controller.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(name = "AgentActivityParticipant", description = "代理商活动参与记录")
+@Data
+public class AgentActivityParticipantResp {
+
+ private Integer id;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ private String activityName;
+
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppActivityResp.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppActivityResp.java
new file mode 100644
index 0000000..9be7d43
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppActivityResp.java
@@ -0,0 +1,34 @@
+package com.seer.teach.mp.app.controller.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(name = "AppActivityResp", description = "活动响应参数")
+@Data
+public class AppActivityResp {
+
+ private Integer id;
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "活动描述")
+ private String description;
+
+ @Schema(description = "活动开始时间")
+ private LocalDateTime startTime;
+
+ @Schema(description = "活动结束时间")
+ private LocalDateTime endTime;
+
+ @Schema(description = "活动状态:0-禁用,1-启用")
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppAgentEmployeeRelationResp.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppAgentEmployeeRelationResp.java
new file mode 100644
index 0000000..818b163
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppAgentEmployeeRelationResp.java
@@ -0,0 +1,32 @@
+package com.seer.teach.mp.app.controller.resp;
+
+import com.seer.teach.user.api.dto.UserInfoDTO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(name = "AppAgentEmployeeRelationResp", description = "代理商员工关联响应参数")
+@Data
+public class AppAgentEmployeeRelationResp {
+
+ private Integer id;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "员工用户信息")
+ private UserInfoDTO employeeUserInfo;
+
+ @Schema(description = "员工职位")
+ private String position;
+
+ @Schema(description = "员工状态:0-禁用,1-启用")
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppMpAgentResp.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppMpAgentResp.java
new file mode 100644
index 0000000..e78b77d
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppMpAgentResp.java
@@ -0,0 +1,30 @@
+package com.seer.teach.mp.app.controller.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(description = "App端代理商响应对象")
+public class AppMpAgentResp {
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "代理商名称")
+ private String agentName;
+
+ @Schema(description = "代理商编码")
+ private String agentCode;
+
+ @Schema(description = "代理商等级")
+ private String agentLevel;
+
+ @Schema(description = "联系人姓名")
+ private String contactName;
+
+ @Schema(description = "联系电话")
+ private String contactPhone;
+
+ @Schema(description = "代理商地址")
+ private String address;
+}
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppMpSignUpActivityResp.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppMpSignUpActivityResp.java
new file mode 100644
index 0000000..940737a
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppMpSignUpActivityResp.java
@@ -0,0 +1,53 @@
+package com.seer.teach.mp.app.controller.resp;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Schema(name = "AppMpSignUpActivityResp", description = "家长报名参加代理商活动信息Resp")
+@Data
+public class AppMpSignUpActivityResp {
+
+ @Schema(description = "id")
+ private Integer id;
+
+ @Schema(description = "活动ID")
+ private Integer activityId;
+
+ @Schema(description = "代理商ID")
+ private Integer agentId;
+
+ @Schema(description = "活动名称")
+ private String activityName;
+
+ @Schema(description = "代理商名称")
+ private String agentName;
+
+ @Schema(description = "孩子姓名")
+ private String childName;
+
+ @Schema(description = "孩子性别")
+ private String childGender;
+
+ @Schema(description = "孩子出生日期")
+ private LocalDate childBirthDate;
+
+ @Schema(description = "年级")
+ private String grade;
+
+ @Schema(description = "学校")
+ private String school;
+
+ @Schema(description = "地区")
+ private String region;
+
+ @Schema(description = "家长身份")
+ private String parentIdentity;
+
+ @Schema(description = "学习情况")
+ private String learningSituation;
+
+ @Schema(description = "薄弱科目")
+ private String weakSubject;
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppAgentActivityConvert.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppAgentActivityConvert.java
new file mode 100644
index 0000000..9358763
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppAgentActivityConvert.java
@@ -0,0 +1,24 @@
+package com.seer.teach.mp.app.convert;
+
+import com.seer.teach.mp.app.controller.req.AppAgentActivityQueryReq;
+import com.seer.teach.mp.app.controller.resp.AppActivityResp;
+import com.seer.teach.mp.entity.MpActivityEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public interface AppAgentActivityConvert {
+
+ AppAgentActivityConvert INSTANCE = Mappers.getMapper(AppAgentActivityConvert.class);
+
+ MpActivityEntity convert(AppAgentActivityQueryReq req);
+
+ @Mapping(target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Mapping(target = "updateTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
+ AppActivityResp convertToResp(MpActivityEntity entity);
+
+ List convertToRespList(List mpAgentActivityEntities);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppAgentConvert.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppAgentConvert.java
new file mode 100644
index 0000000..8b967ef
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppAgentConvert.java
@@ -0,0 +1,19 @@
+package com.seer.teach.mp.app.convert;
+
+import com.seer.teach.mp.app.controller.resp.AppMpAgentResp;
+import com.seer.teach.mp.entity.MpAgentEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 代理商实体转换器
+ */
+@Mapper
+public interface AppAgentConvert {
+
+ AppAgentConvert INSTANCE = Mappers.getMapper(AppAgentConvert.class);
+
+ @Mapping(source = "id", target = "agentId")
+ AppMpAgentResp entityToResp(MpAgentEntity entity);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppMpActivityInfoCollectionConvert.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppMpActivityInfoCollectionConvert.java
new file mode 100644
index 0000000..36c2cf3
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppMpActivityInfoCollectionConvert.java
@@ -0,0 +1,17 @@
+package com.seer.teach.mp.app.convert;
+
+import com.seer.teach.mp.app.controller.req.AppMpSignUpActivityReq;
+import com.seer.teach.mp.app.controller.resp.AppMpSignUpActivityResp;
+import com.seer.teach.mp.entity.MpActivityInfoCollectionEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface AppMpActivityInfoCollectionConvert {
+
+ AppMpActivityInfoCollectionConvert INSTANCE = Mappers.getMapper(AppMpActivityInfoCollectionConvert.class);
+
+ AppMpSignUpActivityResp convert2Resp(MpActivityInfoCollectionEntity entity);
+
+ MpActivityInfoCollectionEntity convert2Entity(AppMpSignUpActivityReq request);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/AppParentAgentActivityService.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/AppParentAgentActivityService.java
new file mode 100644
index 0000000..2c3c5d7
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/AppParentAgentActivityService.java
@@ -0,0 +1,136 @@
+package com.seer.teach.mp.app.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.seer.teach.common.enums.ResultCodeEnum;
+import com.seer.teach.common.utils.AssertUtils;
+import com.seer.teach.mp.app.controller.req.AppMpSignUpActivityReq;
+import com.seer.teach.mp.app.controller.resp.AppMpSignUpActivityResp;
+import com.seer.teach.mp.app.convert.AppMpActivityInfoCollectionConvert;
+import com.seer.teach.mp.entity.MpActivityEntity;
+import com.seer.teach.mp.entity.MpActivityInfoCollectionEntity;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+import com.seer.teach.mp.entity.MpAgentEntity;
+import com.seer.teach.mp.entity.MpParentAgentActivityRelationEntity;
+import com.seer.teach.mp.service.IMpActivityInfoCollectionService;
+import com.seer.teach.mp.service.IMpActivityService;
+import com.seer.teach.mp.service.IMpAgentActivityParticipantService;
+import com.seer.teach.mp.service.IMpAgentService;
+import com.seer.teach.mp.service.IMpParentAgentActivityRelationService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+@RequiredArgsConstructor
+@Slf4j
+@Service
+public class AppParentAgentActivityService {
+
+ private final IMpParentAgentActivityRelationService parentAgentActivityRelationService;
+ private final IMpActivityInfoCollectionService activityInfoCollectionService;
+ private final IMpActivityService activityService;
+ private final IMpAgentService agentService;
+ private final IMpAgentActivityParticipantService mpAgentActivityParticipantService;
+
+ /**
+ * 报名活动
+ *
+ * @param request 报名信息
+ * @param parentId 家长ID
+ * @return true表示成功,false表示失败
+ */
+ public boolean signUpForActivityWithInfo(AppMpSignUpActivityReq request, Integer parentId) {
+ Integer agentId = request.getAgentId();
+ Integer activityId = request.getActivityId();
+ MpActivityEntity activity = activityService.getById(activityId);
+ AssertUtils.notNull(activity, ResultCodeEnum.INVALID_ACTIVITY);
+
+ MpAgentEntity agent = agentService.getById(agentId);
+ AssertUtils.notNull(agent, ResultCodeEnum.INVALID_AGENT);
+
+ MpAgentActivityParticipantEntity participants = mpAgentActivityParticipantService.getParticipantsByActivityAndAgent(request.getActivityId(), request.getAgentId());
+ AssertUtils.notNull(participants, ResultCodeEnum.AGENT_NON_PARTICIPANT_ACTIVE);
+
+ MpParentAgentActivityRelationEntity relation = parentAgentActivityRelationService.getByAgentIdAndActivityIdAndParentId(agentId, activityId, parentId);
+ AssertUtils.isNull(relation, ResultCodeEnum.PARENT_ALREADY_SIGN_UP);
+
+ relation = new MpParentAgentActivityRelationEntity();
+ relation.setActivityId(activityId);
+ relation.setAgentId(agentId);
+ relation.setParentId(parentId);
+ relation.setActivityName(activity.getActivityName());
+ relation.setAgentName(agent.getAgentName());
+ relation.setStatus(1);
+ relation.setSignUpTime(LocalDateTime.now());
+ boolean saved = parentAgentActivityRelationService.save(relation);
+ log.info("报名结果:{},关系ID:{}", saved, relation.getId());
+
+ if(saved){
+ MpActivityInfoCollectionEntity mpActivityInfoCollectionEntity = AppMpActivityInfoCollectionConvert.INSTANCE.convert2Entity(request);
+ mpActivityInfoCollectionEntity.setRelationId(relation.getId());
+ boolean activityInfoCollectionResult = activityInfoCollectionService.save(mpActivityInfoCollectionEntity);
+ log.info("活动信息收集结果:{}", activityInfoCollectionResult);
+ return activityInfoCollectionResult;
+ }
+ return false;
+ }
+
+ /**
+ * 更新活动信息
+ *
+ * @param request 活动信息
+ * @param parentId 家长ID
+ * @return true表示成功,false表示失败
+ */
+ public boolean updateActivityInfo(AppMpSignUpActivityReq request, Integer parentId) {
+ Integer agentId = request.getAgentId();
+ Integer activityId = request.getActivityId();
+ MpParentAgentActivityRelationEntity relation = parentAgentActivityRelationService.getByAgentIdAndActivityIdAndParentId(agentId, activityId, parentId);
+ AssertUtils.notNull(relation, ResultCodeEnum.PARENT_NOT_SIGNED_UP);
+
+ MpActivityInfoCollectionEntity mpActivityInfoCollectionEntity = AppMpActivityInfoCollectionConvert.INSTANCE.convert2Entity(request);
+ mpActivityInfoCollectionEntity.setRelationId(relation.getId());
+ return activityInfoCollectionService.updateById(mpActivityInfoCollectionEntity);
+ }
+
+ /**
+ * 取消报名
+ *
+ * @param relationId 关系ID
+ * @param parentId 家长ID
+ * @return true表示成功,false表示失败
+ */
+ public boolean cancelSignUp(Integer relationId, Integer parentId) {
+ MpParentAgentActivityRelationEntity relation = parentAgentActivityRelationService.getById(relationId);
+ if (Objects.nonNull(relation) && relation.getParentId().equals(parentId)) {
+ relation.setStatus(0);
+ boolean result = parentAgentActivityRelationService.updateById(relation);
+ log.info("取消报名结果:{}", result);
+ return result;
+ }
+ return false;
+ }
+
+
+ /**
+ * 获取报名信息
+ *
+ * @param agentId 代理商ID
+ * @param activityId 活动ID
+ * @param parentId 家长ID
+ * @return 报名信息
+ */
+ public AppMpSignUpActivityResp getByActivityIdAndParentId(Integer agentId, Integer activityId, Integer parentId) {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(MpParentAgentActivityRelationEntity::getActivityId, activityId)
+ .eq(MpParentAgentActivityRelationEntity::getParentId, parentId)
+ .eq(MpParentAgentActivityRelationEntity::getAgentId, agentId);
+ MpParentAgentActivityRelationEntity one = parentAgentActivityRelationService.getOne(wrapper);
+ AssertUtils.notNull(one, ResultCodeEnum.INVALID_ACTIVITY);
+ MpActivityInfoCollectionEntity activityInfoCollection = activityInfoCollectionService.getByActivityIdAndParentId(agentId, activityId, parentId);
+ return AppMpActivityInfoCollectionConvert.INSTANCE.convert2Resp(activityInfoCollection);
+ }
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppActivityService.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppActivityService.java
new file mode 100644
index 0000000..89f6753
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppActivityService.java
@@ -0,0 +1,33 @@
+package com.seer.teach.mp.app.service;
+
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.mp.app.controller.resp.AppActivityResp;
+import com.seer.teach.mp.app.controller.req.AppAgentActivityQueryReq;
+
+/**
+ *
+ * APP端代理商活动服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+public interface IAppActivityService {
+
+ /**
+ * 分页查询代理商活动列表
+ *
+ * @param query 查询条件
+ * @param agentId 代理商ID
+ * @return 代理商活动分页列表
+ */
+ PageListBean pageList(AppAgentActivityQueryReq query, Integer agentId);
+
+ /**
+ * 根据ID获取活动详情
+ *
+ * @param id 活动ID
+ * @return 活动详情
+ */
+ AppActivityResp getById(Integer id);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityParentInfoService.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityParentInfoService.java
new file mode 100644
index 0000000..38829b6
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityParentInfoService.java
@@ -0,0 +1,26 @@
+package com.seer.teach.mp.app.service;
+
+import com.seer.teach.mp.app.controller.resp.AgentActivityParentInfoResp;
+
+import java.util.List;
+
+/**
+ *
+ * 代理商活动参与家长信息服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+public interface IAppAgentActivityParentInfoService {
+
+ /**
+ * 根据活动ID获取参与的家长信息列表
+ *
+ * @param activityId 活动ID
+ * @param agentId 代理商ID
+ * @param userId 用户ID
+ * @return 参与活动的家长信息列表
+ */
+ List getParentsByActivityAndAgent(Integer activityId, Integer agentId,Integer userId);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityParticipantService.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityParticipantService.java
new file mode 100644
index 0000000..7e3a46f
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityParticipantService.java
@@ -0,0 +1,26 @@
+package com.seer.teach.mp.app.service;
+
+import com.seer.teach.mp.app.controller.resp.AgentActivityParticipantResp;
+
+import java.util.List;
+
+/**
+ *
+ * APP端代理商活动参与记录服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+public interface IAppAgentActivityParticipantService {
+
+ /**
+ * 根据活动ID和代理商ID获取参与记录
+ *
+ * @param agentId 代理商ID
+ * @param userId 用户Id
+ * @return 参与记录列表
+ */
+ List getParticipantsByActivityAndAgent(Integer agentId,Integer userId);
+
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentService.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentService.java
new file mode 100644
index 0000000..7f868dd
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentService.java
@@ -0,0 +1,25 @@
+package com.seer.teach.mp.app.service;
+
+import com.seer.teach.mp.app.controller.resp.AppMpAgentResp;
+
+/**
+ * App端代理商服务接口
+ */
+public interface IAppAgentService {
+
+ /**
+ * 根据用户ID获取代理商响应对象
+ *
+ * @param userId 用户ID
+ * @return 代理商响应对象
+ */
+ AppMpAgentResp getAgentRespByUserId(Integer userId);
+
+ /**
+ * 根据用户ID获取代理商ID
+ *
+ * @param userId 用户ID
+ * @return 代理商ID
+ */
+ Integer getAgentIdByUserId(Integer userId);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppActivityServiceImpl.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppActivityServiceImpl.java
new file mode 100644
index 0000000..e238fff
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppActivityServiceImpl.java
@@ -0,0 +1,56 @@
+package com.seer.teach.mp.app.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.seer.teach.common.PageListBean;
+import com.seer.teach.common.utils.PageConverterUtils;
+import com.seer.teach.mp.app.controller.req.AppAgentActivityQueryReq;
+import com.seer.teach.mp.app.controller.resp.AppActivityResp;
+import com.seer.teach.mp.app.convert.AppAgentActivityConvert;
+import com.seer.teach.mp.app.service.IAppActivityService;
+import com.seer.teach.mp.entity.MpActivityEntity;
+import com.seer.teach.mp.service.IMpActivityService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ *
+ * APP端代理商活动服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class AppActivityServiceImpl implements IAppActivityService {
+
+ private final IMpActivityService activityService;
+
+ @Override
+ public PageListBean pageList(AppAgentActivityQueryReq query, Integer agentId) {
+ log.info("查询参数:{}", query);
+ IPage page = new Page<>(query.getPageNo(), query.getPageSize());
+ var pageResult = activityService.page(page, new LambdaQueryWrapper<>(MpActivityEntity.class)
+ .like(StringUtils.isNotBlank(query.getActivityName()), MpActivityEntity::getActivityName, query.getActivityName())
+ .eq(Objects.nonNull(query.getStatus()), MpActivityEntity::getStatus, query.getStatus()));
+ if(Objects.isNull(pageResult) || CollectionUtil.isEmpty(pageResult.getRecords())){
+ log.info("查询结果为空");
+ }
+ log.info("查询代理商活动数量:{}", pageResult.getTotal());
+ return PageConverterUtils.convertPageListBean(pageResult, AppAgentActivityConvert.INSTANCE::convertToRespList);
+ }
+
+ @Override
+ public AppActivityResp getById(Integer id) {
+ MpActivityEntity entity = activityService.getById(id);
+ return AppAgentActivityConvert.INSTANCE.convertToResp(entity);
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityParentInfoServiceImpl.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityParentInfoServiceImpl.java
new file mode 100644
index 0000000..363cf4d
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityParentInfoServiceImpl.java
@@ -0,0 +1,77 @@
+package com.seer.teach.mp.app.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.seer.teach.common.enums.ResultCodeEnum;
+import com.seer.teach.common.exception.CommonException;
+import com.seer.teach.mp.app.controller.resp.AgentActivityParentInfoResp;
+import com.seer.teach.mp.app.service.IAppAgentActivityParentInfoService;
+import com.seer.teach.mp.app.service.IAppAgentService;
+import com.seer.teach.mp.entity.MpActivityInfoCollectionEntity;
+import com.seer.teach.mp.service.IMpActivityInfoCollectionService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 代理商活动参与家长信息服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class AppAgentActivityParentInfoServiceImpl implements IAppAgentActivityParentInfoService {
+
+ private final IMpActivityInfoCollectionService activityInfoCollectionService;
+ private final IAppAgentService appAgentService;
+
+ @Override
+ public List getParentsByActivityAndAgent(Integer activityId, Integer agentId,Integer userId) {
+ var userAgentId = appAgentService.getAgentIdByUserId(userId);
+ if (Objects.isNull(userAgentId)) {
+ return List.of();
+ }
+ log.info("userAgentId:{}", userAgentId);
+ if(userAgentId.intValue() != agentId){
+ throw new CommonException(ResultCodeEnum.RELATION_NOT_FOUND);
+ }
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(MpActivityInfoCollectionEntity::getActivityId, activityId)
+ .eq(MpActivityInfoCollectionEntity::getAgentId, agentId);
+
+ // 查询所有符合条件的记录
+ List entities = activityInfoCollectionService.list(queryWrapper);
+
+ // 转换为响应对象列表
+ return entities.stream()
+ .map(this::convertToResp)
+ .collect(Collectors.toList());
+ }
+
+ private AgentActivityParentInfoResp convertToResp(MpActivityInfoCollectionEntity entity) {
+ AgentActivityParentInfoResp resp = new AgentActivityParentInfoResp();
+ resp.setId(entity.getId());
+ resp.setRelationId(entity.getRelationId());
+ resp.setActivityId(entity.getActivityId());
+ resp.setAgentId(entity.getAgentId());
+ resp.setParentId(entity.getParentId());
+ resp.setChildName(entity.getChildName());
+ resp.setChildGender(entity.getChildGender());
+ resp.setChildBirthDate(entity.getChildBirthDate());
+ resp.setGrade(entity.getGrade());
+ resp.setSchool(entity.getSchool());
+ resp.setRegion(entity.getRegion());
+ resp.setParentIdentity(entity.getParentIdentity());
+ resp.setLearningSituation(entity.getLearningSituation());
+ resp.setStrongSubjectIds(entity.getStrongSubjectIds());
+ resp.setWeakSubjectIds(entity.getWeakSubjectIds());
+ return resp;
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityParticipantServiceImpl.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityParticipantServiceImpl.java
new file mode 100644
index 0000000..540773e
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityParticipantServiceImpl.java
@@ -0,0 +1,83 @@
+package com.seer.teach.mp.app.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.seer.teach.common.enums.ResultCodeEnum;
+import com.seer.teach.common.exception.CommonException;
+import com.seer.teach.mp.app.controller.resp.AgentActivityParticipantResp;
+import com.seer.teach.mp.app.service.IAppAgentActivityParticipantService;
+import com.seer.teach.mp.app.service.IAppAgentService;
+import com.seer.teach.mp.entity.MpActivityEntity;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+import com.seer.teach.mp.service.IMpActivityService;
+import com.seer.teach.mp.service.IMpAgentActivityParticipantService;
+import com.seer.teach.user.api.UserInfoServiceApi;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * APP端代理商活动参与记录服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class AppAgentActivityParticipantServiceImpl implements IAppAgentActivityParticipantService {
+
+ private final IMpAgentActivityParticipantService agentActivityParticipantService;
+
+ private final UserInfoServiceApi userInfoServiceApi;
+
+ private final IAppAgentService appAgentService;
+
+ private final IMpActivityService mpActivityService;
+
+ @Override
+ public List getParticipantsByActivityAndAgent(Integer agentId, Integer userId) {
+ var userAgentId = appAgentService.getAgentIdByUserId(userId);
+ if (Objects.isNull(userAgentId)) {
+ return List.of();
+ }
+ log.info("userAgentId:{}", userAgentId);
+ if(userAgentId.intValue() != agentId){
+ throw new CommonException(ResultCodeEnum.RELATION_NOT_FOUND);
+ }
+ var participants = agentActivityParticipantService.getListByAgentId(agentId);
+
+ if (CollectionUtil.isEmpty(participants)) {
+ return List.of();
+ }
+ Set activityIds = participants.stream().map(MpAgentActivityParticipantEntity::getActivityId).collect(Collectors.toSet());
+
+ List parentInfos = mpActivityService.listByIds(activityIds);
+
+ var activityInfoMap = parentInfos.stream().collect(Collectors.toMap(MpActivityEntity::getId, activity -> activity));
+
+ return participants.stream()
+ .map(entity -> convertToDto(entity, activityInfoMap))
+ .collect(Collectors.toList());
+ }
+
+
+ private AgentActivityParticipantResp convertToDto(MpAgentActivityParticipantEntity entity, Map activityInfoMap) {
+ AgentActivityParticipantResp resp = new AgentActivityParticipantResp();
+ resp.setId(entity.getId());
+ resp.setActivityId(entity.getActivityId());
+ resp.setAgentId(entity.getAgentId());
+ MpActivityEntity activity = activityInfoMap.get(entity.getActivityId());
+ if(Objects.nonNull(activity)){
+ resp.setActivityName(activity.getActivityName());
+ }
+ return resp;
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentServiceImpl.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentServiceImpl.java
new file mode 100644
index 0000000..cc0e587
--- /dev/null
+++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentServiceImpl.java
@@ -0,0 +1,44 @@
+package com.seer.teach.mp.app.service.impl;
+
+import com.seer.teach.mp.app.controller.resp.AppMpAgentResp;
+import com.seer.teach.mp.app.service.IAppAgentService;
+import com.seer.teach.mp.entity.MpAgentEmployeeRelationEntity;
+import com.seer.teach.mp.entity.MpAgentEntity;
+import com.seer.teach.mp.service.IMpAgentEmployeeRelationService;
+import com.seer.teach.mp.service.IMpAgentService;
+import lombok.RequiredArgsConstructor;
+import com.seer.teach.mp.app.convert.AppAgentConvert;
+import org.springframework.stereotype.Service;
+
+/**
+ * App端代理商服务实现类
+ */
+@Service
+@RequiredArgsConstructor
+public class AppAgentServiceImpl implements IAppAgentService {
+
+ private final IMpAgentService mpAgentService;
+ private final IMpAgentEmployeeRelationService mpAgentEmployeeRelationService;
+
+ @Override
+ public AppMpAgentResp getAgentRespByUserId(Integer userId) {
+ MpAgentEmployeeRelationEntity mpAgentEmployeeRelationEntity = mpAgentEmployeeRelationService.getOneByUserId(userId);
+ if (mpAgentEmployeeRelationEntity == null) {
+ return null;
+ }
+ MpAgentEntity agentEntity = mpAgentService.getAgentById(mpAgentEmployeeRelationEntity.getAgentId());
+ if (agentEntity == null) {
+ return null;
+ }
+ return AppAgentConvert.INSTANCE.entityToResp(agentEntity);
+ }
+
+ @Override
+ public Integer getAgentIdByUserId(Integer userId) {
+ MpAgentEmployeeRelationEntity mpAgentEmployeeRelationEntity = mpAgentEmployeeRelationService.getOneByUserId(userId);
+ if (mpAgentEmployeeRelationEntity == null) {
+ return null;
+ }
+ return mpAgentEmployeeRelationEntity.getAgentId();
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpActivityInfoCollectionService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpActivityInfoCollectionService.java
new file mode 100644
index 0000000..8dc2c41
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpActivityInfoCollectionService.java
@@ -0,0 +1,23 @@
+package com.seer.teach.mp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.seer.teach.mp.entity.MpActivityInfoCollectionEntity;
+
+/**
+ *
+ * 活动信息收集表 服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+public interface IMpActivityInfoCollectionService extends IService {
+
+ /**
+ * 根据活动ID和家长ID获取信息收集记录
+ * @param agentId 活动ID
+ * @param parentId 家长ID
+ * @return 信息收集记录
+ */
+ MpActivityInfoCollectionEntity getByActivityIdAndParentId(Integer agentId,Integer activityId, Integer parentId);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpActivityService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpActivityService.java
new file mode 100644
index 0000000..d3cef0c
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpActivityService.java
@@ -0,0 +1,32 @@
+package com.seer.teach.mp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.seer.teach.mp.entity.MpActivityEntity;
+
+/**
+ *
+ * 代理商活动表 服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+public interface IMpActivityService extends IService {
+
+
+ /**
+ * 创建或更新代理商活动
+ *
+ * @param entity 活动实体
+ * @return 操作是否成功
+ */
+ boolean saveOrUpdateActivity(MpActivityEntity entity);
+
+ /**
+ * 删除代理商活动
+ *
+ * @param id 活动ID
+ * @return 操作是否成功
+ */
+ boolean deleteActivity(Integer id);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityLogService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityLogService.java
new file mode 100644
index 0000000..e94ea59
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityLogService.java
@@ -0,0 +1,29 @@
+package com.seer.teach.mp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.seer.teach.mp.entity.MpAgentActivityLogEntity;
+
+/**
+ *
+ * 代理商活动操作日志表 服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+public interface IMpAgentActivityLogService extends IService {
+
+ /**
+ * 记录代理商活动操作日志
+ *
+ * @param activityId 活动ID
+ * @param operatorId 操作人ID
+ * @param operationType 操作类型
+ * @param description 操作描述
+ * @param beforeData 操作前数据
+ * @param afterData 操作后数据
+ * @return 操作是否成功
+ */
+ boolean logOperation(Integer activityId, String operatorId, String operationType,
+ String description, String beforeData, String afterData);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityParticipantService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityParticipantService.java
new file mode 100644
index 0000000..9bba32e
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityParticipantService.java
@@ -0,0 +1,34 @@
+package com.seer.teach.mp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+
+import java.util.List;
+
+/**
+ *
+ * 代理商活动参与记录表 服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+public interface IMpAgentActivityParticipantService extends IService {
+
+ /**
+ * 根据活动ID和代理商ID获取参与记录
+ *
+ * @param activityId 活动ID
+ * @param agentId 代理商ID
+ * @return 参与记录列表
+ */
+ MpAgentActivityParticipantEntity getParticipantsByActivityAndAgent(Integer activityId, Integer agentId);
+
+ /**
+ * 根据代理商ID获取所有参与活动记录
+ *
+ * @param agentId 代理商ID
+ * @return 参与记录列表
+ */
+ List getListByAgentId(Integer agentId);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentEmployeeRelationService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentEmployeeRelationService.java
new file mode 100644
index 0000000..fd7a546
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentEmployeeRelationService.java
@@ -0,0 +1,66 @@
+package com.seer.teach.mp.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.seer.teach.mp.entity.MpAgentEmployeeRelationEntity;
+
+/**
+ *
+ * 代理商员工关联表 服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+public interface IMpAgentEmployeeRelationService extends IService {
+
+ /**
+ * 分页查询代理商员工关联列表
+ *
+ * @param pageParm 分页参数
+ * @param query 查询条件
+ * @return 代理商员工关联分页列表
+ */
+ IPage pageList(com.baomidou.mybatisplus.extension.plugins.pagination.Page pageParm, MpAgentEmployeeRelationEntity query);
+
+ /**
+ * 创建或更新代理商员工关联
+ *
+ * @param entity 关联实体
+ * @return 操作是否成功
+ */
+ boolean saveOrUpdateRelation(MpAgentEmployeeRelationEntity entity);
+
+ /**
+ * 删除代理商员工关联
+ *
+ * @param id 关联ID
+ * @return 操作是否成功
+ */
+ boolean deleteRelation(Integer id);
+
+ /**
+ * 根据代理商ID获取员工列表
+ *
+ * @param agentId 代理商ID
+ * @return 员工关联列表
+ */
+ java.util.List getEmployeeRelationsByAgentId(Integer agentId);
+
+ /**
+ * 检查用户是否为代理商的员工
+ *
+ * @param agentId 代理商ID
+ * @param employeeUserId 员工用户ID
+ * @return 是否为员工
+ */
+ boolean isEmployeeOfAgent(Integer agentId, Integer employeeUserId);
+
+ /**
+ * 根据用户ID获取代理商员工关联
+ *
+ * @param userId 用户ID
+ * @return 代理商员工关联
+ */
+ MpAgentEmployeeRelationEntity getOneByUserId(Integer userId);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentService.java
new file mode 100644
index 0000000..73b229f
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentService.java
@@ -0,0 +1,34 @@
+package com.seer.teach.mp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.seer.teach.mp.entity.MpAgentEntity;
+
+/**
+ * 代理商服务接口
+ */
+public interface IMpAgentService extends IService {
+
+ /**
+ * 根据ID获取代理商信息
+ *
+ * @param id 代理商ID
+ * @return 代理商实体
+ */
+ MpAgentEntity getAgentById(Integer id);
+
+ /**
+ * 保存代理商
+ *
+ * @param agentEntity 代理商实体
+ * @return 是否成功
+ */
+ Boolean saveAgent(MpAgentEntity agentEntity);
+
+ /**
+ * 更新代理商
+ *
+ * @param agentEntity 代理商实体
+ * @return 是否成功
+ */
+ Boolean updateAgent(MpAgentEntity agentEntity);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpParentAgentActivityRelationService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpParentAgentActivityRelationService.java
new file mode 100644
index 0000000..47eef6b
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpParentAgentActivityRelationService.java
@@ -0,0 +1,33 @@
+package com.seer.teach.mp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.seer.teach.mp.entity.MpParentAgentActivityRelationEntity;
+
+/**
+ *
+ * 家长参与代理商活动关系表 服务类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+public interface IMpParentAgentActivityRelationService extends IService {
+
+ /**
+ * 根据活动ID和家长ID获取关系记录
+ *
+ * @param agentId 代理商ID
+ * @param activityId 活动ID
+ * @param parentId 家长ID
+ * @return 关系记录
+ */
+ MpParentAgentActivityRelationEntity getByAgentIdAndActivityIdAndParentId(Integer agentId, Integer activityId, Integer parentId);
+
+ /**
+ * 根据活动ID和家长ID获取关系记录
+ * @param activityId 活动ID
+ * @param parentId 家长ID
+ * @return 关系记录
+ */
+ MpParentAgentActivityRelationEntity getByAgentIdAndActivityIdAndParentId(Integer activityId, Integer parentId);
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMqMessageGroupService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMqMessageGroupService.java
index 747c287..cfc86f7 100644
--- a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMqMessageGroupService.java
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMqMessageGroupService.java
@@ -20,7 +20,7 @@ public interface IMqMessageGroupService extends IService {
* 创建消息群组
* @param params
*/
- void crateMesGroup(MpMessageGroupEntity params);
+ boolean crateMesGroup(MpMessageGroupEntity params);
/**
* 根据ID查询消息群组
@@ -42,11 +42,11 @@ public interface IMqMessageGroupService extends IService {
* @param id
* @return
*/
- void updateMesGroup(MpMessageGroupEntity params, Integer id);
+ boolean updateMesGroup(MpMessageGroupEntity params, Integer id);
/**
* 删除消息群组
* @param id
*/
- void deleteById(Integer id);
+ boolean deleteById(Integer id);
}
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpActivityInfoCollectionServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpActivityInfoCollectionServiceImpl.java
new file mode 100644
index 0000000..16da709
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpActivityInfoCollectionServiceImpl.java
@@ -0,0 +1,31 @@
+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.mp.entity.MpActivityInfoCollectionEntity;
+import com.seer.teach.mp.mapper.MpActivityInfoCollectionMapper;
+import com.seer.teach.mp.service.IMpActivityInfoCollectionService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 活动信息收集表 服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Service
+@AllArgsConstructor
+public class MpActivityInfoCollectionServiceImpl extends ServiceImpl implements IMpActivityInfoCollectionService {
+
+ @Override
+ public MpActivityInfoCollectionEntity getByActivityIdAndParentId(Integer agentId, Integer activityId, Integer parentId) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(MpActivityInfoCollectionEntity::getAgentId, agentId)
+ .eq(MpActivityInfoCollectionEntity::getActivityId, activityId)
+ .eq(MpActivityInfoCollectionEntity::getParentId, parentId);
+ return getOne(queryWrapper, false);
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpActivityServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpActivityServiceImpl.java
new file mode 100644
index 0000000..c465d6c
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpActivityServiceImpl.java
@@ -0,0 +1,112 @@
+package com.seer.teach.mp.service.impl;
+
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.seer.teach.common.enums.ResultCodeEnum;
+import com.seer.teach.common.utils.AssertUtils;
+import com.seer.teach.mp.entity.MpActivityEntity;
+import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity;
+import com.seer.teach.mp.mapper.MpAgentActivityMapper;
+import com.seer.teach.mp.service.IMpActivityService;
+import com.seer.teach.mp.service.IMpAgentActivityLogService;
+import com.seer.teach.mp.service.IMpAgentActivityParticipantService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 代理商活动表 服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MpActivityServiceImpl extends ServiceImpl implements IMpActivityService {
+
+ private final IMpAgentActivityParticipantService agentActivityParticipantService;
+ private final IMpAgentActivityLogService agentActivityLogService;
+
+ @Override
+ public boolean saveOrUpdateActivity(MpActivityEntity entity) {
+ MpActivityEntity oldEntity = null;
+ String operationType = "创建";
+
+ if (entity.getId() != null) {
+ // 更新操作,先获取旧数据用于日志记录
+ oldEntity = super.getById(entity.getId());
+ operationType = "更新";
+ }
+
+ if (entity.getId() == null) {
+ // 新增时设置创建时间
+ entity.setCreateTime(LocalDateTime.now());
+ }
+ entity.setUpdateTime(LocalDateTime.now());
+
+ boolean result = this.saveOrUpdate(entity);
+
+ // 记录操作日志
+ if (result) {
+ String beforeData = oldEntity != null ? JSONUtil.toJsonStr(oldEntity) : "";
+ String afterData = JSONUtil.toJsonStr(entity);
+ String description = operationType + "代理商活动: " + entity.getActivityName();
+
+ agentActivityLogService.logOperation(
+ entity.getId(),
+ entity.getCreateBy(),
+ operationType,
+ description,
+ beforeData,
+ afterData
+ );
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean deleteActivity(Integer id) {
+ // 检查活动是否存在
+ MpActivityEntity existing = super.getById(id);
+ AssertUtils.notNull(existing, ResultCodeEnum.ACTIVITY_NOT_ACTIVE);
+
+ // 删除活动前先删除相关的参与记录
+ LambdaQueryWrapper participantWrapper =
+ new LambdaQueryWrapper()
+ .eq(MpAgentActivityParticipantEntity::getActivityId, id);
+ agentActivityParticipantService.remove(participantWrapper);
+
+ boolean result = this.removeById(id);
+
+ // 记录操作日志
+ if (result) {
+ String beforeData = JSONUtil.toJsonStr(existing);
+ String afterData = "";
+ String description = "删除代理商活动: " + existing.getActivityName();
+
+ agentActivityLogService.logOperation(
+ id,
+ existing.getCreateBy(),
+ "删除",
+ description,
+ beforeData,
+ afterData
+ );
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean saveOrUpdate(MpActivityEntity entity) {
+ boolean result = super.saveOrUpdate(entity);
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityLogServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityLogServiceImpl.java
new file mode 100644
index 0000000..34b3642
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityLogServiceImpl.java
@@ -0,0 +1,48 @@
+package com.seer.teach.mp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.seer.teach.mp.entity.MpAgentActivityLogEntity;
+import com.seer.teach.mp.mapper.MpAgentActivityLogMapper;
+import com.seer.teach.mp.service.IMpAgentActivityLogService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 代理商活动操作日志表 服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MpAgentActivityLogServiceImpl extends ServiceImpl implements IMpAgentActivityLogService {
+
+ @Override
+ public boolean logOperation(Integer activityId, String operatorId, String operationType,
+ String description, String beforeData, String afterData) {
+ try {
+ MpAgentActivityLogEntity logEntity = new MpAgentActivityLogEntity();
+ logEntity.setActivityId(activityId);
+ logEntity.setOperatorId(operatorId);
+ logEntity.setOperationType(operationType);
+ logEntity.setDescription(description);
+ logEntity.setBeforeData(beforeData);
+ logEntity.setAfterData(afterData);
+
+ boolean result = this.save(logEntity);
+ if (result) {
+ log.info("代理商活动操作日志记录成功,活动ID: {}, 操作类型: {}", activityId, operationType);
+ } else {
+ log.warn("代理商活动操作日志记录失败,活动ID: {}", activityId);
+ }
+ return result;
+ } catch (Exception e) {
+ log.error("记录代理商活动操作日志时发生异常,活动ID: {}", activityId, e);
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityParticipantServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityParticipantServiceImpl.java
new file mode 100644
index 0000000..280c5fb
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityParticipantServiceImpl.java
@@ -0,0 +1,45 @@
+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.mp.entity.MpAgentActivityParticipantEntity;
+import com.seer.teach.mp.mapper.MpAgentActivityParticipantMapper;
+import com.seer.teach.mp.service.IMpAgentActivityLogService;
+import com.seer.teach.mp.service.IMpAgentActivityParticipantService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 代理商活动参与记录表 服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MpAgentActivityParticipantServiceImpl extends ServiceImpl implements IMpAgentActivityParticipantService {
+
+ private final IMpAgentActivityLogService agentActivityLogService;
+
+ @Override
+ public MpAgentActivityParticipantEntity getParticipantsByActivityAndAgent(Integer activityId, Integer agentId) {
+ LambdaQueryWrapper queryWrapper =
+ new LambdaQueryWrapper()
+ .eq(MpAgentActivityParticipantEntity::getActivityId, activityId)
+ .eq(MpAgentActivityParticipantEntity::getAgentId, agentId);
+
+ return super.getOne(queryWrapper);
+ }
+
+ @Override
+ public List getListByAgentId(Integer agentId) {
+ return super.list(new LambdaQueryWrapper()
+ .eq(MpAgentActivityParticipantEntity::getAgentId, agentId));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentEmployeeRelationServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentEmployeeRelationServiceImpl.java
new file mode 100644
index 0000000..3d24be3
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentEmployeeRelationServiceImpl.java
@@ -0,0 +1,101 @@
+package com.seer.teach.mp.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.seer.teach.common.enums.ResultCodeEnum;
+import com.seer.teach.common.exception.CommonException;
+import com.seer.teach.mp.entity.MpAgentEmployeeRelationEntity;
+import com.seer.teach.mp.mapper.MpAgentEmployeeRelationMapper;
+import com.seer.teach.mp.service.IMpAgentEmployeeRelationService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ *
+ * 代理商员工关联表 服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-29
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MpAgentEmployeeRelationServiceImpl extends ServiceImpl implements IMpAgentEmployeeRelationService {
+
+ @Override
+ public IPage pageList(Page pageParm, MpAgentEmployeeRelationEntity query) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+
+ if (query != null) {
+ if (query.getAgentId() != null) {
+ queryWrapper.eq(MpAgentEmployeeRelationEntity::getAgentId, query.getAgentId());
+ }
+ if (query.getEmployeeUserId() != null) {
+ queryWrapper.eq(MpAgentEmployeeRelationEntity::getEmployeeUserId, query.getEmployeeUserId());
+ }
+ if (query.getStatus() != null) {
+ queryWrapper.eq(MpAgentEmployeeRelationEntity::getStatus, query.getStatus());
+ }
+ }
+
+ queryWrapper.orderByDesc(MpAgentEmployeeRelationEntity::getCreateTime);
+
+ return baseMapper.selectPage(pageParm, queryWrapper);
+ }
+
+ @Override
+ public boolean saveOrUpdateRelation(MpAgentEmployeeRelationEntity entity) {
+ if (entity.getId() == null) {
+ LambdaQueryWrapper checkWrapper =
+ new LambdaQueryWrapper()
+ .eq(MpAgentEmployeeRelationEntity::getAgentId, entity.getAgentId())
+ .eq(MpAgentEmployeeRelationEntity::getEmployeeUserId, entity.getEmployeeUserId());
+
+ long count = super.count(checkWrapper);
+ if (count > 0) {
+ throw new CommonException(ResultCodeEnum.AGENT_EMPLOYEE_ALREADY_EXISTS);
+ }
+ entity.setCreateTime(LocalDateTime.now());
+ }
+ entity.setUpdateTime(LocalDateTime.now());
+ return super.saveOrUpdate(entity);
+ }
+
+ @Override
+ public boolean deleteRelation(Integer id) {
+ return this.removeById(id);
+ }
+
+ @Override
+ public List getEmployeeRelationsByAgentId(Integer agentId) {
+ LambdaQueryWrapper queryWrapper =
+ new LambdaQueryWrapper()
+ .eq(MpAgentEmployeeRelationEntity::getAgentId, agentId)
+ .orderByDesc(MpAgentEmployeeRelationEntity::getCreateTime);
+
+ return super.list(queryWrapper);
+ }
+
+ @Override
+ public boolean isEmployeeOfAgent(Integer agentId, Integer employeeUserId) {
+ LambdaQueryWrapper queryWrapper =
+ new LambdaQueryWrapper()
+ .eq(MpAgentEmployeeRelationEntity::getAgentId, agentId)
+ .eq(MpAgentEmployeeRelationEntity::getEmployeeUserId, employeeUserId)
+ .eq(MpAgentEmployeeRelationEntity::getStatus, 1); // 只检查启用状态的关联
+
+ return super.count(queryWrapper) > 0;
+ }
+
+ @Override
+ public MpAgentEmployeeRelationEntity getOneByUserId(Integer userId) {
+ return super.getOne(new LambdaQueryWrapper<>(MpAgentEmployeeRelationEntity.class).eq(MpAgentEmployeeRelationEntity::getEmployeeUserId, userId));
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentServiceImpl.java
new file mode 100644
index 0000000..50ac091
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentServiceImpl.java
@@ -0,0 +1,29 @@
+package com.seer.teach.mp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.seer.teach.mp.entity.MpAgentEntity;
+import com.seer.teach.mp.mapper.MpAgentMapper;
+import com.seer.teach.mp.service.IMpAgentService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 代理商服务实现类
+ */
+@Service
+public class MpAgentServiceImpl extends ServiceImpl implements IMpAgentService {
+
+ @Override
+ public MpAgentEntity getAgentById(Integer id) {
+ return this.getById(id);
+ }
+
+ @Override
+ public Boolean saveAgent(MpAgentEntity agentEntity) {
+ return this.save(agentEntity);
+ }
+
+ @Override
+ public Boolean updateAgent(MpAgentEntity agentEntity) {
+ return this.updateById(agentEntity);
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpParentAgentActivityRelationServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpParentAgentActivityRelationServiceImpl.java
new file mode 100644
index 0000000..4e705e3
--- /dev/null
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpParentAgentActivityRelationServiceImpl.java
@@ -0,0 +1,41 @@
+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.mp.entity.MpParentAgentActivityRelationEntity;
+import com.seer.teach.mp.mapper.MpParentAgentActivityRelationMapper;
+import com.seer.teach.mp.service.IMpParentAgentActivityRelationService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 家长参与代理商活动关系表 服务实现类
+ *
+ *
+ * @author Lingma
+ * @since 2025-12-30
+ */
+@Service
+@AllArgsConstructor
+public class MpParentAgentActivityRelationServiceImpl extends ServiceImpl implements IMpParentAgentActivityRelationService {
+
+ @Override
+ public MpParentAgentActivityRelationEntity getByAgentIdAndActivityIdAndParentId(Integer agentId, Integer activityId, Integer parentId) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(MpParentAgentActivityRelationEntity::getActivityId, activityId)
+ .eq(MpParentAgentActivityRelationEntity::getAgentId, agentId)
+ .eq(MpParentAgentActivityRelationEntity::getParentId, parentId);
+ return getOne(queryWrapper);
+ }
+
+ @Override
+ public MpParentAgentActivityRelationEntity getByAgentIdAndActivityIdAndParentId(Integer activityId, Integer parentId) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(MpParentAgentActivityRelationEntity::getActivityId, activityId)
+ .eq(MpParentAgentActivityRelationEntity::getParentId, parentId);
+ return getOne(queryWrapper);
+ }
+}
\ No newline at end of file
diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MqMessageGroupServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MqMessageGroupServiceImpl.java
index b81e7b1..0e4def0 100644
--- a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MqMessageGroupServiceImpl.java
+++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MqMessageGroupServiceImpl.java
@@ -33,7 +33,7 @@ public class MqMessageGroupServiceImpl extends ServiceImpl()
.eq(MpMessageGroupEntity::getGroupName, params.getGroupName()));
if(one != null){
@@ -42,8 +42,7 @@ public class MqMessageGroupServiceImpl extends ServiceImpl