Procházet zdrojové kódy

Merge branch 'develop' of http://112.74.196.215:3000/wangzaijun/data-daq into develop

wangzaijun před 7 měsíci
rodič
revize
e91cfed006

+ 4 - 0
service-base/pom.xml

@@ -168,5 +168,9 @@
             <groupId>io.jsonwebtoken</groupId>
             <artifactId>jjwt</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-quartz</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 0 - 2
service-base/src/main/java/com/simuwang/base/common/conts/Constants.java

@@ -143,6 +143,4 @@ public class Constants
      */
     public static final String LOOKUP_LDAPS = "ldaps:";
 
-
-
 }

+ 94 - 0
service-base/src/main/java/com/simuwang/base/common/conts/HttpStatus.java

@@ -0,0 +1,94 @@
+package com.simuwang.base.common.conts;
+
+/**
+ * 返回状态码
+ * 
+ * @author ruoyi
+ */
+public class HttpStatus
+{
+    /**
+     * 操作成功
+     */
+    public static final int SUCCESS = 200;
+
+    /**
+     * 对象创建成功
+     */
+    public static final int CREATED = 201;
+
+    /**
+     * 请求已经被接受
+     */
+    public static final int ACCEPTED = 202;
+
+    /**
+     * 操作已经执行成功,但是没有返回数据
+     */
+    public static final int NO_CONTENT = 204;
+
+    /**
+     * 资源已被移除
+     */
+    public static final int MOVED_PERM = 301;
+
+    /**
+     * 重定向
+     */
+    public static final int SEE_OTHER = 303;
+
+    /**
+     * 资源没有被修改
+     */
+    public static final int NOT_MODIFIED = 304;
+
+    /**
+     * 参数列表错误(缺少,格式不匹配)
+     */
+    public static final int BAD_REQUEST = 400;
+
+    /**
+     * 未授权
+     */
+    public static final int UNAUTHORIZED = 401;
+
+    /**
+     * 访问受限,授权过期
+     */
+    public static final int FORBIDDEN = 403;
+
+    /**
+     * 资源,服务未找到
+     */
+    public static final int NOT_FOUND = 404;
+
+    /**
+     * 不允许的http方法
+     */
+    public static final int BAD_METHOD = 405;
+
+    /**
+     * 资源冲突,或者资源被锁
+     */
+    public static final int CONFLICT = 409;
+
+    /**
+     * 不支持的数据,媒体类型
+     */
+    public static final int UNSUPPORTED_TYPE = 415;
+
+    /**
+     * 系统内部错误
+     */
+    public static final int ERROR = 500;
+
+    /**
+     * 接口未实现
+     */
+    public static final int NOT_IMPLEMENTED = 501;
+
+    /**
+     * 系统警告消息
+     */
+    public static final int WARN = 601;
+}

+ 50 - 0
service-base/src/main/java/com/simuwang/base/common/conts/ScheduleConstants.java

@@ -0,0 +1,50 @@
+package com.simuwang.base.common.conts;
+
+/**
+ * 任务调度通用常量
+ * 
+ * @author ruoyi
+ */
+public class ScheduleConstants
+{
+    public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
+
+    /** 执行目标key */
+    public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
+
+    /** 默认 */
+    public static final String MISFIRE_DEFAULT = "0";
+
+    /** 立即触发执行 */
+    public static final String MISFIRE_IGNORE_MISFIRES = "1";
+
+    /** 触发一次执行 */
+    public static final String MISFIRE_FIRE_AND_PROCEED = "2";
+
+    /** 不触发立即执行 */
+    public static final String MISFIRE_DO_NOTHING = "3";
+
+    public enum Status
+    {
+        /**
+         * 正常
+         */
+        NORMAL("0"),
+        /**
+         * 暂停
+         */
+        PAUSE("1");
+
+        private String value;
+
+        private Status(String value)
+        {
+            this.value = value;
+        }
+
+        public String getValue()
+        {
+            return value;
+        }
+    }
+}

