From 58a9325db8dc05aa9c86eabaf10d6935ece3b3d3 Mon Sep 17 00:00:00 2001
From: 284718418@qq.com <youlinrc321>
Date: Mon, 18 Apr 2022 16:47:50 +0800
Subject: [PATCH] 招聘管理-发送面试通知

---
 src/main/java/cn/timer/api/bean/wechat/MessageTemplate.java                  |  31 +++++++++++++++++++++++++++++++
 src/main/java/cn/timer/api/config/enuminterface/JxglEnumInterface.java       |  19 +++++++++++++++++++
 src/main/java/cn/timer/api/controller/verify/VerifyController.java           |   1 -
 src/main/java/cn/timer/api/controller/zpgl/ZpglController.java               |   2 +-
 src/main/java/cn/timer/api/controller/zpgl/ZpglWxgzptController.java         |   8 ++------
 src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglServiceImpl.java       |  20 ++++++++++++++++++++
 src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptService.java     |  23 ++++++++++++-----------
 src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptServiceImpl.java |  99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/cn/timer/api/dto/template/InterviewNotice.java                 |  42 ++++++++++++++++++++++++++++++++++++++++++
 9 files changed, 226 insertions(+), 19 deletions(-)
 create mode 100644 src/main/java/cn/timer/api/bean/wechat/MessageTemplate.java
 create mode 100644 src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptServiceImpl.java
 create mode 100644 src/main/java/cn/timer/api/dto/template/InterviewNotice.java

diff --git a/src/main/java/cn/timer/api/bean/wechat/MessageTemplate.java b/src/main/java/cn/timer/api/bean/wechat/MessageTemplate.java
new file mode 100644
index 0000000..3c99e1d
--- /dev/null
+++ b/src/main/java/cn/timer/api/bean/wechat/MessageTemplate.java
@@ -0,0 +1,31 @@
+package cn.timer.api.bean.wechat;
+
+/**
+ * 8小时企业管理
+ * 公众号模板消息
+ *
+ * @author wuqingjun
+ * @email 284718418@qq.com
+ * @date 2022-04-18 15:14:40
+ */
+public class MessageTemplate {
+
+	/**
+	 * 通知面试官
+	 * 面试安排提醒
+	 * {{first.DATA}}
+	 * 面试职位:{{keyword1.DATA}}
+	 * 面试时间:{{keyword2.DATA}}
+	 * {{remark.DATA}}
+	 */
+	public static final String TEMPLATE_ID_TO_INTERVIEWER = "Uz6mVUYk9Tu7EO2V1pqiQ3x4EudDJTYWdaFtdf64h3M";
+	/**
+	 * 通知面试者
+	 * 面试提醒
+	 * {{first.DATA}}
+	 * 面试时间:{{keyword1.DATA}}
+	 * 面试地点:{{keyword2.DATA}}
+	 * {{remark.DATA}}
+	 */
+	public static final String TEMPLATE_ID_TO_INTERVIEWEE = "J5PkcWwJsti8ax0BBI9uhquPvV6NaqKrbHubavSvof0";
+}
diff --git a/src/main/java/cn/timer/api/config/enuminterface/JxglEnumInterface.java b/src/main/java/cn/timer/api/config/enuminterface/JxglEnumInterface.java
index 7bf6984..3962b5d 100644
--- a/src/main/java/cn/timer/api/config/enuminterface/JxglEnumInterface.java
+++ b/src/main/java/cn/timer/api/config/enuminterface/JxglEnumInterface.java
@@ -345,5 +345,24 @@ public interface JxglEnumInterface {
 		}
 
 	}
+	/**
+	 * 招聘管理-面试流程:通知方式 1:全部 2:短信 3:邮件 4.微信公众号
+	 */
+	@Getter
+	enum NoticeWay implements JxglEnumInterface {
+		ALL(1, "全部"),
+		SHORT_MESSAGE(2, "短信"), EMAIL(3, "邮件"),
+		WECHAT_PUBLIC(4, "微信公众号");
+
+		private Integer type;
+
+		private String name;
+
+		NoticeWay(Integer type, String name) {
+			this.type = type;
+			this.name = name;
+		}
+
+	}
 	
 }
