diff --git a/backend/src/main/java/io/dataease/auth/entity/SysUserEntity.java b/backend/src/main/java/io/dataease/auth/entity/SysUserEntity.java index 079d42fd5b..2d07480db9 100644 --- a/backend/src/main/java/io/dataease/auth/entity/SysUserEntity.java +++ b/backend/src/main/java/io/dataease/auth/entity/SysUserEntity.java @@ -1,9 +1,7 @@ package io.dataease.auth.entity; -import lombok.Builder; import lombok.Data; -import lombok.NoArgsConstructor; import java.io.Serializable; @Data diff --git a/backend/src/main/java/io/dataease/commons/utils/AuthUtils.java b/backend/src/main/java/io/dataease/commons/utils/AuthUtils.java new file mode 100644 index 0000000000..adbfb5ce39 --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/utils/AuthUtils.java @@ -0,0 +1,27 @@ +package io.dataease.commons.utils; + +import io.dataease.auth.util.JWTUtils; +import io.dataease.base.domain.SysUser; +import io.dataease.service.sys.SysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class AuthUtils { + + private static SysUserService sysUserService; + + @Autowired + public void setSysUserService(SysUserService sysUserService) { + AuthUtils.sysUserService = sysUserService; + } + + public static SysUser getUser(){ + String token = ServletUtils.getToken(); + String username = JWTUtils.getUsername(token); + SysUser sysUser = new SysUser(); + sysUser.setUsername(username); + SysUser user = sysUserService.findOne(sysUser); + return user; + } +} diff --git a/backend/src/main/java/io/dataease/dto/SystemParameterDTO.java b/backend/src/main/java/io/dataease/dto/SystemParameterDTO.java new file mode 100644 index 0000000000..9624d046b8 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/SystemParameterDTO.java @@ -0,0 +1,28 @@ +package io.dataease.dto; + +import io.dataease.base.domain.SystemParameter; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.web.multipart.MultipartFile; + +public class SystemParameterDTO extends SystemParameter { + @ApiModelProperty("文件") + private MultipartFile file; + @ApiModelProperty("文件名称") + private String fileName; + + public MultipartFile getFile() { + return file; + } + + public void setFile(MultipartFile file) { + this.file = file; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} diff --git a/backend/src/main/java/io/dataease/notice/sender/AbstractNoticeSender.java b/backend/src/main/java/io/dataease/notice/sender/AbstractNoticeSender.java index 099dc84ce4..e95e819c4e 100644 --- a/backend/src/main/java/io/dataease/notice/sender/AbstractNoticeSender.java +++ b/backend/src/main/java/io/dataease/notice/sender/AbstractNoticeSender.java @@ -1,10 +1,12 @@ package io.dataease.notice.sender; +import io.dataease.base.domain.SysUser; import io.dataease.commons.constants.NoticeConstants; import io.dataease.commons.utils.LogUtil; import io.dataease.notice.domain.MessageDetail; import io.dataease.notice.domain.UserDetail; -import io.dataease.service.UserService; +/*import io.dataease.service.UserService;*/ +import io.dataease.service.sys.SysUserService; import org.apache.commons.collections4.MapUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RegExUtils; @@ -21,7 +23,7 @@ import java.util.stream.Collectors; public abstract class AbstractNoticeSender implements NoticeSender { @Resource - private UserService userService; + private SysUserService sysUserService; protected String getContext(MessageDetail messageDetail, NoticeModel noticeModel) { // 如果配置了模版就直接使用模版 @@ -104,7 +106,9 @@ public abstract class AbstractNoticeSender implements NoticeSender { } protected List getUserPhones(List userIds) { - List list = userService.queryTypeByIds(userIds); + List userIdLists = userIds.stream().map(Long::parseLong).collect(Collectors.toList()); + List list = sysUserService.users(userIdLists); + //List list = userService.queryTypeByIds(userIds); List phoneList = new ArrayList<>(); list.forEach(u -> phoneList.add(u.getPhone())); LogUtil.info("收件人地址: " + phoneList); @@ -112,7 +116,9 @@ public abstract class AbstractNoticeSender implements NoticeSender { } protected List getUserEmails(List userIds) { - List list = userService.queryTypeByIds(userIds); + /*List list = userService.queryTypeByIds(userIds);*/ + List userIdLists = userIds.stream().map(Long::parseLong).collect(Collectors.toList()); + List list = sysUserService.users(userIdLists); List phoneList = new ArrayList<>(); list.forEach(u -> phoneList.add(u.getEmail())); LogUtil.info("收件人地址: " + phoneList); diff --git a/backend/src/main/java/io/dataease/notice/service/NoticeService.java b/backend/src/main/java/io/dataease/notice/service/NoticeService.java index e7c2a8d027..3b5278e2f0 100644 --- a/backend/src/main/java/io/dataease/notice/service/NoticeService.java +++ b/backend/src/main/java/io/dataease/notice/service/NoticeService.java @@ -2,17 +2,16 @@ package io.dataease.notice.service; import io.dataease.base.domain.MessageTask; import io.dataease.base.domain.MessageTaskExample; +import io.dataease.base.domain.SysUser; import io.dataease.base.mapper.MessageTaskMapper; import io.dataease.commons.exception.DEException; -import io.dataease.commons.user.SessionUser; -import io.dataease.commons.utils.SessionUtils; +import io.dataease.commons.utils.AuthUtils; import io.dataease.i18n.Translator; import io.dataease.notice.domain.MessageDetail; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; @@ -24,13 +23,13 @@ public class NoticeService { private MessageTaskMapper messageTaskMapper; public void saveMessageTask(MessageDetail messageDetail) { - MessageTaskExample example = new MessageTaskExample(); + /*MessageTaskExample example = new MessageTaskExample(); example.createCriteria().andIdentificationEqualTo(messageDetail.getIdentification()); List messageTaskLists = messageTaskMapper.selectByExample(example); if (messageTaskLists.size() > 0) { delMessage(messageDetail.getIdentification()); } - SessionUser user = SessionUtils.getUser(); + SysUser user = AuthUtils.getUser(); String orgId = user.getLastOrganizationId(); long time = System.currentTimeMillis(); String identification = messageDetail.getIdentification(); @@ -53,7 +52,7 @@ public class NoticeService { messageTask.setCreateTime(time); setTemplate(messageDetail, messageTask); messageTaskMapper.insert(messageTask); - } + }*/ } private void setTemplate(MessageDetail messageDetail, MessageTask messageTask) { @@ -102,14 +101,14 @@ public class NoticeService { } public List searchMessageByType(String type) { - SessionUser user = SessionUtils.getUser(); - String orgId = user.getLastOrganizationId(); + SysUser user = AuthUtils.getUser(); + //String orgId = user.getLastOrganizationId(); List messageDetails = new ArrayList<>(); MessageTaskExample example = new MessageTaskExample(); example.createCriteria() - .andTaskTypeEqualTo(type) - .andOrganizationIdEqualTo(orgId); + .andTaskTypeEqualTo(type); + //.andOrganizationIdEqualTo(orgId); List messageTaskLists = messageTaskMapper.selectByExampleWithBLOBs(example); Map> messageTaskMap = messageTaskLists.stream() diff --git a/backend/src/main/java/io/dataease/service/sys/SysUserService.java b/backend/src/main/java/io/dataease/service/sys/SysUserService.java index 9de14291c8..833d890855 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysUserService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysUserService.java @@ -120,4 +120,9 @@ public class SysUserService { return null; } + + public List users(List userIds){ + return userIds.stream().map(sysUserMapper::selectByPrimaryKey).collect(Collectors.toList()); + } + } diff --git a/backend/src/main/java/io/dataease/service/system/SystemParameterService.java b/backend/src/main/java/io/dataease/service/system/SystemParameterService.java new file mode 100644 index 0000000000..4da94a29da --- /dev/null +++ b/backend/src/main/java/io/dataease/service/system/SystemParameterService.java @@ -0,0 +1,269 @@ +package io.dataease.service.system; + +import com.alibaba.fastjson.JSON; +import com.google.gson.JsonObject; +import io.dataease.base.domain.FileMetadata; +import io.dataease.base.domain.SystemParameter; +import io.dataease.base.domain.SystemParameterExample; +import io.dataease.base.mapper.FileContentMapper; +import io.dataease.base.mapper.FileMetadataMapper; +import io.dataease.base.mapper.SystemParameterMapper; +import io.dataease.base.mapper.ext.ExtSystemParameterMapper; +import io.dataease.commons.constants.ParamConstants; +import io.dataease.commons.exception.DEException; +import io.dataease.commons.utils.BeanUtils; +import io.dataease.commons.utils.EncryptUtils; +import io.dataease.commons.utils.LogUtil; +import io.dataease.dto.BaseSystemConfigDTO; +import io.dataease.dto.SystemParameterDTO; +import io.dataease.i18n.Translator; +import io.dataease.notice.domain.MailInfo; +import io.dataease.service.FileService; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONObject; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.FileStore; +import java.time.Instant; +import java.util.*; + + +@Service +@Transactional(rollbackFor = Exception.class) +public class SystemParameterService { + + @Resource + private SystemParameterMapper systemParameterMapper; + @Resource + private ExtSystemParameterMapper extSystemParameterMapper; + @Resource + private FileService fileService; + + + public String searchEmail() { + return extSystemParameterMapper.email(); + } + + public String getSystemLanguage() { + String result = StringUtils.EMPTY; + SystemParameterExample example = new SystemParameterExample(); + example.createCriteria().andParamKeyEqualTo(ParamConstants.I18n.LANGUAGE.getValue()); + List list = systemParameterMapper.selectByExample(example); + if (CollectionUtils.isNotEmpty(list)) { + String value = list.get(0).getParamValue(); + if (StringUtils.isNotBlank(value)) { + result = value; + } + } + return result; + } + + public void editMail(List parameters) { + List paramList = this.getParamList(ParamConstants.Classify.MAIL.getValue()); + boolean empty = paramList.size() <= 0; + + parameters.forEach(parameter -> { + SystemParameterExample example = new SystemParameterExample(); + if (parameter.getParamKey().equals(ParamConstants.MAIL.PASSWORD.getValue())) { + if (!StringUtils.isBlank(parameter.getParamValue())) { + String string = EncryptUtils.aesEncrypt(parameter.getParamValue()).toString(); + parameter.setParamValue(string); + } + } + example.createCriteria().andParamKeyEqualTo(parameter.getParamKey()); + if (systemParameterMapper.countByExample(example) > 0) { + systemParameterMapper.updateByPrimaryKey(parameter); + } else { + systemParameterMapper.insert(parameter); + } + example.clear(); + + }); + } + + public List getParamList(String type) { + SystemParameterExample example = new SystemParameterExample(); + example.createCriteria().andParamKeyLike(type + "%"); + return systemParameterMapper.selectByExample(example); + } + + public void testConnection(HashMap hashMap) { + JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); + javaMailSender.setDefaultEncoding("UTF-8"); + javaMailSender.setHost(hashMap.get(ParamConstants.MAIL.SERVER.getValue())); + javaMailSender.setPort(Integer.valueOf(hashMap.get(ParamConstants.MAIL.PORT.getValue()))); + javaMailSender.setUsername(hashMap.get(ParamConstants.MAIL.ACCOUNT.getValue())); + javaMailSender.setPassword(hashMap.get(ParamConstants.MAIL.PASSWORD.getValue())); + Properties props = new Properties(); + String recipients = hashMap.get(ParamConstants.MAIL.RECIPIENTS.getValue()); + if (BooleanUtils.toBoolean(hashMap.get(ParamConstants.MAIL.SSL.getValue()))) { + props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); + } + if (BooleanUtils.toBoolean(hashMap.get(ParamConstants.MAIL.TLS.getValue()))) { + props.put("mail.smtp.starttls.enable", "true"); + } + props.put("mail.smtp.timeout", "30000"); + props.put("mail.smtp.connectiontimeout", "5000"); + javaMailSender.setJavaMailProperties(props); + try { + javaMailSender.testConnection(); + } catch (MessagingException e) { + LogUtil.error(e.getMessage(), e); + DEException.throwException(Translator.get("connection_failed")); + } + if(!StringUtils.isBlank(recipients)){ + MimeMessage mimeMessage = javaMailSender.createMimeMessage(); + MimeMessageHelper helper = null; + try { + helper = new MimeMessageHelper(mimeMessage, true); + helper.setFrom(javaMailSender.getUsername()); + helper.setSubject("MeterSphere测试邮件 " ); + helper.setText("这是一封测试邮件,邮件发送成功", true); + helper.setTo(recipients); + javaMailSender.send(mimeMessage); + } catch (MessagingException e) { + LogUtil.error(e.getMessage(), e); + DEException.throwException(Translator.get("connection_failed")); + } + } + + + } + + public String getVersion() { + return System.getenv("MS_VERSION"); + } + + public MailInfo mailInfo(String type) { + List paramList = this.getParamList(type); + MailInfo mailInfo=new MailInfo (); + if (!CollectionUtils.isEmpty(paramList)) { + for (SystemParameter param : paramList) { + if (StringUtils.equals(param.getParamKey(),ParamConstants.MAIL.SERVER.getValue() )) { + mailInfo.setHost(param.getParamValue()); + } else if (StringUtils.equals(param.getParamKey(), ParamConstants.MAIL.PORT.getValue())) { + mailInfo.setPort(param.getParamValue()); + } else if (StringUtils.equals(param.getParamKey(), ParamConstants.MAIL.ACCOUNT.getValue())) { + mailInfo.setAccount(param.getParamValue()); + } else if (StringUtils.equals(param.getParamKey(), ParamConstants.MAIL.PASSWORD.getValue())) { + String password = EncryptUtils.aesDecrypt(param.getParamValue()).toString(); + mailInfo.setPassword(password); + } else if (StringUtils.equals(param.getParamKey(), ParamConstants.MAIL.SSL.getValue())) { + mailInfo.setSsl(param.getParamValue()); + } else if (StringUtils.equals(param.getParamKey(), ParamConstants.MAIL.TLS.getValue())) { + mailInfo.setTls(param.getParamValue()); + } else if (StringUtils.equals(param.getParamKey(), ParamConstants.MAIL.RECIPIENTS.getValue())) { + mailInfo.setRecipient(param.getParamValue()); + } + } + } + return mailInfo; + } + + public void saveLdap(List parameters) { + SystemParameterExample example = new SystemParameterExample(); + parameters.forEach(param -> { + if (param.getParamKey().equals(ParamConstants.LDAP.PASSWORD.getValue())) { + String string = EncryptUtils.aesEncrypt(param.getParamValue()).toString(); + param.setParamValue(string); + } + example.createCriteria().andParamKeyEqualTo(param.getParamKey()); + if (systemParameterMapper.countByExample(example) > 0) { + systemParameterMapper.updateByPrimaryKey(param); + } else { + systemParameterMapper.insert(param); + } + example.clear(); + }); + } + + public String getValue(String key) { + SystemParameter param = systemParameterMapper.selectByPrimaryKey(key); + if (param == null) { + return null; + } + return param.getParamValue(); + } + + + public List getSystemParameterInfo(String paramConstantsType) { + List paramList = this.getParamList(paramConstantsType); + List dtoList = new ArrayList<>(); + for (SystemParameter systemParameter : paramList) { + SystemParameterDTO systemParameterDTO = new SystemParameterDTO(); + BeanUtils.copyBean(systemParameterDTO, systemParameter); + if (systemParameter.getType().equalsIgnoreCase("file")) { + FileMetadata fileMetadata = fileService.getFileMetadataById(systemParameter.getParamValue()); + if (fileMetadata != null) { + systemParameterDTO.setFileName(fileMetadata.getName()); + } + } + dtoList.add(systemParameterDTO); + } + dtoList.sort(Comparator.comparingInt(SystemParameter::getSort)); + return dtoList; + } + + + + public void saveUIInfo(Map> request, List bodyFiles) throws IOException { + List parameters = request.get("systemParams"); + for (MultipartFile multipartFile : bodyFiles) { + if (!multipartFile.isEmpty()) { + //防止添加非图片文件 + try (InputStream input = multipartFile.getInputStream()) { + try { + // It's an image (only BMP, GIF, JPG and PNG are recognized). + ImageIO.read(input).toString(); + } catch (Exception e) { + DEException.throwException("Uploaded images do not meet the image format requirements"); + return; + } + } + String multipartFileName = multipartFile.getOriginalFilename(); + String[] split = Objects.requireNonNull(multipartFileName).split(","); + parameters.stream().filter(systemParameterDTO -> systemParameterDTO.getParamKey().equalsIgnoreCase(split[1])).forEach(systemParameterDTO -> { + systemParameterDTO.setFileName(split[0]); + systemParameterDTO.setFile(multipartFile); + }); + } + } + for (SystemParameterDTO systemParameter : parameters) { + MultipartFile file = systemParameter.getFile(); + if (systemParameter.getType().equalsIgnoreCase("file")) { + if (StringUtils.isBlank(systemParameter.getFileName())) { + fileService.deleteFileById(systemParameter.getParamValue()); + } + if (file != null) { + fileService.deleteFileById(systemParameter.getParamValue()); + FileMetadata fileMetadata = fileService.saveFile(systemParameter.getFile(),systemParameter.getFileName()); + systemParameter.setParamValue(fileMetadata.getId()); + } + if (file == null && systemParameter.getFileName() == null) { + systemParameter.setParamValue(null); + } + } + systemParameterMapper.deleteByPrimaryKey(systemParameter.getParamKey()); + systemParameterMapper.insert(systemParameter); + } + + } + + public static void main(String[] args) { + String info="[{\"paramKey\":\"base.url\",\"paramValue\":null,\"type\":\"text\",\"sort\":1,\"file\":null,\"fileName\":null},{\"paramKey\":\"base.title\",\"paramValue\":\"DataEase Title\",\"type\":\"text\",\"sort\":3,\"file\":null,\"fileName\":null},{\"paramKey\":\"base.logo\",\"paramValue\":\"DataEase\",\"type\":\"text\",\"sort\":4,\"file\":null,\"fileName\":\"favicon.icon.png\"}]"; + List temp = JSON.parseArray(info,SystemParameterDTO.class); + System.out.println("===>"); + } +}