|
|
@@ -0,0 +1,189 @@
|
|
|
+package cn.iocoder.yudao.module.iscs.service.attribute;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.lang.Assert;
|
|
|
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
+import cn.iocoder.yudao.framework.redis.RedisCacheUtil;
|
|
|
+import cn.iocoder.yudao.module.iscs.controller.admin.attribute.vo.AttributePageReqVO;
|
|
|
+import cn.iocoder.yudao.module.iscs.controller.admin.attribute.vo.AttributeSaveReqVO;
|
|
|
+import cn.iocoder.yudao.module.iscs.controller.admin.attribute.vo.MailVO;
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.attribute.AttributeDO;
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.mysql.attribute.AttributeMapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import jakarta.annotation.Resource;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
+import static cn.iocoder.yudao.module.iscs.enums.ErrorCodeConstants.ATTRIBUTE_NOT_EXISTS;
|
|
|
+import static cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants.ATTRIBUTE;
|
|
|
+
|
|
|
+/**
|
|
|
+ * iscs基础数据 Service 实现类
|
|
|
+ *
|
|
|
+ * @author 芋道源码
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@Validated
|
|
|
+public class AttributeServiceImpl implements AttributeService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private AttributeMapper attributeMapper;
|
|
|
+ @Resource
|
|
|
+ private RedisCacheUtil redisCacheUtil;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Long createAttribute(AttributeSaveReqVO createReqVO) {
|
|
|
+ Assert.notBlank(createReqVO.getSysAttrKey(), "键名不可为空");
|
|
|
+ Assert.notBlank(createReqVO.getSysAttrValue(), "键值不可为空");
|
|
|
+ // 1.判断键名不可重复
|
|
|
+ List<AttributeDO> list = attributeMapper.selectList(Wrappers.<AttributeDO>lambdaQuery()
|
|
|
+ .eq(AttributeDO::getSysAttrKey, createReqVO.getSysAttrKey()));
|
|
|
+ Assert.isTrue(list.isEmpty(), "当前键名已存在!");
|
|
|
+
|
|
|
+ // 2.插入
|
|
|
+ AttributeDO attribute = BeanUtils.toBean(createReqVO, AttributeDO.class);
|
|
|
+ attributeMapper.insert(attribute);
|
|
|
+
|
|
|
+ // 3.开始缓存
|
|
|
+ String key = ATTRIBUTE + createReqVO.getSysAttrKey();
|
|
|
+ redisCacheUtil.setCacheObject(key, attribute);
|
|
|
+
|
|
|
+ // 返回
|
|
|
+ return attribute.getId();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateAttribute(AttributeSaveReqVO updateReqVO) {
|
|
|
+ Assert.notNull(updateReqVO.getId(), "主键id不可为空!");
|
|
|
+ Assert.notBlank(updateReqVO.getSysAttrKey(), "键名不可为空");
|
|
|
+ Assert.notBlank(updateReqVO.getSysAttrValue(), "键值不可为空");
|
|
|
+ // 1.判断键名不可重复
|
|
|
+ List<AttributeDO> list = attributeMapper.selectList(Wrappers.<AttributeDO>lambdaQuery()
|
|
|
+ .eq(AttributeDO::getSysAttrKey, updateReqVO.getSysAttrKey())
|
|
|
+ .ne(AttributeDO::getId, updateReqVO.getId()));
|
|
|
+ Assert.isTrue(list.isEmpty(), "当前键名已存在!");
|
|
|
+ // 2.校验存在
|
|
|
+ validateAttributeExists(updateReqVO.getId());
|
|
|
+ // 3.更新
|
|
|
+ AttributeDO updateObj = BeanUtils.toBean(updateReqVO, AttributeDO.class);
|
|
|
+ attributeMapper.updateById(updateObj);
|
|
|
+
|
|
|
+ // 4.因为不知道会不会改键名,所以不管怎么样都把之前的缓存删掉重新插
|
|
|
+ AttributeDO byId = attributeMapper.selectById(updateReqVO.getId());
|
|
|
+ redisCacheUtil.deleteObject(ATTRIBUTE + byId.getSysAttrKey());
|
|
|
+ // 5.开始缓存
|
|
|
+ String key = ATTRIBUTE + updateReqVO.getSysAttrKey();
|
|
|
+ redisCacheUtil.setCacheObject(key, byId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteAttribute(Long id) {
|
|
|
+ // 校验存在
|
|
|
+ validateAttributeExists(id);
|
|
|
+ // 删除
|
|
|
+ attributeMapper.deleteById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteAttributeListByIds(List<Long> ids) {
|
|
|
+ // 校验存在
|
|
|
+ validateAttributeExists(ids);
|
|
|
+ // 开始清理缓存
|
|
|
+ List<AttributeDO> attributeDOList = attributeMapper.selectByIds(ids);
|
|
|
+ for (AttributeDO attributeDO : attributeDOList) {
|
|
|
+ redisCacheUtil.deleteObject(ATTRIBUTE + attributeDO.getSysAttrKey());
|
|
|
+ }
|
|
|
+ // 删除
|
|
|
+ attributeMapper.deleteByIds(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void validateAttributeExists(List<Long> ids) {
|
|
|
+ List<AttributeDO> list = attributeMapper.selectByIds(ids);
|
|
|
+ if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
|
|
|
+ throw exception(ATTRIBUTE_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void validateAttributeExists(Long id) {
|
|
|
+ if (attributeMapper.selectById(id) == null) {
|
|
|
+ throw exception(ATTRIBUTE_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AttributeDO getAttribute(Long id) {
|
|
|
+ return attributeMapper.selectById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageResult<AttributeDO> getAttributePage(AttributePageReqVO pageReqVO) {
|
|
|
+ return attributeMapper.selectPage(pageReqVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AttributeDO getAttributeByKey(String sysAttrKey) {
|
|
|
+ Assert.notBlank(sysAttrKey, "请传入key");
|
|
|
+ AttributeDO cacheObject = redisCacheUtil.getCacheObject(ATTRIBUTE + sysAttrKey);
|
|
|
+ if (cacheObject != null) {
|
|
|
+ return BeanUtils.toBean(cacheObject, AttributeDO.class);
|
|
|
+ } else {
|
|
|
+ AttributeDO one = attributeMapper.selectOne(Wrappers.<AttributeDO>lambdaQuery()
|
|
|
+ .eq(AttributeDO::getSysAttrKey, sysAttrKey));
|
|
|
+ if (one != null) {
|
|
|
+ redisCacheUtil.setCacheObject(ATTRIBUTE + sysAttrKey, BeanUtils.toBean(one, AttributeDO.class));
|
|
|
+ return one;
|
|
|
+ } else {
|
|
|
+ Assert.isTrue(false, "该配置参数不存在!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public MailVO getMailVo() {
|
|
|
+ ArrayList<String> strings = new ArrayList<>();
|
|
|
+ strings.add("info.mail.hostip");
|
|
|
+ strings.add("info.mail.from");
|
|
|
+ strings.add("info.mail.port");
|
|
|
+ strings.add("info.mail.auth");
|
|
|
+ strings.add("info.mail.name");
|
|
|
+ strings.add("info.mail.company");
|
|
|
+ List<AttributeDO> list = attributeMapper.selectList(Wrappers.<AttributeDO>lambdaQuery()
|
|
|
+ .in(AttributeDO::getSysAttrKey, strings));
|
|
|
+ // 邮箱服务地址
|
|
|
+ MailVO mailVO = new MailVO();
|
|
|
+ try {
|
|
|
+ mailVO.setHostIp(list.stream().filter(o -> "info.mail.hostip".equals(o.getSysAttrKey())).limit(1).toList().get(0).getSysAttrValue());
|
|
|
+ mailVO.setFromMail(list.stream().filter(o -> "info.mail.from".equals(o.getSysAttrKey())).limit(1).toList().get(0).getSysAttrValue());
|
|
|
+ mailVO.setPort(list.stream().filter(o -> "info.mail.port".equals(o.getSysAttrKey())).limit(1).toList().get(0).getSysAttrValue());
|
|
|
+ mailVO.setAuth(list.stream().filter(o -> "info.mail.auth".equals(o.getSysAttrKey())).limit(1).toList().get(0).getSysAttrValue());
|
|
|
+ mailVO.setName(list.stream().filter(o -> "info.mail.name".equals(o.getSysAttrKey())).limit(1).toList().get(0).getSysAttrValue());
|
|
|
+ mailVO.setCompany(list.stream().filter(o -> "info.mail.company".equals(o.getSysAttrKey())).limit(1).toList().get(0).getSysAttrValue());
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ Assert.isTrue(false, "邮箱参数缺失,请检查!");
|
|
|
+ }
|
|
|
+ return mailVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean refreshAttrCache() {
|
|
|
+ // 开始删除
|
|
|
+ redisCacheUtil.deleteObject(ATTRIBUTE);
|
|
|
+ // 查询所有的数据库数据
|
|
|
+ List<AttributeDO> list = attributeMapper.selectList();
|
|
|
+ // 开始缓存
|
|
|
+ if (!list.isEmpty()) {
|
|
|
+ for (AttributeDO attributeDO : list) {
|
|
|
+ redisCacheUtil.setCacheObject(ATTRIBUTE + attributeDO.getSysAttrKey(), attributeDO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|