+ 48 - 0
service-base/src/main/java/com/simuwang/base/common/enums/EmailCron.java

@@ -0,0 +1,48 @@
+package com.simuwang.base.common.enums;
+
+import java.util.stream.Stream;
+
+/**
+ * FileName: EMAIL_CRON
+ * Author:   chenjianhua
+ * Date:     2024/9/9 13:50
+ * Description: ${DESCRIPTION}
+ */
+public enum EmailCron {
+    EVERY_HOUR("每小时执行", "0 0 0/1 * * *"), ONE_AM("每天一点整", "0 0 13 * * *");
+
+    private final String text;
+    private final String cron;
+
+    EmailCron(String text, String cron)
+    {
+        this.text = text;
+        this.cron = cron;
+    }
+
+    public static EmailCron getEmailCronByText(String text) {
+        if (null == text){
+            return null;
+        }
+        for(EmailCron s : EmailCron.values()){
+            if(text.equals(s.getText())){
+                return s;
+            }
+        }
+        return null;
+    }
+
+    public static EmailCron getEmailCronByCron(String cron) {
+        return Stream.of(EmailCron.values()).filter(e -> e.cron.equals(cron)).findFirst().orElse(null);
+    }
+
+    public String getText()
+    {
+        return text;
+    }
+
+    public String getCron()
+    {
+        return cron;
+    }
+}

+ 32 - 0
service-base/src/main/java/com/simuwang/base/common/enums/ResultCode.java

@@ -0,0 +1,32 @@
+package com.simuwang.base.common.enums;
+
+import lombok.Generated;
+
+/**
+ * FileName: ResultCode
+ * Author:   chenjianhua
+ * Date:     2024/9/9 15:00
+ * Description: ${DESCRIPTION}
+ */
+public enum ResultCode {
+    CONNECT_SUCCESS(20000, "链接成功"),
+    CONNECT_ERROR(20005, "连接失败,请检查账号及协议相关信息");
+
+    private final int code;
+    private final String msg;
+
+    private ResultCode(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    @Generated
+    public int getCode() {
+        return this.code;
+    }
+
+    @Generated
+    public String getMsg() {
+        return this.msg;
+    }
+}

+ 0 - 1
service-base/src/main/java/com/simuwang/base/common/util/EmailUtil.java

@@ -242,5 +242,4 @@ public class EmailUtil {
         }
         return props;
     }
-
 }

+ 1 - 0
service-base/src/main/java/com/simuwang/base/common/util/StringUtil.java

@@ -8,6 +8,7 @@ import java.util.List;
 
 import cn.hutool.core.text.StrFormatter;
 import com.simuwang.base.common.conts.Constants;
+import org.apache.commons.lang3.CharSequenceUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.util.AntPathMatcher;
 

+ 9 - 1
service-base/src/main/java/com/simuwang/base/mapper/MailboxInfoMapper.java

@@ -1,12 +1,15 @@
 package com.simuwang.base.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.simuwang.base.pojo.dos.MailboxInfoDO;
