From 893a441d6cb1e62024578586d8a46b2b4a239dd0 Mon Sep 17 00:00:00 2001 From: Wang Date: Tue, 30 Dec 2025 11:33:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=A3=E7=90=86=E5=95=86?= =?UTF-8?q?=EF=BC=8C=E6=B4=BB=E5=8A=A8=EF=BC=8C=E4=BB=A3=E7=90=86=E5=95=86?= =?UTF-8?q?=E5=91=98=E5=B7=A5=E5=85=B3=EF=BC=8C=E4=BB=A3=E7=90=86=E5=95=86?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=8F=82=E4=B8=8E=E8=80=85=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../teach/mp/api/dto/AgentActivityDTO.java | 37 ++++ .../com/seer/teach/mp/api/dto/AgentDTO.java | 47 +++++ .../mp/api/dto/AgentEmployeeRelationDTO.java | 31 ++++ .../mp/entity/MpAgentActivityEntity.java | 55 ++++++ .../mp/entity/MpAgentActivityLogEntity.java | 60 +++++++ .../MpAgentActivityParticipantEntity.java | 41 +++++ .../entity/MpAgentEmployeeRelationEntity.java | 47 +++++ .../seer/teach/mp/entity/MpAgentEntity.java | 49 +++++ .../mp/mapper/MpAgentActivityLogMapper.java | 18 ++ .../mp/mapper/MpAgentActivityMapper.java | 18 ++ .../MpAgentActivityParticipantMapper.java | 18 ++ .../mapper/MpAgentEmployeeRelationMapper.java | 18 ++ .../seer/teach/mp/mapper/MpAgentMapper.java | 12 ++ .../AdminAgentActivityController.java | 60 +++++++ .../controller/AdminAgentController.java | 61 +++++++ .../AdminAgentEmployeeRelationController.java | 67 +++++++ .../AdminDealerApplicationsController.java | 8 +- .../AdminMessageGroupController.java | 29 ++- .../AdminMessageGroupUserController.java | 10 +- .../controller/AdminMpAccountController.java | 10 +- ...dminMpTemplateMessageConfigController.java | 10 +- .../AdminMpTemplateMessageController.java | 14 +- ...AdminTemplateMessageMappingController.java | 2 +- .../controller/req/AgentActivityQueryReq.java | 16 ++ .../controller/req/AgentActivityReq.java | 34 ++++ .../req/AgentEmployeeRelationQueryReq.java | 19 ++ .../req/AgentEmployeeRelationReq.java | 28 +++ .../admin/controller/req/AgentQueryReq.java | 28 +++ .../controller/req/MpAccountPageReq.java | 2 +- .../controller/req/MpAccountReq.java | 2 +- .../controller/req/MpDealerApplyQueryReq.java | 2 +- .../req/MpMessageGroupQueryReq.java | 2 +- .../controller/req/MpMessageGroupReq.java | 2 +- .../req/MpMessageGroupUpdateReq.java | 2 +- .../req/MpMessageGroupUserQueryReq.java | 2 +- .../controller/req/MpMessageGroupUserReq.java | 2 +- .../controller/req/MpSendMessageDTO.java | 2 +- .../MpTemplateMessageConfigPageQueryReq.java | 2 +- .../req/MpTemplateMessageConfigReq.java | 2 +- .../controller/req/MpTemplateMessageReq.java | 2 +- .../{ => admin}/controller/req/TenantReq.java | 2 +- .../controller/resp/AdminMpAccountResp.java | 2 +- .../controller/resp/AgentActivityResp.java | 37 ++++ .../resp/AgentEmployeeRelationResp.java | 31 ++++ .../mp/admin/controller/resp/AgentResp.java | 40 +++++ .../controller/resp/MpDealerApplyResp.java | 2 +- .../controller/resp/MpMessageGroupResp.java | 2 +- .../resp/MpMessageGroupUserResp.java | 2 +- .../resp/MpTemplateMessageConfigResp.java | 2 +- .../resp/MpTemplateMessageResp.java | 2 +- .../controller/resp/MpWxMpTemplateResp.java | 2 +- .../convert/AdminAgentActivityConvert.java | 24 +++ .../AdminAgentEmployeeRelationConvert.java | 24 +++ .../AdminDealerApplicationsConvert.java | 6 +- .../convert/AdminMpAccountConvert.java | 6 +- .../AdminMpTemplateMessageConfigConvert.java | 8 +- .../teach/mp/admin/convert/AgentConvert.java | 23 +++ .../convert/MpMessageGroupConvert.java | 10 +- .../convert/MpMessageGroupUserConvert.java | 8 +- .../convert/MpWxMpTemplateConvert.java | 6 +- .../mp/admin/service/AdminAgentService.java | 93 ++++++++++ .../AdminDealerApplicationsService.java | 9 +- .../service/AdminMpAccountService.java | 11 +- .../service/AdminTemplateMessageService.java | 7 +- .../service/IAdminAgentActivityService.java | 49 +++++ .../IAdminAgentEmployeeRelationService.java | 59 ++++++ .../impl/AdminAgentActivityServiceImpl.java | 59 ++++++ ...AdminAgentEmployeeRelationServiceImpl.java | 69 +++++++ .../mp/{ => admin}/utils/ClassFieldUtils.java | 2 +- .../AppAgentActivityController.java | 55 ++++++ ...AppAgentActivityParticipantController.java | 45 +++++ .../req/AppAgentActivityQueryReq.java | 16 ++ .../req/AppAgentEmployeeRelationQueryReq.java | 16 ++ .../resp/AgentActivityParticipantResp.java | 23 +++ .../controller/resp/AppAgentActivityResp.java | 34 ++++ .../resp/AppAgentEmployeeRelationResp.java | 32 ++++ .../app/convert/AppAgentActivityConvert.java | 24 +++ .../IAppAgentActivityParticipantService.java | 26 +++ .../app/service/IAppAgentActivityService.java | 35 ++++ ...ppAgentActivityParticipantServiceImpl.java | 68 +++++++ .../impl/AppAgentActivityServiceImpl.java | 56 ++++++ .../mp/api/impl/MpAgentServiceApiImpl.java | 36 ++++ .../teach/mp/cache/MpAgentActivityCache.java | 108 +++++++++++ .../exception/AgentActivityErrorCodeEnum.java | 25 +++ .../mp/exception/AgentActivityException.java | 24 +++ .../mp/exception/AgentErrorCodeEnum.java | 32 ++++ .../teach/mp/exception/AgentException.java | 26 +++ .../service/IMpAgentActivityLogService.java | 29 +++ .../IMpAgentActivityParticipantService.java | 44 +++++ .../mp/service/IMpAgentActivityService.java | 32 ++++ .../IMpAgentEmployeeRelationService.java | 58 ++++++ .../teach/mp/service/IMpAgentService.java | 58 ++++++ .../mp/service/IMqMessageGroupService.java | 6 +- .../impl/MpAgentActivityLogServiceImpl.java | 48 +++++ ...MpAgentActivityParticipantServiceImpl.java | 120 +++++++++++++ .../impl/MpAgentActivityServiceImpl.java | 166 +++++++++++++++++ .../MpAgentEmployeeRelationServiceImpl.java | 113 ++++++++++++ .../mp/service/impl/MpAgentServiceImpl.java | 168 ++++++++++++++++++ .../impl/MqMessageGroupServiceImpl.java | 13 +- 99 files changed, 2896 insertions(+), 108 deletions(-) create mode 100644 seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentActivityDTO.java create mode 100644 seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentDTO.java create mode 100644 seer-mp/seer-mp-api/src/main/java/com/seer/teach/mp/api/dto/AgentEmployeeRelationDTO.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityEntity.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityLogEntity.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityParticipantEntity.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentEmployeeRelationEntity.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentEntity.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityLogMapper.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityMapper.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentActivityParticipantMapper.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentEmployeeRelationMapper.java create mode 100644 seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/mapper/MpAgentMapper.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityController.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentController.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentEmployeeRelationController.java rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/AdminDealerApplicationsController.java (90%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/AdminMessageGroupController.java (71%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/AdminMessageGroupUserController.java (90%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/AdminMpAccountController.java (90%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/AdminMpTemplateMessageConfigController.java (92%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/AdminMpTemplateMessageController.java (88%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/AdminTemplateMessageMappingController.java (97%) create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityQueryReq.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityReq.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentEmployeeRelationQueryReq.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentEmployeeRelationReq.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentQueryReq.java rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpAccountPageReq.java (81%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpAccountReq.java (93%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpDealerApplyQueryReq.java (86%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpMessageGroupQueryReq.java (86%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpMessageGroupReq.java (91%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpMessageGroupUpdateReq.java (88%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpMessageGroupUserQueryReq.java (89%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpMessageGroupUserReq.java (91%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpSendMessageDTO.java (89%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpTemplateMessageConfigPageQueryReq.java (75%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpTemplateMessageConfigReq.java (95%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/MpTemplateMessageReq.java (95%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/req/TenantReq.java (53%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/resp/AdminMpAccountResp.java (93%) create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentActivityResp.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentEmployeeRelationResp.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentResp.java rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/resp/MpDealerApplyResp.java (92%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/resp/MpMessageGroupResp.java (91%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/resp/MpMessageGroupUserResp.java (91%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/resp/MpTemplateMessageConfigResp.java (96%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/resp/MpTemplateMessageResp.java (96%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/controller/resp/MpWxMpTemplateResp.java (92%) create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentActivityConvert.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentEmployeeRelationConvert.java rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/convert/AdminDealerApplicationsConvert.java (75%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/convert/AdminMpAccountConvert.java (75%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/convert/AdminMpTemplateMessageConfigConvert.java (74%) create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AgentConvert.java rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/convert/MpMessageGroupConvert.java (66%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/convert/MpMessageGroupUserConvert.java (70%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/convert/MpWxMpTemplateConvert.java (80%) create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminAgentService.java rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/service/AdminDealerApplicationsService.java (93%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/service/AdminMpAccountService.java (94%) rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/service/AdminTemplateMessageService.java (94%) create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityService.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentEmployeeRelationService.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityServiceImpl.java create mode 100644 seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentEmployeeRelationServiceImpl.java rename seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/{ => admin}/utils/ClassFieldUtils.java (99%) create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityController.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityParticipantController.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppAgentActivityQueryReq.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/req/AppAgentEmployeeRelationQueryReq.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AgentActivityParticipantResp.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppAgentActivityResp.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppAgentEmployeeRelationResp.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/convert/AppAgentActivityConvert.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityParticipantService.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityService.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityParticipantServiceImpl.java create mode 100644 seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityServiceImpl.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/api/impl/MpAgentServiceApiImpl.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/cache/MpAgentActivityCache.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentActivityErrorCodeEnum.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentActivityException.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentErrorCodeEnum.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentException.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityLogService.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityParticipantService.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityService.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentEmployeeRelationService.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentService.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityLogServiceImpl.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityParticipantServiceImpl.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityServiceImpl.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentEmployeeRelationServiceImpl.java create mode 100644 seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentServiceImpl.java 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/MpAgentActivityEntity.java b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityEntity.java new file mode 100644 index 0000000..0bb743b --- /dev/null +++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityEntity.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 MpAgentActivityEntity 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/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..54ba400 --- /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 Integer 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..a34abd7 --- /dev/null +++ b/seer-mp/seer-mp-data-module/src/main/java/com/seer/teach/mp/entity/MpAgentActivityParticipantEntity.java @@ -0,0 +1,41 @@ +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; + + /** + * 家长ID(对应user表的ID) + */ + @TableField("parent_id") + private Integer parentId; +} \ 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/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..db2e6a0 --- /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.MpAgentActivityEntity; +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-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityController.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityController.java new file mode 100644 index 0000000..6ca703a --- /dev/null +++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/AdminAgentActivityController.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.AgentActivityQueryReq; +import com.seer.teach.mp.admin.controller.req.AgentActivityReq; +import com.seer.teach.mp.admin.controller.resp.AgentActivityResp; +import com.seer.teach.mp.admin.service.IAdminAgentActivityService; +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 AdminAgentActivityController { + + private final IAdminAgentActivityService agentActivityService; + + @Operation(summary = "代理商活动列表") + @GetMapping("/page-list") + @SaCheckPermission("mp:admin:agent:activity:list") + public ResultBean> pageList(AgentActivityQueryReq query) { + return ResultBean.success(agentActivityService.pageList(query)); + } + + @Operation(summary = "创建或更新代理商活动") + @PostMapping("/save") + @SaCheckPermission("mp:admin:agent:activity:save") + public ResultBean save(@Valid @RequestBody AgentActivityReq 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) { + AgentActivityResp 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/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/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/AgentActivityQueryReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityQueryReq.java new file mode 100644 index 0000000..21b3bd2 --- /dev/null +++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityQueryReq.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 = "AgentActivityQueryReq", description = "代理商活动查询请求参数") +@Data +public class AgentActivityQueryReq 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/AgentActivityReq.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityReq.java new file mode 100644 index 0000000..646bb7d --- /dev/null +++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/req/AgentActivityReq.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 = "AgentActivityReq", description = "代理商活动请求参数") +@Data +public class AgentActivityReq { + + @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/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/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/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/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/AgentActivityResp.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentActivityResp.java new file mode 100644 index 0000000..a452d7f --- /dev/null +++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/controller/resp/AgentActivityResp.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 = "AgentActivityResp", description = "代理商活动响应参数") +@Data +public class AgentActivityResp { + + 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/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/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/AdminAgentActivityConvert.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentActivityConvert.java new file mode 100644 index 0000000..badb6fd --- /dev/null +++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/convert/AdminAgentActivityConvert.java @@ -0,0 +1,24 @@ +package com.seer.teach.mp.admin.convert; + +import com.seer.teach.mp.admin.controller.req.AgentActivityQueryReq; +import com.seer.teach.mp.admin.controller.req.AgentActivityReq; +import com.seer.teach.mp.admin.controller.resp.AgentActivityResp; +import com.seer.teach.mp.entity.MpAgentActivityEntity; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface AdminAgentActivityConvert { + + AdminAgentActivityConvert INSTANCE = Mappers.getMapper(AdminAgentActivityConvert.class); + + MpAgentActivityEntity convert(AgentActivityReq req); + + MpAgentActivityEntity convert(AgentActivityQueryReq req); + + AgentActivityResp convertToResp(MpAgentActivityEntity 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/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/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..1de25bb --- /dev/null +++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/AdminAgentService.java @@ -0,0 +1,93 @@ +package com.seer.teach.mp.admin.service; + +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.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.pageList(pageParam, query); + + 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/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/IAdminAgentActivityService.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityService.java new file mode 100644 index 0000000..5117602 --- /dev/null +++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/IAdminAgentActivityService.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.resp.AgentActivityResp; +import com.seer.teach.mp.admin.controller.req.AgentActivityQueryReq; +import com.seer.teach.mp.admin.controller.req.AgentActivityReq; + +/** + *

+ * 管理端代理商活动服务类 + *

+ * + * @author Lingma + * @since 2025-12-30 + */ +public interface IAdminAgentActivityService { + + /** + * 分页查询代理商活动列表(管理端) + * + * @param query 查询条件 + * @return 代理商活动分页列表 + */ + PageListBean pageList(AgentActivityQueryReq query); + + /** + * 创建或更新代理商活动(管理端) + * + * @param request 活动请求对象 + * @return 操作是否成功 + */ + boolean saveOrUpdateActivity(AgentActivityReq request); + + /** + * 删除代理商活动(管理端) + * + * @param id 活动ID + * @return 操作是否成功 + */ + boolean deleteActivity(Integer id); + + /** + * 根据ID获取活动详情(管理端) + * + * @param id 活动ID + * @return 活动详情 + */ + AgentActivityResp 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/AdminAgentActivityServiceImpl.java b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityServiceImpl.java new file mode 100644 index 0000000..de9d2cb --- /dev/null +++ b/seer-mp/seer-mp-service-admin/src/main/java/com/seer/teach/mp/admin/service/impl/AdminAgentActivityServiceImpl.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.service.IAdminAgentActivityService; +import com.seer.teach.mp.admin.controller.req.AgentActivityQueryReq; +import com.seer.teach.mp.admin.controller.req.AgentActivityReq; +import com.seer.teach.mp.admin.controller.resp.AgentActivityResp; +import com.seer.teach.mp.admin.convert.AdminAgentActivityConvert; +import com.seer.teach.mp.entity.MpAgentActivityEntity; +import com.seer.teach.mp.service.IMpAgentActivityService; +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 AdminAgentActivityServiceImpl implements IAdminAgentActivityService { + + private final IMpAgentActivityService agentActivityService; + + @Override + public PageListBean pageList(AgentActivityQueryReq query) { + Page page = new Page<>(query.getPageNo(), query.getPageSize()); + var pageResult = agentActivityService.page(page, new LambdaQueryWrapper<>(MpAgentActivityEntity.class) + .like(StringUtils.isNotBlank(query.getActivityName()), MpAgentActivityEntity::getActivityName, query.getActivityName()) + .eq(Objects.nonNull(query.getStatus()), MpAgentActivityEntity::getStatus, query.getStatus())); + return PageConverterUtils.convertPageListBean(pageResult, AdminAgentActivityConvert.INSTANCE::convertToRespList); + } + + @Override + public boolean saveOrUpdateActivity(AgentActivityReq request) { + MpAgentActivityEntity entity = AdminAgentActivityConvert.INSTANCE.convert(request); + return agentActivityService.saveOrUpdateActivity(entity); + } + + @Override + public boolean deleteActivity(Integer id) { + return agentActivityService.deleteActivity(id); + } + + @Override + public AgentActivityResp getById(Integer id) { + MpAgentActivityEntity entity = agentActivityService.getById(id); + return AdminAgentActivityConvert.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/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..1b6d3be --- /dev/null +++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityController.java @@ -0,0 +1,55 @@ +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.AppAgentActivityResp; +import com.seer.teach.mp.app.convert.AppAgentActivityConvert; +import com.seer.teach.mp.app.service.IAppAgentActivityService; +import com.seer.teach.mp.entity.MpAgentActivityEntity; +import com.seer.teach.mp.service.IMpAgentActivityService; +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; + +/** + *

+ * 代理商活动App控制器 + *

+ * + * @author Lingma + * @since 2025-12-29 + */ +@Tag(name = "APP - 代理商活动") +@RestController +@RequestMapping("/app/agent/activity") +@LogPrint +@EncryptionAnnotation +@DecryptionAnnotation +@RequiredArgsConstructor +public class AppAgentActivityController { + + private final IAppAgentActivityService agentActivityService; + + @Operation(summary = "代理商活动列表") + @GetMapping("/page-list") + @SaCheckPermission("mp:app:agent:activity:list") + public ResultBean> pageList(AppAgentActivityQueryReq query) { + return ResultBean.success(agentActivityService.pageList(query)); + } + + @Operation(summary = "查看活动详情") + @GetMapping("/{id}") + @SaCheckPermission("mp:app:agent:activity:get") + public ResultBean get(@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/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..5d4c472 --- /dev/null +++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/AppAgentActivityParticipantController.java @@ -0,0 +1,45 @@ +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.user.api.dto.UserInfoDTO; +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; + +/** + *

+ * 代理商活动参与记录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 com.seer.teach.mp.app.service.IAppAgentActivityParticipantService agentActivityParticipantService; + + + @Operation(summary = "获取代理商参与的活动中的家长列表") + @GetMapping("/parents-by-agent") + @SaCheckPermission("mp:app:agent:participant:parents") + public ResultBean> getParentsByAgentAndActivity( + @RequestParam("activityId") Integer activityId,@RequestParam("agentId") Integer agentId) { + return ResultBean.success(agentActivityParticipantService.getParticipantsByActivityAndAgent(activityId, agentId)); + } +} \ 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/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..181d1a4 --- /dev/null +++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AgentActivityParticipantResp.java @@ -0,0 +1,23 @@ +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; + + @Schema(description = "家长ID") + private Integer parentId; + + @Schema(description = "家长手机号") + private String parentMobile; +} \ 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/AppAgentActivityResp.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppAgentActivityResp.java new file mode 100644 index 0000000..2389372 --- /dev/null +++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/controller/resp/AppAgentActivityResp.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 = "AppAgentActivityResp", description = "代理商活动响应参数") +@Data +public class AppAgentActivityResp { + + 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/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..04825a1 --- /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.AppAgentActivityResp; +import com.seer.teach.mp.entity.MpAgentActivityEntity; +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); + + MpAgentActivityEntity convert(AppAgentActivityQueryReq req); + + @Mapping(target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss") + @Mapping(target = "updateTime", dateFormat = "yyyy-MM-dd HH:mm:ss") + AppAgentActivityResp convertToResp(MpAgentActivityEntity 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/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..a24788c --- /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 activityId 活动ID + * @param agentId 代理商ID + * @return 参与记录列表 + */ + List getParticipantsByActivityAndAgent(Integer activityId, Integer agentId); + +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityService.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityService.java new file mode 100644 index 0000000..63d9a17 --- /dev/null +++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/IAppAgentActivityService.java @@ -0,0 +1,35 @@ +package com.seer.teach.mp.app.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.seer.teach.common.PageListBean; +import com.seer.teach.mp.app.controller.resp.AppAgentActivityResp; +import com.seer.teach.mp.app.controller.req.AppAgentActivityQueryReq; +import com.seer.teach.mp.entity.MpAgentActivityEntity; + +/** + *

+ * APP端代理商活动服务类 + *

+ * + * @author Lingma + * @since 2025-12-30 + */ +public interface IAppAgentActivityService { + + /** + * 分页查询代理商活动列表 + * + * @param query 查询条件 + * @return 代理商活动分页列表 + */ + PageListBean pageList(AppAgentActivityQueryReq query); + + /** + * 根据ID获取活动详情 + * + * @param id 活动ID + * @return 活动详情 + */ + AppAgentActivityResp 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/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..f84fd72 --- /dev/null +++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityParticipantServiceImpl.java @@ -0,0 +1,68 @@ +package com.seer.teach.mp.app.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.seer.teach.mp.app.controller.resp.AgentActivityParticipantResp; +import com.seer.teach.mp.app.service.IAppAgentActivityParticipantService; +import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity; +import com.seer.teach.mp.service.IMpAgentActivityParticipantService; +import com.seer.teach.user.api.UserInfoServiceApi; +import com.seer.teach.user.api.dto.UserInfoDTO; +import lombok.RequiredArgsConstructor; +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 + */ +@Service +@RequiredArgsConstructor +public class AppAgentActivityParticipantServiceImpl implements IAppAgentActivityParticipantService { + + private final IMpAgentActivityParticipantService agentActivityParticipantService; + + private final UserInfoServiceApi userInfoServiceApi; + + @Override + public List getParticipantsByActivityAndAgent(Integer activityId, Integer agentId) { + var participants = agentActivityParticipantService.getParticipantsByActivityAndAgent(activityId, agentId); + + if (CollectionUtil.isEmpty(participants)) { + return List.of(); + } + // 提取家长ID + Set parentIds = participants.stream().map(MpAgentActivityParticipantEntity::getParentId).collect(Collectors.toSet()); + + List parentInfos = userInfoServiceApi.getListByUserIds(parentIds); + + var parentInfoMap = parentInfos.stream().collect(Collectors.toMap(UserInfoDTO::getId, parentInfo -> parentInfo)); + + return participants.stream() + .map(entity -> convertToDto(entity, parentInfoMap)) + .collect(Collectors.toList()); + } + + + + private AgentActivityParticipantResp convertToDto(MpAgentActivityParticipantEntity entity, Map parentInfoMap) { + AgentActivityParticipantResp resp = new AgentActivityParticipantResp(); + resp.setId(entity.getId()); + resp.setActivityId(entity.getActivityId()); + resp.setAgentId(entity.getAgentId()); + resp.setParentId(entity.getParentId()); + UserInfoDTO userInfoDTO = parentInfoMap.get(entity.getParentId()); + if(Objects.nonNull(userInfoDTO)){ + resp.setParentMobile(userInfoDTO.getMobile()); + } + 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/AppAgentActivityServiceImpl.java b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityServiceImpl.java new file mode 100644 index 0000000..ddad960 --- /dev/null +++ b/seer-mp/seer-mp-service-app/src/main/java/com/seer/teach/mp/app/service/impl/AppAgentActivityServiceImpl.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.AppAgentActivityResp; +import com.seer.teach.mp.app.convert.AppAgentActivityConvert; +import com.seer.teach.mp.app.service.IAppAgentActivityService; +import com.seer.teach.mp.entity.MpAgentActivityEntity; +import com.seer.teach.mp.service.IMpAgentActivityService; +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 AppAgentActivityServiceImpl implements IAppAgentActivityService { + + private final IMpAgentActivityService agentActivityService; + + @Override + public PageListBean pageList(AppAgentActivityQueryReq query) { + log.info("查询参数:{}", query); + IPage page = new Page<>(query.getPageNo(), query.getPageSize()); + var pageResult = agentActivityService.page(page, new LambdaQueryWrapper<>(MpAgentActivityEntity.class) + .like(StringUtils.isNotBlank(query.getActivityName()), MpAgentActivityEntity::getActivityName, query.getActivityName()) + .eq(Objects.nonNull(query.getStatus()), MpAgentActivityEntity::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 AppAgentActivityResp getById(Integer id) { + MpAgentActivityEntity entity = agentActivityService.getById(id); + return AppAgentActivityConvert.INSTANCE.convertToResp(entity); + } +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/api/impl/MpAgentServiceApiImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/api/impl/MpAgentServiceApiImpl.java new file mode 100644 index 0000000..2a59844 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/api/impl/MpAgentServiceApiImpl.java @@ -0,0 +1,36 @@ +package com.seer.teach.mp.api.impl; + +import com.seer.teach.common.ResultBean; +import com.seer.teach.mp.api.dto.AgentActivityParticipantDTO; +import com.seer.teach.mp.service.IMpAgentActivityParticipantService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequiredArgsConstructor +public class MpAgentServiceApiImpl implements MpAgentServiceApi { + + private final IMpAgentActivityParticipantService agentActivityParticipantService; + + @Override + public ResultBean> getParticipantParents(Integer activityId, Integer agentId) { + var participants = agentActivityParticipantService.getParticipantsByActivityAndAgent(activityId, agentId); + List result = participants.stream() + .map(participant -> { + AgentActivityParticipantDTO dto = new AgentActivityParticipantDTO(); + dto.setId(participant.getId()); + dto.setActivityId(participant.getActivityId()); + dto.setAgentId(participant.getAgentId()); + dto.setParentId(participant.getParentId()); + dto.setCreateTime(participant.getCreateTime()); + dto.setUpdateTime(participant.getUpdateTime()); + return dto; + }) + .collect(Collectors.toList()); + + return ResultBean.success(result); + } +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/cache/MpAgentActivityCache.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/cache/MpAgentActivityCache.java new file mode 100644 index 0000000..930e675 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/cache/MpAgentActivityCache.java @@ -0,0 +1,108 @@ +package com.seer.teach.mp.cache; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.seer.teach.common.utils.RedisUtil; +import com.seer.teach.mp.entity.MpAgentActivityEntity; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.List; + +/** + * 代理商活动缓存服务 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class MpAgentActivityCache { + + private final RedisUtil redisUtil; + + private static final String AGENT_ACTIVITY_PREFIX = "mp:agent:activity:"; + private static final String AGENT_ACTIVITY_LIST_PREFIX = "mp:agent:activity:list:"; + private static final Duration CACHE_TTL = Duration.ofMinutes(30); + + /** + * 获取活动详情缓存 + */ + public MpAgentActivityEntity getActivityById(Integer id) { + String key = AGENT_ACTIVITY_PREFIX + id; + String value = redisUtil.get(key); + if (value != null) { + try { + return cn.hutool.json.JSONUtil.toBean(value, MpAgentActivityEntity.class); + } catch (Exception e) { + log.error("从缓存获取活动详情失败, id: {}", id, e); + } + } + return null; + } + + /** + * 设置活动详情缓存 + */ + public void setActivityById(Integer id, MpAgentActivityEntity entity) { + String key = AGENT_ACTIVITY_PREFIX + id; + try { + String value = cn.hutool.json.JSONUtil.toJsonStr(entity); + redisUtil.set(key, value, CACHE_TTL.toSeconds()); + } catch (Exception e) { + log.error("设置活动详情缓存失败, id: {}", id, e); + } + } + + /** + * 删除活动详情缓存 + */ + public void deleteActivityById(Integer id) { + String key = AGENT_ACTIVITY_PREFIX + id; + redisUtil.del(key); + } + + /** + * 获取活动列表缓存 + */ + public List getActivityList(String keySuffix) { + String key = AGENT_ACTIVITY_LIST_PREFIX + keySuffix; + String value = redisUtil.get(key); + if (value != null) { + try { + return cn.hutool.json.JSONUtil.toList(value, MpAgentActivityEntity.class); + } catch (Exception e) { + log.error("从缓存获取活动列表失败, key: {}", key, e); + } + } + return null; + } + + /** + * 设置活动列表缓存 + */ + public void setActivityList(String keySuffix, List entities) { + String key = AGENT_ACTIVITY_LIST_PREFIX + keySuffix; + try { + String value = cn.hutool.json.JSONUtil.toJsonStr(entities); + redisUtil.set(key, value, CACHE_TTL.toSeconds()); + } catch (Exception e) { + log.error("设置活动列表缓存失败, key: {}", key, e); + } + } + + /** + * 删除活动列表缓存 + */ + public void deleteActivityList(String keySuffix) { + String key = AGENT_ACTIVITY_LIST_PREFIX + keySuffix; + redisUtil.del(key); + } + + /** + * 清除所有活动相关缓存 + */ + public void clearAllActivityCache() { + // 可以通过通配符删除,但这里简单地提供一个清理方法 + log.info("清除所有代理商活动缓存"); + } +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentActivityErrorCodeEnum.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentActivityErrorCodeEnum.java new file mode 100644 index 0000000..eb4aacf --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentActivityErrorCodeEnum.java @@ -0,0 +1,25 @@ +package com.seer.teach.mp.exception; + +import com.seer.teach.common.enums.ResultCodeEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代理商活动错误码枚举 + */ +@Getter +@AllArgsConstructor +public enum AgentActivityErrorCodeEnum implements ResultCodeEnum { + + ACTIVITY_NOT_FOUND(404, "活动不存在"), + ACTIVITY_ALREADY_EXISTS(409, "活动已存在"), + ACTIVITY_NOT_ACTIVE(400, "活动未开始或已结束"), + PARTICIPATION_FAILED(500, "参与活动失败"), + INVALID_AGENT(403, "无效的代理商"), + AGENT_NOT_FOUND(404, "代理商不存在"), + PARENT_NOT_FOUND(404, "家长不存在"), + INVALID_ACTIVITY_STATUS(400, "无效的活动状态"); + + private final Integer code; + private final String message; +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentActivityException.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentActivityException.java new file mode 100644 index 0000000..8c323fb --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentActivityException.java @@ -0,0 +1,24 @@ +package com.seer.teach.mp.exception; + +import com.seer.teach.common.enums.ResultCodeEnum; +import com.seer.teach.common.exception.CommonException; +import lombok.Getter; + +/** + * 代理商活动相关异常 + */ +@Getter +public class AgentActivityException extends CommonException { + + public AgentActivityException(ResultCodeEnum resultCodeEnum) { + super(resultCodeEnum); + } + + public AgentActivityException(ResultCodeEnum resultCodeEnum, String message) { + super(resultCodeEnum, message); + } + + public AgentActivityException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentErrorCodeEnum.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentErrorCodeEnum.java new file mode 100644 index 0000000..ee1ef03 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentErrorCodeEnum.java @@ -0,0 +1,32 @@ +package com.seer.teach.mp.exception; + +import com.seer.teach.common.exception.ErrorCode; + +/** + * 代理商相关错误码枚举 + */ +public enum AgentErrorCodeEnum implements ErrorCode { + + AGENT_NOT_FOUND(40001, "代理商不存在"), + AGENT_CODE_EXISTS(40002, "代理商编码已存在"), + AGENT_STATUS_INVALID(40003, "代理商状态无效"), + AGENT_CONTACT_INFO_INVALID(40004, "联系信息无效"); + + private final int code; + private final String message; + + AgentErrorCodeEnum(int code, String message) { + this.code = code; + this.message = message; + } + + @Override + public int getCode() { + return code; + } + + @Override + public String getMessage() { + return message; + } +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentException.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentException.java new file mode 100644 index 0000000..c79eee8 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/exception/AgentException.java @@ -0,0 +1,26 @@ +package com.seer.teach.mp.exception; + +import com.seer.teach.common.exception.BusinessException; +import com.seer.teach.common.exception.ErrorCode; + +/** + * 代理商业务异常类 + */ +public class AgentException extends BusinessException { + + public AgentException(ErrorCode errorCode) { + super(errorCode); + } + + public AgentException(ErrorCode errorCode, String detailMessage) { + super(errorCode, detailMessage); + } + + public AgentException(String message, Throwable cause) { + super(message, cause); + } + + public AgentException(ErrorCode errorCode, String detailMessage, Throwable cause) { + super(errorCode, detailMessage, cause); + } +} \ 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..3069e27 --- /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, Integer 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..f371f00 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityParticipantService.java @@ -0,0 +1,44 @@ +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.MpAgentActivityParticipantEntity; + +import java.util.List; + +/** + *

+ * 代理商活动参与记录表 服务类 + *

+ * + * @author Lingma + * @since 2025-12-29 + */ +public interface IMpAgentActivityParticipantService extends IService { + + /** + * 分页查询活动参与记录列表 + * + * @param pageParm 分页参数 + * @param query 查询条件 + * @return 活动参与记录分页列表 + */ + IPage pageList(com.baomidou.mybatisplus.extension.plugins.pagination.Page pageParm, MpAgentActivityParticipantEntity query); + + /** + * 添加活动参与记录 + * + * @param entity 参与记录实体 + * @return 操作是否成功 + */ + boolean addParticipant(MpAgentActivityParticipantEntity entity); + + /** + * 根据活动ID和代理商ID获取参与记录 + * + * @param activityId 活动ID + * @param agentId 代理商ID + * @return 参与记录列表 + */ + List getParticipantsByActivityAndAgent(Integer activityId, Integer agentId); +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityService.java new file mode 100644 index 0000000..065eaab --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentActivityService.java @@ -0,0 +1,32 @@ +package com.seer.teach.mp.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.seer.teach.mp.entity.MpAgentActivityEntity; + +/** + *

+ * 代理商活动表 服务类 + *

+ * + * @author Lingma + * @since 2025-12-29 + */ +public interface IMpAgentActivityService extends IService { + + + /** + * 创建或更新代理商活动 + * + * @param entity 活动实体 + * @return 操作是否成功 + */ + boolean saveOrUpdateActivity(MpAgentActivityEntity 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/IMpAgentEmployeeRelationService.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentEmployeeRelationService.java new file mode 100644 index 0000000..b75e157 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentEmployeeRelationService.java @@ -0,0 +1,58 @@ +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); +} \ 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..50dd2d2 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/IMpAgentService.java @@ -0,0 +1,58 @@ +package com.seer.teach.mp.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.seer.teach.mp.entity.MpAgentEntity; +import com.seer.teach.common.utils.PageUtils; +import java.util.Map; + +/** + * 代理商服务接口 + */ +public interface IMpAgentService extends IService { + + /** + * 分页查询代理商列表 + * @param params 查询参数 + * @return 分页结果 + */ + PageUtils queryPage(Map params); + + /** + * 分页查询代理商列表 + * @param page 分页参数 + * @param query 查询条件 + * @return 分页结果 + */ + IPage pageList(Page page, MpAgentEntity query); + + /** + * 根据ID获取代理商信息 + * @param id 代理商ID + * @return 代理商实体 + * @throws AgentException 当代理商不存在时抛出异常 + */ + MpAgentEntity getAgentById(Integer id); + + /** + * 保存代理商信息 + * @param agentEntity 代理商实体 + * @throws AgentException 当代理商信息验证失败或编码已存在时抛出异常 + */ + boolean saveAgent(MpAgentEntity agentEntity); + + /** + * 更新代理商信息 + * @param agentEntity 代理商实体 + * @throws AgentException 当代理商不存在、信息验证失败或编码已存在时抛出异常 + */ + boolean updateAgent(MpAgentEntity agentEntity); + + /** + * 删除代理商 + * @param id 代理商ID + * @throws AgentException 当代理商不存在时抛出异常 + */ + void deleteAgent(Integer id); +} \ 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/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..5aa5168 --- /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, Integer 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..e309570 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityParticipantServiceImpl.java @@ -0,0 +1,120 @@ +package com.seer.teach.mp.service.impl; + +import cn.hutool.json.JSONUtil; +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.utils.AssertUtils; +import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity; +import com.seer.teach.mp.exception.AgentActivityErrorCodeEnum; +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.time.LocalDateTime; +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 IPage pageList(Page pageParm, MpAgentActivityParticipantEntity query) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + if (query != null) { + if (query.getActivityId() != null) { + queryWrapper.eq(MpAgentActivityParticipantEntity::getActivityId, query.getActivityId()); + } + if (query.getAgentId() != null) { + queryWrapper.eq(MpAgentActivityParticipantEntity::getAgentId, query.getAgentId()); + } + if (query.getParentId() != null) { + queryWrapper.eq(MpAgentActivityParticipantEntity::getParentId, query.getParentId()); + } + } + + queryWrapper.orderByDesc(MpAgentActivityParticipantEntity::getCreateTime); + + return baseMapper.selectPage(pageParm, queryWrapper); + } + + @Override + public boolean addParticipant(MpAgentActivityParticipantEntity entity) { + // 验证参与记录数据 + validateParticipant(entity); + + // 检查是否已存在相同的参与记录 + LambdaQueryWrapper queryWrapper = + new LambdaQueryWrapper() + .eq(MpAgentActivityParticipantEntity::getActivityId, entity.getActivityId()) + .eq(MpAgentActivityParticipantEntity::getAgentId, entity.getAgentId()) + .eq(MpAgentActivityParticipantEntity::getParentId, entity.getParentId()); + + long count = this.count(queryWrapper); + if (count > 0) { + // 如果已存在,则不重复添加 + throw new com.seer.teach.mp.exception.AgentActivityException(AgentActivityErrorCodeEnum.PARTICIPATION_FAILED, "已参与该活动"); + } + + entity.setCreateTime(LocalDateTime.now()); + entity.setUpdateTime(LocalDateTime.now()); + + boolean result = this.save(entity); + + // 记录操作日志 + if (result) { + String beforeData = ""; + String afterData = JSONUtil.toJsonStr(entity); + String description = "代理商参与活动,代理商ID: " + entity.getAgentId() + ", 家长ID: " + entity.getParentId(); + + agentActivityLogService.logOperation( + entity.getActivityId(), + entity.getAgentId(), + "参与活动", + description, + beforeData, + afterData + ); + } + + return result; + } + + /** + * 验证参与记录数据 + */ + private void validateParticipant(MpAgentActivityParticipantEntity entity) { + AssertUtils.notNull(entity.getActivityId(), AgentActivityErrorCodeEnum.ACTIVITY_NOT_FOUND, "活动ID不能为空"); + AssertUtils.notNull(entity.getAgentId(), AgentActivityErrorCodeEnum.INVALID_AGENT, "代理商ID不能为空"); + AssertUtils.notNull(entity.getParentId(), AgentActivityErrorCodeEnum.PARENT_NOT_FOUND, "家长ID不能为空"); + + // 检查活动是否存在 + // 这里可以调用活动服务检查活动是否存在,暂时跳过 + } + + @Override + public List getParticipantsByActivityAndAgent(Integer activityId, Integer agentId) { + LambdaQueryWrapper queryWrapper = + new LambdaQueryWrapper() + .eq(MpAgentActivityParticipantEntity::getActivityId, activityId) + .eq(MpAgentActivityParticipantEntity::getAgentId, agentId); + + return this.list(queryWrapper); + } +} \ No newline at end of file diff --git a/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityServiceImpl.java b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityServiceImpl.java new file mode 100644 index 0000000..b2e7aa7 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentActivityServiceImpl.java @@ -0,0 +1,166 @@ +package com.seer.teach.mp.service.impl; + +import cn.hutool.json.JSONUtil; +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.utils.AssertUtils; +import com.seer.teach.mp.cache.MpAgentActivityCache; +import com.seer.teach.mp.entity.MpAgentActivityEntity; +import com.seer.teach.mp.entity.MpAgentActivityLogEntity; +import com.seer.teach.mp.entity.MpAgentActivityParticipantEntity; +import com.seer.teach.mp.exception.AgentActivityErrorCodeEnum; +import com.seer.teach.mp.mapper.MpAgentActivityMapper; +import com.seer.teach.mp.service.IMpAgentActivityLogService; +import com.seer.teach.mp.service.IMpAgentActivityService; +import com.seer.teach.mp.service.IMpAgentActivityParticipantService; +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 MpAgentActivityServiceImpl extends ServiceImpl implements IMpAgentActivityService { + + private final IMpAgentActivityParticipantService agentActivityParticipantService; + private final MpAgentActivityCache agentActivityCache; + private final IMpAgentActivityLogService agentActivityLogService; + + @Override + public boolean saveOrUpdateActivity(MpAgentActivityEntity entity) { + // 验证活动数据 + validateActivity(entity); + + MpAgentActivityEntity 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.getCreatorId(), + operationType, + description, + beforeData, + afterData + ); + } + + return result; + } + + /** + * 验证活动数据 + */ + private void validateActivity(MpAgentActivityEntity entity) { + AssertUtils.notBlank(entity.getActivityName(), AgentActivityErrorCodeEnum.ACTIVITY_ALREADY_EXISTS, "活动名称不能为空"); + AssertUtils.notNull(entity.getStartTime(), AgentActivityErrorCodeEnum.INVALID_ACTIVITY_STATUS, "活动开始时间不能为空"); + AssertUtils.notNull(entity.getEndTime(), AgentActivityErrorCodeEnum.INVALID_ACTIVITY_STATUS, "活动结束时间不能为空"); + + // 检查开始时间不能晚于结束时间 + if (entity.getStartTime().isAfter(entity.getEndTime())) { + throw new com.seer.teach.mp.exception.AgentActivityException(AgentActivityErrorCodeEnum.INVALID_ACTIVITY_STATUS, "活动开始时间不能晚于结束时间"); + } + + // 如果是更新操作,检查活动是否存在 + if (entity.getId() != null) { + MpAgentActivityEntity existing = super.getById(entity.getId()); + AssertUtils.notNull(existing, AgentActivityErrorCodeEnum.ACTIVITY_NOT_FOUND, "活动不存在"); + } + } + + @Override + public boolean deleteActivity(Integer id) { + // 检查活动是否存在 + MpAgentActivityEntity existing = super.getById(id); + AssertUtils.notNull(existing, AgentActivityErrorCodeEnum.ACTIVITY_NOT_FOUND, "活动不存在"); + + // 删除活动前先删除相关的参与记录 + LambdaQueryWrapper participantWrapper = + new LambdaQueryWrapper() + .eq(MpAgentActivityParticipantEntity::getActivityId, id); + agentActivityParticipantService.remove(participantWrapper); + + // 删除缓存 + agentActivityCache.deleteActivityById(id); + + boolean result = this.removeById(id); + + // 记录操作日志 + if (result) { + String beforeData = JSONUtil.toJsonStr(existing); + String afterData = ""; + String description = "删除代理商活动: " + existing.getActivityName(); + + agentActivityLogService.logOperation( + id, + existing.getCreatorId(), + "删除", + description, + beforeData, + afterData + ); + } + + return result; + } + + @Override + public MpAgentActivityEntity getById(Integer id) { + // 先从缓存获取 + MpAgentActivityEntity cached = agentActivityCache.getActivityById(id); + if (cached != null) { + return cached; + } + + // 从数据库获取 + MpAgentActivityEntity entity = super.getById(id); + if (entity != null) { + // 存入缓存 + agentActivityCache.setActivityById(id, entity); + } + + return entity; + } + + @Override + public boolean saveOrUpdate(MpAgentActivityEntity entity) { + boolean result = super.saveOrUpdate(entity); + if (result && entity.getId() != null) { + // 更新缓存 + agentActivityCache.setActivityById(entity.getId(), 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/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..96bdeac --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentEmployeeRelationServiceImpl.java @@ -0,0 +1,113 @@ +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.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) { + // 验证数据 + validateRelation(entity); + + if (entity.getId() == null) { + // 检查是否已存在相同的关联关系 + LambdaQueryWrapper checkWrapper = + new LambdaQueryWrapper() + .eq(MpAgentEmployeeRelationEntity::getAgentId, entity.getAgentId()) + .eq(MpAgentEmployeeRelationEntity::getEmployeeUserId, entity.getEmployeeUserId()); + + long count = this.count(checkWrapper); + if (count > 0) { + throw new com.seer.teach.mp.exception.AgentActivityException( + com.seer.teach.mp.exception.AgentActivityErrorCodeEnum.PARTICIPATION_FAILED, + "员工已关联到代理商" + ); + } + + // 新增时设置创建时间 + entity.setCreateTime(LocalDateTime.now()); + } + entity.setUpdateTime(LocalDateTime.now()); + return this.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 this.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 this.count(queryWrapper) > 0; + } + + /** + * 验证关联数据 + */ + private void validateRelation(MpAgentEmployeeRelationEntity entity) { + com.seer.teach.common.utils.AssertUtils.notNull(entity.getAgentId(), + com.seer.teach.mp.exception.AgentActivityErrorCodeEnum.INVALID_AGENT, "代理商ID不能为空"); + com.seer.teach.common.utils.AssertUtils.notNull(entity.getEmployeeUserId(), + com.seer.teach.mp.exception.AgentActivityErrorCodeEnum.PARENT_NOT_FOUND, "员工用户ID不能为空"); + } +} \ 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..c63f341 --- /dev/null +++ b/seer-mp/seer-mp-service/src/main/java/com/seer/teach/mp/service/impl/MpAgentServiceImpl.java @@ -0,0 +1,168 @@ +package com.seer.teach.mp.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +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.utils.PageUtils; +import com.seer.teach.mp.entity.MpAgentEntity; +import com.seer.teach.mp.exception.AgentErrorCodeEnum; +import com.seer.teach.mp.exception.AgentException; +import com.seer.teach.mp.mapper.MpAgentMapper; +import com.seer.teach.mp.service.IMpAgentService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * 代理商服务实现类 + */ +@Service +public class MpAgentServiceImpl extends ServiceImpl implements IMpAgentService { + + @Override + public PageUtils queryPage(Map params) { + IPage page = this.page( + new Page(Long.parseLong(params.getOrDefault("current", "1").toString()), + Long.parseLong(params.getOrDefault("size", "10").toString())) + ); + return new PageUtils(page); + } + + @Override + public IPage pageList(Page page, MpAgentEntity query) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (query != null) { + if (query.getAgentName() != null && !query.getAgentName().trim().isEmpty()) { + queryWrapper.like("agent_name", query.getAgentName()); + } + if (query.getAgentCode() != null && !query.getAgentCode().trim().isEmpty()) { + queryWrapper.eq("agent_code", query.getAgentCode()); + } + if (query.getAgentLevel() != null && !query.getAgentLevel().trim().isEmpty()) { + queryWrapper.eq("agent_level", query.getAgentLevel()); + } + if (query.getContactName() != null && !query.getContactName().trim().isEmpty()) { + queryWrapper.like("contact_name", query.getContactName()); + } + if (query.getContactPhone() != null && !query.getContactPhone().trim().isEmpty()) { + queryWrapper.eq("contact_phone", query.getContactPhone()); + } + if (query.getStatus() != null) { + queryWrapper.eq("status", query.getStatus()); + } + } + + queryWrapper.orderByDesc("create_time"); + + return this.page(page, queryWrapper); + } + + @Override + public MpAgentEntity getAgentById(Integer id) { + if (id == null || id <= 0) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND, "代理商ID不能为空"); + } + MpAgentEntity agent = this.getById(id); + if (agent == null) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND); + } + return agent; + } + + @Override + @Transactional + public boolean saveAgent(MpAgentEntity agentEntity) { + validateAgent(agentEntity); + + // 检查代理商编码是否已存在 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("agent_code", agentEntity.getAgentCode()); + int count = this.count(queryWrapper); + if (count > 0) { + throw new AgentException(AgentErrorCodeEnum.AGENT_CODE_EXISTS); + } + + agentEntity.setCreateTime(LocalDateTime.now()); + agentEntity.setUpdateTime(LocalDateTime.now()); + + boolean result = this.save(agentEntity); + return result; + } + + @Override + @Transactional + public boolean updateAgent(MpAgentEntity agentEntity) { + validateAgent(agentEntity); + + if (agentEntity.getId() == null || agentEntity.getId() <= 0) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND, "代理商ID不能为空"); + } + + // 检查代理商是否存在 + MpAgentEntity existingAgent = this.getById(agentEntity.getId()); + if (existingAgent == null) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND); + } + + // 检查代理商编码是否被其他代理商使用 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("agent_code", agentEntity.getAgentCode()); + queryWrapper.ne("id", agentEntity.getId()); + int count = this.count(queryWrapper); + if (count > 0) { + throw new AgentException(AgentErrorCodeEnum.AGENT_CODE_EXISTS); + } + + agentEntity.setUpdateTime(LocalDateTime.now()); + + boolean result = this.updateById(agentEntity); + return result; + } + + @Override + @Transactional + public void deleteAgent(Integer id) { + if (id == null || id <= 0) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND, "代理商ID不能为空"); + } + + MpAgentEntity agent = this.getById(id); + if (agent == null) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND); + } + + this.removeById(id); + } + + /** + * 验证代理商实体 + */ + private void validateAgent(MpAgentEntity agentEntity) { + if (agentEntity == null) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND, "代理商信息不能为空"); + } + + if (agentEntity.getAgentName() == null || agentEntity.getAgentName().trim().isEmpty()) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND, "代理商名称不能为空"); + } + + if (agentEntity.getAgentCode() == null || agentEntity.getAgentCode().trim().isEmpty()) { + throw new AgentException(AgentErrorCodeEnum.AGENT_NOT_FOUND, "代理商编码不能为空"); + } + + if (agentEntity.getStatus() != null && (agentEntity.getStatus() != 0 && agentEntity.getStatus() != 1)) { + throw new AgentException(AgentErrorCodeEnum.AGENT_STATUS_INVALID, "代理商状态必须为0或1"); + } + + if (agentEntity.getContactPhone() != null && !agentEntity.getContactPhone().trim().isEmpty()) { + // 简单验证手机号格式 + if (!agentEntity.getContactPhone().matches("^1[3-9]\d{9}$")) { + throw new AgentException(AgentErrorCodeEnum.AGENT_CONTACT_INFO_INVALID, "联系电话格式不正确"); + } + } + } +} \ 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