This commit is contained in:
dute7liang
2024-01-01 21:41:13 +08:00
parent 0128d6437e
commit a39b919bae
39 changed files with 638 additions and 65 deletions

View File

@@ -78,6 +78,7 @@ public class SysOssController extends BaseController {
Map<String, String> map = new HashMap<>(2); Map<String, String> map = new HashMap<>(2);
map.put("url", oss.getUrl()); map.put("url", oss.getUrl());
map.put("fileName", oss.getOriginalName()); map.put("fileName", oss.getOriginalName());
map.put("path", oss.getFileName());
map.put("ossId", oss.getOssId().toString()); map.put("ossId", oss.getOssId().toString());
return R.ok(map); return R.ok(map);
} }

View File

@@ -6,4 +6,5 @@ public class RedisConstant {
public static final String CITY_CACHE_REDIS = REDIS_P + "city"; 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 DYNAMIC_TOTAL_CACHE_REDIS = REDIS_P + "synamicTotal:%s:%s";
public static final String CODE_REDIS = REDIS_P + "code:%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";
} }

View File

@@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.Dynamic; 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.cai.service.DynamicService;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.annotation.RepeatSubmit;
@@ -34,15 +36,15 @@ import java.util.Arrays;
@RequestMapping("/cai/dynamic") @RequestMapping("/cai/dynamic")
public class DynamicController extends BaseController { public class DynamicController extends BaseController {
private final DynamicService caiDynamicService; private final DynamicService dynamicService;
/** /**
* 查询主播动态列表 * 查询主播动态列表
*/ */
@SaCheckPermission("cai:dynamic:list") @SaCheckPermission("cai:dynamic:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<Dynamic> list(Dynamic bo, PageQuery pageQuery) { public TableDataInfo<DynamicAdminVo> list(DynamicAdminVo bo, PageQuery pageQuery) {
Page<Dynamic> page = caiDynamicService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); Page<DynamicAdminVo> page = dynamicService.pageAdmin(pageQuery, bo);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@@ -55,7 +57,7 @@ public class DynamicController extends BaseController {
@GetMapping("/{id}") @GetMapping("/{id}")
public R<Dynamic> getInfo(@NotNull(message = "主键不能为空") public R<Dynamic> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) { @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() @RepeatSubmit()
@PostMapping() @PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody Dynamic bo) { public R<Void> 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() @RepeatSubmit()
@PutMapping() @PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody Dynamic bo) { public R<Void> 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<Void> 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}") @DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(caiDynamicService.removeBatchByIds(Arrays.asList(ids), true)); return toAjax(dynamicService.removeBatchByIds(Arrays.asList(ids), true));
} }
} }

View File