+import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 @Mapper
-public interface MailboxInfoMapper {
+public interface MailboxInfoMapper extends BaseMapper<MailboxInfoDO> {
 
     /**
      * 查询配置邮箱信息
@@ -15,4 +18,9 @@ public interface MailboxInfoMapper {
      */
     List<MailboxInfoDO> listMailboxInfo();
 
+    List<MailboxInfoTableVO> searchEmailConfigList(String email);
+
+    void deleteEmailConfigByIds(@Param("ids") String[] split);
+
+    MailboxInfoDO checkEmailUnique(@Param("email") String email);
 }

+ 1 - 1
service-base/src/main/java/com/simuwang/base/pojo/dos/MailboxInfoDO.java

@@ -49,7 +49,7 @@ public class MailboxInfoDO {
      * 端口
      */
     @TableField(value = "port")
-    private Integer port;
+    private String port;
     /**
      * cron表达式
      */

+ 1 - 1
service-base/src/main/java/com/simuwang/base/pojo/vo/MailboxInfoVO.java

@@ -36,7 +36,7 @@ public class MailboxInfoVO {
     /**
      * 端口
      */
-    private Integer port;
+    private String port;
     /**
      * cron表达式
      */

+ 29 - 0
service-base/src/main/resources/mapper/MailBoxInfoMapper.xml

@@ -19,6 +19,12 @@
         <result column="updatetime" property="updateTime"/>
         <result column="isvalid" property="isvalid"/>
     </resultMap>
+    <update id="deleteEmailConfigByIds">
+        update PPW_EMAIL.mailbox_info set isvalid =0,updatetime=sysdate() where id in
+        <foreach item="id" collection="ids" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
 
     <select id="listMailboxInfo" resultMap="BaseResultMap">
         select *
@@ -27,4 +33,27 @@
           and open_status = 1
     </select>
 
+    <resultMap id="BaseTabletMap" type="com.simuwang.base.pojo.vo.MailboxInfoTableVO">
+        <id column="id" property="id"/>
+        <result column="email" property="email"/>
+        <result column="cron" property="cron"/>
+        <result column="open_status" property="openStatus"/>
+        <result column="description" property="description"/>
+    </resultMap>
+    <select id="searchEmailConfigList" resultMap="BaseTabletMap">
+        select id,email,cron,open_status,description from PPW_EMAIL.mailbox_info
+        where isvalid = 1
+        <if test="email != null and email != ''">
+            and email=#{email}
+        </if>
+    </select>
+    <sql id="selectConfigVo">
+        select id, user_id, type, email, password, protocol, server, port, cron, open_status,description,isvalid,creatorid,createtime,updaterid,updatetime
+        from PPW_EMAIL.mailbox_info
+    </sql>
+    <select id="checkEmailUnique" resultType="com.simuwang.base.pojo.dos.MailboxInfoDO">
+        <include refid="selectConfigVo"/>
+        where email = #{email} limit 1
+    </select>
+
 </mapper>

+ 2 - 1
service-manage/src/main/java/com/simuwang/manage/api/base/BaseController.java

@@ -2,6 +2,7 @@ package com.simuwang.manage.api.base;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.simuwang.base.common.conts.HttpStatus;
 import com.simuwang.base.common.page.PageDomain;
 import com.simuwang.base.common.page.TableDataInfo;
 import com.simuwang.base.common.page.TableSupport;
@@ -82,7 +83,7 @@ public class BaseController {
         protected TableDataInfo getDataTable(List<?> list)
         {
             TableDataInfo rspData = new TableDataInfo();
-            rspData.setCode(ResultCode.SUCCESS.getCode());
+            rspData.setCode(HttpStatus.SUCCESS);
             rspData.setMsg(null);
             rspData.setRows(list);
             rspData.setTotal(new PageInfo(list).getTotal());

+ 72 - 0
service-manage/src/main/java/com/simuwang/manage/api/email/EmailConfigController.java

@@ -1,9 +1,21 @@
 package com.simuwang.manage.api.email;
 
+import com.simuwang.base.common.page.TableDataInfo;
+import com.simuwang.base.common.result.AjaxResult;
+import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
+import com.simuwang.base.pojo.vo.MailboxInfoVO;
 import com.simuwang.manage.api.base.BaseController;
+import com.simuwang.manage.service.EmailConfigService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * FileName: EmailConfigController
  * Author:   chenjianhua
@@ -14,4 +26,64 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/email")
 public class EmailConfigController extends BaseController {
 
+    @Autowired
+    private EmailConfigService emailConfigService;
+    private static final Logger logger = LoggerFactory.getLogger(EmailConfigController.class);
+
+    /**
+     * 表格查询
+     * @param email
+     * @return
+     */
+    @RequestMapping("search-email-list")
+    public TableDataInfo searchEmailConfigList(@RequestParam(value = "email",required = false)String email){
+        List<MailboxInfoTableVO> result = emailConfigService.searchEmailConfigList(email);
+        return getDataTable(result);
+    }
+    /**
+     * 保存邮箱配置
+     * @param mailboxInfoVO
+     * @return
+     */
+    @RequestMapping("save-email-config")
+    public AjaxResult saveEmailConfig(@RequestBody MailboxInfoVO mailboxInfoVO){
+        try{
+            if(mailboxInfoVO.getId() == null && emailConfigService.checkEmailUnique(mailboxInfoVO.getEmail())){
+                return AjaxResult.error("邮箱地址已存在,无需添加");
+            }
+            emailConfigService.saveEmailConfig(mailboxInfoVO);
+        }catch (Exception e){
+            logger.error(e.getMessage(),e);
+            return AjaxResult.error("保存失败");
+        }
+        return AjaxResult.success();
+    }
+
+    /**
+     * 保存邮箱配置
+     * @param ids
+     * @return
+     */
+    @RequestMapping("delete-email-config")
+    public AjaxResult deleteEmailConfig(String ids){
+        try{
+            emailConfigService.deleteEmailConfig(ids);
+        }catch (Exception e){
+            logger.error(e.getMessage(),e);
+            return AjaxResult.error();
+        }
+        return AjaxResult.success();
+    }
+
+    @RequestMapping("connect-test")
+    public AjaxResult connectTest(@RequestBody MailboxInfoVO mailboxInfoVO){
+        String msg = "";
+        try{
+            msg = emailConfigService.connectTest(mailboxInfoVO);
+        }catch (Exception e){
+            logger.error(e.getMessage(),e);
+            return AjaxResult.error("链接失败");
+        }
+        return AjaxResult.success(msg);
+    }
 }

+ 24 - 0
service-manage/src/main/java/com/simuwang/manage/service/EmailConfigService.java

@@ -0,0 +1,24 @@
+package com.simuwang.manage.service;
+
+import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
+import com.simuwang.base.pojo.vo.MailboxInfoVO;
+
+import java.util.List;
+
+/**
+ * FileName: EmailConfigService
+ * Author:   chenjianhua
+ * Date:     2024/9/9 13:40
+ * Description: ${DESCRIPTION}
+ */
+public interface EmailConfigService {
+    List<MailboxInfoTableVO> searchEmailConfigList(String email);
+
+    void saveEmailConfig(MailboxInfoVO mailboxInfoVO);
+
+    String connectTest(MailboxInfoVO mailboxInfoVO);
+
+    void deleteEmailConfig(String ids);
+
+    boolean checkEmailUnique(String email);
+}

+ 113 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/EmailConfigServiceImpl.java

@@ -0,0 +1,113 @@
+package com.simuwang.manage.service.impl;
+
+import com.simuwang.base.common.conts.UserConstants;
+import com.simuwang.base.common.enums.EmailCron;
+import com.simuwang.base.common.enums.ResultCode;
+import com.simuwang.base.common.util.EmailUtil;
+import com.simuwang.base.common.util.StringUtil;
+import com.simuwang.base.mapper.MailboxInfoMapper;
+import com.simuwang.base.pojo.dos.MailboxInfoDO;
+import com.simuwang.base.pojo.dto.MailboxInfoDTO;
+import com.simuwang.base.pojo.vo.MailboxInfoTableVO;
+import com.simuwang.base.pojo.vo.MailboxInfoVO;
+import com.simuwang.manage.service.EmailConfigService;
+import jakarta.mail.MessagingException;
+import jakarta.mail.Store;
+import org.quartz.Scheduler;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * FileName: EmailConfigServiceImpl
+ * Author:   chenjianhua
+ * Date:     2024/9/9 13:40
+ * Description: ${DESCRIPTION}
+ */
+@Service
+public class EmailConfigServiceImpl implements EmailConfigService {
+    @Autowired
+    private MailboxInfoMapper emailConfigMapper;
+
+    @Autowired
+    private Scheduler scheduler;
+    @Override
+    public List<MailboxInfoTableVO> searchEmailConfigList(String email) {
+        List<MailboxInfoTableVO> mailboxInfoTableVOS = emailConfigMapper.searchEmailConfigList(email);
+        for(MailboxInfoTableVO mailboxInfoTableVO : mailboxInfoTableVOS){  //cron表达式转文本描述
+            mailboxInfoTableVO.setCron(EmailCron.getEmailCronByCron(mailboxInfoTableVO.getCron()).getText());
+        }
+        return mailboxInfoTableVOS;
+    }
+
+    @Override
+    @Transactional
+    public void saveEmailConfig(MailboxInfoVO mailboxInfoVO) {
+        MailboxInfoDO mailboxInfoDO = toMailboxInfoDO(mailboxInfoVO);
+        if(mailboxInfoVO.getId() == null){
+            mailboxInfoDO.setCreateTime(new Date());
+            emailConfigMapper.insert(mailboxInfoDO);
+        }else{
+            emailConfigMapper.updateById(mailboxInfoDO);
+        }
+        //添加定时任务
+
+    }
+
+    @Override
+    public String connectTest(MailboxInfoVO mailboxInfoVO) {
+        MailboxInfoDTO mailboxInfoDTO = new MailboxInfoDTO();
+        mailboxInfoDTO.setAccount(mailboxInfoVO.getEmail());
+        mailboxInfoDTO.setPassword(mailboxInfoVO.getPassword());
+        mailboxInfoDTO.setPort(mailboxInfoVO.getPort());
+        mailboxInfoDTO.setHost(mailboxInfoVO.getServer());
+        Store store = EmailUtil.getStoreNew(mailboxInfoDTO);
+        if(store != null){
+            try {
+                store.close();
+            } catch (MessagingException e) {
+                throw new RuntimeException(e);
+            }
+            return ResultCode.CONNECT_SUCCESS.getMsg();
+        }
+        return ResultCode.CONNECT_ERROR.getMsg();
+    }
+
+    @Override
+    public void deleteEmailConfig(String ids) {
+        emailConfigMapper.deleteEmailConfigByIds(ids.split(","));
+    }
+
+    @Override
+    public boolean checkEmailUnique(String email) {
+        MailboxInfoDO mailboxInfoDO = emailConfigMapper.checkEmailUnique(email);
+        if (StringUtil.isNotNull(mailboxInfoDO))
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    private MailboxInfoDO toMailboxInfoDO(MailboxInfoVO mailboxInfoVO) {
+        MailboxInfoDO mailboxInfoDO = new MailboxInfoDO();
+        mailboxInfoDO.setIsvalid(1);
+        mailboxInfoDO.setId(mailboxInfoVO.getId());
+        mailboxInfoDO.setEmail(mailboxInfoVO.getEmail());
+        mailboxInfoDO.setCron(EmailCron.getEmailCronByText(mailboxInfoVO.getCron()).getCron());
+        mailboxInfoDO.setServer(mailboxInfoVO.getServer());
+        mailboxInfoDO.setPort(mailboxInfoVO.getPort());
+        mailboxInfoDO.setDescription(mailboxInfoVO.getDescription());
+        mailboxInfoDO.setPassword(mailboxInfoVO.getPassword());
+        mailboxInfoDO.setType(mailboxInfoVO.getType());
+        mailboxInfoDO.setProtocol(mailboxInfoVO.getProtocol());
+        mailboxInfoDO.setUpdateTime(new Date());
+        mailboxInfoDO.setUpdaterId(999);
+        mailboxInfoDO.setCreatorId(999);
+        return mailboxInfoDO;
+    }
+
+
+}