Beispiel #1
0
        public async Task <ApiResult> SendCode(string phoneNumber)
        {
            using (var dbcontext = new DataContext())
            {
                if (!dbcontext.Managers.Any(t => t.PhoneNumber == phoneNumber))
                {
                    throw new Exception("手机号不存在");
                }
            }

            string sended = _cache.Get <string>("LoginCodeSended" + phoneNumber);

            if (!string.IsNullOrEmpty(sended))
            {
                throw new Exception("验证码已发送,稍后再试");
            }

            int code = new Random().Next(100000, 999999);

            var sendRes = await DingTalkHelper.SendCode(_httpClientFactory, phoneNumber, code);

            if (!sendRes)
            {
                throw new Exception("验证码发送失败");
            }

            _cache.Set("LoginCodeSended" + phoneNumber, phoneNumber, DateTime.Now.AddMinutes(1));
            _cache.Set("LoginCode" + phoneNumber, code, DateTime.Now.AddMinutes(5));

            return(new ApiResult()
            {
                Message = "验证码已发送"
            });
        }
        public MessageController(ILuisService luis,
                                 IAnswerService answerService,
                                 IUnknownService issueService,
                                 IRedisCachingProvider redis,
                                 DingTalkHelper ddHelper,
                                 IDepartmentService departmentService,
                                 IPermissionService permissionService,
                                 IConfiguration configuration,
                                 IFeedbackService feedbackService,
                                 IAppSettings settings,
                                 ILogger <MessageController> logger,
                                 KnowledgeMapContext mapContext,
                                 DingDingApprovalService dingDingApprovalService)
        {
            _logger            = logger;
            _settings          = settings;
            _ddHelper          = ddHelper;
            _configuration     = configuration;
            _ddApprovalService = dingDingApprovalService;
            _luis              = luis;
            _answerService     = answerService;
            _issueService      = issueService;
            _departService     = departmentService;
            _redis             = redis;
            _feedbackService   = feedbackService;
            _permissionService = permissionService;
            _httpClient        = HttpClientFactory.Create();

            _mapContext = mapContext;
        }
        public IActionResult GetDDConfig()
        {
            //获取Token
            var corpId     = DingTalkConfig.CorpId;
            var corpSecret = DingTalkConfig.CorpSecret;
            var token      = DingTalkHelper.GetAccessToken(corpId, corpSecret);
            //HttpContext.Session.SetString("Token", _token);
            //获取部门
            //string _depart = DingTalkHelper.GetDepartmentsList(_token);
            //获取JsApiTicket
            var ticket = DingTalkHelper.GetJsApiTicket(token);
            //HttpContext.Session.SetString("Ticket", _ticket);
            //获取url
            string url = "http://10.0.1.46:5000/";//"http://" + HttpContext.Request.Host.ToString();
            //生成config信息
            var _ddconfig = DingTalkHelper.GetDingdingConfig(url, ticket);
            Dictionary <string, string> dic = new Dictionary <string, string>();

            if (_ddconfig.Code == ResultModel.ResultCode.Success)
            {
                dic = (Dictionary <string, string>)_ddconfig.Data;

                ViewBag.AgentId   = dic["agentId"];
                ViewBag.Timestamp = dic["timeStamp"];
                ViewBag.Noncestr  = dic["nonceStr"];
                ViewBag.Signature = dic["signature"];

                return(Ok(new { token, ticket, corpId, url, agentId = dic["agentId"], timeStamp = dic["timeStamp"], nonceStr = dic["nonceStr"], signature = dic["signature"] }));
            }

            return(Ok());
        }
Beispiel #4
0
 /// <summary>
 /// 获取GetAccessToken
 /// </summary>
 /// <returns></returns>
 public DingTalkCorpConfig GetAccessToken()
 {
     if (DingTalkHelper.CorpConfig != null)
     {
         if (string.IsNullOrEmpty(DingTalkHelper.CorpConfig.CorpId) || string.IsNullOrEmpty(DingTalkHelper.CorpConfig.CorpSecret))
         {
             DingTalkHelper.CorpConfig             = GetCorpConfig();
             DingTalkHelper.CorpConfig.AccessToken = DingTalkHelper.GetAccessToken(DingTalkHelper.CorpConfig.CorpId, DingTalkHelper.CorpConfig.CorpSecret);
             DingTalkHelper.CorpConfig.ExpiresTime = DateTime.Now;
         }
         else
         {
             TimeSpan ts = DateTime.Now - DingTalkHelper.AppConfig.ExpiresTime;
             if (ts.TotalSeconds >= DingTalkHelper.CorpConfig.ExpiresIn)
             {
                 DingTalkHelper.CorpConfig.AccessToken = DingTalkHelper.GetAccessToken(DingTalkHelper.CorpConfig.CorpId, DingTalkHelper.CorpConfig.CorpSecret);
                 DingTalkHelper.CorpConfig.ExpiresTime = DateTime.Now;
             }
         }
         return(DingTalkHelper.CorpConfig);
     }
     else
     {
         DingTalkHelper.CorpConfig             = GetCorpConfig();
         DingTalkHelper.CorpConfig.AccessToken = DingTalkHelper.GetAccessToken(DingTalkHelper.CorpConfig.CorpId, DingTalkHelper.CorpConfig.CorpSecret);
         DingTalkHelper.CorpConfig.ExpiresTime = DateTime.Now;
         return(DingTalkHelper.CorpConfig);
     }
 }
