From 59e6c4871feca01be2af3003ca407bb5d9b25112 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Fri, 6 Jun 2025 22:04:40 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=AE=A2=E6=9C=8D=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E5=90=8E=E5=8F=B0=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kefu/KeFuConversationController.java | 19 ++++++++++ .../app/circle/AppCircleController.java | 16 ++++++++ .../service/kefu/KeFuConversationService.java | 8 ++++ .../kefu/KeFuConversationServiceImpl.java | 14 +++++++ .../service/kefu/KeFuMessageServiceImpl.java | 7 ++++ .../supportstaff/SupportStaffServiceImpl.java | 38 +++++++++++++++++++ .../service/user/AdminUserServiceImpl.java | 2 +- 7 files changed, 103 insertions(+), 1 deletion(-) diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/KeFuConversationController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/KeFuConversationController.java index de4a906..7bdaa24 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/KeFuConversationController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/KeFuConversationController.java @@ -37,6 +37,25 @@ public class KeFuConversationController { @Resource private MemberUserApi memberUserApi; + @GetMapping("/get") + @Operation(summary = "获得客服会话") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('promotion:kefu-conversation:query')") + public CommonResult getConversation(@RequestParam("id") Long id) { + KeFuConversationDO conversation = conversationService.getConversation(id); + if (conversation == null) { + return success(null); + } + + // 拼接数据 + KeFuConversationRespVO result = BeanUtils.toBean(conversation, KeFuConversationRespVO.class); + MemberUserRespDTO memberUser = memberUserApi.getUser(conversation.getUserId()); + if (memberUser != null) { + result.setUserAvatar(memberUser.getAvatar()).setUserNickname(memberUser.getNickname()); + } + return success(result); + } + @PutMapping("/update-conversation-pinned") @Operation(summary = "置顶/取消置顶客服会话") @PreAuthorize("@ss.hasPermission('promotion:kefu-conversation:update')") diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java index 2549c62..219092b 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java @@ -10,8 +10,10 @@ import cn.iocoder.yudao.module.promotion.controller.admin.circle.vo.CircleRespVO import cn.iocoder.yudao.module.promotion.controller.admin.circle.vo.CircleSaveReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.CircleReviewSaveReqVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circle.CircleDO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.circlelike.CircleLikeDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlereview.CircleReviewDO; import cn.iocoder.yudao.module.promotion.service.circle.CircleService; +import cn.iocoder.yudao.module.promotion.service.circlelike.CircleLikeService; import cn.iocoder.yudao.module.promotion.service.circlereview.CircleReviewService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -37,6 +39,8 @@ public class AppCircleController { private CircleReviewService circleReviewService; @Resource private MemberUserApi memberUserApi; + @Resource + private CircleLikeService circleLikeService; public String utilMethod(Long userId,Long reviewId){ String nickname = memberUserApi.getUser(userId).getNickname(); @@ -108,6 +112,18 @@ public class AppCircleController { return success(true); } + @GetMapping("/getLike") + @Operation(summary = "查询是否点赞") + @PreAuthenticated + public CommonResult getLike(@RequestParam("id") Long lookId){ + CircleLikeDO circleLikeDO = circleLikeService.getCircleLike(lookId,getLoginUserId()); + Boolean isLike = false; + if (circleLikeDO != null){ + isLike = true; + } + return success(isLike); + } + @PutMapping("/doLike") @Operation(summary = "点赞/取消点赞") @PreAuthenticated diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuConversationService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuConversationService.java index 52b5179..2882b39 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuConversationService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuConversationService.java @@ -13,6 +13,14 @@ import java.util.List; */ public interface KeFuConversationService { + /** + * 获得客服会话 + * + * @param id 编号 + * @return 客服会话 + */ + KeFuConversationDO getConversation(Long id); + /** * 【管理员】删除客服会话 * diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuConversationServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuConversationServiceImpl.java index 2b8d763..82d1033 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuConversationServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuConversationServiceImpl.java @@ -37,6 +37,11 @@ public class KeFuConversationServiceImpl implements KeFuConversationService { @Resource private SupportStaffMapper supportStaffMapper; + @Override + public KeFuConversationDO getConversation(Long id) { + return conversationMapper.selectById(id); + } + @Override public void deleteKefuConversation(Long id) { // 校验存在 @@ -145,11 +150,20 @@ public class KeFuConversationServiceImpl implements KeFuConversationService { @Override public String transferConversation(Long id, Long kefuId) { + //先下线 + KeFuConversationDO currDo = conversationMapper.selectById(id); + SupportStaffDO currSs = supportStaffMapper.selectById(currDo.getKefuId()); + currSs.setStatus(0); + supportStaffMapper.updateById(currSs); + //会话转接 KeFuConversationDO keFuConversationDO = new KeFuConversationDO(); keFuConversationDO.setId(id); keFuConversationDO.setKefuId(kefuId); conversationMapper.updateById(keFuConversationDO); + //再上线新客服 SupportStaffDO supportStaffDO = supportStaffMapper.selectById(kefuId); + supportStaffDO.setStatus(1); + supportStaffMapper.updateById(supportStaffDO); return supportStaffDO.getName(); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuMessageServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuMessageServiceImpl.java index c976269..84e9348 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuMessageServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuMessageServiceImpl.java @@ -194,6 +194,13 @@ public class KeFuMessageServiceImpl implements KeFuMessageService { @Override @Transactional(rollbackFor = Exception.class) public void updateKeFuMessageReadStatus(Long conversationId, Long userId, Integer userType) { + //判断是否是客服 + SupportStaffDO staff = supportStaffMapper.selectOne(new LambdaUpdateWrapper() + .eq(SupportStaffDO::getUserId,getLoginUserId())); + if (staff != null && staff.getStatus() == 1){ + conversationService.updateAdminUnreadMessageCountToZero(conversationId); + return; + } // 1.1 校验会话是否存在 KeFuConversationDO conversation = conversationService.validateKefuConversationExists(conversationId); // 1.2 如果是会员端处理已读,需要传递 userId;万一用户模拟一个 conversationId diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/supportstaff/SupportStaffServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/supportstaff/SupportStaffServiceImpl.java index 755b464..e6c9d39 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/supportstaff/SupportStaffServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/supportstaff/SupportStaffServiceImpl.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.promotion.service.supportstaff; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -13,6 +15,7 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_USERNAME_EXISTS; /** * 客服人员 Service 实现类 @@ -26,6 +29,9 @@ public class SupportStaffServiceImpl implements SupportStaffService { @Resource private SupportStaffMapper supportStaffMapper; + @Resource + private AdminUserApi adminUserApi; + @Override public Integer createSupportStaff(SupportStaffSaveReqVO createReqVO) { // 插入 @@ -36,8 +42,23 @@ public class SupportStaffServiceImpl implements SupportStaffService { throw exception(SUPPORT_STAFF_USER_EXISTS); } } + List users = adminUserApi.getListNoArgs(); + if(!users.isEmpty()){ + users.forEach(user -> { + if(user.getUsername().equals(createReqVO.getAccount())){ + throw exception(USER_USERNAME_EXISTS); + } + }); + } supportStaff.setLineStatus(2); supportStaffMapper.insert(supportStaff); + AdminUserRespDTO adminUserRespDTO = new AdminUserRespDTO(); + adminUserRespDTO.setUsername(createReqVO.getAccount()); + adminUserRespDTO.setMobile(supportStaff.getPhone()); + adminUserRespDTO.setPassword(createReqVO.getPassword()); + adminUserRespDTO.setNickname(supportStaff.getName()); + + adminUserApi.createUserBySupportStaff(adminUserRespDTO); // 返回 return supportStaff.getId(); } @@ -50,6 +71,23 @@ public class SupportStaffServiceImpl implements SupportStaffService { SupportStaffDO updateObj = BeanUtils.toBean(updateReqVO, SupportStaffDO.class); SupportStaffDO supportStaffDO = supportStaffMapper.selectOne("id", updateReqVO.getId()); + AdminUserRespDTO adminUser = new AdminUserRespDTO(); + adminUser.setUsername(updateReqVO.getAccount()); + adminUser.setMobile(updateReqVO.getPhone()); + adminUser.setPassword(updateReqVO.getPassword()); + adminUser.setNickname(updateReqVO.getName()); + + AdminUserRespDTO adminUserRespDTO = adminUserApi.getUserByUserName(supportStaffDO.getAccount()); + if(adminUserRespDTO == null){ + // 新建一个后台账户 + adminUserApi.createUserBySupportStaff(adminUser); + } + else { + adminUserRespDTO.setUsername(adminUser.getUsername()); + adminUserRespDTO.setPassword(adminUser.getPassword()); + adminUserApi.updateUserBySupportStaff(adminUserRespDTO); + } + //判断用户是否被绑定 if (updateObj.getUserId() != null){ if (supportStaffDO.getUserId() == null || !supportStaffDO.getUserId().equals(updateObj.getUserId())){ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index dd8a96f..36f6df1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -589,7 +589,7 @@ public class AdminUserServiceImpl implements AdminUserService { userPostMapper.insertBatch(convertList(user.getPostIds(), postId -> new UserPostDO().setUserId(user.getId()).setPostId(postId))); } - RoleDO role = roleService.getRoleByCode("support_staff"); + RoleDO role = roleService.getRoleByCode("chat"); if (role != null){ //给后台用户关联客服角色 permissionService.assignUserRole(user.getId(), Collections.singleton(role.getId())); -- 2.47.2 From 1b4196ceeff087862113a1ee3ad52a9de2162ac5 Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Mon, 9 Jun 2025 13:08:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=85=8D=E7=99=BB=E5=BD=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/auth/AppAuthController.java | 6 ++++++ .../service/auth/MemberAuthService.java | 2 ++ .../service/auth/MemberAuthServiceImpl.java | 19 +++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java index 5d3c936..61be636 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java @@ -123,4 +123,10 @@ public class AppAuthController { return success(AuthConvert.INSTANCE.convert(signature)); } + @PostMapping("/checkLogin") + @PermitAll + public CommonResult checkLogin(@RequestBody @Valid AppAuthSocialLoginReqVO reqVO) { + return success(authService.checkLogin(reqVO)); + } + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java index 8afc09e..fc17929 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java @@ -85,4 +85,6 @@ public interface MemberAuthService { */ AppAuthLoginRespVO refreshToken(String refreshToken); + Integer checkLogin(AppAuthSocialLoginReqVO reqVO); + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java index e1a8ec5..f3c74d4 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java @@ -258,6 +258,25 @@ public class MemberAuthServiceImpl implements MemberAuthService { return AuthConvert.INSTANCE.convert(accessTokenDO, null); } + @Override + public Integer checkLogin(AppAuthSocialLoginReqVO reqVO) { + // 使用 code 授权码,进行登录。然后,获得到绑定的用户编号 + SocialUserRespDTO socialUser = socialUserApi.getSocialUserByCode(UserTypeEnum.MEMBER.getValue(), reqVO.getType(), + reqVO.getCode(), reqVO.getState()); + System.out.println(socialUser); + if (socialUser == null) { + System.out.println("111"); + throw exception(AUTH_SOCIAL_USER_NOT_FOUND); + } + + //判断openid是否存在 +// SocialUserRespDTO respDTO = socialUserApi.getSocialUserByOpenId(socialUser.getOpenid()); + if (socialUser.getUserId() == null) { + return -1; + } + return 1; + } + private void createLogoutLog(Long userId) { LoginLogCreateReqDTO reqDTO = new LoginLogCreateReqDTO(); reqDTO.setLogType(LoginLogTypeEnum.LOGOUT_SELF.getType()); -- 2.47.2 From fa6a37cb6f005dc74d3306efbf6f06221bc3a26c Mon Sep 17 00:00:00 2001 From: khy <2908249413@qq.com> Date: Mon, 9 Jun 2025 18:06:46 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=A7=8D=E8=8D=89=E8=AF=84=E8=AE=BA?= =?UTF-8?q?=E5=88=97=E8=A1=A8,=E4=BF=AE=E6=94=B9=E5=AE=A2=E6=9C=8D?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/circle/AppCircleController.java | 10 +++ .../app/circle/vo/AppCircleReviewRespVO.java | 75 +++++++++++++++++++ .../AppSupportStaffController.java | 49 ++++++++++++ .../circlereview/CircleReviewService.java | 4 +- .../circlereview/CircleReviewServiceImpl.java | 52 ++++++++++++- 5 files changed, 188 insertions(+), 2 deletions(-) create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/vo/AppCircleReviewRespVO.java create mode 100644 yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/supportstaff/AppSupportStaffController.java diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java index 219092b..df6e322 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/AppCircleController.java @@ -8,7 +8,9 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi; import cn.iocoder.yudao.module.promotion.controller.admin.circle.vo.CirclePageReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.circle.vo.CircleRespVO; import cn.iocoder.yudao.module.promotion.controller.admin.circle.vo.CircleSaveReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.CircleReviewPageReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.CircleReviewSaveReqVO; +import cn.iocoder.yudao.module.promotion.controller.app.circle.vo.AppCircleReviewRespVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circle.CircleDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlelike.CircleLikeDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlereview.CircleReviewDO; @@ -157,4 +159,12 @@ public class AppCircleController { return success(true); } + @GetMapping("/getCircleReviewList") + @Operation(summary = "获得动态评论列表") + @PreAuthenticated + public CommonResult> getCircleReviewList(@Valid CircleReviewPageReqVO circleReviewPageReqVO) { + PageResult pageResult = circleReviewService.getAppCircleReviewPage(circleReviewPageReqVO); + return success(pageResult); + } + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/vo/AppCircleReviewRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/vo/AppCircleReviewRespVO.java new file mode 100644 index 0000000..140b78f --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/circle/vo/AppCircleReviewRespVO.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.promotion.controller.app.circle.vo; + +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 动态的评论 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AppCircleReviewRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12446") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "用户id", example = "10725") + @ExcelProperty("用户id") + private Long userId; + + @Schema(description = "动态id", example = "17391") + @ExcelProperty("动态id") + private Long circleId; + + @Schema(description = "评论类型", example = "2") + @ExcelProperty(value = "评论类型", converter = DictConvert.class) + @DictFormat("circle_review_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer type; + + @Schema(description = "评论内容") + @ExcelProperty("评论内容") + private String content; + + @Schema(description = "图片地址", example = "https://www.iocoder.cn") + @ExcelProperty("图片地址") + private String picUrl; + + @Schema(description = "点赞量", example = "10166") + @ExcelProperty("点赞量") + private Long likeCount; + + @Schema(description = "被回复的评论ID", example = "8913") + @ExcelProperty("被回复的评论ID") + private Long replyId; + + @Schema(description = "被回复的用户ID", example = "32646") + @ExcelProperty("被回复的用户ID") + private Long replyUserId; + + @Schema(description = "版本号") + @ExcelProperty("版本号") + private Integer version; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "子评论") + private List children; + + @Schema(description = "用户昵称") + private String nickname; + + @Schema(description = "用户头像") + private String avatar; + +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/supportstaff/AppSupportStaffController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/supportstaff/AppSupportStaffController.java new file mode 100644 index 0000000..c06b691 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/supportstaff/AppSupportStaffController.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.promotion.controller.app.supportstaff; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; +import cn.iocoder.yudao.module.promotion.controller.admin.supportstaff.vo.SupportStaffPageReqVO; +import cn.iocoder.yudao.module.promotion.controller.admin.supportstaff.vo.SupportStaffRespVO; +import cn.iocoder.yudao.module.promotion.controller.admin.supportstaff.vo.SupportStaffSaveReqVO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.supportstaff.SupportStaffDO; +import cn.iocoder.yudao.module.promotion.service.supportstaff.SupportStaffService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Tag(name = "app - 客服人员") +@RestController +@RequestMapping("/promotion/support-staff") +@Validated +public class AppSupportStaffController { + + @Resource + private SupportStaffService supportStaffService; + @GetMapping("/updateLineStatus") + @PreAuthenticated + public CommonResult updateLineStatus (Integer lineStatus){ + SupportStaffDO supportStaffDO = supportStaffService.getSupportStaffByUserId(getLoginUserId()); + if (supportStaffDO != null){ + supportStaffService.updateLineStatus(String.valueOf(supportStaffDO.getId()), lineStatus); + } + return success(true); + } +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewService.java index 0ac6dbb..f222fb9 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.promotion.service.circlereview; import java.util.*; import javax.validation.*; import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.*; +import cn.iocoder.yudao.module.promotion.controller.app.circle.vo.AppCircleReviewRespVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlereview.CircleReviewDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -54,4 +55,5 @@ public interface CircleReviewService { */ PageResult getCircleReviewPage(CircleReviewPageReqVO pageReqVO); -} \ No newline at end of file + PageResult getAppCircleReviewPage(CircleReviewPageReqVO circleReviewPageReqVO); +} diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewServiceImpl.java index ac34c49..560cbf1 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/circlereview/CircleReviewServiceImpl.java @@ -1,11 +1,18 @@ package cn.iocoder.yudao.module.promotion.service.circlereview; +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; +import cn.iocoder.yudao.module.promotion.controller.app.circle.vo.AppCircleReviewRespVO; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; + import cn.iocoder.yudao.module.promotion.controller.admin.circlereview.vo.*; import cn.iocoder.yudao.module.promotion.dal.dataobject.circlereview.CircleReviewDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -15,6 +22,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.promotion.dal.mysql.circlereview.CircleReviewMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_NOT_EXISTS; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; /** @@ -29,6 +37,9 @@ public class CircleReviewServiceImpl implements CircleReviewService { @Resource private CircleReviewMapper circleReviewMapper; + @Resource + private MemberUserApi memberUserApi; + @Override public Long createCircleReview(CircleReviewSaveReqVO createReqVO) { // 插入 @@ -76,4 +87,43 @@ public class CircleReviewServiceImpl implements CircleReviewService { return circleReviewMapper.selectPage(pageReqVO); } -} \ No newline at end of file + @Override + public PageResult getAppCircleReviewPage(CircleReviewPageReqVO circleReviewPageReqVO) { + circleReviewPageReqVO.setType(0); + PageResult page = circleReviewMapper.selectPage(circleReviewPageReqVO); + List list = page.getList(); + if (list.isEmpty()){ + return PageResult.empty(); + } + List result = list.stream().map(item -> { + AppCircleReviewRespVO appCircleReviewRespVO = new AppCircleReviewRespVO(); + BeanUtils.copyProperties(item, appCircleReviewRespVO); + MemberUserRespDTO member = memberUserApi.getUser(item.getUserId()); + if (member == null) { + throw exception(USER_NOT_EXISTS); + } + appCircleReviewRespVO.setNickname(member.getNickname()); + appCircleReviewRespVO.setAvatar(member.getAvatar()); + List children = circleReviewMapper.selectList("reply_id", item.getId()); + if (CollUtil.isNotEmpty(children)){ + List childs = children.stream().map(child -> { + AppCircleReviewRespVO appCircleReviewRespVOChild = new AppCircleReviewRespVO(); + BeanUtils.copyProperties(child, appCircleReviewRespVOChild); + + MemberUserRespDTO memberUserRespDTO = memberUserApi.getUser(child.getUserId()); + if (memberUserRespDTO == null) { + throw exception(USER_NOT_EXISTS); + } + appCircleReviewRespVOChild.setNickname(memberUserRespDTO.getNickname()); + appCircleReviewRespVOChild.setAvatar(memberUserRespDTO.getAvatar()); + return appCircleReviewRespVOChild; + }).collect(Collectors.toList()); + appCircleReviewRespVO.setChildren(childs); + } + return appCircleReviewRespVO; + }).collect(Collectors.toList()); + PageResult appPage = new PageResult<>(result, page.getTotal()); + return appPage; + } + +} -- 2.47.2