private void LoadData() { int totalRowsCount = 0; UserProfile user = UserProfile.GetInstance(); string employeeID = user.ID; StringBuilder sbWhere = new StringBuilder(); if (!user.Role.Any(item => item.RoleName.Contains("管理员"))) { sbWhere.AppendFormat(" employeeID = '{0}' AND type = 2 ", employeeID); } else { sbWhere.Append(" type = 2 "); } AspNetPager1.PageSize = 20; List <TaskTrend> lstTrend = new TaskTrendBLL().GetModelListPage(sbWhere.ToString(), AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize, out totalRowsCount); AspNetPager1.RecordCount = totalRowsCount; lblRecordCount.Text = totalRowsCount.ToString(); List <TaskTrendInterface> lstResult = new List <TaskTrendInterface>(); foreach (var item in lstTrend) { TaskTrendInterface taskTrendInterface = new TaskTrendInterface(); taskTrendInterface.ID = item.ID; taskTrendInterface.ProjectId = item.PROJECTID; taskTrendInterface.CreateDate = item.CREATEDATE ?? DateTime.Now; taskTrendInterface.FriendlyDate = DateTimeHelper.ChangeTime(item.CREATEDATE ?? DateTime.MinValue); if (item.DESCRIPTION.IndexOf("客户ID:") > -1) { string wangwangId = this.MidStrEx(item.DESCRIPTION, "客户ID:", "Store ID:").Trim(); if (!string.IsNullOrEmpty(item.DESCRIPTION)) { taskTrendInterface.TrendContent = item.DESCRIPTION.Replace(wangwangId, "<a href=\"http://www.taobao.com/webww/ww.php?ver=3&touid=" + wangwangId + "&siteid=cntaobao&status=2&charset=utf-8\" target=\"_blank\" class=\"awwm\">" + "<img border=\"0\" src = \"http://amos.alicdn.com/online.aw?v=2&uid=" + wangwangId + "&site=cntaobao&s=2&charset=utf-8\">" + wangwangId + "</a> ").Replace("客户ID:", string.Empty); } else { taskTrendInterface.TrendContent = string.Empty; } } else { taskTrendInterface.TrendContent = item.DESCRIPTION; } taskTrendInterface.ReadStatus = item.READSTATUS; lstResult.Add(taskTrendInterface); } gvTrend.DataSource = lstResult; gvTrend.DataBind(); }
private string GetTrends(HttpContext context) { StringBuilder sbJsonResult = new StringBuilder(); string employeeID = context.Request.Params["employeeID"]; List <TaskTrend> lstTrend = new TaskTrendBLL().GetTop10ModelList(" employeeID = '" + employeeID + "' AND type = 1"); List <TaskTrendInterface> lstResult = new List <TaskTrendInterface>(); foreach (var item in lstTrend) { TaskTrendInterface taskTrendInterface = new TaskTrendInterface(); taskTrendInterface.CreateDate = item.CREATEDATE ?? DateTime.Now; taskTrendInterface.FriendlyDate = DateTimeHelper.ChangeTime(item.CREATEDATE ?? DateTime.MinValue); taskTrendInterface.TrendContent = item.DESCRIPTION; lstResult.Add(taskTrendInterface); } sbJsonResult.Append(JsonConvert.SerializeObject(lstResult)); return(sbJsonResult.ToString()); }
protected void gvTrend_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "markRead") { try { string ID = e.CommandArgument.ToString(); TaskTrend trend = new TaskTrendBLL().GetModel(ID); trend.READSTATUS = true; new TaskTrendBLL().Update(trend); LoadData(); ClientScript.RegisterClientScriptBlock(this.GetType(), Guid.NewGuid().ToString(), "alert('成功标记为已读!');", true); } catch { ClientScript.RegisterClientScriptBlock(this.GetType(), Guid.NewGuid().ToString(), "alert('标记已读失败!');", true); } } }
/// <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); } }