Beispiel #5
0
        public GridPage <DingClassify> addNews([FromBody] DingNew newsDetail, int classifyId)
        {
            var ress = new GridPage <DingClassify>()
            {
                code = ResCode.Success
            };

            //using (var mdReader = new StringReader(newsDetail.OriginalContent))
            //{
            //    using (var html = new StringWriter())
            //    {
            //        CommonMark.CommonMarkConverter.Convert(mdReader, html);
            //        newsDetail.HtmlContent = html.ToString();
            //    }
            //}
            ress = DataBaseHelper <DingClassify> .Get(_uowProvider, ress, classifyId, x => x.Include(a => a.DingNews));

            ress.data.DingNews.Add(newsDetail);
            ress = DataBaseHelper <DingClassify> .Create(_uowProvider, ress.data, ress, true);

            if (newsDetail.Status == 1)
            {
                OapiMessageCorpconversationAsyncsendV2Request.MsgDomain obj1 = new OapiMessageCorpconversationAsyncsendV2Request.MsgDomain();
                obj1.Msgtype = "link";
                OapiMessageCorpconversationAsyncsendV2Request.LinkDomain obj2 = new OapiMessageCorpconversationAsyncsendV2Request.LinkDomain();
                obj2.PicUrl     = newsDetail.Image;
                obj2.MessageUrl = "eapp://pages/detail/index?id=" + ress.data.Id;
                obj2.Text       = newsDetail.SubTitle;
                obj2.Title      = newsDetail.Title;
                obj1.Link       = obj2;
                var res = DingTalkHelper.PushMessage("1814645351680963", null, "", obj1);
            }
            return(ress);
        }
Beispiel #6
0
 public InfoController(IConfiguration configuration,
                       DingTalkHelper ddHelper,
                       IOptions <DTalkConfig> options)
 {
     _ddHelper      = ddHelper;
     _configuration = configuration;
     _ddConfig      = options.Value;
 }
        public IActionResult GetUserInfo(string code, string token)
        {
            var _userid  = DingTalkHelper.GetUserId(token, code);
            var userInfo = DingTalkHelper.GetUserInfo(token, _userid);

            ResultModel.ResultInfo <object> result = new ResultModel.ResultInfo <object>();
            result.Data = userInfo;
            // 将当前钉钉用户的用户信息保存到session中
            result.Code    = ResultModel.ResultCode.Success;
            result.Message = "免登录,获取个人信息成功!";
            return(Ok(result));
        }
Beispiel #8
0
 public ChatController(TokenValidationParameters validationParameters,
                       IChatService chat,
                       DingTalkHelper ddHelper,
                       IRedisCachingProvider redis,
                       IServiceRecordService record,
                       IOptions <DTalkConfig> options)
 {
     _ddHelper             = ddHelper;
     _record               = record;
     _redis                = redis;
     _validationParameters = validationParameters;
     _chat     = chat;
     _ddConfig = options.Value ?? throw new ArgumentNullException(nameof(_ddConfig));
 }
Beispiel #9
0
        //[HandlerAjaxOnly]
        public ActionResult GetDingTalkAppConfigJson()
        {
            string            url    = Request.Url.PathAndQuery;
            DingTalkAppConfig config = ding.GetAppConfig("1");

            if (config != null)
            {
                config.TimeStamp = DingTalkHelper.GetTimeStamp();
                config.NonceStr  = "metec";
                string jsapi_ticket = DingTalkHelper.GetJsApiTicket(config.AccessToken);
                config.Signature = DingTalkHelper.GetAccessSignature(config.NonceStr, config.TimeStamp.ToString(), jsapi_ticket, url);
            }
            return(Content(config.ToJson()));
        }
Beispiel #10
0
        public GridPage <DingNew> editNew([FromBody] DingNew newsDetail, int classifyId)
        {
            var res = new GridPage <DingClassify>()
            {
                code = ResCode.Success
            };
            var ress = new GridPage <DingNew>()
            {
                code = ResCode.Success
            };

            res = DataBaseHelper <DingClassify> .Get(_uowProvider, res, classifyId, x => x.Include(a => a.DingNews));

            var model = res.data.DingNews.Where(a => a.Id == newsDetail.Id).FirstOrDefault();

            if (model != null)
            {
                //model.Image = newsDetail.Image;
                //model.OriginalContent = newsDetail.OriginalContent;
                //model.Status = newsDetail.Status;
                //model.Title = newsDetail.Title;
                //model.UpdateTime = DateTime.Now;
                //model.HtmlContent = newsDetail.HtmlContent;
                //model.Editer = newsDetail.Editer;
                //model.SubTitle = newsDetail.SubTitle;
                newsDetail.DingClassify = res.data;
                newsDetail.CreateTime   = model.CreateTime;
                newsDetail.UpdateTime   = DateTime.Now;
                if (newsDetail.Status == 1)
                {
                    OapiMessageCorpconversationAsyncsendV2Request.MsgDomain obj1 = new OapiMessageCorpconversationAsyncsendV2Request.MsgDomain();
                    obj1.Msgtype = "link";
                    OapiMessageCorpconversationAsyncsendV2Request.LinkDomain obj2 = new OapiMessageCorpconversationAsyncsendV2Request.LinkDomain();
                    obj2.PicUrl     = newsDetail.Image;
                    obj2.MessageUrl = "eapp://pages/detail/index?id=" + res.data.Id;
                    obj2.Text       = newsDetail.SubTitle;
                    obj2.Title      = newsDetail.Title;
                    obj1.Link       = obj2;
                    var result = DingTalkHelper.PushMessage("1814645351680963", null, "", obj1);
                }
                ress = DataBaseHelper <DingNew> .Edit(_uowProvider, newsDetail, ress);
            }
            else
            {
                ress.code = ResCode.Error;
                ress.msg  = "记录不存在";
            }

            return(ress);
        }
