From a39b919bae1a8a96217edea9543a4d2153f10fcb Mon Sep 17 00:00:00 2001 From: dute7liang <383200134@qq.com> Date: Mon, 1 Jan 2024 21:41:13 +0800 Subject: [PATCH] init --- .../controller/system/SysOssController.java | 1 + .../com/ruoyi/cai/constant/RedisConstant.java | 1 + .../controller/admin/DynamicController.java | 27 +++- .../admin/UserCameraAuditController.java | 18 ++- .../controller/admin/UserGreetController.java | 23 +-- .../app/UserGreetAppController.java | 64 ++++++++ .../java/com/ruoyi/cai/domain/Dynamic.java | 4 +- .../java/com/ruoyi/cai/domain/UserGreet.java | 12 +- .../cai/dto/admin/query/BatchAuditReq.java | 11 ++ .../cai/dto/admin/vo/DynamicAdminVo.java | 37 +++++ .../dto/admin/vo/UserCameraAuditAdminVo.java | 32 ++++ .../cai/dto/admin/vo/UserGreetAdminVo.java | 32 ++++ .../dto/app/query/user/UserGreetAddReq.java | 13 ++ .../cai/dto/app/vo/user/UserGreetVo.java | 28 ++++ .../com/ruoyi/cai/enums/AuditStatusEnum.java | 20 +++ .../com/ruoyi/cai/enums/SystemConfigEnum.java | 2 + .../com/ruoyi/cai/manager/LockManager.java | 10 ++ .../com/ruoyi/cai/mapper/DynamicMapper.java | 3 + .../cai/mapper/UserCameraAuditMapper.java | 4 + .../com/ruoyi/cai/mapper/UserGreetMapper.java | 4 + .../java/com/ruoyi/cai/mapper/UserMapper.java | 4 + .../com/ruoyi/cai/service/DynamicService.java | 3 + .../cai/service/UserCameraAuditService.java | 5 + .../ruoyi/cai/service/UserGreetService.java | 13 ++ .../com/ruoyi/cai/service/UserService.java | 3 +- .../cai/service/impl/DynamicServiceImpl.java | 19 +++ .../impl/UserCameraAuditServiceImpl.java | 23 ++- .../service/impl/UserGreetServiceImpl.java | 141 ++++++++++++++++++ .../resources/mapper/cai/DynamicMapper.xml | 24 ++- .../mapper/cai/UserCameraAuditMapper.xml | 31 ++-- .../resources/mapper/cai/UserGreetMapper.xml | 25 +++- .../main/resources/mapper/cai/UserMapper.xml | 9 ++ .../common/exception/ServiceException.java | 2 +- .../java/com/ruoyi/oss/core/OssClient.java | 2 +- .../com/ruoyi/oss/entity/UploadResult.java | 2 + .../main/java/com/ruoyi/yunxin/Yunxin.java | 15 ++ .../ruoyi/yunxin/client/ImMessageClient.java | 7 + .../com/ruoyi/yunxin/req/SendBatchMsgReq.java | 14 ++ .../com/ruoyi/yunxin/req/type/YxTextData.java | 15 ++ 39 files changed, 638 insertions(+), 65 deletions(-) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/UserGreetAppController.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/query/BatchAuditReq.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/DynamicAdminVo.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/UserCameraAuditAdminVo.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/UserGreetAdminVo.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/user/UserGreetAddReq.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/user/UserGreetVo.java create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/enums/AuditStatusEnum.java create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendBatchMsgReq.java create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/type/YxTextData.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java index 2a7cc11c..e38bb983 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java @@ -78,6 +78,7 @@ public class SysOssController extends BaseController { Map map = new HashMap<>(2); map.put("url", oss.getUrl()); map.put("fileName", oss.getOriginalName()); + map.put("path", oss.getFileName()); map.put("ossId", oss.getOssId().toString()); return R.ok(map); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisConstant.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisConstant.java index 8ccc9e10..51e817bb 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisConstant.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisConstant.java @@ -6,4 +6,5 @@ public class RedisConstant { public static final String CITY_CACHE_REDIS = REDIS_P + "city"; public static final String DYNAMIC_TOTAL_CACHE_REDIS = REDIS_P + "synamicTotal:%s:%s"; public static final String CODE_REDIS = REDIS_P + "code:%s:%s"; + public static final String USER_GREET_TOTAL_REDIS = REDIS_P + "userGreetTotal:%s:%s"; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/DynamicController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/DynamicController.java index 5b4d7027..b82f892b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/DynamicController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/DynamicController.java @@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.domain.Dynamic; +import com.ruoyi.cai.dto.admin.query.BatchAuditReq; +import com.ruoyi.cai.dto.admin.vo.DynamicAdminVo; import com.ruoyi.cai.service.DynamicService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.RepeatSubmit; @@ -34,15 +36,15 @@ import java.util.Arrays; @RequestMapping("/cai/dynamic") public class DynamicController extends BaseController { - private final DynamicService caiDynamicService; + private final DynamicService dynamicService; /** * 查询主播动态列表 */ @SaCheckPermission("cai:dynamic:list") @GetMapping("/list") - public TableDataInfo list(Dynamic bo, PageQuery pageQuery) { - Page page = caiDynamicService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + public TableDataInfo list(DynamicAdminVo bo, PageQuery pageQuery) { + Page page = dynamicService.pageAdmin(pageQuery, bo); return TableDataInfo.build(page); } @@ -55,7 +57,7 @@ public class DynamicController extends BaseController { @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { - return R.ok(caiDynamicService.getById(id)); + return R.ok(dynamicService.getById(id)); } /** @@ -66,7 +68,7 @@ public class DynamicController extends BaseController { @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody Dynamic bo) { - return toAjax(caiDynamicService.save(bo)); + return toAjax(dynamicService.save(bo)); } /** @@ -77,7 +79,18 @@ public class DynamicController extends BaseController { @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody Dynamic bo) { - return toAjax(caiDynamicService.updateById(bo)); + return toAjax(dynamicService.updateById(bo)); + } + + @SaCheckPermission("cai:dynamic:edit") + @RepeatSubmit() + @PostMapping("/batch/audit") + public R edit(@RequestBody BatchAuditReq bo) { + dynamicService.update(Wrappers.lambdaUpdate(Dynamic.class) + .in(Dynamic::getId,bo.getIds()) + .set(Dynamic::getAuditStatus,bo.getAuditStatus()) + .eq(Dynamic::getAuditStatus,1)); + return R.ok(); } /** @@ -90,6 +103,6 @@ public class DynamicController extends BaseController { @DeleteMapping("/{ids}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { - return toAjax(caiDynamicService.removeBatchByIds(Arrays.asList(ids), true)); + return toAjax(dynamicService.removeBatchByIds(Arrays.asList(ids), true)); } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserCameraAuditController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserCameraAuditController.java index dc0960f4..40ace8f2 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserCameraAuditController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserCameraAuditController.java @@ -3,7 +3,10 @@ package com.ruoyi.cai.controller.admin; import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.cai.domain.Dynamic; import com.ruoyi.cai.domain.UserCameraAudit; +import com.ruoyi.cai.dto.admin.query.BatchAuditReq; +import com.ruoyi.cai.dto.admin.vo.UserCameraAuditAdminVo; import com.ruoyi.cai.service.UserCameraAuditService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.RepeatSubmit; @@ -41,8 +44,8 @@ public class UserCameraAuditController extends BaseController { */ @SaCheckPermission("cai:userCameraAudit:list") @GetMapping("/list") - public TableDataInfo list(UserCameraAudit bo, PageQuery pageQuery) { - Page page = userCameraAuditService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + public TableDataInfo list(UserCameraAuditAdminVo bo, PageQuery pageQuery) { + Page page = userCameraAuditService.pageAdmin(pageQuery, bo); return TableDataInfo.build(page); } @@ -80,6 +83,17 @@ public class UserCameraAuditController extends BaseController { return toAjax(userCameraAuditService.updateById(bo)); } + @SaCheckPermission("cai:userCameraAudit:edit") + @RepeatSubmit() + @PostMapping("/batch/audit") + public R edit(@RequestBody BatchAuditReq bo) { + userCameraAuditService.update(Wrappers.lambdaUpdate(UserCameraAudit.class) + .in(UserCameraAudit::getId,bo.getIds()) + .set(UserCameraAudit::getAuditStatus,bo.getAuditStatus()) + .eq(UserCameraAudit::getAuditStatus,1)); + return R.ok(); + } + /** * 删除自拍认证 * diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserGreetController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserGreetController.java index 0d95ad1f..bf5f6aea 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserGreetController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/admin/UserGreetController.java @@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.domain.UserGreet; +import com.ruoyi.cai.dto.admin.query.BatchAuditReq; +import com.ruoyi.cai.dto.admin.vo.UserGreetAdminVo; import com.ruoyi.cai.service.UserGreetService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.RepeatSubmit; @@ -41,8 +43,8 @@ public class UserGreetController extends BaseController { */ @SaCheckPermission("cai:userGreet:list") @GetMapping("/list") - public TableDataInfo list(UserGreet bo, PageQuery pageQuery) { - Page page = userGreetService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + public TableDataInfo list(UserGreetAdminVo bo, PageQuery pageQuery) { + Page page = userGreetService.pageAdmin(pageQuery, bo); return TableDataInfo.build(page); } @@ -59,17 +61,18 @@ public class UserGreetController extends BaseController { return R.ok(userGreetService.getById(id)); } - /** - * 新增群发审核 - */ - @SaCheckPermission("cai:userGreet:add") - @Log(title = "群发审核", businessType = BusinessType.INSERT) + @SaCheckPermission("cai:userGreet:edit") @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody UserGreet bo) { - return toAjax(userGreetService.save(bo)); + @PostMapping("/batch/audit") + public R edit(@RequestBody BatchAuditReq bo) { + userGreetService.update(Wrappers.lambdaUpdate(UserGreet.class) + .in(UserGreet::getId,bo.getIds()) + .set(UserGreet::getAuditStatus,bo.getAuditStatus()) + .eq(UserGreet::getAuditStatus,1)); + return R.ok(); } + /** * 修改群发审核 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/UserGreetAppController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/UserGreetAppController.java new file mode 100644 index 00000000..d5316665 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/UserGreetAppController.java @@ -0,0 +1,64 @@ +package com.ruoyi.cai.controller.app; + +import com.ruoyi.cai.domain.User; +import com.ruoyi.cai.domain.UserGreet; +import com.ruoyi.cai.dto.app.query.IdRes; +import com.ruoyi.cai.dto.app.query.user.UserGreetAddReq; +import com.ruoyi.cai.dto.app.vo.user.UserGreetVo; +import com.ruoyi.cai.service.UserGreetService; +import com.ruoyi.cai.service.UserService; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.common.utils.BeanConvertUtil; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/user/greet") +@Tag(name = "群打招呼相关接口") +public class UserGreetAppController { + + @Autowired + private UserGreetService userGreetService; + @Autowired + private UserService userService; + + @GetMapping("/list") + @Operation(summary = "获取当前用户打招呼列表") + public R> list(){ + Long userId = LoginHelper.getUserId(); + User user = userService.getById(userId); + if(user == null || user.getIsAnchor() == 0){ + return R.fail(600, "您不是女神,无法群打招呼,快去申请吧!"); + } + List userGreet = userGreetService.listByUserId(userId); + return R.ok(BeanConvertUtil.convertListTo(userGreet,UserGreetVo::new)); + } + + @GetMapping("/add") + @Operation(summary = "新增群打招呼") + public R add(@RequestBody UserGreetAddReq req){ + userGreetService.addUserGreet(req); + return R.ok(); + } + + + @PostMapping("/delete") + @Operation(summary = "删除群打招呼") + public R add(@RequestBody IdRes req){ + userGreetService.removeById(req.getId()); + return R.ok(); + } + + @PostMapping("/send") + @Operation(summary = "群打招呼") + public R send(@RequestBody IdRes req){ + userGreetService.batchSend(req.getId(),LoginHelper.getUserId()); + return R.ok(); + } + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Dynamic.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Dynamic.java index 56cbf2b7..0f968506 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Dynamic.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/Dynamic.java @@ -41,9 +41,9 @@ public class Dynamic implements Serializable { */ private Integer isAttach; /** - * 状态 0 审核中 1可用 2 不可用 + * 状态 1 审核中 2 审核通过 3-审核不通过 */ - private Integer status; + private Integer auditStatus; /** * 排序字段 */ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserGreet.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserGreet.java index f469b184..da79c1b9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserGreet.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserGreet.java @@ -23,23 +23,19 @@ public class UserGreet implements Serializable { * */ @TableId(value = "id") - private Integer id; + private Long id; /** * */ - private Integer userId; - /** - * 招呼类型: 0文本 1 语音 2 图片 - */ - private Integer type; + private Long userId; /** * 标题 */ private String title; /** - * 审核状态 0 审核中, 1 审核通过, 2 审核不通过 + * 审核状态 1 审核中, 2 审核通过, 3 审核不通过 */ - private Integer status; + private Integer auditStatus; private LocalDateTime createTime; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/query/BatchAuditReq.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/query/BatchAuditReq.java new file mode 100644 index 00000000..e8f259c4 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/query/BatchAuditReq.java @@ -0,0 +1,11 @@ +package com.ruoyi.cai.dto.admin.query; + +import lombok.Data; + +import java.util.List; + +@Data +public class BatchAuditReq { + private List ids; + private Integer auditStatus; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/DynamicAdminVo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/DynamicAdminVo.java new file mode 100644 index 00000000..b53072ef --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/DynamicAdminVo.java @@ -0,0 +1,37 @@ +package com.ruoyi.cai.dto.admin.vo; + +import com.ruoyi.cai.domain.Dynamic; +import com.ruoyi.cai.domain.DynamicImages; +import lombok.Data; + +import java.util.List; + +@Data +public class DynamicAdminVo extends Dynamic { + /** + * 用户号/ID号 + */ + private String usercode; + /** + * 昵称 + */ + private String nickname; + + /** + * 手机号 + */ + private String mobile; + + /** + * 头像 + */ + private String avatar; + /** + * 性别 + */ + private Integer gender; + private Integer age; + private Integer status; + + private List dynamicImageList; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/UserCameraAuditAdminVo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/UserCameraAuditAdminVo.java new file mode 100644 index 00000000..72994848 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/UserCameraAuditAdminVo.java @@ -0,0 +1,32 @@ +package com.ruoyi.cai.dto.admin.vo; + +import com.ruoyi.cai.domain.UserCameraAudit; +import lombok.Data; + +@Data +public class UserCameraAuditAdminVo extends UserCameraAudit { + /** + * 用户号/ID号 + */ + private String usercode; + /** + * 昵称 + */ + private String nickname; + + /** + * 手机号 + */ + private String mobile; + + /** + * 头像 + */ + private String avatar; + /** + * 性别 + */ + private Integer gender; + private Integer age; + private Integer status; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/UserGreetAdminVo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/UserGreetAdminVo.java new file mode 100644 index 00000000..024f6cae --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/admin/vo/UserGreetAdminVo.java @@ -0,0 +1,32 @@ +package com.ruoyi.cai.dto.admin.vo; + +import com.ruoyi.cai.domain.UserGreet; +import lombok.Data; + +@Data +public class UserGreetAdminVo extends UserGreet { + /** + * 用户号/ID号 + */ + private String usercode; + /** + * 昵称 + */ + private String nickname; + + /** + * 手机号 + */ + private String mobile; + + /** + * 头像 + */ + private String avatar; + /** + * 性别 + */ + private Integer gender; + private Integer age; + private Integer status; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/user/UserGreetAddReq.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/user/UserGreetAddReq.java new file mode 100644 index 00000000..84d872f8 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/query/user/UserGreetAddReq.java @@ -0,0 +1,13 @@ +package com.ruoyi.cai.dto.app.query.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "新增群达招呼") +public class UserGreetAddReq { + @Schema(accessMode = Schema.AccessMode.READ_ONLY) + private Long userId; + @Schema(description = "内容") + private String title; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/user/UserGreetVo.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/user/UserGreetVo.java new file mode 100644 index 00000000..26e5624a --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/user/UserGreetVo.java @@ -0,0 +1,28 @@ +package com.ruoyi.cai.dto.app.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "群打招呼") +public class UserGreetVo { + + @Schema(description = "ID") + private Long id; + /** + * + */ + @Schema(description = "用户ID") + private Long userId; + /** + * 标题 + */ + @Schema(description = "标题") + private String title; + /** + * 审核状态 + */ + @Schema(description = "审核状态 1 审核中, 2 审核通过, 3 审核不通过") + private Integer status; + +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/AuditStatusEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/AuditStatusEnum.java new file mode 100644 index 00000000..90be02b5 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/AuditStatusEnum.java @@ -0,0 +1,20 @@ +package com.ruoyi.cai.enums; + + +import lombok.Getter; + +@Getter +public enum AuditStatusEnum { + NONE(0,"待申请"), + AUDITING(1,"审核中"), + SUCCESS(2,"审核通过"), + FAIL(3,"审核失败"), + ; + private final Integer code; + private final String name; + + AuditStatusEnum(Integer code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java index 722a49ed..424f9eff 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java @@ -18,6 +18,8 @@ public enum SystemConfigEnum { DEFAULT_UNION_GIFT_INCOME_RATE("0.01", "默认工会礼物提成"), DEFAULT_UNION_VIDEO_INCOME_RATE("0.01", "默认工会视频提成"), DEFAULT_UNION_ONE_INCOME_RATE("0.07", "默认工会一级提成"), + TODAY_GREET_MAX("100", "每日主播群打招呼次数"), + GREET_INTERVAL_MIN("30", "群打招呼的间隔时间(分钟)"), ; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/LockManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/LockManager.java index 0d8980bf..fc811cc7 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/LockManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/LockManager.java @@ -6,6 +6,8 @@ public class LockManager { public static final String LOCK_REGISTER_REDIS = RedisConstant.REDIS_P + "lock:register:%s"; public static final String LOCK_DEAL_INVITE_REDIS = RedisConstant.REDIS_P + "lock:dealInvite:%s"; + public static final String LOCK_ADD_USER_GREET_REDIS = RedisConstant.REDIS_P + "lock:addUserGreet:%s"; + public static final String LOCK_SEND_GREET_REDIS = RedisConstant.REDIS_P + "lock:sendGreet:%s"; public static String getRegisterLockKey(String mobile){ return String.format(LOCK_REGISTER_REDIS,mobile); @@ -14,4 +16,12 @@ public class LockManager { public static String getDealInviteLockKey(Long userId){ return String.format(LOCK_DEAL_INVITE_REDIS,userId); } + + public static String getAddUserGreetLock(Long userId){ + return String.format(LOCK_ADD_USER_GREET_REDIS,userId); + } + + public static String getSendGreetLock(Long userId){ + return String.format(LOCK_SEND_GREET_REDIS,userId); + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/DynamicMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/DynamicMapper.java index c0b2b9fa..e87f1b20 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/DynamicMapper.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/DynamicMapper.java @@ -3,6 +3,7 @@ package com.ruoyi.cai.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.domain.Dynamic; +import com.ruoyi.cai.dto.admin.vo.DynamicAdminVo; import com.ruoyi.cai.dto.app.query.DynamicQuery; import com.ruoyi.cai.dto.app.vo.DynamicListVo; import org.apache.ibatis.annotations.Param; @@ -20,4 +21,6 @@ public interface DynamicMapper extends BaseMapper { Page pageApp(@Param("build") Page build, @Param("query") DynamicQuery query); List selectDynamicImageList(@Param("userId") Long userId, @Param("limit") Integer limit); + + Page pageAdmin(@Param("build") Page build, @Param("bo") DynamicAdminVo bo); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserCameraAuditMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserCameraAuditMapper.java index 5e1f4041..660deeb9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserCameraAuditMapper.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserCameraAuditMapper.java @@ -1,7 +1,10 @@ package com.ruoyi.cai.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.domain.UserCameraAudit; +import com.ruoyi.cai.dto.admin.vo.UserCameraAuditAdminVo; +import org.apache.ibatis.annotations.Param; /** * 自拍认证Mapper接口 @@ -11,4 +14,5 @@ import com.ruoyi.cai.domain.UserCameraAudit; */ public interface UserCameraAuditMapper extends BaseMapper { + Page pageAdmin(@Param("build") Page build, @Param("bo") UserCameraAuditAdminVo bo); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserGreetMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserGreetMapper.java index 8f3f3a6f..2859579a 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserGreetMapper.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserGreetMapper.java @@ -1,7 +1,10 @@ package com.ruoyi.cai.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.cai.domain.UserGreet; +import com.ruoyi.cai.dto.admin.vo.UserGreetAdminVo; +import org.apache.ibatis.annotations.Param; /** * 群发审核Mapper接口 @@ -11,4 +14,5 @@ import com.ruoyi.cai.domain.UserGreet; */ public interface UserGreetMapper extends BaseMapper { + Page pageAdmin(@Param("build") Page build, @Param("bo") UserGreetAdminVo bo); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserMapper.java index 4ee8e01e..3478ebeb 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserMapper.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserMapper.java @@ -9,6 +9,8 @@ import com.ruoyi.cai.dto.app.query.index.UserQuery; import com.ruoyi.cai.dto.app.vo.user.UserListVo; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 用户Mapper接口 * @@ -20,4 +22,6 @@ public interface UserMapper extends BaseMapper { Page pageAdmin(@Param("build") Page build, @Param("query") User query); Page pageApp(@Param("build") Page build, @Param("query") UserQuery query); Page greetPageApp(@Param("build") Page build, @Param("query") GreetQuery query); + + List getGreetNumId(@Param("userId") Long userId); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/DynamicService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/DynamicService.java index 3c256a48..f00b6486 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/DynamicService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/DynamicService.java @@ -3,6 +3,7 @@ package com.ruoyi.cai.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.Dynamic; +import com.ruoyi.cai.dto.admin.vo.DynamicAdminVo; import com.ruoyi.cai.dto.app.query.DynamicAddReq; import com.ruoyi.cai.dto.app.query.DynamicQuery; import com.ruoyi.cai.dto.app.vo.DynamicListVo; @@ -23,4 +24,6 @@ public interface DynamicService extends IService { Page pageApp(PageQuery pageQuery, DynamicQuery query); void saveDynamic(DynamicAddReq res); + + Page pageAdmin(PageQuery pageQuery, DynamicAdminVo bo); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserCameraAuditService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserCameraAuditService.java index b0b959e5..c12ba939 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserCameraAuditService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserCameraAuditService.java @@ -1,8 +1,11 @@ package com.ruoyi.cai.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.UserCameraAudit; +import com.ruoyi.cai.dto.admin.vo.UserCameraAuditAdminVo; import com.ruoyi.cai.dto.app.vo.CameraAuditVo; +import com.ruoyi.common.core.domain.PageQuery; /** * 自拍认证Service接口 @@ -17,4 +20,6 @@ public interface UserCameraAuditService extends IService { CameraAuditVo cameraAudit(Long userId); Boolean uploadCameraAudit(CameraAuditVo vo); + + Page pageAdmin(PageQuery pageQuery, UserCameraAuditAdminVo bo); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserGreetService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserGreetService.java index c8926cf6..38f18991 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserGreetService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserGreetService.java @@ -1,7 +1,13 @@ package com.ruoyi.cai.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.cai.domain.UserGreet; +import com.ruoyi.cai.dto.admin.vo.UserGreetAdminVo; +import com.ruoyi.cai.dto.app.query.user.UserGreetAddReq; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.List; /** * 群发审核Service接口 @@ -11,4 +17,11 @@ import com.ruoyi.cai.domain.UserGreet; */ public interface UserGreetService extends IService { + List listByUserId(Long userId); + + void addUserGreet(UserGreetAddReq req); + + void batchSend(Long id, Long userId); + + Page pageAdmin(PageQuery pageQuery, UserGreetAdminVo bo); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserService.java index 33c65560..d7a865d7 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserService.java @@ -10,6 +10,8 @@ import com.ruoyi.cai.dto.app.vo.user.UserInfoVo; import com.ruoyi.cai.dto.app.vo.user.UserListVo; import com.ruoyi.common.core.domain.PageQuery; +import java.util.List; + /** * 用户Service接口 * @@ -37,5 +39,4 @@ public interface UserService extends IService { void resetPassword(String mobile, String password); - } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/DynamicServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/DynamicServiceImpl.java index a14db4d8..e2a006d0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/DynamicServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/DynamicServiceImpl.java @@ -8,6 +8,7 @@ import com.ruoyi.cai.cache.DynamicTotalCache; import com.ruoyi.cai.domain.Dynamic; import com.ruoyi.cai.domain.DynamicImages; import com.ruoyi.cai.domain.User; +import com.ruoyi.cai.dto.admin.vo.DynamicAdminVo; import com.ruoyi.cai.dto.app.query.DynamicAddReq; import com.ruoyi.cai.dto.app.query.DynamicQuery; import com.ruoyi.cai.dto.app.vo.DynamicImageVo; @@ -107,4 +108,22 @@ public class DynamicServiceImpl extends ServiceImpl impl } } + @Override + public Page pageAdmin(PageQuery pageQuery, DynamicAdminVo bo) { + Page page = baseMapper.pageAdmin(pageQuery.build(), bo); + List records = page.getRecords(); + List dynamicIds = records.stream().filter(i -> i.getIsAttach() == 1).map(DynamicAdminVo::getId).collect(Collectors.toList()); + if(CollectionUtil.isNotEmpty(dynamicIds)){ + List dynamicImages = dynamicImagesService.list(Wrappers.lambdaQuery(DynamicImages.class) + .in(DynamicImages::getDynamicId, dynamicIds)); + Map> map = + dynamicImages.stream().collect(Collectors.groupingBy(DynamicImages::getDynamicId)); + for (DynamicAdminVo re : records) { + List images = map.get(re.getId()); + re.setDynamicImageList(images); + } + } + return page; + } + } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserCameraAuditServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserCameraAuditServiceImpl.java index f8a1f595..3257b1a9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserCameraAuditServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserCameraAuditServiceImpl.java @@ -2,13 +2,17 @@ package com.ruoyi.cai.service.impl; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.UserCameraAudit; +import com.ruoyi.cai.dto.admin.vo.UserCameraAuditAdminVo; import com.ruoyi.cai.dto.app.vo.CameraAuditVo; +import com.ruoyi.cai.enums.AuditStatusEnum; import com.ruoyi.cai.mapper.UserCameraAuditMapper; import com.ruoyi.cai.service.UserCameraAuditService; import com.ruoyi.cai.service.UserService; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.BeanConvertUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -29,10 +33,10 @@ public class UserCameraAuditServiceImpl extends ServiceImpl ACTION_TYPES = new HashMap<>(); static { - ACTION_TYPES.put(1,"123"); - ACTION_TYPES.put(2,"123"); - ACTION_TYPES.put(3,"123"); - ACTION_TYPES.put(4,"123"); + ACTION_TYPES.put(1,"images/audit/ic_1.jpg"); + ACTION_TYPES.put(2,"images/audit/ic_2.jpg"); + ACTION_TYPES.put(3,"images/audit/ic_3.jpg"); + ACTION_TYPES.put(4,"images/audit/ic_4.jpg"); } @Autowired @@ -55,11 +59,11 @@ public class UserCameraAuditServiceImpl extends ServiceImpl pageAdmin(PageQuery pageQuery, UserCameraAuditAdminVo bo) { + return baseMapper.pageAdmin(pageQuery.build(),bo); + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserGreetServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserGreetServiceImpl.java index 6d3b672a..c48bbc34 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserGreetServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserGreetServiceImpl.java @@ -1,11 +1,40 @@ package com.ruoyi.cai.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.cai.constant.RedisConstant; +import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.UserGreet; +import com.ruoyi.cai.dto.admin.vo.UserGreetAdminVo; +import com.ruoyi.cai.dto.app.query.user.UserGreetAddReq; +import com.ruoyi.cai.enums.SystemConfigEnum; +import com.ruoyi.cai.manager.LockManager; +import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.mapper.UserGreetMapper; +import com.ruoyi.cai.mapper.UserMapper; import com.ruoyi.cai.service.UserGreetService; +import com.ruoyi.cai.service.UserService; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.yunxin.Yunxin; +import com.ruoyi.yunxin.resp.YxCommonR; +import com.ruoyi.yunxin.resp.YxDataR; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + /** * 群发审核Service业务层处理 * @@ -15,4 +44,116 @@ import org.springframework.stereotype.Service; @Service public class UserGreetServiceImpl extends ServiceImpl implements UserGreetService { + + @Autowired + private RedissonClient redissonClient; + @Autowired + private UserService userService; + @Autowired + private StringRedisTemplate stringRedisTemplate; + @Autowired + private SystemConfigManager systemConfigManager; + @Autowired + private Yunxin yunxin; + @Resource + private UserMapper userMapper; + + @Override + public List listByUserId(Long userId) { + return this.list(Wrappers.lambdaQuery(UserGreet.class) + .eq(UserGreet::getUserId,userId)); + } + + @Override + public void addUserGreet(UserGreetAddReq req) { + User user = userService.getById(req.getUserId()); + if(user == null || user.getIsAnchor() == 0){ + throw new ServiceException("您不是女神,无法群发消息"); + } + // 加锁 1秒 + String lockKey = LockManager.getAddUserGreetLock(req.getUserId()); + RLock lock = redissonClient.getLock(lockKey); + if(lock.isLocked()){ + throw new ServiceException("请求太频繁"); + } + try { + lock.lock(1, TimeUnit.SECONDS); + List greets = this.listByUserId(req.getUserId()); + if(greets.size() > 10){ + throw new ServiceException("每人最多10条"); + } + Set set = greets.stream().map(UserGreet::getTitle).collect(Collectors.toSet()); + if(set.contains(req.getTitle())){ + throw new ServiceException("招呼内容已存在"); + } + UserGreet userGreet = new UserGreet(); + userGreet.setUserId(req.getUserId()); + userGreet.setTitle(req.getTitle()); + this.save(userGreet); + }finally { + lock.unlock(); + } + + } + + @Override + public void batchSend(Long id, Long userId) { + UserGreet userGreet = this.getById(id); + if(userGreet == null || !userGreet.getUserId().equals(userId)){ + throw new ServiceException("请选择打招呼内容"); + } + if(userGreet.getAuditStatus() != 1){ + throw new ServiceException("内容未通过审核"); + } + String lockKey = LockManager.getSendGreetLock(userId); + RLock lock = redissonClient.getLock(lockKey); + if(!lock.isLocked()){ + throw new ServiceException("操作太频繁"); + } + try { + lock.lock(3,TimeUnit.SECONDS); + String numKey = String.format(RedisConstant.USER_GREET_TOTAL_REDIS, DateUtil.today(), userId); + String val = stringRedisTemplate.opsForValue().get(numKey); + Long max = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.TODAY_GREET_MAX); + if(val != null && Long.parseLong(val) > max){ + throw new ServiceException("您今天打招呼的次数已经用完了"); + } + String sendGreetLock = LockManager.getSendGreetLock(userId); + String lastTime = stringRedisTemplate.opsForValue().getAndExpire(sendGreetLock, 1, TimeUnit.DAYS); + if(StringUtils.isNotBlank(lastTime)){ + Integer inter = systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.GREET_INTERVAL_MIN); + long jiange = Long.parseLong(lastTime) - DateUtil.currentSeconds(); + long diff = inter - jiange; + if(diff > 0){ + if(diff > 60){ + throw new ServiceException("请在"+diff/60+"分钟后再打招呼吧!"); + }else{ + throw new ServiceException("请在"+diff+"秒后再打招呼吧!"); + } + } + } + List toUserIds = userMapper.getGreetNumId(userId); + if(CollectionUtil.isEmpty(toUserIds)){ + return; + } + YxDataR r = yunxin.batchSendToTextMessage(userId, toUserIds, userGreet.getTitle()); + if(!r.isSuccess()){ + throw new ServiceException("发送失败"); + } + stringRedisTemplate.opsForValue().set(sendGreetLock,DateUtil.currentSeconds()+"",1,TimeUnit.DAYS); + stringRedisTemplate.opsForValue().increment(numKey); + stringRedisTemplate.expire(numKey,1,TimeUnit.DAYS); + }finally { + lock.unlock(); + } + + + } + + @Override + public Page pageAdmin(PageQuery pageQuery, UserGreetAdminVo bo) { + return baseMapper.pageAdmin(pageQuery.build(),bo); + } + + } diff --git a/ruoyi-cai/src/main/resources/mapper/cai/DynamicMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/DynamicMapper.xml index 0b70adc5..fad66edb 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/DynamicMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/DynamicMapper.xml @@ -10,18 +10,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + diff --git a/ruoyi-cai/src/main/resources/mapper/cai/UserCameraAuditMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/UserCameraAuditMapper.xml index 46a780c2..652148fa 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/UserCameraAuditMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/UserCameraAuditMapper.xml @@ -3,20 +3,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - + diff --git a/ruoyi-cai/src/main/resources/mapper/cai/UserGreetMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/UserGreetMapper.xml index e424e5e8..58513316 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/UserGreetMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/UserGreetMapper.xml @@ -4,14 +4,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - + diff --git a/ruoyi-cai/src/main/resources/mapper/cai/UserMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/UserMapper.xml index 841841b4..cb34ff57 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/UserMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/UserMapper.xml @@ -52,6 +52,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by t2.last_live_time desc + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java index 53f41b3b..af2d9826 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java @@ -11,7 +11,7 @@ public final class ServiceException extends RuntimeException { /** * 错误码 */ - private Integer code; + private Integer code = 600; /** * 错误提示 diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java index bf2bb6c7..dad3aa90 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java @@ -113,7 +113,7 @@ public class OssClient { } catch (Exception e) { throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]"); } - return UploadResult.builder().url(getUrl() + "/" + path).filename(path).build(); + return UploadResult.builder().url(getUrl() + "/" + path).path(path).filename(path).build(); } public UploadResult upload(File file, String path) { diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java index 379d283c..2e38f4e5 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/entity/UploadResult.java @@ -17,6 +17,8 @@ public class UploadResult { */ private String url; + private String path; + /** * 文件名 */ diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java index 4618d4f6..df738343 100644 --- a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java +++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java @@ -4,13 +4,18 @@ import com.alibaba.fastjson2.JSON; import com.ruoyi.yunxin.client.ImMessageClient; import com.ruoyi.yunxin.config.YunxinProperties; import com.ruoyi.yunxin.req.Option; +import com.ruoyi.yunxin.req.SendBatchMsgReq; import com.ruoyi.yunxin.req.SendMsgReq; +import com.ruoyi.yunxin.req.type.YxTextData; import com.ruoyi.yunxin.resp.SendMsgResp; +import com.ruoyi.yunxin.resp.YxCommonR; import com.ruoyi.yunxin.resp.YxDataR; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; @Component public class Yunxin { @@ -20,6 +25,7 @@ public class Yunxin { @Resource private ImMessageClient messageClient; + @Deprecated public YxDataR sendTo(Long toUid,Long fromUid,Object data){ SendMsgReq req = new SendMsgReq(); req.setFrom(fromUid == null ? yunxinProperties.getDefaultFromUid() : fromUid+""); @@ -29,4 +35,13 @@ public class Yunxin { return messageClient.sendMsg(req); } + + public YxDataR batchSendToTextMessage(Long fromUid, List toUid, String data){ + SendBatchMsgReq req = new SendBatchMsgReq(); + req.setFromAccid(fromUid+""); + req.setToAccids(toUid.stream().map(i -> String.valueOf(toUid)).collect(Collectors.toList())); + req.setBody(JSON.toJSONString(new YxTextData(data))); + return messageClient.sendBatchMsg(req); + } + } diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImMessageClient.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImMessageClient.java index 803ce9f5..0b8467bf 100644 --- a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImMessageClient.java +++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImMessageClient.java @@ -3,8 +3,10 @@ package com.ruoyi.yunxin.client; import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.Post; import com.ruoyi.yunxin.interceptor.GlodonTokenInterceptor; +import com.ruoyi.yunxin.req.SendBatchMsgReq; import com.ruoyi.yunxin.req.SendMsgReq; import com.ruoyi.yunxin.resp.SendMsgResp; +import com.ruoyi.yunxin.resp.YxCommonR; import com.ruoyi.yunxin.resp.YxDataR; @BaseRequest(baseURL = "${baseUrl}", interceptor = GlodonTokenInterceptor.class) @@ -13,6 +15,11 @@ public interface ImMessageClient { @Post(url = "/nimserver/msg/sendMsg.action") YxDataR sendMsg(SendMsgReq req); + @Post(url = "/nimserver/msg/sendBatchMsg.action") + YxDataR sendBatchMsg(SendBatchMsgReq req); + // @Post(url = "/nimserver/msg/sendAttachMsg.action") // YxR sendAttachMsg(SendMsgReq req); + + } diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendBatchMsgReq.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendBatchMsgReq.java new file mode 100644 index 00000000..04af4b77 --- /dev/null +++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendBatchMsgReq.java @@ -0,0 +1,14 @@ +package com.ruoyi.yunxin.req; + +import lombok.Data; + +import java.util.List; + +@Data +public class SendBatchMsgReq { + private String fromAccid; + private List toAccids; + private int type = 0; + private String body; + private String option; +} diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/type/YxTextData.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/type/YxTextData.java new file mode 100644 index 00000000..2c855a8b --- /dev/null +++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/type/YxTextData.java @@ -0,0 +1,15 @@ +package com.ruoyi.yunxin.req.type; + +import lombok.Data; + +@Data +public class YxTextData { + private String msg; + + public YxTextData(String msg) { + this.msg = msg; + } + + public YxTextData() { + } +}