From 52f67cdd1b1a967fa372781f1ddf9938c21e89ab Mon Sep 17 00:00:00 2001 From: T-95707 Date: Wed, 15 Jul 2020 10:57:54 +0800 Subject: [PATCH] =?UTF-8?q?20200715=20zjt=20=E5=A2=9E=E5=8A=A0=E7=BD=91?= =?UTF-8?q?=E6=8A=A5=E9=82=AE=E4=BB=B6=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/executor/handler/WBMailXxJob.java | 190 ++++++++++++ .../mail/feign/WBMailServiceFeignClient.java | 29 ++ .../security/mail/biz/MailReminderBiz.java | 285 ++++++++++++++++++ .../mail/mapper/MailReminderMapper.java | 32 ++ .../security/mail/rpc/MailReminderRest.java | 96 ++++++ .../src/main/resources/birthpic/qrCode.jpg | Bin 0 -> 59850 bytes .../resources/mapper/MailReminderMapper.xml | 111 +++++++ 7 files changed, 743 insertions(+) create mode 100644 neuray-pm-job/neuray-pm-admin-job/src/main/java/com/gitee/neuray/security/admin/executor/handler/WBMailXxJob.java create mode 100644 neuray-pm-provider-api/neuray-pm-mail-api/src/main/java/com/gitee/neuray/security/mail/feign/WBMailServiceFeignClient.java create mode 100644 neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/biz/MailReminderBiz.java create mode 100644 neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/mapper/MailReminderMapper.java create mode 100644 neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/rpc/MailReminderRest.java create mode 100644 neuray-pm-provider/neuray-pm-provider-mail/src/main/resources/birthpic/qrCode.jpg create mode 100644 neuray-pm-provider/neuray-pm-provider-mail/src/main/resources/mapper/MailReminderMapper.xml diff --git a/neuray-pm-job/neuray-pm-admin-job/src/main/java/com/gitee/neuray/security/admin/executor/handler/WBMailXxJob.java b/neuray-pm-job/neuray-pm-admin-job/src/main/java/com/gitee/neuray/security/admin/executor/handler/WBMailXxJob.java new file mode 100644 index 0000000..9477f4a --- /dev/null +++ b/neuray-pm-job/neuray-pm-admin-job/src/main/java/com/gitee/neuray/security/admin/executor/handler/WBMailXxJob.java @@ -0,0 +1,190 @@ +package com.gitee.neuray.security.admin.executor.handler; + +import com.gitee.neuray.security.common.msg.ObjectRestResponse; +import com.gitee.neuray.security.common.util.CommonUtil; +import com.gitee.neuray.security.mail.feign.WBMailServiceFeignClient; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.xxl.job.core.log.XxlJobLogger; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +@Slf4j +public class WBMailXxJob { + + @Autowired + WBMailServiceFeignClient client; + + /** + * 网报一级审批每月15日提醒 + */ + @XxlJob("firstApproveStartMailHandler") + public ReturnT firstApproveStartMailHandler(String param) throws Exception { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月15日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月15日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + ObjectRestResponse res = null; + try { + res = client.firstApproverStart(); + } catch (Exception e) { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月15日提醒邮件执行失败"); + XxlJobLogger.log(CommonUtil.getExceptionDtail(e)); + log.error(CommonUtil.getExceptionDtail(e)); + throw e; + } + if(res!=null && res.isRel()){ + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月15日提醒邮件执行成功......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月15日提醒邮件执行成功......"); + return ReturnT.SUCCESS; + }else { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月15日提醒邮件执行失败......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月15日提醒邮件执行失败......"); + return ReturnT.FAIL; + } + } + + /** + * 网报二级审批每月19日提醒 + */ + @XxlJob("secondApproveStartMailHandler") + public ReturnT secondApproveStartMailHandler(String param) throws Exception { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月19日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月19日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + ObjectRestResponse res = null; + try { + res = client.secondApproverStart(); + } catch (Exception e) { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月19日提醒邮件执行失败"); + XxlJobLogger.log(CommonUtil.getExceptionDtail(e)); + log.error(CommonUtil.getExceptionDtail(e)); + throw e; + } + if(res!=null && res.isRel()){ + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月19日提醒邮件执行成功......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月19日提醒邮件执行成功......"); + return ReturnT.SUCCESS; + }else { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月19日提醒邮件执行失败......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月19日提醒邮件执行失败......"); + return ReturnT.FAIL; + } + } + + /** + * 网报一级审批每月18日提醒 + */ + @XxlJob("firstApproveEndMailHandler") + public ReturnT firstApproveEndMailHandler(String param) throws Exception { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月18日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月18日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + ObjectRestResponse res = null; + try { + res = client.firstApproverEnd(); + } catch (Exception e) { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月18日提醒邮件执行失败"); + XxlJobLogger.log(CommonUtil.getExceptionDtail(e)); + log.error(CommonUtil.getExceptionDtail(e)); + throw e; + } + if(res!=null && res.isRel()){ + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月18日提醒邮件执行成功......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月18日提醒邮件执行成功......"); + return ReturnT.SUCCESS; + }else { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月18日提醒邮件执行失败......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报一级审批每月18日提醒邮件执行失败......"); + return ReturnT.FAIL; + } + } + + /** + * 网报二级审批每月24日提醒 + */ + @XxlJob("secondApproveEndMailHandler") + public ReturnT secondApproveEndMailHandler(String param) throws Exception { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月24日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月24日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + ObjectRestResponse res = null; + try { + res = client.secondApproverEnd(); + } catch (Exception e) { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月24日提醒邮件执行失败"); + XxlJobLogger.log(CommonUtil.getExceptionDtail(e)); + log.error(CommonUtil.getExceptionDtail(e)); + throw e; + } + if(res!=null && res.isRel()){ + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月24日提醒邮件执行成功......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月24日提醒邮件执行成功......"); + return ReturnT.SUCCESS; + }else { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月24日提醒邮件执行失败......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报二级审批每月24日提醒邮件执行失败......"); + return ReturnT.FAIL; + } + } + + /** + * 网报三级审批每月23日提醒 + */ + @XxlJob("thirdApproveMailHandler") + public ReturnT thirdApproveMailHandler(String param) throws Exception { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报三级审批每月23日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报三级审批每月23日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + ObjectRestResponse res = null; + try { + res = client.thirdApprover(); + } catch (Exception e) { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报三级审批每月23日提醒邮件执行失败"); + XxlJobLogger.log(CommonUtil.getExceptionDtail(e)); + log.error(CommonUtil.getExceptionDtail(e)); + throw e; + } + if(res!=null && res.isRel()){ + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报三级审批每月23日提醒邮件执行成功......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报三级审批每月23日提醒邮件执行成功......"); + return ReturnT.SUCCESS; + }else { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报三级审批每月23日提醒邮件执行失败......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报三级审批每月23日提醒邮件执行失败......"); + return ReturnT.FAIL; + } + } + + /** + * 网报四级审批每月25日提醒 + */ + @XxlJob("fourthApproveMailHandler") + public ReturnT fourthApproveMailHandler(String param) throws Exception { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报四级审批每月25日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报四级审批每月25日提醒邮件执行开始......"+simpleDateFormat.format(new Date())); + ObjectRestResponse res = null; + try { + res = client.fourthApprover(); + } catch (Exception e) { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报四级审批每月25日提醒邮件执行失败"); + XxlJobLogger.log(CommonUtil.getExceptionDtail(e)); + log.error(CommonUtil.getExceptionDtail(e)); + throw e; + } + if(res!=null && res.isRel()){ + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报四级审批每月25日提醒邮件执行成功......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报三级审批每月23日提醒邮件执行成功......"); + return ReturnT.SUCCESS; + }else { + XxlJobLogger.log(">>>>>>>>>>>>>>>>>>>>>>>>网报四级审批每月25日提醒邮件执行失败......"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>网报四级审批每月25日提醒邮件执行失败......"); + return ReturnT.FAIL; + } + } +} diff --git a/neuray-pm-provider-api/neuray-pm-mail-api/src/main/java/com/gitee/neuray/security/mail/feign/WBMailServiceFeignClient.java b/neuray-pm-provider-api/neuray-pm-mail-api/src/main/java/com/gitee/neuray/security/mail/feign/WBMailServiceFeignClient.java new file mode 100644 index 0000000..9cfbe01 --- /dev/null +++ b/neuray-pm-provider-api/neuray-pm-mail-api/src/main/java/com/gitee/neuray/security/mail/feign/WBMailServiceFeignClient.java @@ -0,0 +1,29 @@ +package com.gitee.neuray.security.mail.feign; + +import com.gitee.neuray.security.common.msg.ObjectRestResponse; +import com.gitee.neuray.security.mail.constants.MailApiConstants; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@FeignClient(value = MailApiConstants.RIBBON_ADDRESS) +public interface WBMailServiceFeignClient { + //添加邮件 + @RequestMapping(value="/api/mail/firstApproverStart",method = RequestMethod.POST) + ObjectRestResponse firstApproverStart(); + + @RequestMapping(value="/api/mail/secondApproverStart",method = RequestMethod.POST) + ObjectRestResponse secondApproverStart(); + + @RequestMapping(value="/api/mail/firstApproverEnd",method = RequestMethod.POST) + ObjectRestResponse firstApproverEnd(); + + @RequestMapping(value="/api/mail/secondApproverEnd",method = RequestMethod.POST) + ObjectRestResponse secondApproverEnd(); + + @RequestMapping(value="/api/mail/thirdApprover",method = RequestMethod.POST) + ObjectRestResponse thirdApprover(); + + @RequestMapping(value="/api/mail/fourthApprover",method = RequestMethod.POST) + ObjectRestResponse fourthApprover(); +} diff --git a/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/biz/MailReminderBiz.java b/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/biz/MailReminderBiz.java new file mode 100644 index 0000000..f45e329 --- /dev/null +++ b/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/biz/MailReminderBiz.java @@ -0,0 +1,285 @@ +package com.gitee.neuray.security.mail.biz; + +import com.gitee.neuray.security.common.biz.BaseBiz; +import com.gitee.neuray.security.common.util.EntityUtils; +import com.gitee.neuray.security.common.util.UUIDUtils; +import com.gitee.neuray.security.mail.mapper.MailReminderMapper; +import com.gitee.neuray.security.mail.util.EmailCommon; +import com.gitee.neuray.security.mail.vo.SysMailSourceVo; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.sql.rowset.serial.SerialBlob; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@Transactional(rollbackFor = Exception.class) +public class MailReminderBiz extends BaseBiz { + + @Override + protected String getPageName() { + return null; + } + + @Autowired + private MailReminderMapper mailReminderMapper; + @Autowired + private MailBiz mailBiz; + + private static final String template1 = + " \n" + + " \n" + + " \n" + + " \n" + + " 网上报销审批提醒 \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "   \n" + + " \n" + + " 网上报销审批提醒:

\n" + + "        请各位部门负责人于本月18号前完成报销审批流程,逾期审批的单据将会推延到下一周期报销。

\n" + + " 具体审批方式如下:

\n" + + "         1、手机端扫码下图二维码,关注沈阳东睿科技,进入网上报销,点击报销审批

\n" + + "         2、电脑端访问地址:http://imp.neuray.cn

\n" + + "                账号为公司邮箱前缀,初始密码为123456,登录后请及时修改。

\n" + + "                例:邮箱地址zhangs@neuray.cn,登录账号zhangs

\n" + + " img\n" + + "
\n" + + "
\n" + + + "
\n" + + " \n" + + ""; + + private static final String template2 = + " \n" + + " \n" + + " \n" + + " \n" + + " 网上报销审批提醒 \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "   \n" + + " \n" + + " 网上报销审批提醒:

\n" + + "        请各位部门负责人于本月18号前完成报销审批流程,本月的报销审批工作将在今天下班前截止,逾期审批的单据将会推延到下一周期报销。

\n" + + " 具体审批方式如下:

\n" + + "         1、手机端扫码下图二维码,关注沈阳东睿科技,进入网上报销,点击报销审批

\n" + + "         2、电脑端访问地址:http://imp.neuray.cn

\n" + + "                账号为公司邮箱前缀,初始密码为123456,登录后请及时修改。

\n" + + "                例:邮箱地址zhangs@neuray.cn,登录账号zhangs

\n" + + " img\n" + + "
\n" + + "
\n" + + + "
\n" + + " \n" + + ""; + + private static final String template3 = + " \n" + + " \n" + + " \n" + + " \n" + + " 网上报销复核提醒 \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "   \n" + + " \n" + + " 网上报销复核提醒:

\n" + + "        +currentDate+报销单据的审批工作已完成,请您在23到24号按如下方式进行单据复核。

\n" + + " 具体审批方式如下:

\n" + + "         1、手机端扫码下图二维码,关注沈阳东睿科技,进入网上报销,点击报销审批

\n" + + "         2、电脑端访问地址:http://imp.neuray.cn

\n" + + "                账号为公司邮箱前缀,初始密码为123456,登录后请及时修改。

\n" + + "                例:邮箱地址zhangs@neuray.cn,登录账号zhangs

\n" + + " img\n" + + "
\n" + + "
\n" + + + "
\n" + + " \n" + + ""; + + private static final String template4 = + " \n" + + " \n" + + " \n" + + " \n" + + " 网上报销复核提醒 \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "   \n" + + " \n" + + " 网上报销复核提醒:

\n" + + "        +currentDate+报销单据的审批及财务复核工作已完成,请您在25号按如下方式跟踪单据的打款状态。

\n" + + " 具体审批方式如下:

\n" + + "         1、手机端扫码下图二维码,关注沈阳东睿科技,进入网上报销,点击报销审批

\n" + + "         2、电脑端访问地址:http://imp.neuray.cn

\n" + + "                账号为公司邮箱前缀,初始密码为123456,登录后请及时修改。

\n" + + "                例:邮箱地址zhangs@neuray.cn,登录账号zhangs

\n" + + " img\n" + + "
\n" + + "
\n" + + + "
\n" + + " \n" + + ""; + + /** + * 每月15日提醒一级审批人 + */ + public void firstApproverStart(){ + // 查询有审批任务的一级审批人 + List stringList = mailReminderMapper.queryFirstApproverMail(); + if(stringList !=null && stringList.size()> 0){ + addMail(stringList,template1,"网上报销审批提醒"); + } + } + + /** + * 每月19日提醒二级审批人 + */ + public void secondApproverStart(){ + // 查询有审批任务的二级审批人 + List stringList = mailReminderMapper.querySecondApproverMail(); + if(stringList !=null && stringList.size()> 0){ + addMail(stringList,template1,"网上报销审批提醒"); + } + } + + /** + * 每月18日提醒一级审批人 + */ + public void firstApproverEnd(){ + // 查询有审批任务的一级审批人 + List stringList = mailReminderMapper.queryFirstApproverMail(); + if(stringList !=null && stringList.size()> 0){ + addMail(stringList,template2,"网上报销审批提醒"); + } + } + + /** + * 每月24日提醒一级审批人 + */ + public void secondApproverEnd(){ + // 查询有审批任务的二级审批人 + List stringList = mailReminderMapper.querySecondApproverMail(); + if(stringList !=null && stringList.size()> 0){ + addMail(stringList,template2,"网上报销审批提醒"); + } + } + + /** + * 每月24日提醒三级审批人 + */ + public void thirdApprover(){ + // 查询三级审批人 + List stringList = mailReminderMapper.queryApproverMail("3"); + if(stringList !=null && stringList.size()> 0){ + String model = template3; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月"); + addMail(stringList,model.replace("+currentDate+",sdf.format(new Date())),"网上报销复核提醒"); + } + } + + /** + * 每月25日提醒三级审批人 + */ + public void fourthApprover(){ + // 查询四级审批人 + List stringList = mailReminderMapper.queryApproverMail("4"); + if(stringList !=null && stringList.size()> 0){ + String model = template4; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月"); + addMail(stringList,model.replace("+currentDate+",sdf.format(new Date())),"网上报销复核提醒"); + } + } + + /** + * 生成模板邮件信息并入库 + * */ + private void addMail(List stringList,String template,String title){ + SysMailSourceVo sysMailSourceVo = new SysMailSourceVo(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 去重去空 + List list = stringList.stream().filter(item-> StringUtils.isNotBlank(item)).distinct().collect(Collectors.toList()); + + String content = ""; + ClassPathResource resource1 = null; + try { + resource1 = new ClassPathResource("birthpic/qrCode.jpg"); + } catch (Exception e) { + resource1 = new ClassPathResource("birthpic/qrCode.jpg"); + } + try { + String jpg = EmailCommon.fileToBytesToBase64(resource1.getInputStream()); + String model = template; + content = model.replace("+backPic+",jpg); + } catch (IOException e) { + e.printStackTrace(); + } + sysMailSourceVo.setTitle(title); + sysMailSourceVo.setYjnrType("1"); + sysMailSourceVo.setYjnrBl(content); + sysMailSourceVo.setYjsj(sdf.format(new Date())); + sysMailSourceVo.setMailname("neuray"); + sysMailSourceVo.setFjrbm("neuray"); + String sjr = ""; + EntityUtils.setCreatAndUpdatInfo(sysMailSourceVo); + for(String mail:list){ + sysMailSourceVo.setSjr(mail); + sysMailSourceVo.setYjnrBl(content); + sysMailSourceVo.setId(UUIDUtils.generateShortUuid()); + try { + mailBiz.add(sysMailSourceVo); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + +} + diff --git a/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/mapper/MailReminderMapper.java b/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/mapper/MailReminderMapper.java new file mode 100644 index 0000000..9475bf0 --- /dev/null +++ b/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/mapper/MailReminderMapper.java @@ -0,0 +1,32 @@ +package com.gitee.neuray.security.mail.mapper; + +import com.gitee.neuray.security.mail.vo.SysMailSourceVo; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +@Repository +public interface MailReminderMapper extends Mapper { + + /** + * 查询需要提醒的一级审批人 + * */ + List queryFirstApproverMail(); + + /** + * 新增邮件信息 + * */ + void addSysMailSourceVo(@Param("params")SysMailSourceVo sysMailSourceVo); + + /** + * 查询需要提醒的二级审批人 + * */ + List querySecondApproverMail(); + + /** + * 根据角色查询审批人邮箱 + * */ + List queryApproverMail(@Param("roleId")String roleId); +} diff --git a/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/rpc/MailReminderRest.java b/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/rpc/MailReminderRest.java new file mode 100644 index 0000000..cb682bf --- /dev/null +++ b/neuray-pm-provider/neuray-pm-provider-mail/src/main/java/com/gitee/neuray/security/mail/rpc/MailReminderRest.java @@ -0,0 +1,96 @@ +package com.gitee.neuray.security.mail.rpc; + +import com.gitee.neuray.security.common.msg.ObjectRestResponse; +import com.gitee.neuray.security.mail.biz.MailReminderBiz; +import com.gitee.neuray.security.mail.feign.WBMailServiceFeignClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("api") +public class MailReminderRest implements WBMailServiceFeignClient { + + @Autowired + private MailReminderBiz mailReminderBiz; + + @Override + @RequestMapping(value="/mail/firstApproverStart",method = RequestMethod.POST) + public ObjectRestResponse firstApproverStart(){ + try { + + mailReminderBiz.firstApproverStart(); + } catch (Exception e) { + e.printStackTrace(); + return new ObjectRestResponse().rel(true).msg("500").data("添加失败"); + } + return new ObjectRestResponse().rel(true).msg("200").data("添加成功"); + } + + @Override + @RequestMapping(value="/mail/secondApproverStart",method = RequestMethod.POST) + public ObjectRestResponse secondApproverStart(){ + try { + + mailReminderBiz.secondApproverStart(); + } catch (Exception e) { + e.printStackTrace(); + return new ObjectRestResponse().rel(true).msg("500").data("添加失败"); + } + return new ObjectRestResponse().rel(true).msg("200").data("添加成功"); + } + + @Override + @RequestMapping(value="/mail/firstApproverEnd",method = RequestMethod.POST) + public ObjectRestResponse firstApproverEnd(){ + try { + + mailReminderBiz.firstApproverEnd(); + } catch (Exception e) { + e.printStackTrace(); + return new ObjectRestResponse().rel(true).msg("500").data("添加失败"); + } + return new ObjectRestResponse().rel(true).msg("200").data("添加成功"); + } + + @Override + @RequestMapping(value="/mail/secondApproverEnd",method = RequestMethod.POST) + public ObjectRestResponse secondApproverEnd(){ + try { + + mailReminderBiz.secondApproverEnd(); + } catch (Exception e) { + e.printStackTrace(); + return new ObjectRestResponse().rel(true).msg("500").data("添加失败"); + } + return new ObjectRestResponse().rel(true).msg("200").data("添加成功"); + } + + @Override + @RequestMapping(value="/mail/thirdApprover",method = RequestMethod.POST) + public ObjectRestResponse thirdApprover(){ + try { + + mailReminderBiz.thirdApprover(); + } catch (Exception e) { + e.printStackTrace(); + return new ObjectRestResponse().rel(true).msg("500").data("添加失败"); + } + return new ObjectRestResponse().rel(true).msg("200").data("添加成功"); + } + + @Override + @RequestMapping(value="/mail/fourthApprover",method = RequestMethod.POST) + public ObjectRestResponse fourthApprover(){ + try { + + mailReminderBiz.fourthApprover(); + } catch (Exception e) { + e.printStackTrace(); + return new ObjectRestResponse().rel(true).msg("500").data("添加失败"); + } + return new ObjectRestResponse().rel(true).msg("200").data("添加成功"); + } + +} diff --git a/neuray-pm-provider/neuray-pm-provider-mail/src/main/resources/birthpic/qrCode.jpg b/neuray-pm-provider/neuray-pm-provider-mail/src/main/resources/birthpic/qrCode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..878e05674b0f89a87db272ace4c0da87f2a9326a GIT binary patch literal 59850 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'TH+pdpl^WZeiSoTNnR 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 literal 0 HcmV?d00001 diff --git a/neuray-pm-provider/neuray-pm-provider-mail/src/main/resources/mapper/MailReminderMapper.xml b/neuray-pm-provider/neuray-pm-provider-mail/src/main/resources/mapper/MailReminderMapper.xml new file mode 100644 index 0000000..ec753be --- /dev/null +++ b/neuray-pm-provider/neuray-pm-provider-mail/src/main/resources/mapper/MailReminderMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + insert into NEURAYPM_ADMIN.SYS_MAIL_SOURCE + ( + id , + gnbh , + sjr , + csr , + asr , + title , + yjnr_type , + yjnr_te , + yjnr_bl , + fjid , + yjsj , + mailname , + yjdl , + fjrbm , + crt_time , + crt_user , + crt_name , + crt_host , + attr1 , + attr2 , + attr3 , + attr4 , + upd_time , + upd_user , + upd_name , + upd_host + ) + values ( + #{params.id,jdbcType=VARCHAR}, + #{params.gnbh,jdbcType=VARCHAR}, + #{params.sjr,jdbcType=VARCHAR}, + #{params.csr,jdbcType=VARCHAR}, + #{params.asr,jdbcType=VARCHAR}, + #{params.title,jdbcType=VARCHAR}, + #{params.yjnrType,jdbcType=VARCHAR}, + #{params.yjnrTe,jdbcType=VARCHAR}, + #{params.yjnrBl,jdbcType=BLOB}, + /* EMPTY_BLOB(),*/ + #{params.fjid,jdbcType=VARCHAR}, + to_date(#{params.yjsj,jdbcType=VARCHAR},'yyyy-mm-dd HH24:mi:ss'), + #{params.mailname,jdbcType=VARCHAR}, + #{params.yjdl,jdbcType=VARCHAR}, + #{params.fjrbm,jdbcType=VARCHAR}, + #{params.crtTime,jdbcType=TIMESTAMP}, + #{params.crtUser,jdbcType=VARCHAR}, + #{params.crtName,jdbcType=VARCHAR}, + #{params.crtHost,jdbcType=VARCHAR}, + #{params.attr1,jdbcType=VARCHAR}, + #{params.attr2,jdbcType=VARCHAR}, + #{params.attr3,jdbcType=VARCHAR}, + #{params.attr4,jdbcType=VARCHAR}, + #{params.updTime,jdbcType=TIMESTAMP}, + #{params.updUser,jdbcType=VARCHAR}, + #{params.updName,jdbcType=VARCHAR}, + #{params.updHost,jdbcType=VARCHAR} + ) + + + + + + + -- Gitee