liurunyu
2024-10-10 d6075e7ec88fcbf5b4677e6fc9007a4a53288f0e
钉钉发送消息改为不同机构有不同的发送钉钉群(可以是相同的群)
6个文件已修改
260 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java 162 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(test测试系统).yml 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global(ym元谋系统).yml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/DingTalk.java
@@ -7,7 +7,7 @@
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import javax.crypto.Mac;
@@ -17,6 +17,8 @@
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
 * @author ZhuBaoMin
@@ -27,6 +29,18 @@
@Slf4j
@Component
public class DingTalk {
    private static final String dingTalkConfigPriFix = "dingtalk";
    private static final Map<String, Option> optionsMap = new HashMap();
    class Option{
        public Boolean enable ;
        public String robotUrl ;
        public String robotAccessToken ;
        public String secret ;
        public Boolean atAll ;
        public String mobile ;
    }
    /*
    @Value("${dingtalk.robot.url}")
    private String URL;
@@ -41,54 +55,108 @@
    @Value("${dingtalk.mobile}")
    private String MOBILE;
    */
    public void sendMessage(String message) {
        try {
            Long timestamp = System.currentTimeMillis();
            String secret = SECRET;
            String stringToSign = timestamp + "\n" + secret;
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
            byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
            String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
            //sign字段和timestamp字段必须拼接到请求URL上,否则会出现 310000 çš„错误信息
            DingTalkClient client = new DefaultDingTalkClient( URL + "?sign=" + sign + "&timestamp=" + timestamp);
            OapiRobotSendRequest req = new OapiRobotSendRequest();
            /**
             * å‘送文本消息
             */
            //定义文本内容
            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
            text.setContent(message);
            //定义 @对象
            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
            if(AT_ALL) {
                at.setIsAtAll(true);
            }else {
                at.setAtMobiles(Collections.singletonList(MOBILE));
    private Option getOptions(String orgTag, Environment env){
        Option vo = null ;
        try{
            vo = optionsMap.get(orgTag);
            if(vo == null){
                vo = new Option();
                String enableStr = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".enable");
                if(enableStr != null && !enableStr.trim().equals("")){
                    vo.enable = Boolean.valueOf(enableStr);
                }else{
                    vo.enable = true ;
                }
                vo.robotUrl = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.url");
                vo.robotAccessToken = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.access-token");
                vo.secret = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".robot.secret");
                String atAllStr = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".at-all");
                if(atAllStr != null && !atAllStr.trim().equals("")){
                    vo.atAll = Boolean.valueOf(atAllStr);
                }else{
                    vo.atAll = true ;
                }
                vo.mobile = env.getProperty(dingTalkConfigPriFix + "." + orgTag + ".mobile");
                optionsMap.put(orgTag, vo) ;
            }
            //设置消息类型
            req.setMsgtype("text");
            req.setText(text);
            req.setAt(at);
            OapiRobotSendResponse rsp = client.execute(req, CUSTOM_ROBOT_TOKEN);
            log.info(rsp.getBody());
        } catch (ApiException e) {
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        } catch (InvalidKeyException e) {
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        } catch (Exception e){
            log.error("钉钉发送消息异常", e);
            //e.printStackTrace();
        }catch (Exception e){
            vo = null ;
        }
        return vo ;
    }
    /**
     * å‘钉钉群发送消息
     * @param orgTag
     * @param env
     * @param message
     */
    public void sendMessage(String orgTag, Environment env, String message) {
        if(orgTag == null || orgTag.trim().equals("")){
            log.error("钉钉发送消息异常,机构标签为空");
            return;
        }
        if(env == null){
            log.error("钉钉发送消息异常,Spring环境为空");
            return;
        }
        if(message == null || message.trim().equals("")){
            log.error("钉钉发送消息异常,消息为空");
            return;
        }
        Option vo = this.getOptions(orgTag, env) ;
        if(vo == null){
            log.error("钉钉发送消息异常,钉钉配置错误");
            return;
        }
        if(vo.enable){
            try {
                Long timestamp = System.currentTimeMillis() ;
                String stringToSign = timestamp + "\n" + vo.secret;
                Mac mac = Mac.getInstance("HmacSHA256");
                mac.init(new SecretKeySpec(vo.secret.getBytes("UTF-8"), "HmacSHA256"));
                byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
                String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
                //定义文本内容
                OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
                text.setContent(message);
                //定义 @对象
                OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
                if(vo.atAll) {
                    at.setIsAtAll(true);
                }else {
                    at.setAtMobiles(Collections.singletonList(vo.mobile));
                }
                OapiRobotSendRequest req = new OapiRobotSendRequest();
                //设置消息类型
                req.setMsgtype("text");
                req.setText(text);
                req.setAt(at);
                //sign字段和timestamp字段必须拼接到请求URL上,否则会出现 310000 çš„错误信息
                DingTalkClient client = new DefaultDingTalkClient( vo.robotUrl + "?sign=" + sign + "&timestamp=" + timestamp);
                OapiRobotSendResponse rsp = client.execute(req, vo.robotAccessToken);
                log.info(rsp.getBody());
            } catch (ApiException e) {
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            } catch (InvalidKeyException e) {
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            } catch (Exception e){
                log.error("钉钉发送消息异常", e);
                //e.printStackTrace();
            }
        }
    }
}
pipIrr-platform/pipIrr-global/src/main/resources/application-global(test²âÊÔϵͳ).yml
@@ -178,13 +178,30 @@
#钉钉消息推送
dingtalk:
    robot:
        url: https://oapi.dingtalk.com/robot/send
        access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
        secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
    at-all: true
    mobile: 18602657034
    ym:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    pj:
        enable: false #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    test:
        enable: false #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
