public void ReturnError(string response_messContent, Context ctx)
        {
            string DD_SqlStrQXX = "select   FAGENTID as FAGENTID,FAPPKEY as FAPPKEY,FAPPSECRET as FAPPSECRET from T_MOB_DDAppInfo where FAPPNAME='发送群信息'";

            Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection DD_RowQXX = DBUtils.ExecuteDynamicObject(ctx, DD_SqlStrQXX);
            if (DD_RowQXX.Count > 0)
            {
                DynamicObject DD_dynamicObjectQXX = DD_RowQXX[0] as DynamicObject;
                string        FAPPSECRET_QXX      = Convert.ToString(DD_dynamicObjectQXX["FAPPSECRET"]);
                string        FAPPKEY_QXX         = Convert.ToString(DD_dynamicObjectQXX["FAPPKEY"]);
                //https://oapi.dingtalk.com/robot/send?access_token=XXXXXX&timestamp=XXX&sign=XXX
                var client_QXX = new RestClient("https://oapi.dingtalk.com/robot/send?access_token=" + FAPPSECRET_QXX + GetSignParam(FAPPKEY_QXX));
                client_QXX.Timeout = -1;
                var request_QXX = new RestRequest(Method.POST);
                request_QXX.AddHeader("Content-Type", "application/json");
                request_QXX.AddHeader("msgtype", "text");

                string requestParameter = "{\"msgtype\": \"text\",\"text\": {\"content\": \"" + response_messContent + "\"}}";

                request_QXX.AddParameter("application/json", requestParameter, ParameterType.RequestBody);

                //request_QXX.AddParameter("application/json", "{\"msgtype\": \"text\",\"text\": {\"content\": \"" + response_messContent  + "\"}}", ParameterType.RequestBody);
                //request_QXX.AddParameter("application/json", reqBody, ParameterType.RequestBody);
                IRestResponse response_QXX = client_QXX.Execute(request_QXX);

                JObject json_QXX    = (JObject)JsonConvert.DeserializeObject(Convert.ToString(response_QXX.Content));
                string  errcode_QXX = Convert.ToString(json_QXX["errcode"].ToString());
                if (!"0".Equals(errcode_QXX))
                {
                    throw new Exception("星空配置钉钉的群消息assesstoken与签名不一样,请检查");
                }
            }
            else
            {
                throw new Exception("星空配置钉钉的\"发送群信息\"没有这一行,请配置");
            }
        }
        public void Run(Context ctx, Schedule schedule)
        {
            //钉钉参数的信息
            string DD_SqlStr = "select FAGENTID as FAGENTID,FAPPKEY as FAPPKEY,FAPPSECRET as FAPPSECRET from T_MOB_DDAppInfo where FAPPNAME='发送信息'";

            Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection DD_Row = DBUtils.ExecuteDynamicObject(ctx, DD_SqlStr);
            if (DD_Row.Count > 0)
            {
                DynamicObject DD_dynamicObject  = DD_Row[0] as DynamicObject;
                string        agent_id          = Convert.ToString(DD_dynamicObject["FAGENTID"]);
                string        FAPPKEY           = Convert.ToString(DD_dynamicObject["FAPPKEY"]);
                string        FAPPSECRET        = Convert.ToString(DD_dynamicObject["FAPPSECRET"]);
                string        httpsAccess_token = "https://oapi.dingtalk.com/gettoken?appkey=" + FAPPKEY + "&appsecret=" + FAPPSECRET;
                //获取access_token
                var client_token = new RestClient(httpsAccess_token);
                client_token.Timeout = -1;
                var           request        = new RestRequest(Method.GET);
                IRestResponse response_token = client_token.Execute(request);
                //Console.WriteLine(response_token.Content);

                JObject json_token = (JObject)JsonConvert.DeserializeObject(Convert.ToString(response_token.Content));

                //System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<string, JToken>> enumerator = json_token.GetEnumerator();

                string errcode_token = Convert.ToString(json_token["errcode"].ToString());

                //JObject modelJson = JObject.Parse(Convert.ToString(response_token));
                //modelJson
                //得到未归还的信息

                if (!"0".Equals(errcode_token))
                {
                    string errorInfo = "星空的钉钉设置的“发送信息”不正确";
                    string solveWay  = "请检查钉钉中的“发送信息”应用中的APPKEY与APPSECRET与星空的是否相同,如不相同,请将星空的钉钉设置的“发送信息”行改为与钉钉的一样,详细操作请查看中山金蝶提供的使用文档";
                    ReturnError(getErrorResult(errcode_token, errorInfo, solveWay), ctx);
                }
                //遍历结果集,发送 信息
                else
                {
                    string STK_SqlStr = " select FBILLNO,t6.FNAME as FSalName,FQTY,F_ZSKD_ALREADYOUTQTY ,F_ZSKD_DELAYTME,F_ZSKD_RETURNDATE,t6.FPHONE\n" +
                                        "from T_STK_STKTRANSFERIN t1 \n" +
                                        "join T_STK_STKTRANSFERINENTRY t2 on t1.FID=t2.FID\n" +
                                        "join T_BD_OPERATORENTRY t3 on t3.FOPERATORTYPE='XSY' and t3.FENTRYID=t1.FSALERID\n" +
                                        "join T_BD_STAFF t4 on t3.FSTAFFID = t4.FSTAFFID \n" +
                                        "join t_BD_Person t5 on t5.FPERSONID = t4.FPERSONID\n" +
                                        "join T_SEC_USER t6 on  t6.FLINKOBJECT = t5.FPERSONID\n" +
                                        "join T_BAS_BILLTYPE t7 on t7.FBILLTYPEID=t1.FBILLTYPEID  \n" +
                                        "where FSALERID!=0   and FQTY!=F_ZSKD_ALREADYOUTQTY and t7.FNUMBER='ZJDBD_JCDB' \n" +
                                        "and (case when isnull(F_ZSKD_DELAYTME,'')!=''   or F_ZSKD_DELAYTME >F_ZSKD_RETURNDATE then F_ZSKD_DELAYTME else F_ZSKD_RETURNDATE end<GetDate())";
                    Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection STK_rows = DBUtils.ExecuteDynamicObject(ctx, STK_SqlStr);

                    if (STK_rows.Count > 0)
                    {
                        string access_token = Convert.ToString(json_token["access_token"].ToString());

                        for (int i = 0; i < STK_rows.Count; i++)
                        {
                            //MessageId = Convert.ToString(SequentialGuid.NewGuid());
                            DynamicObject dynamicObject = STK_rows[i];
                            string        mobile        = Convert.ToString(dynamicObject["FPHONE"]);   //电话号码
                            string        FSalName      = Convert.ToString(dynamicObject["FSalName"]); //销售员
                            string        FBILLNO       = Convert.ToString(dynamicObject["FBILLNO"]);  //订单号
                            string        httpsUserID   = "https://oapi.dingtalk.com/user/get_by_mobile?access_token=" + access_token + "&mobile=" + mobile;
                            var           client_userid = new RestClient(httpsUserID);
                            client_userid.Timeout = -1;
                            var           requestt_userid  = new RestRequest(Method.GET);
                            IRestResponse responset_userid = client_userid.Execute(requestt_userid);
                            JObject       json_userid      = (JObject)JsonConvert.DeserializeObject(Convert.ToString(responset_userid.Content));
                            string        errcode_userid   = Convert.ToString(json_userid["errcode"].ToString());
                            if (!"0".Equals(errcode_userid))
                            {
                                if ("60020".Equals(errcode_userid))
                                {
                                    string errorInfo = Convert.ToString(json_userid["errmsg"].ToString());
                                    string solveWay  = "请检查错误信息的IP与钉钉微应用的IP是否一样,如不一样,请设置钉钉应用IP与该IP一致,详细操作请查看中山金蝶提供的使用文档";
                                    ReturnError(getErrorResult(errcode_userid, errorInfo, solveWay), ctx);
                                }
                                else
                                {
                                    string errorInfo = "借出调拨单单号为" + FBILLNO + "中,销售员:" + FSalName + "的电话号码星空配置不正确";
                                    string solveWay  = "请检查星空用户为" + FSalName + " ,是否一样,需改为钉钉的一样,详细操作请查看中山金蝶提供的使用文档";
                                    ReturnError(getErrorResult(errcode_userid, errorInfo, solveWay), ctx);
                                }
                            }
                            else
                            {
                                string access_userid = Convert.ToString(json_userid["userid"].ToString());

                                string content = Convert.ToString("你好,借出调拨单 的 单据编号为: " + FBILLNO + "您未归还,麻烦您下推销售出库单或归还调拨单进行归还操作,或者修改延长日期");

                                string http_mess = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;

                                var client_mess = new RestClient(http_mess);
                                client_mess.Timeout = -1;
                                var request_mess = new RestRequest(Method.POST);
                                request_mess.AddHeader("Content-Type", "text/plain");
                                string Parameter = "{\r\n\t\"agent_id\":" + agent_id + ",\r\n\t\"msg\":{\r\n\t\t\"msgtype\":\"text\",\r\n\t\t\"text\":{\r\n\t\t\t\"content\":\"" + content + "\"\r\n\t\t}\r\n\t},\r\n\t\"userid_list\":\"" + access_userid + "\"\r\n}";
                                request_mess.AddParameter("text/plain", Parameter, ParameterType.RequestBody);
                                IRestResponse response_mess = client_mess.Execute(request_mess);

                                JObject json_mess    = (JObject)JsonConvert.DeserializeObject(Convert.ToString(response_mess.Content));
                                string  errcode_mess = Convert.ToString(json_mess["errcode"].ToString());
                                if (!"0".Equals(errcode_mess))
                                {
                                    string errorInfo = "星空的钉钉设置的“发送信息”中的agentid不正确";
                                    string solveWay  = "请检查钉钉中的“发送信息”应用中的agentid与星空的是否相同,如不相同,请将星空的钉钉设置的“发送信息”行 中的 agentid 改为与钉钉的一样,详细操作请查看中山金蝶提供的使用文档";
                                    ReturnError(getErrorResult(errcode_token, errorInfo, solveWay), ctx);
                                }
                            }
                            //string access_mess = json_token["userid"].ToString();
                            //Console.WriteLine(response_Mess.Content);
                            //double FQTY = Convert.ToDouble(dynamicObject["FQTY"]);
                            //double F_ZSKD_ALREADYOUTQTY = Convert.ToDouble(dynamicObject["F_ZSKD_ALREADYOUTQTY"]);
                            //string Title = Convert.ToString("借出调拨未归还");
                            //string Content = Convert.ToString("你好,借出调拨单 的 单据编号为: "+ FBILLNO+ "您未归还麻烦请下推销售出库单或归还调拨单或修改延长日期");
                            //string sql = "insert into T_WF_MESSAGESEND(FMESSAGEID,FTITLE,FCONTENT,FSENDERID,FCREATETIME,FRECEIVERID,FCOMPLETEDTIME,FSTATUS,FTYPE,";
                            //sql = sql + "FOBJECTTYPEID,FKEYVALUE,FSENDMSGID,FRECEIVERSDISP,FATTACHDATA,FFILEUPDATE)values(";
                            //sql = sql + "'" + MessageId + "','" + Title + "','" + Content + "'," + SenderId + ",GETDATE(),null,null,0,1,";
                            //sql = sql + "'' ," + "0" + ",'','Administrator','',null)";

                            //sql = sql + " \n ";
                            //sql = sql + "insert into T_WF_MESSAGE(FMESSAGEID,FTITLE,FCONTENT,FSENDERID,FCREATETIME,FRECEIVERID,FCOMPLETEDTIME,FSTATUS,FTYPE,";
                            //sql = sql + "FOBJECTTYPEID,FKEYVALUE,FSENDMSGID,FRECEIVERSDISP,FATTACHDATA,FFILEUPDATE,FPROCINSTID,FACTIVITYID)values(";
                            //sql = sql + "'" + MessageId + "','" + Title + "','" + Content + "'," + SenderId + ",GETDATE()," + FSALERID + ",NULL,0,1,";
                            //sql = sql + "'',0,'" + MessageId + "','" + "''" + "','',NULL,'',0)";
                        }
                    }
                }
            }
            else
            {
                throw new Exception("星空配置钉钉的\"发送信息\"没有这一行,请配置");
            }
        }