Beispiel #11
0
        private object GetDingTalkCorpConfig(string url)
        {
            DingTalkCorpConfig config = ding.GetAccessToken();

            if (config != null)
            {
                config.TimeStamp = DingTalkHelper.GetTimeStamp();
                config.NonceStr  = DingTalkHelper.GuidTo16String();
                string jsapi_ticket = DingTalkHelper.GetJsApiTicket(config.AccessToken);
                config.url          = url;
                config.jsapi_ticket = jsapi_ticket;
                config.Signature    = DingTalkHelper.GetAccessSignature(config.NonceStr, config.TimeStamp.ToString(), jsapi_ticket, url);
            }
            return(config);
        }
Beispiel #12
0
        //[HandlerAjaxOnly]
        public ActionResult GetDingTalkCorpConfigJson(string url)
        {
            DingTalkCorpConfig config = ding.GetAccessToken();

            if (config != null)
            {
                config.TimeStamp = DingTalkHelper.GetTimeStamp();
                config.NonceStr  = DingTalkHelper.GuidTo16String();
                string jsapi_ticket = DingTalkHelper.GetJsApiTicket(config.AccessToken);
                config.url          = url;
                config.jsapi_ticket = jsapi_ticket;
                config.Signature    = DingTalkHelper.GetAccessSignature(config.NonceStr, config.TimeStamp.ToString(), jsapi_ticket, url);
            }
            return(Content(config.ToJson()));
        }