#阀控器参数
rtu:
    batteryVolt: 17
pipIrr-platform/pipIrr-global/src/main/resources/application-global(ymԪıϵͳ).yml
@@ -178,12 +178,30 @@
#钉钉消息推送
dingtalk:
    robot:
        url: https://oapi.dingtalk.com/robot/send
        access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
        secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
    at-all: true
    mobile: 18602657034
    ym:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    pj:
        enable: false #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    test:
        enable: false #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
#阀控器参数
rtu:
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -178,12 +178,30 @@
#钉钉消息推送
dingtalk:
    robot:
        url: https://oapi.dingtalk.com/robot/send
        access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
        secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
    at-all: true
    mobile: 18602657034
    ym:
        enable: true #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    pj:
        enable: false #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
    test:
        enable: false #是否启用
        robot:
            url: https://oapi.dingtalk.com/robot/send
            access-token: fecef8e7725998f8912af05419580861aafc73413c4920036c07c050fa33055f
            secret: SEC6042bc964d08899a5853eb321eb5a4d842a395982777f815bd07451c879228b7
        at-all: true
        mobile: 18602657034
#阀控器参数
rtu:
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forMs/MsObj4Ding.java
@@ -3,8 +3,10 @@
import com.dy.common.queue.NodeObj;
import com.dy.common.springUtil.SpringContextUtil;
import com.dy.pipIrrGlobal.config.DingTalk;
import com.dy.rtuMw.server.ServerProperties;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.core.env.Environment;
/**
 * @Author: liurunyu
@@ -27,7 +29,8 @@
     */
    public boolean dealSelf(){
        DingTalk dingTalk = SpringContextUtil.getBean(DingTalk.class) ;
        dingTalk.sendMessage(ms);
        Environment env = SpringContextUtil.getApplicationContext().getEnvironment() ;
        dingTalk.sendMessage(ServerProperties.orgTag, env, ms);
        return true ;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-project/src/main/java/com/dy/pipIrrProject/intake/IntakeSv.java
@@ -68,7 +68,7 @@
    public String sendMessage(String message) {
        try {
            dingTalk.sendMessage(message);
            dingTalk.sendMessage(DataSourceContext.get(), this.env, message);
        } catch (Exception e) {
            return "发送失败";
        }