@@ -3,7 +3,10 @@ package com.ruoyi.cai.controller.admin;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.Dynamic;
import com.ruoyi.cai.domain.UserCameraAudit; 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.cai.service.UserCameraAuditService;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.annotation.RepeatSubmit;
@@ -41,8 +44,8 @@ public class UserCameraAuditController extends BaseController {
*/ */
@SaCheckPermission("cai:userCameraAudit:list") @SaCheckPermission("cai:userCameraAudit:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<UserCameraAudit> list(UserCameraAudit bo, PageQuery pageQuery) { public TableDataInfo<UserCameraAuditAdminVo> list(UserCameraAuditAdminVo bo, PageQuery pageQuery) {
Page<UserCameraAudit> page = userCameraAuditService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); Page<UserCameraAuditAdminVo> page = userCameraAuditService.pageAdmin(pageQuery, bo);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@@ -80,6 +83,17 @@ public class UserCameraAuditController extends BaseController {
return toAjax(userCameraAuditService.updateById(bo)); return toAjax(userCameraAuditService.updateById(bo));
} }
@SaCheckPermission("cai:userCameraAudit:edit")
@RepeatSubmit()
@PostMapping("/batch/audit")
public R<Void> 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();
}
/** /**
* 删除自拍认证 * 删除自拍认证
* *

View File

@@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.UserGreet; 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.cai.service.UserGreetService;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.annotation.RepeatSubmit;
@@ -41,8 +43,8 @@ public class UserGreetController extends BaseController {
*/ */
@SaCheckPermission("cai:userGreet:list") @SaCheckPermission("cai:userGreet:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<UserGreet> list(UserGreet bo, PageQuery pageQuery) { public TableDataInfo<UserGreetAdminVo> list(UserGreetAdminVo bo, PageQuery pageQuery) {
Page<UserGreet> page = userGreetService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); Page<UserGreetAdminVo> page = userGreetService.pageAdmin(pageQuery, bo);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@@ -59,17 +61,18 @@ public class UserGreetController extends BaseController {
return R.ok(userGreetService.getById(id)); return R.ok(userGreetService.getById(id));
} }
/** @SaCheckPermission("cai:userGreet:edit")
* 新增群发审核
*/
@SaCheckPermission("cai:userGreet:add")
@Log(title = "群发审核", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping("/batch/audit")
public R<Void> add(@Validated(AddGroup.class) @RequestBody UserGreet bo) { public R<Void> edit(@RequestBody BatchAuditReq bo) {
return toAjax(userGreetService.save(bo)); userGreetService.update(Wrappers.lambdaUpdate(UserGreet.class)
.in(UserGreet::getId,bo.getIds())
.set(UserGreet::getAuditStatus,bo.getAuditStatus())
.eq(UserGreet::getAuditStatus,1));
return R.ok();
} }
/** /**
* 修改群发审核 * 修改群发审核
*/ */

View File

@@ -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<UserGreetVo>> list(){
Long userId = LoginHelper.getUserId();
User user = userService.getById(userId);
if(user == null || user.getIsAnchor() == 0){
return R.fail(600, "您不是女神,无法群打招呼,快去申请吧!");
}
List<UserGreet> userGreet = userGreetService.listByUserId(userId);
return R.ok(BeanConvertUtil.convertListTo(userGreet,UserGreetVo::new));
}
@GetMapping("/add")
@Operation(summary = "新增群打招呼")
public R<Void> add(@RequestBody UserGreetAddReq req){
userGreetService.addUserGreet(req);
return R.ok();
}
@PostMapping("/delete")
@Operation(summary = "删除群打招呼")
public R<Void> add(@RequestBody IdRes req){
userGreetService.removeById(req.getId());
return R.ok();
}
@PostMapping("/send")
@Operation(summary = "群打招呼")
public R<Void> send(@RequestBody IdRes req){
userGreetService.batchSend(req.getId(),LoginHelper.getUserId());
return R.ok();
}
}

View File

