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

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

View File

@@ -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<Dynamic> list(Dynamic bo, PageQuery pageQuery) {
Page<Dynamic> page = caiDynamicService.page(pageQuery.build(), Wrappers.lambdaQuery(bo));
public TableDataInfo<DynamicAdminVo> list(DynamicAdminVo bo, PageQuery pageQuery) {
Page<DynamicAdminVo> page = dynamicService.pageAdmin(pageQuery, bo);
return TableDataInfo.build(page);
}
@@ -55,7 +57,7 @@ public class DynamicController extends BaseController {
@GetMapping("/{id}")
public R<Dynamic> 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<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()
@PutMapping()
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}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@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 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<UserCameraAudit> list(UserCameraAudit bo, PageQuery pageQuery) {
Page<UserCameraAudit> page = userCameraAuditService.page(pageQuery.build(), Wrappers.lambdaQuery(bo));
public TableDataInfo<UserCameraAuditAdminVo> list(UserCameraAuditAdminVo bo, PageQuery pageQuery) {
Page<UserCameraAuditAdminVo> 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<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.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<UserGreet> list(UserGreet bo, PageQuery pageQuery) {
Page<UserGreet> page = userGreetService.page(pageQuery.build(), Wrappers.lambdaQuery(bo));
public TableDataInfo<UserGreetAdminVo> list(UserGreetAdminVo bo, PageQuery pageQuery) {
Page<UserGreetAdminVo> 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<Void> add(@Validated(AddGroup.class) @RequestBody UserGreet bo) {
return toAjax(userGreetService.save(bo));
@PostMapping("/batch/audit")
public R<Void> 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();
}
/**
* 修改群发审核
*/

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;
/**
* 状态 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")
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;

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_VIDEO_INCOME_RATE("0.01", "默认工会视频提成"),
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_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);
}
}

View File

@@ -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<Dynamic> {
Page<DynamicListVo> pageApp(@Param("build") Page<Object> build, @Param("query") DynamicQuery query);
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;
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<UserCameraAudit> {
Page<UserCameraAuditAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") UserCameraAuditAdminVo bo);
}

View File

@@ -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<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 org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 用户Mapper接口
*
@@ -20,4 +22,6 @@ public interface UserMapper extends BaseMapper<User> {
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> 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.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<Dynamic> {
Page<DynamicListVo> pageApp(PageQuery pageQuery, DynamicQuery query);
void saveDynamic(DynamicAddReq res);
Page<DynamicAdminVo> pageAdmin(PageQuery pageQuery, DynamicAdminVo bo);
}

View File

@@ -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<UserCameraAudit> {
CameraAuditVo cameraAudit(Long userId);
Boolean uploadCameraAudit(CameraAuditVo vo);
Page<UserCameraAuditAdminVo> pageAdmin(PageQuery pageQuery, UserCameraAuditAdminVo bo);
}

View File

@@ -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<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.common.core.domain.PageQuery;
import java.util.List;
/**
* 用户Service接口
*
@@ -37,5 +39,4 @@ public interface UserService extends IService<User> {
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.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<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 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<UserCameraAuditMappe
public static final Map<Integer,String> 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<UserCameraAuditMappe
vo.setUserId(userId);
vo.setActionType(actionType);
vo.setActionImage(ACTION_TYPES.get(actionType));
vo.setAuditStatus(0);
vo.setAuditStatus(AuditStatusEnum.NONE.getCode());
}
User user = userService.getById(userId);
if(user.getCameraStatus() == 1){
vo.setAuditStatus(2);
vo.setAuditStatus(AuditStatusEnum.SUCCESS.getCode());
vo.setAuditRemark(null);
}
return vo;
@@ -81,7 +85,7 @@ public class UserCameraAuditServiceImpl extends ServiceImpl<UserCameraAuditMappe
UserCameraAudit update = new UserCameraAudit();
update.setUserId(vo.getUserId());
update.setAuditStatus(1);
update.setAuditStatus(AuditStatusEnum.AUDITING.getCode());
update.setActionType(vo.getActionType());
update.setActionImage(vo.getActionImage());
if(userCameraAudit != null){
@@ -90,4 +94,9 @@ public class UserCameraAuditServiceImpl extends ServiceImpl<UserCameraAuditMappe
}
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;
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<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);
}
}