Commit 27645f5a authored by honghy's avatar honghy

新增节点重复判断逻辑

parent b987c129
package cn.iocoder.yudao.module.system.service.sms;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.service.AbstractService;
import cn.iocoder.yudao.framework.redis.helper.RedisHelper;
......@@ -17,6 +18,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsNodeDO;
import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsNodeMapper;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
......@@ -166,25 +168,56 @@ public class SmsNodeServiceImpl extends AbstractService<SmsNodeMapper, SmsNodeDO
}
}
/**
* 创建短信节点
* <p>
* 此方法用于处理短信节点的创建请求它首先检查节点是否已存在于缓存中,
* 如果存在,则抛出异常表示节点重复如果不存在,则将节点信息插入数据库,
* 并在缓存中设置相应的键值对以备后续快速访问
*
* @param createReqVO 短信节点创建请求对象,包含需要创建的短信节点的相关信息
* @return 返回新创建的短信节点的ID
* @throws ServiceException 如果节点重复,则抛出此异常
*/
@Override
public Long createSmsNode(SmsNodeCreateReqVO createReqVO) {
// 插入
// 将创建请求对象转换为短信节点对象
SmsNodeDO smsNode = SmsNodeConvert.INSTANCE.convert(createReqVO);
// 检查缓存中是否已存在相同节点
String node = redisHelper.get(buildCacheKey(smsNode));
if (StringUtils.isNotBlank(node)) {
// 如果节点已存在,抛出异常
throw new ServiceException(500, "Node cannot be repeated");
}
// 插入新的短信节点到数据库
smsNodeMapper.insert(smsNode);
// 设置新的缓存
redisHelper.set(buildCacheKey(smsNode), JSON.toJSONString(smsNode));
redisHelper.set(SYSTEM_SMS_NODE_KEY + smsNode.getId(), JSON.toJSONString(smsNode));
// 返回
// 返回新创建的短信节点的ID
return smsNode.getId();
}
/**
* 更新短信节点信息
*
* @param updateReqVO 短信节点更新请求对象,包含需要更新的短信节点信息
* @throws ServiceException 如果节点重复,则抛出服务异常
*/
@Override
public void updateSmsNode(SmsNodeUpdateReqVO updateReqVO) {
// 校验存在
SmsNodeDO smsNodeDO = this.validateSmsNodeExists(updateReqVO.getId());
// 更新
// 将更新请求对象转换为需要更新的实体对象
SmsNodeDO updateObj = SmsNodeConvert.INSTANCE.convert(updateReqVO);
// 从缓存中获取当前节点信息
String node = redisHelper.get(buildCacheKey(updateObj));
// 检查节点是否重复,如果重复且ID不匹配,则抛出异常
if (StringUtils.isNotBlank(node) && !updateReqVO.getId().equals(JSON.parseObject(node, SmsNodeDO.class).getId())) {
throw new ServiceException(500, "Node cannot be repeated");
}
// 更新数据库中的短信节点信息
smsNodeMapper.updateById(updateObj);
// 删除旧的缓存
redisHelper.delete(buildCacheKey(smsNodeDO));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment