فهرست منبع

[+]task增加微信通知

孙伟 3 سال پیش
والد
کامیت
d533f26393

+ 33 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/common/HttpCilentUntil.java

@@ -4,11 +4,14 @@ import org.apache.http.HttpEntity;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
 
 import java.net.URLEncoder;
+import java.nio.charset.Charset;
 import java.util.Map;
 
 public class HttpCilentUntil {
@@ -56,4 +59,34 @@ public class HttpCilentUntil {
         return result;
     }
 
+    /**
+     * 提交一个json信息
+     * @param url
+     * @param jsonParam
+     * @return
+     */
+    public static String httpJsonToString(String url, String jsonParam) {
+        String result = null;
+        CloseableHttpClient client=null;
+        try {
+            client = HttpClients.createDefault();
+            RequestConfig requestConfig = RequestConfig.custom()
+                    .setConnectTimeout(5000).setConnectionRequestTimeout(1000)
+                    .setSocketTimeout(5000).build();
+            HttpPost hp = new HttpPost( url);
+
+            hp.addHeader("Content-type","application/json; charset=utf-8");
+            hp.setHeader("Accept", "application/json");
+            hp.setEntity(new StringEntity(jsonParam, Charset.forName("UTF-8")));
+            hp.setConfig(requestConfig);
+            CloseableHttpResponse response=client.execute(hp);
+            HttpEntity entity = response.getEntity();
+            result = EntityUtils.toString(entity, "utf-8");
+        } catch (Throwable e) {
+            e.printStackTrace();
+            return null;
+        }
+        return result;
+    }
+
 }

+ 73 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/entry/SendMsgReq.java

