钉钉消息发送(安装dotnet-sdk-3.1.426-win-x64)
zrg
2025-06-29 ac513f10fdb95997aa21eb59aa99e04282baf325
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
 
namespace DingDingMsg
{
    class Program
    {
        //异常反馈单,异常工艺参数预警   发送钉钉消息
        static DBHelper oCN = new DBHelper();
        static DataSet dt = new DataSet();
        static DataSet dt1 = new DataSet();
        static DataSet dt2 = new DataSet();
        static async Task Main(string[] args)
        {
            //本地
            //string appKey = "dingrsrzhdyn3mlaof95";
            //string appSecret = "RAqH6YtZnPLCpDbuqfaYQkKkVtVdS0wqfC8I26X6qiS-8eoCJCNrzx3fubGND4Sq";
            //斯莫尔
            //string appKey = "dingkdddbhdcssk7jduw";
            //string appSecret = "iv07c-GLfJPnzfJaNAAOfJDl3Z-eODvDAhlInMZCZhGorkle5Evbaxx3ImylvdjQ";
            //九菱
            string appKey = "ding8hkfpspnpoteenk3";
            string appSecret = "-AwplMi-44dA39rNXUiBvDAQl_oAhhrBRQmMtDvSkN44biLh8C1Gb2MCtyzxJ6uF";
            Console.WriteLine("安灯程序正在执行,请不要关闭!!!!");
            // 记录上次执行新定时任务的时间
            DateTime lastNewTaskExecution = DateTime.MinValue;
            while (true)
            {
                //查数据
                string sql = "select a.HInterID,a.HReceiveMan 接收人,c.HDingDingUserID 钉钉id,b.HDescription 内容 from OA_ErrMsgBackBillSub2" +
                    " a inner join OA_ErrMsgBackBillMain b on a.HInterID=b.HInterID left join Gy_Czygl c " +
                    "on a.HReceiveMan = c.Czymc where HSendFlag = '0' order by a.HInterID";
                dt = oCN.RunProcReturn(sql, "OA_ErrMsgBackBillSub2");
                //异常反馈单自动发信息
                if (dt.Tables[0].Rows.Count > 0)
                {
                    string HContext = "";
 
                    for (int i = 0; i < dt.Tables[0].Rows.Count; i++)
                    {                        
                        HContext = dt.Tables[0].Rows[i]["内容"].ToString();
                        string HName = dt.Tables[0].Rows[i]["钉钉id"].ToString();
                        string Stares = dt.Tables[0].Rows[i]["接收人"].ToString();
 
                        MSG msg = new MSG();
 
                        //获取企业的access_token的值
                        string response = msg.GetAccessToken(appKey, appSecret);
                        JObject responseJson = JObject.Parse(response);
                        // 获取access_token的值
                        string accessToken = responseJson["accessToken"].ToString();
 
                        //调用方法发送消息           
                        //string agentId = "3118119317";//钉钉后台建立的小程序id
                        //斯莫尔
                        //string agentId = "3151454458";//钉钉后台建立的小程序id
                        //九菱
                        string agentId = "3910708781";//钉钉后台建立的小程序id
                        string userIdList = HName;//钉钉人员的id
                        string deptIdList = "0"; // 空字符串表示不指定部门
                        string toAllUser = "false";
                        string message = HContext;
 
                        // 调用方法发送消息
                        response = await msg.SendTextMessage(accessToken, agentId, userIdList, deptIdList, toAllUser, message);
                        ResponseData responseData = JsonConvert.DeserializeObject<ResponseData>(response);
                        if (responseData.errcode == 0)
                        {
                            //更新状态
                            string sql1 = "update OA_ErrMsgBackBillSub2 set HSendFlag='1' where HReceiveMan in ('" + Stares + "')";
                            oCN.RunProc(sql1);
                           DBHelper.CustomWriteLog("钉钉返回信息:"+response+"    更新子表语句:"+sql1, DateTime.Now.ToString("yyyy-MM-dd"));
                        }
                        else
                        {
                            Console.WriteLine(responseData.errcode);
                            DBHelper.CustomWriteLog("钉钉返回信息:" + response, DateTime.Now.ToString("yyyy-MM-dd"));
                        }
                    }                                                                        
                }               
 
                //异常工艺参数预警(每 5 分钟执行一次)
                //DBHelper.CustomWriteLog("开始进入执行循环 :", DateTime.Now.ToString("yyyy-MM-dd"));
                //if ((DateTime.Now - lastNewTaskExecution).TotalMinutes >= 4)
                //{
                //    DBHelper.CustomWriteLog("已进入执行循环:", DateTime.Now.ToString("yyyy-MM-dd"));
                //    //查询出要更新已经发送的异常参数
                //    string Sql = "select HItemID from Sb_EquipMentCollectionTechParam_ERR where HCreateTime>=DATEADD(minute, - 1, GETDATE()) AND HSendFlag = 0";
                //    DBHelper.CustomWriteLog("查询出异常的参数:"+Sql, DateTime.Now.ToString("yyyy-MM-dd"));
                //    dt = oCN.RunProcReturn(Sql, "Sb_EquipMentCollectionTechParam_ERR");                 
                //    if (dt != null && dt.Tables[0].Rows.Count > 0)
                //    {
                //        List<string> itemIds = new List<string>();
                //        foreach (DataRow row in dt.Tables[0].Rows)
                //        {
                //            itemIds.Add(row["HItemID"].ToString());
                //        }
                //        DBHelper.CustomWriteLog("返回的异常参数集合:" + string.Join(", ", itemIds), DateTime.Now.ToString("yyyy-MM-dd"));
                //    }
                //    DBHelper.CustomWriteLog("要进入更新的语句", DateTime.Now.ToString("yyyy-MM-dd"));
                //    if (dt.Tables[0].Rows.Count > 0)
                //    {
                //        DBHelper.CustomWriteLog("进入更新的语句", DateTime.Now.ToString("yyyy-MM-dd"));
                //        //更新要发送的单子
                //        if (dt != null && dt.Tables != null && dt.Tables.Count > 0)
                //        {
                //            for (int i = 0; i < dt.Tables[0].Rows.Count; i++)
                //            {
                //                string ycSql = "update Sb_EquipMentCollectionTechParam_ERR set HSendFlag = 1 where HItemID = " + dt.Tables[0].Rows[i]["HItemID"].ToString();
                //                DBHelper.CustomWriteLog("钉钉异常预警更新语句:" + ycSql, DateTime.Now.ToString("yyyy-MM-dd"));
                //                oCN.RunProc(ycSql);
                //            }
                //        }
                //        else
                //        {
                //            // 可以在这里添加适当的处理,比如记录日志表明没有可处理的数据表
                //            DBHelper.CustomWriteLog("没有更新的语句", DateTime.Now.ToString("yyyy-MM-dd"));
                //        }
                //        //查询出要发信息的异常参数
                      
                //        string newSql = @"SELECT 工序名称, STUFF((  SELECT '; ' + 设备编码 + ' - ' + 工艺参数名称 + ' - 数采值: ' + CAST(数采值 AS VARCHAR(10)) + ' - 上限值: ' + CAST(上限值 AS VARCHAR(10)) + ' - 下限值: ' + CAST(下限值 AS VARCHAR(10))  
                //        FROM h_v_Sb_EquipMentCollectionTechParam_ERRList AS InnerTable  WHERE InnerTable.工序名称 = OuterTable.工序名称  AND 发现异常时间 >= DATEADD(minute, -1, GETDATE())
                //        FOR XML PATH('')  ), 1, 2, '') AS 内容  FROM h_v_Sb_EquipMentCollectionTechParam_ERRList AS OuterTable  GROUP BY 工序名称  ";
                //        DBHelper.CustomWriteLog("查询出要发信息的异常参数"+newSql, DateTime.Now.ToString("yyyy-MM-dd"));
                //        dt1 = oCN.RunProcReturn(newSql, "h_v_Sb_EquipMentCollectionTechParam_ERRList");                      
                //        string HContext = ""; string HDeptName = "";
                //        for (int j = 0; j < dt1.Tables[0].Rows.Count; j++)
                //        {
                //            DBHelper.CustomWriteLog("异常内容数量   "+ dt1.Tables[0].Rows.Count, DateTime.Now.ToString("yyyy-MM-dd"));
                //            HContext = dt1.Tables[0].Rows[j]["内容"].ToString();
                //            HDeptName = dt1.Tables[0].Rows[j]["工序名称"].ToString();
                //            DBHelper.CustomWriteLog("异常内容值   "+ HContext, DateTime.Now.ToString("yyyy-MM-dd"));
                //            DBHelper.CustomWriteLog("异常车间值   " + HDeptName, DateTime.Now.ToString("yyyy-MM-dd"));
                //            if (!string.IsNullOrEmpty(HContext) && HContext.ToLower() != "null")
                //            {                                
                //                DBHelper.CustomWriteLog("查询出要发信息的内容" + HContext, DateTime.Now.ToString("yyyy-MM-dd"));
                //                //查询出要发送的人
                //                string newSql1 = @"select a.HDingDingUserID 钉钉id,a.Czymc 接收人 from Gy_Czygl a left join System_UserGroupInfo b on a.Czybm = b.UserId
                //                left join System_UserGroup c on b.GroupId = c.GroupID  where c.GroupName = '" + HDeptName + "工艺异常预警接收人'";
                //                DBHelper.CustomWriteLog("查询出要发送的人:" + newSql1, DateTime.Now.ToString("yyyy-MM-dd"));
                //                dt = oCN.RunProcReturn(newSql1, "Gy_Czygl");
                //                DBHelper.CustomWriteLog("开始进入发信息", DateTime.Now.ToString("yyyy-MM-dd"));
                //                if (dt.Tables[0].Rows.Count > 0)
                //                {
                //                    DBHelper.CustomWriteLog("进入发信息", DateTime.Now.ToString("yyyy-MM-dd"));
                //                    for (int i = 0; i < dt.Tables[0].Rows.Count; i++)
                //                    {
                //                        string HName = dt.Tables[0].Rows[i]["钉钉id"].ToString();
                //                        string Stares = dt.Tables[0].Rows[i]["接收人"].ToString();
 
                //                        MSG msg = new MSG();
 
                //                        //获取企业的access_token的值
                //                        string response = msg.GetAccessToken(appKey, appSecret);
                //                        JObject responseJson = JObject.Parse(response);
                //                        // 获取access_token的值
                //                        string accessToken = responseJson["accessToken"].ToString();
 
                //                        //调用方法发送消息           
                //                        //string agentId = "3118119317";//钉钉后台建立的小程序id
                //                        //斯莫尔
                //                        string agentId = "3151454458";//钉钉后台建立的小程序id
                //                        string userIdList = HName;//钉钉人员的id
                //                        string deptIdList = "0"; // 空字符串表示不指定部门
                //                        string toAllUser = "false";
                //                        string message = HContext;
 
                //                        // 调用方法发送消息
                //                        response = await msg.SendTextMessage(accessToken, agentId, userIdList, deptIdList, toAllUser, message);
                //                        ResponseData responseData = JsonConvert.DeserializeObject<ResponseData>(response);
                //                        if (responseData.errcode == 0)
                //                        {
                //                            DBHelper.CustomWriteLog("钉钉异常预警发送成功", DateTime.Now.ToString("yyyy-MM-dd"));
                //                        }
                //                        else
                //                        {
                //                            Console.WriteLine(responseData.errcode);
                //                            DBHelper.CustomWriteLog("钉钉返回信息:" + response, DateTime.Now.ToString("yyyy-MM-dd"));
                //                        }
 
                //                    }
                //                }
                //            }
                //        }
                //    }
                //    lastNewTaskExecution = DateTime.Now;
                //}
 
 
                // 等待一分钟
                await Task.Delay(TimeSpan.FromMinutes(1));
            }
 
        }      
        public class ResponseData
        {
            public int errcode { get; set; }
            public string errmsg { get; set; }
            public long task_id { get; set; }
            public string request_id { get; set; }
        }
    }
}