@@ -41,9 +41,9 @@ public class Dynamic implements Serializable {
*/ */
private Integer isAttach; private Integer isAttach;
/** /**
* 状态 0 审核中 1可用 2 不可用 * 状态 1 审核中 2 审核通过 3-审核不通过
*/ */
private Integer status; private Integer auditStatus;
/** /**
* 排序字段 * 排序字段
*/ */

View File

@@ -23,23 +23,19 @@ public class UserGreet implements Serializable {
* *
*/ */
@TableId(value = "id") @TableId(value = "id")
private Integer id; private Long id;
/** /**
* *
*/ */
private Integer userId; private Long userId;
/**
* 招呼类型: 0文本 1 语音 2 图片
*/
private Integer type;
/** /**
* 标题 * 标题
*/ */
private String title; private String title;
/** /**
* 审核状态 0 审核中, 1 审核通过, 2 审核不通过 * 审核状态 1 审核中, 2 审核通过, 3 审核不通过
*/ */
private Integer status; private Integer auditStatus;
private LocalDateTime createTime; private LocalDateTime createTime;

View File

@@ -0,0 +1,11 @@
package com.ruoyi.cai.dto.admin.query;
import lombok.Data;
import java.util.List;
@Data
public class BatchAuditReq {
private List<Long> ids;
private Integer auditStatus;
}

View File

@@ -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<DynamicImages> dynamicImageList;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -18,6 +18,8 @@ public enum SystemConfigEnum {
DEFAULT_UNION_GIFT_INCOME_RATE("0.01", "默认工会礼物提成"), DEFAULT_UNION_GIFT_INCOME_RATE("0.01", "默认工会礼物提成"),
DEFAULT_UNION_VIDEO_INCOME_RATE("0.01", "默认工会视频提成"), DEFAULT_UNION_VIDEO_INCOME_RATE("0.01", "默认工会视频提成"),
DEFAULT_UNION_ONE_INCOME_RATE("0.07", "默认工会一级提成"), DEFAULT_UNION_ONE_INCOME_RATE("0.07", "默认工会一级提成"),
TODAY_GREET_MAX("100", "每日主播群打招呼次数"),
GREET_INTERVAL_MIN("30", "群打招呼的间隔时间(分钟)"),
; ;

View File

@@ -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_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_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){ public static String getRegisterLockKey(String mobile){
return String.format(LOCK_REGISTER_REDIS,mobile); return String.format(LOCK_REGISTER_REDIS,mobile);
@@ -14,4 +16,12 @@ public class LockManager {
public static String getDealInviteLockKey(Long userId){ public static String getDealInviteLockKey(Long userId){
return String.format(LOCK_DEAL_INVITE_REDIS,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);
}
} }

View File

@@ -3,6 +3,7 @@ package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.Dynamic; 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.query.DynamicQuery;
import com.ruoyi.cai.dto.app.vo.DynamicListVo; import com.ruoyi.cai.dto.app.vo.DynamicListVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -20,4 +21,6 @@ public interface DynamicMapper extends BaseMapper<Dynamic> {
Page<DynamicListVo> pageApp(@Param("build") Page<Object> build, @Param("query") DynamicQuery query); Page<DynamicListVo> pageApp(@Param("build") Page<Object> build, @Param("query") DynamicQuery query);
List<String> selectDynamicImageList(@Param("userId") Long userId, @Param("limit") Integer limit); List<String> selectDynamicImageList(@Param("userId") Long userId, @Param("limit") Integer limit);
Page<DynamicAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") DynamicAdminVo bo);
} }

View File

@@ -1,7 +1,10 @@
package com.ruoyi.cai.mapper; package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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.domain.UserCameraAudit;
import com.ruoyi.cai.dto.admin.vo.UserCameraAuditAdminVo;
import org.apache.ibatis.annotations.Param;
/** /**
* 自拍认证Mapper接口 * 自拍认证Mapper接口
@@ -11,4 +14,5 @@ import com.ruoyi.cai.domain.UserCameraAudit;
*/ */
public interface UserCameraAuditMapper extends BaseMapper<UserCameraAudit> { public interface UserCameraAuditMapper extends BaseMapper<UserCameraAudit> {
Page<UserCameraAuditAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") UserCameraAuditAdminVo bo);
} }

View File

@@ -1,7 +1,10 @@
package com.ruoyi.cai.mapper; package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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.domain.UserGreet;
import com.ruoyi.cai.dto.admin.vo.UserGreetAdminVo;
import org.apache.ibatis.annotations.Param;
/** /**
* 群发审核Mapper接口 * 群发审核Mapper接口
@@ -11,4 +14,5 @@ import com.ruoyi.cai.domain.UserGreet;
*/ */
public interface UserGreetMapper extends BaseMapper<UserGreet> { public interface UserGreetMapper extends BaseMapper<UserGreet> {
Page<UserGreetAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") UserGreetAdminVo bo);
} }

View File

@@ -9,6 +9,8 @@ import com.ruoyi.cai.dto.app.query.index.UserQuery;
import com.ruoyi.cai.dto.app.vo.user.UserListVo; import com.ruoyi.cai.dto.app.vo.user.UserListVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 用户Mapper接口 * 用户Mapper接口
* *
@@ -20,4 +22,6 @@ public interface UserMapper extends BaseMapper<User> {
Page<UserAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("query") User query); Page<UserAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("query") User query);
Page<UserListVo> pageApp(@Param("build") Page<Object> build, @Param("query") UserQuery query); Page<UserListVo> pageApp(@Param("build") Page<Object> build, @Param("query") UserQuery query);
Page<UserListVo> greetPageApp(@Param("build") Page<Object> build, @Param("query") GreetQuery query); Page<UserListVo> greetPageApp(@Param("build") Page<Object> build, @Param("query") GreetQuery query);
List<Long> getGreetNumId(@Param("userId") Long userId);
} }