@@ -0,0 +1,73 @@
+package com.jihengbel.intelligent.applicationtask.entry;
+
+/**
+ * @author sMArT
+ * @version 1.0
+ * @date 2021-08-04 10:00 上午
+ */
+public class SendMsgReq {
+
+    /**
+     * 接收用户id
+     */
+    private Long toUserId;
+    /**
+     * 作业名称
+     */
+    private String title;
+
+    /**
+     * 提醒内容
+     */
+    private String content;
+
+    /**
+     * 截止日期
+     */
+    private String endTime;
+
+    /**
+     * 发布人员id
+     */
+    private Long fromUserId;
+
+    public Long getToUserId() {
+        return toUserId;
+    }
+
+    public void setToUserId(Long toUserId) {
+        this.toUserId = toUserId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public Long getFromUserId() {
+        return fromUserId;
+    }
+
+    public void setFromUserId(Long fromUserId) {
+        this.fromUserId = fromUserId;
+    }
+}

+ 78 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/entry/TemplateEntry.java

@@ -0,0 +1,78 @@
+package com.jihengbel.intelligent.applicationtask.entry;
+
+import java.util.HashMap;
+
+public class TemplateEntry {
+    /**
+     * 模板id
+     */
+    private String template_id;
+    /**
+     * 跳转小程序页面
+     */
+    private String page;
+    /**
+     * 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
+     */
+    private String miniprogram_state;
+    /**
+     * 语言类型
+     */
+    private String lang;//不是必填
+    /**
+     * 接收者openid
+     */
+    private String touser;
+    /**
+     * 模板内容
+     */
+    private HashMap<String, String> data;
+
+    public String getTemplate_id() {
+        return template_id;
+    }
+
+    public void setTemplate_id(String template_id) {
+        this.template_id = template_id;
+    }
+
+    public String getPage() {
+        return page;
+    }
+
+    public void setPage(String page) {
+        this.page = page;
+    }
+
+    public String getMiniprogram_state() {
+        return miniprogram_state;
+    }
+
+    public void setMiniprogram_state(String miniprogram_state) {
+        this.miniprogram_state = miniprogram_state;
+    }
+
+    public String getLang() {
+        return lang;
+    }
+
+    public void setLang(String lang) {
+        this.lang = lang;
+    }
+
+    public String getTouser() {
+        return touser;
+    }
+
+    public void setTouser(String touser) {
+        this.touser = touser;
+    }
+
+    public HashMap<String, String> getData() {
+        return data;
+    }
+
+    public void setData(HashMap<String, String> data) {
+        this.data = data;
+    }
+}

+ 13 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/init/FirstRemindJob.java

@@ -3,7 +3,9 @@ package com.jihengbel.intelligent.applicationtask.init;
 import com.jihengbel.intelligent.applicationtask.common.CommonUtil;
 import com.jihengbel.intelligent.applicationtask.entry.FirstCalendar;
 import com.jihengbel.intelligent.applicationtask.entry.OnsiteCalendar;
+import com.jihengbel.intelligent.applicationtask.entry.SendMsgReq;
 import com.jihengbel.intelligent.applicationtask.service.FirstTaskService;
+import com.jihengbel.intelligent.applicationtask.service.MsgService;
 import com.jihengbel.intelligent.applicationtask.service.OnsiteTaskService;
 import com.jihengbel.intelligent.applicationtask.websocket.WsSessionManager;
 import org.quartz.DisallowConcurrentExecution;
@@ -12,6 +14,7 @@ import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.web.socket.TextMessage;
 
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentMap;
@@ -181,6 +184,7 @@ public class FirstRemindJob implements Job {
         @Override
         public Integer call() throws Exception {
             FirstTaskService firstTaskService = (FirstTaskService) paramMap.get("firstTaskService");
+            MsgService msgService = (MsgService) paramMap.get("msgService");
             List<FirstCalendar> cals = firstTaskService.getRemindWork(paramQuery);
             String day = null;
             String format = "yyyy-MM-dd HH:mm";
@@ -211,6 +215,15 @@ public class FirstRemindJob implements Job {
                         firstTaskService.addRemindNowork(map);
 
                         //需要推动调用这个 todo
+                        Date date = new Date();
+                        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
+                        //发送微信消息
+                        SendMsgReq sendMsgReq = new SendMsgReq();
+                        sendMsgReq.setToUserId(userid);
+                        sendMsgReq.setTitle("提醒执行计划");
+                        sendMsgReq.setContent("您有待提醒的执行计划,请登录小程序查看【计划提醒】");
+                        sendMsgReq.setEndTime(ft.format(date));
+                        msgService.sendWechatMessage(sendMsgReq);
                     }
                 }
 

+ 13 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/init/OnsiteRemindJob.java

@@ -2,6 +2,8 @@ package com.jihengbel.intelligent.applicationtask.init;
 
 import com.jihengbel.intelligent.applicationtask.common.CommonUtil;
 import com.jihengbel.intelligent.applicationtask.entry.OnsiteCalendar;
+import com.jihengbel.intelligent.applicationtask.entry.SendMsgReq;
+import com.jihengbel.intelligent.applicationtask.service.MsgService;
 import com.jihengbel.intelligent.applicationtask.service.OnsiteTaskService;
 import com.jihengbel.intelligent.applicationtask.websocket.WsSessionManager;
 import org.quartz.DisallowConcurrentExecution;
@@ -10,6 +12,7 @@ import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.web.socket.TextMessage;
 
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentMap;
@@ -205,6 +208,7 @@ public class OnsiteRemindJob implements Job {
         @Override
         public Integer call() throws Exception {
             OnsiteTaskService onsiteTaskService = (OnsiteTaskService) paramMap.get("onsiteTaskService");
+            MsgService msgService = (MsgService) paramMap.get("msgService");
             List<OnsiteCalendar> cals = onsiteTaskService.getRemindWork(paramQuery);
             String day = null;
             String format = "yyyy-MM-dd HH:mm";
@@ -248,6 +252,15 @@ public class OnsiteRemindJob implements Job {
 //                        onsiteTaskService.updateOnsiteRemindFlag(map);
 
                         //需要推动调用这个 todo
+                        Date date = new Date();
+                        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
+                        //发送微信消息
+                        SendMsgReq sendMsgReq = new SendMsgReq();
+                        sendMsgReq.setToUserId(userid);
+                        sendMsgReq.setTitle("提醒执行计划");
+                        sendMsgReq.setContent("您有待提醒的执行计划,请登录小程序查看【计划提醒】");
+                        sendMsgReq.setEndTime(ft.format(date));
+                        msgService.sendWechatMessage(sendMsgReq);
                     }
                 }
 

+ 13 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/model/UserMapper.java

@@ -0,0 +1,13 @@
+package com.jihengbel.intelligent.applicationtask.model;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author sMArT
+ * @version 1.0
+ * @date 2021-08-04 11:38 上午
+ */
+@Mapper
+public interface UserMapper {
+    String getOpenIdByUserId(Long userId);
+}

+ 18 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/service/MsgService.java

@@ -0,0 +1,18 @@
+package com.jihengbel.intelligent.applicationtask.service;
+
+import com.jihengbel.intelligent.applicationtask.entry.SendMsgReq;
+
+/**
+ * @author sMArT
+ * @version 1.0
+ * @date 2021-08-04 10:53 上午
+ */
+public interface MsgService {
+    /**
+     * 给微信用户发送消息
+     *
+     * @param sendMsgReq
+     * @return
+     */
+    String sendWechatMessage(SendMsgReq sendMsgReq);
+}

+ 19 - 5
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/service/impl/FirstTaskServiceImp.java

@@ -1,15 +1,15 @@
 package com.jihengbel.intelligent.applicationtask.service.impl;
 
-import com.jihengbel.intelligent.applicationtask.entry.ApprovalUserRes;
-import com.jihengbel.intelligent.applicationtask.entry.ApproveEntry;
-import com.jihengbel.intelligent.applicationtask.entry.FirstCalendar;
-import com.jihengbel.intelligent.applicationtask.entry.FirstTask;
+import com.jihengbel.intelligent.applicationtask.entry.*;
 import com.jihengbel.intelligent.applicationtask.model.FirstTaskMapper;
 import com.jihengbel.intelligent.applicationtask.service.FirstTaskService;
+import com.jihengbel.intelligent.applicationtask.service.MsgService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -19,6 +19,8 @@ public class FirstTaskServiceImp implements FirstTaskService {
 
     @Autowired
     FirstTaskMapper mapper;
+    @Autowired
+    MsgService msgService;
 
     /**
      * 获取对应的规则
@@ -112,7 +114,19 @@ public class FirstTaskServiceImp implements FirstTaskService {
                 approve.setTask_id(vo.getTask_id());
                 approve.setApproval_level(nextUser.getApproval_level());
                 approve.setApproval_user_id(nextUser.getUser_id().longValue());
-                return mapper.addApproveTask(approve);
+                int status = mapper.addApproveTask(approve);
+                if (status > 0) {
+                    Date date = new Date();
+                    SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
+                    //发送微信消息
+                    SendMsgReq sendMsgReq = new SendMsgReq();
+                    sendMsgReq.setToUserId(nextUser.getUser_id());
+                    sendMsgReq.setTitle("计划放行提醒");
+                    sendMsgReq.setContent("您有待放行的计划审批,请登录小程序查看【计划放行】");
+                    sendMsgReq.setEndTime(ft.format(date));
+                    msgService.sendWechatMessage(sendMsgReq);
+                }
+                return status;
             }
         }
        return 0;

+ 80 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/service/impl/MsgServiceImpl.java

@@ -0,0 +1,80 @@
+package com.jihengbel.intelligent.applicationtask.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.jihengbel.intelligent.applicationtask.common.HttpCilentUntil;
+import com.jihengbel.intelligent.applicationtask.entry.SendMsgReq;
+import com.jihengbel.intelligent.applicationtask.entry.TemplateEntry;
+import com.jihengbel.intelligent.applicationtask.model.UserMapper;
+import com.jihengbel.intelligent.applicationtask.service.MsgService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author sMArT
+ * @version 1.0
+ * @date 2021-08-04 10:56 上午
+ */
+@Service
+public class MsgServiceImpl implements MsgService {
+    @Value("${wx.minprogram.appsecret}")
+    private String appsecret;
+
+    @Value("${wx.minprogram.appid}")
+    private String appid;
+
+    @Value("${wx.minprogram.templateId}")
+    private String templateId;
+
+    @Value("${wx.minprogram.page}")
+    private String page;
+
+    @Value("${wx.minprogram.miniprogramState}")
+    private String miniprogramState;
+
+    @Autowired
+    private UserMapper userMapper;
+
+    @Override
+    public String sendWechatMessage(SendMsgReq sendMsgReq) {
+        try {
+            Map params = new HashMap();
+            params.put("secret", appsecret);
+            params.put("appid", appid);
+            params.put("grant_type", "client_credential");
+
+            HashMap<String, String> dataMap = new HashMap();
+            dataMap.put("thing1", sendMsgReq.getContent());
+            dataMap.put("thing2", sendMsgReq.getTitle());
+            dataMap.put("time3", sendMsgReq.getEndTime());
+            dataMap.put("thing4", "智云工厂系统");
+
+            String openId = userMapper.getOpenIdByUserId(sendMsgReq.getToUserId());
+            TemplateEntry template = new TemplateEntry();
+            template.setTemplate_id(templateId);
+            template.setTouser(openId);
+            template.setPage(page);
+            template.setMiniprogram_state(miniprogramState);
+            template.setData(dataMap);
+
+            String result = HttpCilentUntil.httpRequestToString(
+                    "https://api.weixin.qq.com/cgi-bin/token", params);
+            JSONObject jsonObject = JSON.parseObject(result);
+            String access_token = jsonObject.get("access_token").toString();
+            String pushUrl = new StringBuffer("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=").append(access_token).toString();
+            result = HttpCilentUntil.httpJsonToString(pushUrl, JSON.toJSONString(template));
+            jsonObject = JSON.parseObject(result);
+            String errCode = jsonObject.get("errcode").toString();
+            String errMsg = jsonObject.get("errmsg").toString();
+            System.out.println(errCode);
+            return errCode;
+        } catch (Throwable e) {
+            e.printStackTrace();
+            return "-1";
+        }
+    }
+}

+ 19 - 5
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/service/impl/OnsiteTaskServiceImp.java

@@ -1,15 +1,15 @@
 package com.jihengbel.intelligent.applicationtask.service.impl;
 
-import com.jihengbel.intelligent.applicationtask.entry.ApprovalUserRes;
-import com.jihengbel.intelligent.applicationtask.entry.ApproveEntry;
-import com.jihengbel.intelligent.applicationtask.entry.OnsiteCalendar;
-import com.jihengbel.intelligent.applicationtask.entry.OnsiteTask;
+import com.jihengbel.intelligent.applicationtask.entry.*;
 import com.jihengbel.intelligent.applicationtask.model.OnsiteTaskMapper;
+import com.jihengbel.intelligent.applicationtask.service.MsgService;
 import com.jihengbel.intelligent.applicationtask.service.OnsiteTaskService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -21,6 +21,8 @@ public class OnsiteTaskServiceImp implements OnsiteTaskService {
 
     @Autowired
     OnsiteTaskMapper mapper;
+    @Autowired
+    private MsgService msgService;
 
     public int getTaskExistCount(Map map){
         return mapper.getTaskExistCount(map);
@@ -122,7 +124,19 @@ public class OnsiteTaskServiceImp implements OnsiteTaskService {
                 approve.setTask_id(vo.getTask_id());
                 approve.setApproval_level(nextUser.getApproval_level());
                 approve.setApproval_user_id(nextUser.getUser_id().longValue());
-                return mapper.addApproveTask(approve);
+                int status = mapper.addApproveTask(approve);
+                if (status > 0) {
+                    Date date = new Date();
+                    SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
+                    //发送微信消息
+                    SendMsgReq sendMsgReq = new SendMsgReq();
+                    sendMsgReq.setToUserId(nextUser.getUser_id());
+                    sendMsgReq.setTitle("计划放行提醒");
+                    sendMsgReq.setContent("您有待放行的计划审批,请登录小程序查看【计划放行】");
+                    sendMsgReq.setEndTime(ft.format(date));
+                    msgService.sendWechatMessage(sendMsgReq);
+                }
+                return status;
             }
         }
         return 0;

+ 3 - 0
application-task/src/main/resources/application-test.properties

@@ -30,3 +30,6 @@ onsite.remind.work.cron=0 */5 * * * ?
 first.task.cron=0 */5 * * * ? 
 #onsite 工作提醒
 first.remind.work.cron=0 */5 * * * ? 
+
+wx.minprogram.miniprogramState=trial
+

+ 6 - 0
application-task/src/main/resources/application.properties

@@ -2,3 +2,9 @@ spring.profiles.active=test
 
 mybatis.mapperLocations=classpath:mappers/*.xml
 mybatis.config-locations=conf/mybatis-config.xml
+
+wx.minprogram.appid=wxfd6e42e05b91163c
+wx.minprogram.appsecret=7c4e39a33bf8b66beb919b9ad0a15832
+wx.minprogram.templateId=3RatcsOA-T0Dsgevr-1UGvYzZvhS0UY9A86fnTFax50
+wx.minprogram.page=pages/login/index
+wx.minprogram.miniprogramState=formal

+ 14 - 0
application-task/src/main/resources/mappers/UserMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.jihengbel.intelligent.applicationtask.model.UserMapper">
+
+    <select id="getOpenIdByUserId" resultType="String">
+        SELECT
+            openid
+        FROM
+            us_user_wechat
+        WHERE
+            user_id = #{userId};
+    </select>
+
+</mapper>