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

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