View File

@@ -3,6 +3,7 @@ package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.Dynamic; 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.DynamicAddReq;
import com.ruoyi.cai.dto.app.query.DynamicQuery; import com.ruoyi.cai.dto.app.query.DynamicQuery;
import com.ruoyi.cai.dto.app.vo.DynamicListVo; import com.ruoyi.cai.dto.app.vo.DynamicListVo;
@@ -23,4 +24,6 @@ public interface DynamicService extends IService<Dynamic> {
Page<DynamicListVo> pageApp(PageQuery pageQuery, DynamicQuery query); Page<DynamicListVo> pageApp(PageQuery pageQuery, DynamicQuery query);
void saveDynamic(DynamicAddReq res); void saveDynamic(DynamicAddReq res);
Page<DynamicAdminVo> pageAdmin(PageQuery pageQuery, DynamicAdminVo bo);
} }

View File

@@ -1,8 +1,11 @@
package com.ruoyi.cai.service; package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.UserCameraAudit; 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.dto.app.vo.CameraAuditVo;
import com.ruoyi.common.core.domain.PageQuery;
/** /**
* 自拍认证Service接口 * 自拍认证Service接口
@@ -17,4 +20,6 @@ public interface UserCameraAuditService extends IService<UserCameraAudit> {
CameraAuditVo cameraAudit(Long userId); CameraAuditVo cameraAudit(Long userId);
Boolean uploadCameraAudit(CameraAuditVo vo); Boolean uploadCameraAudit(CameraAuditVo vo);
Page<UserCameraAuditAdminVo> pageAdmin(PageQuery pageQuery, UserCameraAuditAdminVo bo);
} }

View File

@@ -1,7 +1,13 @@
package com.ruoyi.cai.service; package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.UserGreet; 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接口 * 群发审核Service接口
@@ -11,4 +17,11 @@ import com.ruoyi.cai.domain.UserGreet;
*/ */
public interface UserGreetService extends IService<UserGreet> { public interface UserGreetService extends IService<UserGreet> {
List<UserGreet> listByUserId(Long userId);
void addUserGreet(UserGreetAddReq req);
void batchSend(Long id, Long userId);
Page<UserGreetAdminVo> pageAdmin(PageQuery pageQuery, UserGreetAdminVo bo);
} }

View File