diff --git a/src/main/java/cn/timer/api/controller/verify/VerifyController.java b/src/main/java/cn/timer/api/controller/verify/VerifyController.java
index dcc0cfb..5d48a4a 100644
--- a/src/main/java/cn/timer/api/controller/verify/VerifyController.java
+++ b/src/main/java/cn/timer/api/controller/verify/VerifyController.java
@@ -1,6 +1,5 @@
 package cn.timer.api.controller.verify;
 
-import cn.timer.api.utils.wxgzh.SignUtil;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
diff --git a/src/main/java/cn/timer/api/controller/zpgl/ZpglController.java b/src/main/java/cn/timer/api/controller/zpgl/ZpglController.java
index 05e327f..12bfe9c 100644
--- a/src/main/java/cn/timer/api/controller/zpgl/ZpglController.java
+++ b/src/main/java/cn/timer/api/controller/zpgl/ZpglController.java
@@ -514,7 +514,7 @@ public class ZpglController {
             ZpglDtk zpglDtk = ZpglDtk.builder().build().selectOne(new QueryWrapper<ZpglDtk>().lambda().eq(ZpglDtk::getZpglRcxxId, zpglRcxxId));
 
             // offer
-            ZpglRcxxOffer zpglRcxxOffer = ZpglRcxxOffer.builder().build().selectOne(new QueryWrapper<ZpglRcxxOffer>().lambda().eq(ZpglRcxxOffer::getZpglRcxxId, zpglRcxxId).eq(ZpglRcxxOffer::getDeleteFlag, 0));
+            ZpglRcxxOffer zpglRcxxOffer = ZpglRcxxOffer.builder().build().selectOne(new QueryWrapper<ZpglRcxxOffer>().lambda().eq(ZpglRcxxOffer::getZpglRcxxId, zpglRcxxId).eq(ZpglRcxxOffer::getDeleteFlag, 0).orderByDesc(ZpglRcxxOffer::getCreateTime));
 
             Map<String, Object> map = new HashMap<>(7);
             map.put("zpglRcxx", zpglRcxx);
diff --git a/src/main/java/cn/timer/api/controller/zpgl/ZpglWxgzptController.java b/src/main/java/cn/timer/api/controller/zpgl/ZpglWxgzptController.java
index 6daa2cb..58da24a 100644
--- a/src/main/java/cn/timer/api/controller/zpgl/ZpglWxgzptController.java
+++ b/src/main/java/cn/timer/api/controller/zpgl/ZpglWxgzptController.java
@@ -6,9 +6,8 @@ import cn.timer.api.bean.qyzx.QyzxEmpLogin;
 import cn.timer.api.bean.yggl.YgglMainEmp;
 import cn.timer.api.bean.zpgl.ZpglRcxx;
 import cn.timer.api.bean.zpgl.ZpglWxgzptEmpRcxx;
-import cn.timer.api.controller.zpgl.sevice.ZpglWxgzptService;
+import cn.timer.api.controller.zpgl.sevice.ZpglWxgzptServiceImpl;
 import cn.timer.api.dto.template.TemplateData;
-import cn.timer.api.dto.template.TemplateMessage;
 import cn.timer.api.dto.wxgzh.LoginDto;
 import cn.timer.api.dto.wxgzh.MessageQueueDto;
 import cn.timer.api.utils.Result;
@@ -19,7 +18,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -31,9 +29,7 @@ import org.springframework.web.servlet.ModelAndView;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
-import javax.transaction.Transactional;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -58,7 +54,7 @@ public class ZpglWxgzptController {
     public static final String OAUTH_GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
 
     @Resource
-    private ZpglWxgzptService zpglWxgzptService;
+    private ZpglWxgzptServiceImpl zpglWxgzptService;
 
     @Resource
     private RedisUtil redisUtil;
diff --git a/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglServiceImpl.java b/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglServiceImpl.java
index 2fe3de3..5db4f31 100644
--- a/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglServiceImpl.java
+++ b/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglServiceImpl.java
@@ -2,6 +2,7 @@ package cn.timer.api.controller.zpgl.sevice;
 
 import cn.timer.api.bean.clazz.SysRegion;
 import cn.timer.api.bean.qyzx.QyzxEmpLogin;
+import cn.timer.api.bean.wechat.MessageTemplate;
 import cn.timer.api.bean.yggl.YgglMainEmp;
 import cn.timer.api.bean.zpgl.*;
 import cn.timer.api.bean.zzgl.ZzglBmgwM;
@@ -11,6 +12,7 @@ import cn.timer.api.controller.kqgl.ClockInTool;
 import cn.timer.api.dto.baidu.*;
 import cn.timer.api.bean.clazz.NationClass;
 import cn.timer.api.dto.email.SendMessageDto;
+import cn.timer.api.dto.template.InterviewNotice;
 import cn.timer.api.dto.zpgl.ImportCandidateDto;
 import cn.timer.api.dto.zpgl.ZpglRcxxDto;
 import cn.timer.api.utils.Result;
@@ -30,6 +32,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import javax.transaction.Transactional;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -57,6 +60,9 @@ public class ZpglServiceImpl implements ZpglService {
     @Autowired
     private ZpglMslcLogService zpglMslcLogService;
 
+    @Autowired
+    private ZpglWxgzptServiceImpl zpglWxgzptService;
+
 
     @Override
     public boolean updateZpglRcxx(UserBean userBean, ZpglRcxxDto zpglRcxxDto) {
@@ -204,6 +210,20 @@ public class ZpglServiceImpl implements ZpglService {
         zpglMslcLog.setDetail(detail);
         count = zpglRcxx.updateById();
         zpglMslcLogService.addZpglMslcLog(zpglMslcLog);
+        // 发送面试通知
+        if(count && JxglEnumInterface.ResumeStatus.INTERVIEW.equals(zpglRcxxDto.getStatus()) && JxglEnumInterface.NoticeWay.WECHAT_PUBLIC.equals(zpglRcxxDto.getNoticeWay())){
+            InterviewNotice interviewNotice = new InterviewNotice();
+            interviewNotice.setName(zpglRcxxEntity.getName());
+            interviewNotice.setInterviewTime(zpglRcxxDto.getInterviewTime());
+            // 通知面试官
+            interviewNotice.setMobile("");
+            interviewNotice.setTemplateId(MessageTemplate.TEMPLATE_ID_TO_INTERVIEWER);
+            zpglWxgzptService.addInterviewMessageQueue(interviewNotice);
+            // 通知面试者
+            interviewNotice.setMobile(zpglRcxxEntity.getMobile());
+            interviewNotice.setTemplateId(MessageTemplate.TEMPLATE_ID_TO_INTERVIEWEE);
+            zpglWxgzptService.addInterviewMessageQueue(interviewNotice);
+        }
         return count;
     }
 
diff --git a/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptService.java b/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptService.java
index 85a16cc..17c29e1 100644
--- a/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptService.java
+++ b/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptService.java
@@ -1,8 +1,7 @@
 package cn.timer.api.controller.zpgl.sevice;
 
-import cn.hutool.http.HttpUtil;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
+
+import cn.timer.api.dto.template.InterviewNotice;
 
 import java.util.Map;
 
@@ -10,18 +9,20 @@ import java.util.Map;
  * @author longys
  * @date 2022/3/25 18:08
  */
-@Service
-public class ZpglWxgzptService {
-
-    @Value("${youling.serverUrl}")
-    private String serverUrl;
+public interface ZpglWxgzptService {
 
     /**
      * 添加消息队列
      * @param map
      * @return
      */
-    public String addMessageQueue(Map<String,Object> map){
-        return HttpUtil.post(serverUrl+"/wxgzh/addMessageQueue", map);
-    }
+    String addMessageQueue(Map<String,Object> map);
+
+    /**
+     * 安排面试 通知面试官、面试者
+     * 添加消息队列
+     * @param interviewNotice
+     * @return
+     */
+    String addInterviewMessageQueue(InterviewNotice interviewNotice);
 }
diff --git a/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptServiceImpl.java b/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptServiceImpl.java
new file mode 100644
index 0000000..926694c
--- /dev/null
+++ b/src/main/java/cn/timer/api/controller/zpgl/sevice/ZpglWxgzptServiceImpl.java
@@ -0,0 +1,99 @@
+package cn.timer.api.controller.zpgl.sevice;
+
+import cn.hutool.http.HttpUtil;
+import cn.timer.api.bean.wechat.MessageTemplate;
+import cn.timer.api.dto.template.InterviewNotice;
+import cn.timer.api.dto.template.TemplateData;
+import cn.timer.api.dto.wxgzh.MessageQueueDto;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author longys
+ * @date 2022/3/25 18:08
+ */
+@Slf4j
+@Service
+@Transactional(rollbackOn = Exception.class)
+public class ZpglWxgzptServiceImpl implements ZpglWxgzptService {
+
+    @Value("${youling.serverUrl}")
+    private String serverUrl;
+
+    /**
+     * 添加消息队列
+     *
+     * @param map
+     * @return
+     */
+    public String addMessageQueue(Map<String, Object> map) {
+        return HttpUtil.post(serverUrl + "/wxgzh/addMessageQueue", map);
+    }
+
+
+    /**
+     * 添加消息队列
+     *
+     * @param interviewNotice
+     * @return
+     */
+    public String addInterviewMessageQueue(InterviewNotice interviewNotice) {
+        //消息队列对象
+        MessageQueueDto mqd = new MessageQueueDto();
+        BeanUtils.copyProperties(interviewNotice, mqd);
+        /** 模板消息内容 start */
+        List<TemplateData> templateData = new ArrayList<>();
+        if (MessageTemplate.TEMPLATE_ID_TO_INTERVIEWER.equals(interviewNotice.getTemplateId())) {
+            TemplateData key1 = new TemplateData("first", "您好," + interviewNotice.getZpglZwxxName() + interviewNotice.getName() + "已安排由您面试", "#000000");
+            templateData.add(key1);
+        } else if (MessageTemplate.TEMPLATE_ID_TO_INTERVIEWEE.equals(interviewNotice.getTemplateId())) {
+            TemplateData key1 = new TemplateData("first", "候选人" + interviewNotice.getName() + "你好!你所投递的" + interviewNotice.getZpglZwxxName() + "为你安排了面试", "#000000");
+            templateData.add(key1);
+        }
+        // 面试职位
+        TemplateData key2 = new TemplateData("keyword1", interviewNotice.getZpglZwxxName(), "#000000");
+        templateData.add(key2);
+        // 面试时间
+        TemplateData key3 = new TemplateData("keyword2", interviewNotice.getInterviewTime(), "#000000");
+        templateData.add(key3);
+        // 备注
+        TemplateData key4 = new TemplateData("remark", interviewNotice.getRemark(), "#000000");
+        templateData.add(key4);
+
+
+        //数据处理成固定好的json格式
+        String content = mqd.getContentJson(templateData);
+        mqd.setContent(content);
+        /** 模板消息内容 end */
+
+
+        /**
+         * //消息内容模板消息 json格式  普通消息字符串类型
+         * //手机号
+         * mqd.setMobile("18212310017");
+         * //类型(1 短信,2 邮件,3 微信模板消息)
+         * mqd.setType(2);
+         * //公众号类型 1:8小时企业管理 2:优领人才网
+         * mqd.setWxgzhType(1);
+         * //1 即时发送,2 定时发送
+         * mqd.setTiming(1);
+         * //模板id
+         * mqd.setTemplateId(interviewNotice.getTemplateId());
+         * //网页地址
+         * mqd.setUrl(null);
+         * //小程序页面地址
+         * mqd.setWxxcxPageId(null);
+         */
+
+        Map map = JSON.parseObject(JSON.toJSONString(mqd), Map.class);
+        return HttpUtil.post(serverUrl + "/wxgzh/addMessageQueue", map);
+    }
+}
diff --git a/src/main/java/cn/timer/api/dto/template/InterviewNotice.java b/src/main/java/cn/timer/api/dto/template/InterviewNotice.java
new file mode 100644
index 0000000..85d4fca
--- /dev/null
+++ b/src/main/java/cn/timer/api/dto/template/InterviewNotice.java
@@ -0,0 +1,42 @@
+package cn.timer.api.dto.template;
+
+import cn.timer.api.dto.wxgzh.MessageQueueDto;
+import cn.timer.api.utils.DateFormatUtils;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author wuqingjun
+ * @email 284718418@qq.com
+ * @date 2022/4/18
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class InterviewNotice extends MessageQueueDto {
+    /**
+     * 面试者名字
+     */
+    private String name;
+    /**
+     * 职位名称
+     */
+    private String zpglZwxxName;
+    /**
+     * 面试时间
+     */
+    private String interviewTime;
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public void setInterviewTime(Date interviewTime){
+        this.interviewTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(interviewTime);
+    }
+
+}
--
libgit2 0.26.0