/// <summary> /// Action执行中触发委托 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { string code = filterContext.HttpContext.Request.Query["code"].ToString(); var wxPubInfo = MemoryCacheHelper.GetCache <Wx_PublicInfo>("WxPubInfo"); if (null != code && code.Length > 0) { ModelWxUserInfo mWxUserInfo = WXOAuthApiHelper.GetUserInfo(wxPubInfo.AppId, wxPubInfo.AppSecret, code); if (mWxUserInfo != null) { filterContext.HttpContext.Response.Cookies.Append(ComConst.Wx_ModelWxUserInfo, JsonHelper.ToJson(mWxUserInfo), ComHelper.GetCookieOpetion()); filterContext.HttpContext.Session.SetString(ComConst.Wx_ModelWxUserInfo, JsonHelper.ToJson(mWxUserInfo)); } } else { if (filterContext.HttpContext.Request.Cookies.TryGetValue(ComConst.Wx_ModelWxUserInfo, out string value)) { filterContext.HttpContext.Response.Cookies.Append(ComConst.Wx_ModelWxUserInfo, value, ComHelper.GetCookieOpetion()); filterContext.HttpContext.Session.SetString(ComConst.Wx_ModelWxUserInfo, value); } else { var rst = new ContentResult(); rst.Content = "登录过期,请退出重新进入"; filterContext.Result = rst; } } }
/// <summary> /// 学校公众号入口 /// </summary> /// <param name="sId"></param> public ActionResult SchoolPortal(int sId) { glbSchoolId = sId; ModelWxSetting mWxSetting = JsonFileProvider.Instance.GetSettings <ModelWxSetting>(); var wxPubInfo = Service.GetWx_PublicInfo(2, sId); // 生成重定向URL String redirectUrl = mWxSetting.PubUrl_Host + mWxSetting.PubUrl_WxHome; String authUrl = WXOAuthApiHelper.GetAuthorizeUrl(wxPubInfo.AppId, redirectUrl, "State", EnumOAuthScope.snsapi_userinfo); MemoryCacheHelper.SetCache("WxPubInfo", wxPubInfo); // 验证跳转 Response.Redirect(authUrl); return(Content("已完成跳转")); }
/// <summary> /// 陪绮在线自有公众号入口 /// </summary> public ActionResult Index() { ModelWxSetting mWxSetting = JsonFileProvider.Instance.GetSettings <ModelWxSetting>(); var wxPubInfo = Service.GetWx_PublicInfo(1); // 生成重定向URL #if DEBUG mWxSetting.PubUrl_Host = mWxSetting.PubUrl_Host.Replace("https", "http"); #endif String redirectUrl = mWxSetting.PubUrl_Host + mWxSetting.PubUrl_WxHome; String authUrl = WXOAuthApiHelper.GetAuthorizeUrl(wxPubInfo.AppId, redirectUrl, "State", EnumOAuthScope.snsapi_userinfo); MemoryCacheHelper.SetCache("WxPubInfo", wxPubInfo); // 验证跳转 Response.Redirect(authUrl); return(Content("已完成跳转")); }
private int UpdateWxToken() { var sleep = 1000 * 60 * 30;//30min try { var dbContext = new PinkOneMngSysContext(); var wxPubInfos = dbContext.Wx_PublicInfo.Where(x => true).ToList(); foreach (var wpi in wxPubInfos) { ModelWxToken token = WXOAuthApiHelper.GetWxToken(wpi.AppId, wpi.AppSecret); if (null != token && token.access_token != null) { ModelWxJsTicket ticket = WXOAuthApiHelper.GetWxJsTicket(token); if (null != ticket) { string sql = "update Wx_PublicInfo set UpdateTime='{0}', AccessToken='{1}', JsApiTicket='{2}' where ID=" + wpi.ID; sql = string.Format(sql, DateTime.Now, token.access_token, ticket.ticket); var isOK = adoHelper.ExecuteNonQueryCmd(sql); if (isOK > 0) { Console.WriteLine("UpdateWxToken:" + DateTime.Now + " " + wpi.AppName + "Token更新成功"); } } //sleep = token.expires_in * 60; } else { Console.WriteLine("UpdateWxToken:" + DateTime.Now + " " + wpi.AppName + "Token更新失败,原因->" + token.errmsg); } } } catch (Exception e) { Console.WriteLine("UpdateWxToken:" + DateTime.Now + " " + "出现错误," + e.Message); //LogHelper.Error(e.Message); } return(sleep); }
public ModelJsonRet UploadAttFromApp(int schoolId, long stuId, byte attType, byte attWay, byte isSendMsg) { _mjr.errMsg = "未找到匹配的项"; var school = UnitOfWork.Repository <SYS_School>().GetEntitiesAsync(x => x.ID == schoolId).Result.FirstOrDefault(); var stuObj = UnitOfWork.Repository <SYS_Student>().GetEntitiesAsync(x => x.SchoolId == schoolId && x.ID == stuId && x.Status == (byte)StuStatus.正常).Result.FirstOrDefault(); if (null == stuObj) { _mjr.errMsg = "未找到学生ID"; return(_mjr); } var currentAttStatus = CurrentAttStatus.在校; //判断是签入还是签出 if (attType == (byte)AttType.签出) { currentAttStatus = CurrentAttStatus.离校; } SYS_StudentAttRecord stuAttRecord = new SYS_StudentAttRecord { SchoolId = stuObj.SchoolId, MasterId = stuId, AttWay = attWay, AttType = (byte)attType, AttTime = DateTime.Now, AttTimeStr = DateTime.Now.ToString("yyyyMMddHHmmssfff"), }; UnitOfWork.Repository <SYS_StudentAttRecord>().AddEntity(stuAttRecord); var addOk = UnitOfWork.CommitAsync().Result; if (addOk > 0) { _mjr.code = 1; _mjr.errMsg = ""; _mjr.content = "OK"; //更新学生当前考勤状态 stuObj.AttStatus = (byte)currentAttStatus; UnitOfWork.Repository <SYS_Student>().UpdateEntity(stuObj); if (isSendMsg > 0) { //推送考勤消息 List <FK_Stu_Parent> fks = UnitOfWork.Repository <FK_Stu_Parent>().GetEntitiesAsync(x => x.SchoolId == stuObj.SchoolId && x.StuId == stuObj.ID).Result;//查找学生家长 if (null != fks && fks.Count > 0) { var pWxPInfo = UnitOfWork.Repository <Wx_PublicInfo>().GetEntitiesAsync(x => x.Type == 1).Result.FirstOrDefault(); var wxpInfoId = pWxPInfo == null ? 0 : pWxPInfo.ID; if (school.WxPublicInfoId != null && school.WxPublicInfoId > 0) { wxpInfoId = (int)school.WxPublicInfoId; } var wxPubInfo = UnitOfWork.Repository <Wx_PublicInfo>().GetEntitiesAsync(x => x.ID == wxpInfoId).Result.FirstOrDefault(); foreach (var fk in fks) { //推送消息 if (null != wxPubInfo) { // 需要从Cookie中获取 ModelWxMsg <ModelWmAttendance> wxMsg = new ModelWxMsg <ModelWmAttendance>(); wxMsg = JsonFileProvider.Instance.GetSettings <ModelWxMsg <ModelWmAttendance> >(); wxMsg.data.first.value = string.Format(wxMsg.data.first.value, (AttType)attType); wxMsg.url = mWxSetting.PubUrl_Host + "/WxRelated/Center/AttDetail?attId=" + stuAttRecord.ID; wxMsg.touser = fk.OpenId; wxMsg.data.keyword1.value = stuObj.StuName; wxMsg.data.keyword2.value = DateTime.Now.ToString(); wxMsg.data.keyword3.value = school.SchoolName; ModelWmResult wmResult = WXOAuthApiHelper.SendTmplMessage(wxPubInfo.AccessToken, wxMsg); if (null == wmResult || wmResult.msgid <= 0) { LogHelper.Error("推送错误:" + wmResult.errmsg); } } } } } } return(_mjr); }
/// <summary> /// 手动添加考勤记录 /// </summary> public int AddStuAttManually(long stuId, byte attType, string attTime, string attTemp, string attRemark, byte isSendWxMsg = 1) { var res = 0; List <SYS_Student> allStus = (List <SYS_Student>)GetSchoolEntities("stu"); SYS_Student sObj = allStus.Where(x => x.ID == stuId).FirstOrDefault(); if (sObj != null) { DateTime aTime = DateTime.Parse(attTime); SYS_StudentAttRecord sar = new SYS_StudentAttRecord() { SchoolId = mlUser.School.ID, MasterId = stuId, AttType = attType, AttTime = aTime, AttTimeStr = aTime.ToString("yyyyMMddHHmmssfff"), AttWay = (byte)AttWay.手动添加, Temperature = attTemp, Remark = attRemark }; UnitOfWork.Repository <SYS_StudentAttRecord>().AddEntity(sar); var addOk = UnitOfWork.CommitAsync().Result; if (addOk > 0) { //修改考勤状态 if (attType == (byte)AttType.签出) { sObj.AttStatus = (byte)CurrentAttStatus.离校; } else { sObj.AttStatus = (byte)CurrentAttStatus.在校; } UnitOfWork.Repository <SYS_Student>().UpdateEntity(sObj); //推送 if (isSendWxMsg == 1) { //查找学生家长 List <FK_Stu_Parent> fks = UnitOfWork.Repository <FK_Stu_Parent>().GetEntitiesAsync(x => x.SchoolId == sObj.SchoolId && x.StuId == sObj.ID).Result; if (null != fks && fks.Count > 0) { var pWxPInfo = UnitOfWork.Repository <Wx_PublicInfo>().GetEntitiesAsync(x => x.Type == 1).Result.FirstOrDefault(); var wxpInfoId = pWxPInfo == null ? 0 : pWxPInfo.ID; if (mlUser.School.WxPublicInfoId != null && mlUser.School.WxPublicInfoId > 0) { wxpInfoId = (int)mlUser.School.WxPublicInfoId; } var wxPubInfo = UnitOfWork.Repository <Wx_PublicInfo>().GetEntitiesAsync(x => x.ID == wxpInfoId).Result.FirstOrDefault(); foreach (var fk in fks) { //推送消息 if (null != wxPubInfo) { // 需要从Cookie中获取 ModelWxMsg <ModelWmAttendance> wxMsg = new ModelWxMsg <ModelWmAttendance>(); wxMsg = JsonFileProvider.Instance.GetSettings <ModelWxMsg <ModelWmAttendance> >(); wxMsg.data.first.value = string.Format(wxMsg.data.first.value, (AttType)attType); wxMsg.touser = fk.OpenId; wxMsg.url = mWxSetting.PubUrl_Host + "/WxRelated/Center/AttDetail?attId=" + sar.ID; wxMsg.data.keyword1.value = sObj.StuName; wxMsg.data.keyword2.value = DateTime.Now.ToString(); wxMsg.data.keyword3.value = mlUser.School.SchoolName; ModelWmResult wmResult = WXOAuthApiHelper.SendTmplMessage(wxPubInfo.AccessToken, wxMsg); if (null == wmResult || wmResult.msgid <= 0) { LogHelper.Error("推送错误:" + wmResult.errmsg); } } } } } } res = addOk + UnitOfWork.CommitAsync().Result; } return(res); }
/// <summary> /// 上传考勤数据 /// </summary> /// <param name="token"></param> /// <param name="personType">人员类型1:学生,2:职工</param> /// <param name="attWay">考勤方式1:刷卡,2:二维码</param> public ModelJsonRet UploadAtt(int schoolId, byte personType, long personId, byte attWay, string cardNo, string dateTime, string deviceId, out long attId) { attId = 0; var res = 0; //byte[] byteArray = Convert.FromBase64String(token); //string tokenStr= Encoding.Default.GetString(byteArray); //var schoolId = int.Parse(tokenStr.Split(',')[0]); var school = UnitOfWork.Repository <SYS_School>().GetEntitiesAsync(x => x.ID == schoolId && x.Status == 1).Result.FirstOrDefault(); if (school == null) { _mjr.errMsg = "验证失败或学校id不存在或该学校已注销"; return(_mjr); } var attTime = DateTime.ParseExact(dateTime, "yyyyMdHHmmssfff", System.Globalization.CultureInfo.InvariantCulture); var todayStart = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")); if (personType == 1)//学生考勤 { var stuObj = UnitOfWork.Repository <SYS_Student>().GetEntitiesAsync(x => x.SchoolId == schoolId && x.ID == personId).Result.FirstOrDefault(); if (null == stuObj) { _mjr.errMsg = "未找到学生ID"; return(_mjr); } var attType = AttType.签入; var currentAttStatus = CurrentAttStatus.在校; //判断是签入还是签出 var todayAttRecords = UnitOfWork.Repository <SYS_StudentAttRecord>().GetEntitiesAsync(x => x.AttTime > todayStart).Result; if (todayAttRecords.Count > 0 && todayAttRecords.Count % 2 == 1) { attType = AttType.签出; currentAttStatus = CurrentAttStatus.离校; } SYS_StudentAttRecord stuAttRecord = new SYS_StudentAttRecord { SchoolId = school.ID, MasterId = personId, AttWay = attWay, AttType = (byte)attType, AttTime = attTime, AttTimeStr = dateTime, }; UnitOfWork.Repository <SYS_StudentAttRecord>().AddEntity(stuAttRecord); var addOk = UnitOfWork.CommitAsync().Result; if (addOk > 0) { res = addOk; attId = stuAttRecord.ID; //更新学生当前考勤状态 stuObj.AttStatus = (byte)currentAttStatus; UnitOfWork.Repository <SYS_Student>().UpdateEntity(stuObj); //推送考勤消息 List <FK_Stu_Parent> fks = UnitOfWork.Repository <FK_Stu_Parent>().GetEntitiesAsync(x => x.SchoolId == stuObj.SchoolId && x.StuId == stuObj.ID).Result;//查找学生家长 if (null != fks && fks.Count > 0) { var pWxPInfo = UnitOfWork.Repository <Wx_PublicInfo>().GetEntitiesAsync(x => x.Type == 1).Result.FirstOrDefault(); var wxpInfoId = pWxPInfo == null?0: pWxPInfo.ID; if (school.WxPublicInfoId != null && school.WxPublicInfoId > 0) { wxpInfoId = (int)school.WxPublicInfoId; } var wxPubInfo = UnitOfWork.Repository <Wx_PublicInfo>().GetEntitiesAsync(x => x.ID == wxpInfoId).Result.FirstOrDefault(); foreach (var fk in fks) { //推送消息 if (null != wxPubInfo) { // 需要从Cookie中获取 ModelWxMsg <ModelWmAttendance> wxMsg = new ModelWxMsg <ModelWmAttendance>(); wxMsg = JsonFileProvider.Instance.GetSettings <ModelWxMsg <ModelWmAttendance> >(); wxMsg.data.first.value = string.Format(wxMsg.data.first.value, (AttType)attType); wxMsg.url = mWxSetting.PubUrl_Host + "/WxRelated/Center/AttDetail?attId=" + stuAttRecord.ID; wxMsg.touser = fk.OpenId; wxMsg.data.keyword1.value = stuObj.StuName; wxMsg.data.keyword2.value = attTime.ToString(); wxMsg.data.keyword3.value = school.SchoolName; ModelWmResult wmResult = WXOAuthApiHelper.SendTmplMessage(wxPubInfo.AccessToken, wxMsg); if (null == wmResult || wmResult.msgid <= 0) { LogHelper.Error("推送错误:" + wmResult.errmsg); } } } } } } else if (personType == 2)//职工考勤 { var staffObj = UnitOfWork.Repository <SYS_Staff>().GetEntitiesAsync(x => x.SchoolId == schoolId && x.ID == personId).Result.FirstOrDefault(); if (null == staffObj) { _mjr.errMsg = "未找到职工ID"; return(_mjr); } var attType = AttType.签入; var currentAttStatus = CurrentAttStatus.在校; //判断是签入还是签出 var todayAttRecords = UnitOfWork.Repository <SYS_StaffAttRecord>().GetEntitiesAsync(x => x.AttTime > todayStart).Result.ToList(); if (todayAttRecords.Count > 0 && todayAttRecords.Count % 2 == 1) { attType = AttType.签出; currentAttStatus = CurrentAttStatus.离校; } SYS_StaffAttRecord stuAttRecord = new SYS_StaffAttRecord { SchoolId = school.ID, MasterId = (int)personId, AttWay = attWay, AttType = (byte)attType, AttTime = attTime, AttTimeStr = dateTime, }; UnitOfWork.Repository <SYS_StaffAttRecord>().AddEntity(stuAttRecord); var addOk = UnitOfWork.CommitAsync().Result; if (addOk > 0) { res = addOk; attId = stuAttRecord.ID; //更新当前考勤状态 staffObj.AttStatus = (byte)currentAttStatus; UnitOfWork.Repository <SYS_Staff>().UpdateEntity(staffObj); //推送考勤消息 var pWxPInfo = UnitOfWork.Repository <Wx_PublicInfo>().GetEntitiesAsync(x => x.Type == 1).Result.FirstOrDefault(); var wxpInfoId = pWxPInfo == null ? 0 : pWxPInfo.ID; if (school.WxPublicInfoId != null && school.WxPublicInfoId > 0) { wxpInfoId = (int)school.WxPublicInfoId; } var wxPubInfo = UnitOfWork.Repository <Wx_PublicInfo>().GetEntitiesAsync(x => x.ID == wxpInfoId).Result.FirstOrDefault(); if (null != wxPubInfo && staffObj.OpenId != null && staffObj.OpenId.Length > 6) { // 需要从Cookie中获取 ModelWxMsg <ModelWmAttendance> wxMsg = new ModelWxMsg <ModelWmAttendance>(); wxMsg = JsonFileProvider.Instance.GetSettings <ModelWxMsg <ModelWmAttendance> >(); wxMsg.data.first.value = (AttType)attType + " 成功"; //wxMsg.url = mWxSetting.PubUrl_Host + "/WxRelated/Center/AttDetail?attId=" + stuAttRecord.ID; wxMsg.touser = staffObj.OpenId; wxMsg.data.keyword1.value = staffObj.StaffName; wxMsg.data.keyword2.value = attTime.ToString(); wxMsg.data.keyword3.value = school.SchoolName; ModelWmResult wmResult = WXOAuthApiHelper.SendTmplMessage(wxPubInfo.AccessToken, wxMsg); if (null == wmResult || wmResult.msgid <= 0) { LogHelper.Error("推送错误:" + wmResult.errmsg); } } } } if (res > 0) { _mjr.code = 1; _mjr.content = "ok"; //RefreshEntities("stu"); //RefreshEntities("staff"); } return(_mjr); }