@@ -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.cai.dto.app.vo.user.UserListVo;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import java.util.List;
/** /**
* 用户Service接口 * 用户Service接口
* *
@@ -37,5 +39,4 @@ public interface UserService extends IService<User> {
void resetPassword(String mobile, String password); void resetPassword(String mobile, String password);
} }

View File

@@ -8,6 +8,7 @@ import com.ruoyi.cai.cache.DynamicTotalCache;
import com.ruoyi.cai.domain.Dynamic; import com.ruoyi.cai.domain.Dynamic;
import com.ruoyi.cai.domain.DynamicImages; import com.ruoyi.cai.domain.DynamicImages;
import com.ruoyi.cai.domain.User; 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.DynamicAddReq;
import com.ruoyi.cai.dto.app.query.DynamicQuery; import com.ruoyi.cai.dto.app.query.DynamicQuery;
import com.ruoyi.cai.dto.app.vo.DynamicImageVo; import com.ruoyi.cai.dto.app.vo.DynamicImageVo;
@@ -107,4 +108,22 @@ public class DynamicServiceImpl extends ServiceImpl<DynamicMapper, Dynamic> impl
} }
} }
@Override
public Page<DynamicAdminVo> pageAdmin(PageQuery pageQuery, DynamicAdminVo bo) {
Page<DynamicAdminVo> page = baseMapper.pageAdmin(pageQuery.build(), bo);
List<DynamicAdminVo> records = page.getRecords();
List<Long> dynamicIds = records.stream().filter(i -> i.getIsAttach() == 1).map(DynamicAdminVo::getId).collect(Collectors.toList());
if(CollectionUtil.isNotEmpty(dynamicIds)){
List<DynamicImages> dynamicImages = dynamicImagesService.list(Wrappers.lambdaQuery(DynamicImages.class)
.in(DynamicImages::getDynamicId, dynamicIds));
Map<Long, List<DynamicImages>> map =
dynamicImages.stream().collect(Collectors.groupingBy(DynamicImages::getDynamicId));
for (DynamicAdminVo re : records) {
List<DynamicImages> images = map.get(re.getId());
re.setDynamicImageList(images);
}
}
return page;
}
} }

View File

@@ -2,13 +2,17 @@ package com.ruoyi.cai.service.impl;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserCameraAudit; 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.dto.app.vo.CameraAuditVo;
import com.ruoyi.cai.enums.AuditStatusEnum;
import com.ruoyi.cai.mapper.UserCameraAuditMapper; import com.ruoyi.cai.mapper.UserCameraAuditMapper;
import com.ruoyi.cai.service.UserCameraAuditService; import com.ruoyi.cai.service.UserCameraAuditService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.BeanConvertUtil; import com.ruoyi.common.utils.BeanConvertUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -29,10 +33,10 @@ public class UserCameraAuditServiceImpl extends ServiceImpl<UserCameraAuditMappe
public static final Map<Integer,String> ACTION_TYPES = new HashMap<>(); public static final Map<Integer,String> ACTION_TYPES = new HashMap<>();
static { static {
ACTION_TYPES.put(1,"123"); ACTION_TYPES.put(1,"images/audit/ic_1.jpg");
ACTION_TYPES.put(2,"123"); ACTION_TYPES.put(2,"images/audit/ic_2.jpg");
ACTION_TYPES.put(3,"123"); ACTION_TYPES.put(3,"images/audit/ic_3.jpg");
ACTION_TYPES.put(4,"123"); ACTION_TYPES.put(4,"images/audit/ic_4.jpg");
} }
@Autowired @Autowired
@@ -55,11 +59,11 @@ public class UserCameraAuditServiceImpl extends ServiceImpl<UserCameraAuditMappe
vo.setUserId(userId); vo.setUserId(userId);
vo.setActionType(actionType); vo.setActionType(actionType);
vo.setActionImage(ACTION_TYPES.get(actionType)); vo.setActionImage(ACTION_TYPES.get(actionType));
vo.setAuditStatus(0); vo.setAuditStatus(AuditStatusEnum.NONE.getCode());
} }
User user = userService.getById(userId); User user = userService.getById(userId);
if(user.getCameraStatus() == 1){ if(user.getCameraStatus() == 1){
vo.setAuditStatus(2); vo.setAuditStatus(AuditStatusEnum.SUCCESS.getCode());
vo.setAuditRemark(null); vo.setAuditRemark(null);
} }
return vo; return vo;
@@ -81,7 +85,7 @@ public class UserCameraAuditServiceImpl extends ServiceImpl<UserCameraAuditMappe
UserCameraAudit update = new UserCameraAudit(); UserCameraAudit update = new UserCameraAudit();
update.setUserId(vo.getUserId()); update.setUserId(vo.getUserId());
update.setAuditStatus(1); update.setAuditStatus(AuditStatusEnum.AUDITING.getCode());
update.setActionType(vo.getActionType()); update.setActionType(vo.getActionType());
update.setActionImage(vo.getActionImage()); update.setActionImage(vo.getActionImage());
if(userCameraAudit != null){ if(userCameraAudit != null){
@@ -90,4 +94,9 @@ public class UserCameraAuditServiceImpl extends ServiceImpl<UserCameraAuditMappe
} }
return this.saveOrUpdate(update); return this.saveOrUpdate(update);
} }
@Override
public Page<UserCameraAuditAdminVo> pageAdmin(PageQuery pageQuery, UserCameraAuditAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(),bo);
}
} }

View File

@@ -1,11 +1,40 @@
package com.ruoyi.cai.service.impl; 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.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.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.UserGreetMapper;
import com.ruoyi.cai.mapper.UserMapper;
import com.ruoyi.cai.service.UserGreetService; 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 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业务层处理 * 群发审核Service业务层处理
* *
@@ -15,4 +44,116 @@ import org.springframework.stereotype.Service;
@Service @Service
public class UserGreetServiceImpl extends ServiceImpl<UserGreetMapper,UserGreet> implements UserGreetService { public class UserGreetServiceImpl extends ServiceImpl<UserGreetMapper,UserGreet> 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<UserGreet> 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<UserGreet> greets = this.listByUserId(req.getUserId());
if(greets.size() > 10){
throw new ServiceException("每人最多10条");
}
Set<String> 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<Long> toUserIds = userMapper.getGreetNumId(userId);
if(CollectionUtil.isEmpty(toUserIds)){
return;
}
YxDataR<YxCommonR> 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<UserGreetAdminVo> pageAdmin(PageQuery pageQuery, UserGreetAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(),bo);
}
} }

View File

@@ -10,18 +10,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="content" column="content"/> <result property="content" column="content"/>
<result property="cityId" column="city_id"/> <result property="cityId" column="city_id"/>
<result property="isAttach" column="is_attach"/> <result property="isAttach" column="is_attach"/>
<result property="status" column="status"/>
<result property="createTime" column="create_time"/> <result property="createTime" column="create_time"/>
<result property="sort" column="sort"/> <result property="sort" column="sort"/>
</resultMap> </resultMap>
<select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.DynamicListVo"> <select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.DynamicListVo">
select select
t2.age,t2.gender,t2.avatar,t2.nickname,if(t3.id is null,0,1) as star, t2.age,t2.gender,t2.avatar,t2.nickname,if(t3.id is null,0,1) as star,
t1.id,t1.user_id,t1.city_id,t1.is_attach,t1.status,t1.create_time,t1.content t1.id,t1.user_id,t1.city_id,t1.is_attach,t1.audit_status,t1.create_time,t1.content
from cai_dynamic t1 from cai_dynamic t1
left join cai_user t2 on t1.user_id = t2.id left join cai_user t2 on t1.user_id = t2.id
left join cai_user_follow_dynamic t3 on t1.id = t3.dynamic_id and t3.user_id = #{query.currentUserId} left join cai_user_follow_dynamic t3 on t1.id = t3.dynamic_id and t3.user_id = #{query.currentUserId}
where t1.status = 1 and t2.status = 0 where t1.audit_status = 2 and t2.status = 0
<if test="query.userId != null"> <if test="query.userId != null">
and t1.user_id = #{query.userId} and t1.user_id = #{query.userId}
</if> </if>
@@ -37,9 +36,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select t2.url select t2.url
from cai_dynamic t1 from cai_dynamic t1
join cai_dynamic_images t2 on t1.id = t2.user_id join cai_dynamic_images t2 on t1.id = t2.user_id
where t1.status = 1 and t1.user_id = #{userId} where t1.audit_status = 2 and t1.user_id = #{userId}
limit #{limit} limit #{limit}
</select> </select>
<select id="pageAdmin" resultType="com.ruoyi.cai.dto.admin.vo.DynamicAdminVo">
select t1.*, t2.usercode,t2.nickname,t2.mobile,t2.avatar,t2.gender,t2.is_anchor,t2.age,t2.status
from cai_dynamic t1
left join cai_user t2 on t1.user_id = t2.id
<where>
<if test="bo.mobile != null and bo.mobile != ''">
and t2.mobile = #{bo.mobile}
</if>
<if test="bo.usercode != null and bo.usercode != ''">
and t2.usercode = #{bo.usercode}
</if>
<if test="bo.auditStatus != null">
and t1.audit_status = #{bo.auditStatus}
</if>
</where>
order by t1.create_time desc
</select>
</mapper> </mapper>

View File

@@ -3,20 +3,23 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.cai.mapper.UserCameraAuditMapper"> <mapper namespace="com.ruoyi.cai.mapper.UserCameraAuditMapper">
<select id="pageAdmin" resultType="com.ruoyi.cai.dto.admin.vo.UserCameraAuditAdminVo">
<resultMap type="com.ruoyi.cai.domain.UserCameraAudit" id="CaiUserCameraAuditResult"> select t1.*, t2.usercode,t2.nickname,t2.mobile,t2.avatar,t2.gender,t2.is_anchor,t2.age,t2.status
<result property="id" column="id"/> from cai_user_camera_audit t1
<result property="userId" column="user_id"/> left join cai_user t2 on t1.user_id = t2.id
<result property="actionType" column="action_type"/> <where>
<result property="actionImage" column="action_image"/> <if test="bo.mobile != null and bo.mobile != ''">
<result property="photo" column="photo"/> and t2.mobile = #{bo.mobile}
<result property="auditStatus" column="audit_status"/> </if>
<result property="auditTime" column="audit_time"/> <if test="bo.usercode != null and bo.usercode != ''">
<result property="auditCount" column="audit_count"/> and t2.usercode = #{bo.usercode}
<result property="auditRemark" column="audit_remark"/> </if>
<result property="createTime" column="create_time"/> <if test="bo.auditStatus != null">
<result property="operateIp" column="operate_ip"/> and t1.audit_status = #{bo.auditStatus}
</resultMap> </if>
</where>
order by t1.create_time desc
</select>
</mapper> </mapper>

View File

@@ -4,14 +4,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.cai.mapper.UserGreetMapper"> <mapper namespace="com.ruoyi.cai.mapper.UserGreetMapper">
<resultMap type="com.ruoyi.cai.domain.UserGreet" id="UserGreetResult"> <select id="pageAdmin" resultType="com.ruoyi.cai.dto.admin.vo.UserGreetAdminVo">
<result property="id" column="id"/> select t1.*, t2.usercode,t2.nickname,t2.mobile,t2.avatar,t2.gender,t2.is_anchor,t2.age,t2.status
<result property="userId" column="user_id"/> from cai_user_greet t1
<result property="type" column="type"/> left join cai_user t2 on t1.user_id = t2.id
<result property="title" column="title"/> <where>
<result property="status" column="status"/> <if test="bo.mobile != null and bo.mobile != ''">
<result property="createTime" column="create_time"/> and t2.mobile = #{bo.mobile}
</resultMap> </if>
<if test="bo.usercode != null and bo.usercode != ''">
and t2.usercode = #{bo.usercode}
</if>
<if test="bo.auditStatus != null">
and t1.audit_status = #{bo.auditStatus}
</if>
</where>
order by t1.create_time desc
</select>
</mapper> </mapper>

View File

@@ -52,6 +52,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if> </if>
order by t2.last_live_time desc order by t2.last_live_time desc
</select> </select>
<select id="getGreetNumId" resultType="java.lang.Long">
select t1.id
from cai_user t1
where t1.status = 0 and t1.gender = 2 and t1.no_greet = 0
and not exists(select 1 from cai_user_blacklist p1 where t1.id = p1.user_id)
and not exists(select 1 from cai_user_blacklist p2 where t1.id = p2.black_uid)
order by t1.update_time desc
limit 20
</select>
</mapper> </mapper>

View File

@@ -11,7 +11,7 @@ public final class ServiceException extends RuntimeException {
/** /**
* 错误码 * 错误码
*/ */
private Integer code; private Integer code = 600;
/** /**
* 错误提示 * 错误提示

View File

@@ -113,7 +113,7 @@ public class OssClient {
} catch (Exception e) { } catch (Exception e) {
throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]"); 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) { public UploadResult upload(File file, String path) {

View File

@@ -17,6 +17,8 @@ public class UploadResult {
*/ */
private String url; private String url;
private String path;
/** /**
* 文件名 * 文件名
*/ */