Beispiel #13
0
        /// <summary>
        /// 定时器事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            try
            {
                ////员工编号
                //string employeeNo = ConfigurationManager.AppSettings["employeeNo"];
                ////循环执行,taskType参数分别为0和1
                //for (int i = 0; i < 2; i++)
                //{
                //    object[] arg = { (object)"{\"userNo\":\"" + employeeNo + "\",\"taskType\":\"" + i + "\"}" };
                //    InvokeWebService(arg, i.ToString());
                //}

                //需提醒的任务列表DataSet
                DataSet dsRmd = trBll.GetList("ISREMINDED = 0 AND DATE_SUB(CURDATE(), INTERVAL 100 DAY) <= date(CREATEDATE)");
                if (dsRmd != null && dsRmd.Tables.Count > 0 && dsRmd.Tables[0].Rows.Count > 0)
                {
                    //需要提醒的任务DataTable
                    DataTable     dtRmd     = dsRmd.Tables[0];
                    StringBuilder sbTaskNos = new StringBuilder("'',");
                    //遍历去除需要提醒的任务的编号
                    for (int i = 0; i < dtRmd.Rows.Count; i++)
                    {
                        sbTaskNos.AppendFormat("'{0}',", dtRmd.Rows[i]["FOLDER"]);
                    }
                    //LogHelper.WriteLine("需要提醒的任务:" + sbTaskNos);
                    ProjectBLL pBll = new ProjectBLL();
                    //根据任务编号获取相应的任务列表
                    DataSet dsProject = pBll.GetListSimpleUnion(string.Format(" AND TASKNO IN ({0})", sbTaskNos.ToString().TrimEnd(',')));
                    if (dsProject == null || dsProject.Tables.Count == 0 || dsProject.Tables[0].Rows.Count == 0)
                    {
                        return;
                    }
                    DataTable dtProject = dsProject.Tables[0];

                    DataSet dsEmp = eBll.GetList(string.Empty, "EMPLOYEENO");
                    //获取所有员工列表
                    DataTable dtEmployees = dsEmp.Tables[0];

                    //需要抄送的员工的钉钉UserId
                    string externalDingdingUserId = Convert.ToString(ConfigurationManager.AppSettings["externalDingdingUserId"]);
                    // 任务详细页面地址
                    string taskDetailsPageUrl = Convert.ToString(ConfigurationManager.AppSettings["taskDetailsPageUrl"]);

                    //遍历员工列表
                    for (int i = 0; i < dtEmployees.Rows.Count; i++)
                    {
                        //用户ID
                        string userId = dtEmployees.Rows[i]["ID"].ToString();
                        //用户在钉钉系统中的UserId
                        string dingtalkUserId = dtEmployees.Rows[i]["DINGTALKUSERID"].ToString();
                        //钉钉UserId为空,就没有继续执行的必要了,直接执行下一个员工
                        if (string.IsNullOrEmpty(dingtalkUserId))
                        {
                            continue;
                        }
                        //员工编号
                        string empNo = dtEmployees.Rows[i]["EMPLOYEENO"].ToString();
                        //用户类型
                        string userType = dtEmployees.Rows[i]["TYPE"].ToString();// ConfigurationManager.AppSettings["userType"];
                        //筛选条件
                        string strDtRmdSelect = string.Empty;
                        //用户类型为1,是客服,当时插入数据时录入的是员工ID
                        if (userType == "1")
                        {
                            strDtRmdSelect = string.Format(" enteringPerson = '{0}' AND TOUSERTYPE = '{1}'", userId, userType);
                        }
                        //用户类型为2,是造价员,当时插入数据时录入的是员工编号
                        else if (userType == "2")
                        {
                            strDtRmdSelect = string.Format(" employeeNo = '{0}' AND TOUSERTYPE = '{1}'", empNo, userType);
                        }
                        //用户类型为0,是针对管理员进行的提醒
                        else if (userType == "0")
                        {
                            strDtRmdSelect = string.Format(" TOUSERTYPE = '{0}'", userType);
                        }
                        //客服和造价员均不是,就不提醒了
                        else
                        {
                            continue;
                        }
                        DataRow[] drRmd = dtRmd.Select(strDtRmdSelect);
                        //对任务提醒列表进行遍历
                        for (int drEmpRmdIndex = 0 /*针对某个员工的提醒索引*/; drEmpRmdIndex < drRmd.Length; drEmpRmdIndex++)
                        {
                            string taskType = drRmd[drEmpRmdIndex]["taskType"].ToString();
                            //提醒消息文本
                            string    remindMsg     = string.Empty;
                            string    taskNo        = drRmd[drEmpRmdIndex]["folder"].ToString();
                            string    finishedEmpNo = drRmd[drEmpRmdIndex]["EMPLOYEENO"].ToString();
                            string    kefuEmpId     = Convert.ToString(drRmd[drEmpRmdIndex]["ENTERINGPERSON"]);
                            string    wangwangName  = string.Empty;
                            string    shopName      = string.Empty;
                            string    projectId     = string.Empty;
                            DataRow[] drProject     = dtProject.Select(string.Format(" TASKNO = '{0}'", taskNo));
                            if (drProject.Length > 0)
                            {
                                wangwangName = drProject[0]["wangwangName"].ToString();
                                shopName     = drProject[0]["shop"].ToString();
                                projectId    = drProject[0]["ID"].ToString();
                            }
                            drProject = null;

                            //客服。如果是客服的话,是收不到任务类型为2(即任务倒计时)提醒的。虽然在数据插入时已基本杜绝这种条件同时成立,但这里还是在条件中限制一下。
                            if (userType == "1" && taskType != "2")
                            {
                                // 客服需接收的提醒类型有:普通任务的完成提醒、售后修改任务的完成提醒、新的疑问提醒和疑问答复提醒共 4 种
                                //普通任务
                                if (taskType == "0")
                                {
                                    remindMsg = string.Format("{0}\n完成人:{1}\n客户ID:{2}\nStore ID:{3}",
                                                              taskNo, finishedEmpNo, wangwangName, shopName);
                                }
                                //售后任务
                                else if (taskType == "1")
                                {
                                    string modifyFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString();
                                    remindMsg = string.Format("{0}的{1}\n完成人:{2}\n客户ID:{3}\nStore ID:{4}",
                                                              taskNo, modifyFolder, finishedEmpNo, wangwangName, shopName);
                                }
                                // 新的疑问
                                else if (taskType == "4")
                                {
                                    string questionFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString();
                                    remindMsg = string.Format("【新疑问】\n任务:{0}的{1}\n提问人:客服",
                                                              taskNo, questionFolder);
                                }
                                // 疑问答复
                                else if (taskType == "5")
                                {
                                    string questionFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString();
                                    remindMsg = string.Format("【新答复】\n任务:{0}的{1}\n答复人:{2}",
                                                              taskNo, questionFolder, finishedEmpNo);
                                }
                                //客服和造价员均不是,就不提醒了
                                else
                                {
                                    continue;
                                }
                                // 在这里,录入一条动态到客服的动态列表中
                                try
                                {
                                    if (!string.IsNullOrEmpty(remindMsg))
                                    {
                                        TaskTrendBLL ttBll = new TaskTrendBLL();
                                        TaskTrend    trend = new TaskTrend();
                                        trend.ID          = Guid.NewGuid().ToString();
                                        trend.PROJECTID   = ttBll.GetProjectIDByTaskNo(taskNo);
                                        trend.EMPLOYEEID  = kefuEmpId;// ttBll.GetEmployeeIDByEmployeeNo(empNo);
                                        trend.DESCRIPTION = remindMsg;
                                        trend.CREATEDATE  = DateTime.Now;
                                        trend.READSTATUS  = false;
                                        // 客服类型
                                        trend.TYPE = 2;
                                        ttBll.Add(trend);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    LogHelper.WriteLine("添加任务" + taskNo + "动态失败:" + ex.Message + ex.StackTrace);
                                }
                            }
                            //员工(造价员)
                            else if (userType == "2")
                            {
                                //LogHelper.Write("工程师");
                                // 工程师需接收的提醒有:普通任务(即新任务)提醒、售后任务(即新的修改)提醒、新的疑问和疑问答复共 4 种
                                string taskTrendMsg = string.Empty;
                                //普通任务
                                if (taskType == "0")
                                {
                                    remindMsg    = string.Format("【新任务提醒】\r\n{0},您有一个新任务:{1}", empNo, taskNo);
                                    taskTrendMsg = string.Format("【新任务】{0}", taskNo);
                                }
                                //售后任务
                                else if (taskType == "1")
                                {
                                    string modifyFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString();
                                    remindMsg    = string.Format("【修改任务提醒】\r\n{0},您有一个新的修改任务:{1}的{2}", empNo, taskNo, modifyFolder);
                                    taskTrendMsg = string.Format("【新修改任务】{0}的{1}", taskNo, modifyFolder);
                                    if (!string.IsNullOrEmpty(Convert.ToString(drRmd[drEmpRmdIndex]["SENTCOUNT"])))
                                    {
                                        int sentCount = Convert.ToInt32(drRmd[drEmpRmdIndex]["SENTCOUNT"]);
                                        if (sentCount > 0)
                                        {
                                            remindMsg    += string.Format("(客服{0}次提醒)", sentCount);
                                            taskTrendMsg += string.Format("(客服{0}次提醒)", sentCount);
                                        }
                                    }
                                }
                                else if (taskType == "2")
                                {
                                    remindMsg    = string.Format("【任务预警】\r\n{0},任务{1}距交稿时间已不足3小时", empNo, taskNo);
                                    taskTrendMsg = string.Format("【任务预警】任务{0}仅剩3小时", taskNo);
                                }
                                // 新的疑问
                                else if (taskType == "4")
                                {
                                    string questionFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString();
                                    remindMsg = string.Format("【新疑问提醒】\r\n任务:{0}的{1}\r\n提问人:{2}",
                                                              taskNo, questionFolder, finishedEmpNo);
                                    taskTrendMsg = string.Format("【新疑问】任务{0}的{1}", taskNo, questionFolder);
                                }
                                // 疑问答复
                                else if (taskType == "5")
                                {
                                    string questionFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString();
                                    remindMsg = string.Format("【新的疑问答复】\r\n任务:{0}的{1}\r\n答复人:客服",
                                                              taskNo, questionFolder);
                                    taskTrendMsg = $"【疑问答复】任务{taskNo}的{questionFolder}";
                                }
                                // 任务状态变更
                                else if (taskType == "6")
                                {
                                    string taskStatusUpdateMessage = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString();
                                    remindMsg    = string.Format("【任务状态变更】\n任务{0} {1}", taskNo, taskStatusUpdateMessage);
                                    taskTrendMsg = remindMsg;
                                }
                                else
                                {
                                    continue;
                                }
                                // 在这里,录入一条动态到工程师主页的动态列表中
                                try
                                {
                                    if (!string.IsNullOrEmpty(taskTrendMsg))
                                    {
                                        TaskTrendBLL ttBll = new TaskTrendBLL();
                                        TaskTrend    trend = new TaskTrend();
                                        trend.ID          = Guid.NewGuid().ToString();
                                        trend.PROJECTID   = ttBll.GetProjectIDByTaskNo(taskNo);
                                        trend.EMPLOYEEID  = ttBll.GetEmployeeIDByEmployeeNo(empNo);
                                        trend.DESCRIPTION = taskTrendMsg;
                                        trend.CREATEDATE  = DateTime.Now;
                                        // 工程师类型
                                        trend.TYPE = 1;
                                        ttBll.Add(trend);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    LogHelper.WriteLine("添加任务" + taskNo + "动态失败:" + ex.Message + ex.StackTrace);
                                }
                            }
                            //管理员,只接收任务待分配的提醒
                            else if (userType == "0")
                            {
                                //LogHelper.WriteLine("管理员");
                                // 3 是任务待分配的
                                if (taskType == "3")
                                {
                                    remindMsg = string.Format("【任务待分配提醒】任务{0}待分配", taskNo);
                                }
                                else
                                {
                                    continue;
                                }
                            }

                            #region 调用钉钉接口发送消息
                            //remindMsg = string.Empty;//测试时,置空
                            if (!string.IsNullOrEmpty(remindMsg))
                            {
                                //首先获取accessToken
                                string  accessTokenResult = DingTalkHelper.GetAccessToken();
                                JObject jObj = JObject.Parse(accessTokenResult);
                                //返回码
                                string errcode = jObj["errcode"].ToString();
                                //accessToken
                                string accessToken = string.Empty;
                                //获取成功
                                if (errcode == "0")
                                {
                                    accessToken = jObj["access_token"].ToString();
                                    //发送消息接口的请求地址
                                    string postUrl = string.Format("https://oapi.dingtalk.com/message/send?access_token={0}", accessToken);
                                    //钉钉企业应用id,这个值代表以哪个应用的名义发送消息
                                    string agentid = ConfigurationManager.AppSettings["agentid"];

                                    //定义接收者
                                    string toUser = dingtalkUserId;
                                    //如果额外的接收者不为空
                                    if (!string.IsNullOrEmpty(externalDingdingUserId))
                                    {
                                        toUser += externalDingdingUserId;
                                    }
                                    //如果任务类型为3,说明是新任务待分配提醒
                                    if (taskType == "3")
                                    {
                                        toUser = Convert.ToString(ConfigurationManager.AppSettings["taskAllotmentTipDingdingUserId"]);
                                    }

                                    string param = "";

                                    if (userType == "2" || userType == "0")
                                    {
                                        param = "{\"touser\": \"" + toUser + "\", \"msgtype\": \"text\", \"agentid\": \"" + agentid + "\",\"text\":{" +
                                                "\"content\": \"" + remindMsg + "\"}}";
                                    }
                                    else if (userType == "1")
                                    {
                                        param = "{\"touser\": \"" + toUser + "\", \"msgtype\": \"link\", \"agentid\": \"" + agentid + "\",\"link\":{" +
                                                "\"messageUrl\": \"" + taskDetailsPageUrl + projectId + "\", \"picUrl\":\"@lALOACZwe2Rk\", \"title\":\"提醒\",  \"text\": \"" + remindMsg + "\"}}";
                                    }
                                    LogHelper.WriteLine(param);
                                    //接口返回结果
                                    object msgSendResult = WebServiceHelper.Post(postUrl, param);
                                    //将Object类型结果转换为JObject
                                    JObject jsonSendResult = JObject.Parse(msgSendResult.ToString());
                                    //返回码
                                    errcode = jsonSendResult["errcode"].ToString();
                                    //返回码为0,发送成功
                                    if (errcode == "0")
                                    {
                                        LogHelper.WriteLine("发送至" + empNo + "成功");
                                        string userIdOrEmpNo = string.Empty;
                                        //userType为1,是客服
                                        if (userType == "1")
                                        {
                                            userIdOrEmpNo = userId;
                                        }
                                        //userType为2,是工程师
                                        else if (userType == "2")
                                        {
                                            userIdOrEmpNo = empNo;
                                        }
                                        //将消息置为已读
                                        bool setIsReminded = trBll.SetIsReminding(userIdOrEmpNo, taskNo, drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(), taskType, userType);
                                        if (!setIsReminded)
                                        {
                                            LogHelper.WriteLine("数据库设置消息已读失败,任务编号:" + taskNo);
                                        }
                                    }
                                    else
                                    {
                                        LogHelper.WriteLine("发送至" + empNo + "失败。errcode:" + errcode + ",errmsg:" + jsonSendResult["errmsg"]);
                                    }
                                }
                                else
                                {
                                    string errmsg = jObj["errmsg"].ToString();
                                    LogHelper.WriteLine("access_token获取失败,errmsg:" + errmsg);
                                }
                            }
                            #endregion

                            ////循环执行,taskType参数分别为0、1和2,分别表示普通任务、售后任务和倒计时1小时这三种提醒
                            //for (int j = 0; j < 3; j++)
                            //{
                            //    //拼接参数,用户ID、任务类型和用户类型
                            //    object[] arg = { (object)"{\"userId\":\"" + userId + "\",\"taskType\":\"" + j + "\",\"userType\":\"" + userType + "\"}" };
                            //    if (userType == "0")
                            //    {
                            //        InvokeWebService(arg, j.ToString());
                            //    }
                            //    else if (userType == "1" && j < 2)//i小于2,防止客服也收到倒计时提醒
                            //    {
                            //        InvokeWebServiceCustomerRemind(arg, j.ToString());
                            //    }
                            //}
                        }
                        drRmd = null;
                    }
                    dtEmployees = null;
                    dsEmp       = null;
                    dtProject   = null;
                    dsProject   = null;
                    dtRmd       = null;
                }
                dsRmd = null;

                ////录入人ID
                //string userId = ConfigurationManager.AppSettings["userId"];
                ////用户类型
                //string userType = ConfigurationManager.AppSettings["userType"];
                ////循环执行,taskType参数分别为0、1和2,分别表示普通任务、售后任务和倒计时1小时这三种提醒
                //for (int i = 0; i < 3; i++)
                //{
                //    //拼接参数,用户ID、任务类型和用户类型
                //    object[] arg = { (object)"{\"userId\":\"" + userId + "\",\"taskType\":\"" + i + "\",\"userType\":\"" + userType + "\"}" };
                //    if (userType == "0")
                //    {
                //        InvokeWebService(arg, i.ToString());
                //    }
                //    else if (userType == "1" && i < 2)//i小于2,防止客服也收到倒计时提醒
                //    {
                //        InvokeWebServiceCustomerRemind(arg, i.ToString());
                //    }
                //}
            }
            catch (Exception ex)
            {
                LogHelper.WriteLine(ex.Message + ex.StackTrace);
            }
            finally
            {
                SetWorkingSet(750000);
            }
        }
        protected void btnInvokeWebService_Click(object sender, EventArgs e)
        {
            Employee emp = new Employee();

            emp.NAME        = "李泓霖";
            emp.EMPLOYEENO  = "009";
            emp.MOBILEPHONE = "18862323333";
            string  accessTokenResult = DingTalkHelper.GetAccessToken();
            JObject jObj        = JObject.Parse(accessTokenResult);
            string  errcode     = jObj["errcode"].ToString();
            string  accessToken = string.Empty;

            if (errcode == "0")
            {
                accessToken = jObj["access_token"].ToString();
                //object[] param ={ (object)"{\"name\":\"" + emp.NAME + "\",\"orderInDepts\":\"{1:10,2:20}\",\"department\":[1,2],\"position\":\"产品经理\",\"mobile\":\"" + emp.MOBILEPHONE +
                //    "\",\"tel\":\"010-12333\",\"workPlace\":\"\",\"remark\":\"\",\"email\":\"\",\"jobnumber\":\"" + emp.EMPLOYEENO + "\",\"isHide\":false,\"isSenior\":false}"};
                //object userCreateResult = WebServiceHelper.InvokeWebService(postUrl, null, param);
                //JObject jCreateResult = JObject.Parse(userCreateResult.ToString());
                //errcode = jCreateResult["errcode"].ToString();
                //if (errcode == "0")
                //{
                //    string dingTalkUserId = jCreateResult["userid"].ToString();
                //}
                //else
                //{

                //}

                string position = string.Empty;
                //总经办
                if (rdbGMO.Checked)
                {
                    position = rdbGMO.Text;
                }
                //客服
                else if (rdbCustomerService.Checked)
                {
                    position = rdbCustomerService.Text;
                }
                //造价员
                else if (rdbEmployee.Checked)
                {
                    position = rdbEmployee.Text;
                }

                string postUrl = string.Format("https://oapi.dingtalk.com/user/create?access_token={0}", accessToken);
                string param   = "{\"name\":\"" + emp.NAME + "\",  \"orderInDepts\":\"{1:10}\",  \"department\":[1],  \"position\":\"" + position + "\",  \"mobile\":\"" + emp.MOBILEPHONE +
                                 "\",  \"tel\":\"010-12333\",  \"workPlace\":\"\",  \"remark\":\"\",  \"email\":\"\",  \"jobnumber\":\"" + emp.EMPLOYEENO + "\",  \"isHide\":false,  \"isSenior\":false}";
                object  userCreateResult = WebServiceHelper.Post(postUrl, param);
                JObject jCreateResult    = JObject.Parse(userCreateResult.ToString());
                errcode = jCreateResult["errcode"].ToString();
                if (errcode == "0")
                {
                    string dingTalkUserId = jCreateResult["userid"].ToString();
                    emp.DINGTALKUSERID = dingTalkUserId;
                    try
                    {
                        //更新钉钉UserId
                        bool uptFlag = eBll.Update(emp);
                        //更新成功
                        if (uptFlag)
                        {
                            ExecuteScript("AlertDialog('成功关联钉钉UserId!', null)");
                            return;
                        }
                        //更新失败
                        else
                        {
                            ExecuteScript("AlertDialog('关联钉钉UserId失败!', null)");
                            return;
                        }
                    }
                    catch (Exception ex)
                    {
                        LogHelper.WriteLine("关联钉钉UserId失败。" + ex.Message + ex.StackTrace);
                        ExecuteScript("AlertDialog('操作失败!', null)");
                        return;
                    }
                }
                else
                {
                }
            }
            else
            {
            }
        }
        /// <summary>
        /// 添加员工
        /// </summary>
        private void AddEmployee()
        {
            string employeeNO = txtEmployeeNo.Text.Trim();  //员工编号

            try
            {
                //判断编号是否已经使用
                bool isExist = eBll.IsExist(employeeNO);
                if (isExist)
                {
                    ExecuteScript("AlertDialog('员工编号已存在!', null);");
                    return;
                }
                string name   = txtName.Text.Trim();            //员工姓名
                int    gender = 0;                              //员工性别
                if (rdbFemale.Checked)
                {
                    gender = 1;
                }
                //出生日期
                string birthdate = txtBirthDate.Text.Trim();

                Employee emp = new Employee();
                emp.ID         = Guid.NewGuid().ToString();
                emp.EMPLOYEENO = employeeNO;
                //密码加密
                emp.PASSWORD = AES.Encrypt("666666", "0512000000000512");
                //姓名
                emp.NAME = name == null ? null : name;
                //性别
                emp.SEX = gender == 0;
                if (!string.IsNullOrEmpty(birthdate))
                {
                    emp.BIRTHDATE = Convert.ToDateTime(birthdate);
                }
                //手机号码
                emp.MOBILEPHONE = txtMobilePhone.Text.Trim();
                //转正日期
                emp.TOREGULARDATE = Convert.ToDateTime(txtToRegularDate.Text.Trim());
                //员工类型,0:总经办,1:客服,2:造价员
                decimal userType = 0;
                //总经办
                if (rdbGMO.Checked)
                {
                    userType = 0;
                }
                //客服
                else if (rdbCustomerService.Checked)
                {
                    userType = 1;
                }
                //造价员
                else if (rdbEmployee.Checked)
                {
                    userType = 2;
                }
                // 其他用户类型
                else if (rdbOtherUserType.Checked)
                {
                    if (!string.IsNullOrEmpty(txtUserType.Text.Trim()))
                    {
                        userType = Convert.ToDecimal(txtUserType.Text.Trim());
                    }
                }
                emp.TYPE           = userType;
                emp.ISBRANCHLEADER = rblIsBranchLeader.SelectedValue == "1";
                emp.ISEXTERNAL     = rblIsExternal.SelectedValue == "1";
                //启用状态
                emp.AVAILABLE = 1;
                bool flag = eBll.Add(emp);
                //本系统添加成功
                if (flag)
                {
                    if (rblAddRole.SelectedValue == "1")
                    {
                        // 添加角色
                        EmployeeRole empRole = new EmployeeRole();
                        empRole.ID         = Guid.NewGuid().ToString();
                        empRole.EMPLOYEEID = emp.ID;
                        // 1 客服
                        if (emp.TYPE == 1)
                        {
                            empRole.ROLEID = "fea3a06f-6d97-45d3-93f7-b145c158eb27";
                        }
                        // 2 工程师
                        else if (emp.TYPE == 2)
                        {
                            empRole.ROLEID = "2B43010866666af2b73d78c35288d565";
                        }
                        if (!string.IsNullOrEmpty(empRole.ROLEID))
                        {
                            new EmployeeRoleBLL().Add(empRole);
                        }
                    }

                    // 创建员工编号同名目录
                    string rootPath       = Convert.ToString(ConfigurationManager.AppSettings["employeePath"]);
                    string employeeFolder = Path.Combine(rootPath, emp.EMPLOYEENO);
                    if (!Directory.Exists(employeeFolder))
                    {
                        Directory.CreateDirectory(employeeFolder);
                    }

                    // 2018-05-19 添加
                    // 添加员工的任务分成配置
                    EmployeeProportionBLL epBll         = new EmployeeProportionBLL();
                    EmployeeProportion    empProportion = new EmployeeProportion();
                    empProportion.ID               = Guid.NewGuid().ToString();
                    empProportion.EMPLOYEEID       = emp.ID;
                    empProportion.PROPORTION       = 0.3m;
                    empProportion.PARENTEMPLOYEEID = null;
                    empProportion.ISBRANCHLEADER   = emp.ISBRANCHLEADER;
                    epBll.Add(empProportion);
                    // 任务分成配置结束

                    // 2018-05-20 添加
                    // 添加员工的默认账户
                    EmployeeAccount empAcct = new EmployeeAccount();
                    empAcct.ID             = Guid.NewGuid().ToString();
                    empAcct.EMPLOYEEID     = emp.ID;
                    empAcct.AMOUNT         = 0m;
                    empAcct.PAIDAMOUNT     = 0m;
                    empAcct.SURPLUSAMOUNT  = 0m;
                    empAcct.OTHERSAMOUNT   = 0m;
                    empAcct.CREATEDATE     = DateTime.Now;
                    empAcct.LASTUPDATEDATE = DateTime.Now;
                    EmployeeAccountBLL empAcctBll = new EmployeeAccountBLL();
                    empAcctBll.Add(empAcct);

                    // 员工账户结束
                    #region 调用钉钉接口,添加员工到钉钉
                    //如果选择了钉钉同步创建
                    if (Request.Form["sync"] == "rdbSync")
                    {
                        string  accessTokenResult = DingTalkHelper.GetAccessToken();
                        JObject jObj        = JObject.Parse(accessTokenResult);
                        string  errcode     = jObj["errcode"].ToString();
                        string  accessToken = string.Empty;
                        if (errcode == "0")
                        {
                            accessToken = jObj["access_token"].ToString();
                            string postUrl = string.Format("https://oapi.dingtalk.com/user/create?access_token={0}", accessToken);
                            //岗位
                            string position = string.Empty;
                            //钉钉系统中对应的部门ID
                            string departmentid = string.Empty;
                            ////总经办
                            //if (rdbGMO.Checked)
                            //{
                            //    position = rdbGMO.Text;
                            //    departmentid = "37037510";
                            //}
                            ////客服
                            //else if (rdbCustomerService.Checked)
                            //{
                            //    position = rdbCustomerService.Text;
                            //    departmentid = "36958636";
                            //}
                            ////造价员
                            //else if (rdbEmployee.Checked)
                            //{
                            //    position = rdbEmployee.Text;
                            //    departmentid = "36961466";
                            //}
                            departmentid = "110817907";

                            //\"orderInDepts\":\"{1:10}\",  \"remark\":\"\",    \"tel\":\"010-12333\",  \"workPlace\":\"\",  \"isHide\":false,  \"isSenior\":false
                            string param = "{\"name\":\"" + emp.NAME + "\",    \"department\":[" + departmentid + "],  \"position\":\"" + position + "\",  \"mobile\":\"" + emp.MOBILEPHONE +
                                           "\",  \"email\":\"" + emp.EMAIL + "\",  \"jobnumber\":\"" + emp.EMPLOYEENO + "\",}";
                            object  userCreateResult = WebServiceHelper.Post(postUrl, param);
                            JObject jCreateResult    = JObject.Parse(userCreateResult.ToString());
                            //返回码
                            errcode = jCreateResult["errcode"].ToString();
                            //返回消息
                            string errmsg = jCreateResult["errmsg"].ToString();
                            //返回码为0,成功
                            if (errcode == "0")
                            {
                                string dingTalkUserId = jCreateResult["userid"].ToString();
                                emp.DINGTALKUSERID = dingTalkUserId;
                                try
                                {
                                    //关联钉钉UserId
                                    bool uptFlag = eBll.Update(emp);
                                    //关联成功
                                    if (uptFlag)
                                    {
                                        //弹出提示并刷新当前页面
                                        ExecuteScript("alert('添加成功!');window.location.href='/Pages/Admin/EmployeeAdd?UserId=" + emp.ID + "'");
                                    }
                                    else
                                    {
                                        ExecuteScript("AlertDialog('关联钉钉UserId失败!', null);");
                                    }
                                }
                                //本地OA更新钉钉UserId失败
                                catch (Exception ex)
                                {
                                    LogHelper.WriteLine("自动关联钉钉UserId失败。" + ex.Message + ex.StackTrace);
                                    ExecuteScript("AlertDialog('操作失败!', null)");
                                }
                            }
                            else
                            {
                                LogHelper.WriteLine("用户在OA系统创建成功,但在钉钉系统创建失败,原因:" + errmsg);
                                //ExecuteScript("AlertDialog('OA系统已成功创建用户,但该用户在钉钉系统中创建失败,请人工在钉钉系统中添加。<br />钉钉系统中添加成功后,需要将其系统中的UserId填写并关联到本系统中。', null)");
                                ExecuteScript("alert('OA系统已成功创建用户,但该用户在钉钉系统中创建失败,请人工在钉钉系统中添加。钉钉系统中添加成功后,需要将其系统中的UserId填写并关联到本系统中。');window.location.href='EmployeeAdd?UserId=" + emp.ID + "';");
                            }
                        }
                        else
                        {
                            ExecuteScript("AlertDialog('用户已在本系统中成功创建,但获取钉钉token失败,并未在钉钉系统中成功添加用户,请人工添加!', null)");
                        }
                    }
                    else
                    {
                        ExecuteScript("alert('本系统添加成功但尚未关联钉钉UserId,请尽快关联!');window.location.href='/Pages/Admin/EmployeeAdd?UserId=" + emp.ID + "';");
                    }
                    #endregion
                }
                //添加失败
                else
                {
                    ExecuteScript("AlertDialog('添加失败!', null)");
                }
            }
            catch (Exception ex)
            {
                string exMsg = ex.Message;
                LogHelper.WriteLine(string.Format("员工添加出错。" + exMsg + ex.StackTrace));  //写入文本日志
                string script = string.Format("AlertDialog('服务器错误,请联系管理员!<p>{0}</p>'), null", exMsg);
                ExecuteScript(script);
            }
        }