init
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user