View File

@@ -4,13 +4,18 @@ import com.alibaba.fastjson2.JSON;
import com.ruoyi.yunxin.client.ImMessageClient; import com.ruoyi.yunxin.client.ImMessageClient;
import com.ruoyi.yunxin.config.YunxinProperties; import com.ruoyi.yunxin.config.YunxinProperties;
import com.ruoyi.yunxin.req.Option; import com.ruoyi.yunxin.req.Option;
import com.ruoyi.yunxin.req.SendBatchMsgReq;
import com.ruoyi.yunxin.req.SendMsgReq; import com.ruoyi.yunxin.req.SendMsgReq;
import com.ruoyi.yunxin.req.type.YxTextData;
import com.ruoyi.yunxin.resp.SendMsgResp; import com.ruoyi.yunxin.resp.SendMsgResp;
import com.ruoyi.yunxin.resp.YxCommonR;
import com.ruoyi.yunxin.resp.YxDataR; import com.ruoyi.yunxin.resp.YxDataR;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
@Component @Component
public class Yunxin { public class Yunxin {
@@ -20,6 +25,7 @@ public class Yunxin {
@Resource @Resource
private ImMessageClient messageClient; private ImMessageClient messageClient;
@Deprecated
public YxDataR<SendMsgResp> sendTo(Long toUid,Long fromUid,Object data){ public YxDataR<SendMsgResp> sendTo(Long toUid,Long fromUid,Object data){
SendMsgReq req = new SendMsgReq(); SendMsgReq req = new SendMsgReq();
req.setFrom(fromUid == null ? yunxinProperties.getDefaultFromUid() : fromUid+""); req.setFrom(fromUid == null ? yunxinProperties.getDefaultFromUid() : fromUid+"");
@@ -29,4 +35,13 @@ public class Yunxin {
return messageClient.sendMsg(req); return messageClient.sendMsg(req);
} }
public YxDataR<YxCommonR> batchSendToTextMessage(Long fromUid, List<Long> 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);
}
} }

View File

@@ -3,8 +3,10 @@ package com.ruoyi.yunxin.client;
import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.BaseRequest;
import com.dtflys.forest.annotation.Post; import com.dtflys.forest.annotation.Post;
import com.ruoyi.yunxin.interceptor.GlodonTokenInterceptor; import com.ruoyi.yunxin.interceptor.GlodonTokenInterceptor;
import com.ruoyi.yunxin.req.SendBatchMsgReq;
import com.ruoyi.yunxin.req.SendMsgReq; import com.ruoyi.yunxin.req.SendMsgReq;
import com.ruoyi.yunxin.resp.SendMsgResp; import com.ruoyi.yunxin.resp.SendMsgResp;
import com.ruoyi.yunxin.resp.YxCommonR;
import com.ruoyi.yunxin.resp.YxDataR; import com.ruoyi.yunxin.resp.YxDataR;
@BaseRequest(baseURL = "${baseUrl}", interceptor = GlodonTokenInterceptor.class) @BaseRequest(baseURL = "${baseUrl}", interceptor = GlodonTokenInterceptor.class)
@@ -13,6 +15,11 @@ public interface ImMessageClient {
@Post(url = "/nimserver/msg/sendMsg.action") @Post(url = "/nimserver/msg/sendMsg.action")
YxDataR<SendMsgResp> sendMsg(SendMsgReq req); YxDataR<SendMsgResp> sendMsg(SendMsgReq req);
@Post(url = "/nimserver/msg/sendBatchMsg.action")
YxDataR<YxCommonR> sendBatchMsg(SendBatchMsgReq req);
// @Post(url = "/nimserver/msg/sendAttachMsg.action") // @Post(url = "/nimserver/msg/sendAttachMsg.action")
// YxR<SendMsgResp> sendAttachMsg(SendMsgReq req); // YxR<SendMsgResp> sendAttachMsg(SendMsgReq req);
} }

View File

@@ -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<String> toAccids;
private int type = 0;
private String body;
private String option;
}

View File

@@ -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() {
}
}