/// <summary> /// 修改初赛时间和半决赛触发时间 /// </summary> /// <param name="preliminaries_date">初赛同步时间</param> /// <param name="semifinals_date">决赛同步时间</param> /// <returns></returns> public ApiResult UpdateCompetitonDate(DateTime?preliminaries_date, DateTime?semifinals_date) { ApiResult apiResult = new ApiResult(); BaseBLL <job_detail> job_detail_bll = new BaseBLL <job_detail>(); //修改初赛 if (Util.isNotNull(preliminaries_date)) { var job_detail = job_detail_bll.Find(o => o.job_name.Contains("preliminaries_")); if (job_detail?.id > 0) { job_detail.status = "MODIFY"; job_detail.job_name = "preliminaries_" + sys.getRandomStr(); job_detail.start_time = preliminaries_date.Value.Date; job_detail.end_time = preliminaries_date.Value.AddDays(1).Date; job_detail_bll.Update(job_detail); } else { LogHelper.Error("修改初赛时间错误:" + DateTime.Now); return(new ApiResult() { success = false, message = "修改初赛时间错误" }); } } //修改半决赛 if (Util.isNotNull(semifinals_date)) { var job_detail = job_detail_bll.Find(o => o.job_name.Contains("semifinals_")); if (job_detail?.id > 0) { job_detail.status = "MODIFY"; job_detail.job_name = "semifinals_" + sys.getRandomStr(); job_detail.start_time = semifinals_date.Value.Date; //开始时间 job_detail.end_time = semifinals_date.Value.AddDays(1).Date; //结束时间 job_detail_bll.Update(job_detail); } else { LogHelper.Error("修改半决赛时间错误:" + DateTime.Now); return(new ApiResult() { success = false, message = "修改半决赛时间错误" }); } } apiResult.success = true; apiResult.message = "修改成功"; return(apiResult); }
public virtual ActionResult GetGridJsonEmptyIfNull(string keyword, string searchFiled, string sortFiled = " F_SortCode ") { if (keyword == null) { return(Content("[]")); } SearchCondition condition = new SearchCondition(); var data = baseBLL.Find(GetKeywordCondition(keyword, searchFiled), " ORDER BY " + sortFiled); return(Content(JsonAppHelper.ToJson(data))); }
/// <summary> /// 根据条件查询数据库,并返回对象集合 /// </summary> /// <param name="condition">查询的条件</param> /// <returns>指定对象的集合</returns> public virtual ActionResult Find(string condition) { //检查用户是否有权限,否则抛出MyDenyAccessException异常 base.CheckAuthorized(AuthorizeKey.ListKey); ActionResult result = Content(""); if (!string.IsNullOrEmpty(condition)) { List <T> list = baseBLL.Find(condition); result = ToJsonContentDate(list); } return(result); }
public ActionResult AddArticalCi([FromBody] string content) { BaseBLL <artilce_sensitive_vocabulary> bll = new BaseBLL <artilce_sensitive_vocabulary>(); string[] array = content.Split(' '); foreach (string ci in array) { if (Util.isNotNull(ci)) { var vocabulary = bll.Find(o => o.vocabulary == ci); if (vocabulary?.artilce_sensitive_vocabulary_id > 0) { continue; } bll.Add(new artilce_sensitive_vocabulary() { vocabulary = ci, create_time = DateTime.Now }); } } return(new JsonResult() { Data = "上传完成" }); }
/// <summary> /// 组织发送模板消息内容 /// </summary> /// <param name="weixinApplet">小程序信息</param> /// <param name="templateCode">模板编码</param> /// <param name="openid">用户openid</param> /// <param name="form_id">表单id或支付prepay_id</param> /// <param name="data">发送数据,不同内容用;分隔</param> /// <param name="path">跳转路径</param> /// <returns></returns> public static string sendWeixinTemplate(weixin_applet weixinApplet, string templateCode, string openid, string form_id, string data, string path) { BaseBLL <weixin_applet_template> templateBll = new BaseBLL <weixin_applet_template>(); weixin_applet_template appletTemplate = templateBll.Find(x => x.template_code == templateCode && x.weixin_applet_id == weixinApplet.id); //组织发送的数据 string[] valueArray = data.Split(';'); JObject jobject = JObject.Parse("{}"); for (int i = 0; i < valueArray.Length; i++) { JObject subObject = new JObject( new JProperty("value", valueArray[i]), new JProperty("color", "#333") ); jobject.Add("keyword" + (i + 1), subObject); } WeixinXAPI weixinXApi = new WeixinXAPI(weixinApplet.appid, weixinApplet.secret, weixinApplet.access_token, weixinApplet.access_token_time.ToString(), weixinApplet.id); JObject postData = JObject.Parse("{}"); postData.Add("touser", openid); postData.Add("template_id", appletTemplate.template_id); postData.Add("page", path); postData.Add("form_id", form_id); postData.Add("data", jobject); return(weixinXApi.sendTemplate(postData.ToString())); }
/// <summary> /// 删除大赛公告 /// </summary> /// <param name="competition_season_id"></param> /// <returns></returns> public ApiResult DelNotice(int competition_season_id) { ApiResult apiResult = new ApiResult(); var checkResult = Util.CheckParameters( new Parameter { Value = competition_season_id.ToString(), Msg = "competition_season_id 不能为空值" }, new Parameter { Value = competition_season_id.ToString(), Msg = "competition_season_id 必须是数字类型", Regex = @"^[1-9]\d*$" } ); if (!checkResult.OK) { apiResult.success = false; apiResult.status = ApiStatusCode.InvalidParam; apiResult.message = checkResult.Msg; return(apiResult); } BaseBLL <competition_notice> bll = new BaseBLL <competition_notice>(); var notice = bll.Find(o => o.competition_season_id == competition_season_id && o.is_delete == 0); if (notice?.competition_season_id > 0) { bool result = bll.Delete(notice); apiResult.success = result; apiResult.message = result?"删除成功":"删除失败"; } else { apiResult.success = false; apiResult.message = "数据不存在"; } return(apiResult); }
/// <summary> /// 根据id获取大赛公告 /// </summary> /// <param name="competition_season_id">公告id</param> /// <returns></returns> public ApiResult GetNoticeById(int competition_season_id) { ApiResult apiResult = new ApiResult(); var checkResult = Util.CheckParameters( new Parameter { Value = competition_season_id.ToString(), Msg = "competition_season_id 不能为空值" }, new Parameter { Value = competition_season_id.ToString(), Msg = "competition_season_id 必须是数字类型", Regex = @"^[1-9]\d*$" } ); if (!checkResult.OK) { apiResult.success = false; apiResult.status = ApiStatusCode.InvalidParam; apiResult.message = checkResult.Msg; return(apiResult); } BaseBLL <competition_notice> bll = new BaseBLL <competition_notice>(); var notice = bll.Find(o => o.competition_season_id == competition_season_id && o.is_delete == 0 && o.is_open == 1); if (notice?.competition_season_id > 0) { apiResult.success = true; apiResult.message = "获取成功"; apiResult.data = notice; } else { apiResult.success = false; apiResult.message = "数据不存在"; } return(apiResult); }
/// <summary> /// 半决赛数据自动评选 /// </summary> /// <returns></returns> public ApiResult UpdateSemifinalsData() { ApiResult apiResult = new ApiResult(); //开启的赛区 BaseBLL <competition_notice> notice_bll = new BaseBLL <competition_notice>(); var notice = notice_bll.Find(o => o.is_delete == 0 && o.is_open == 1); if (notice?.competition_season_id > 0) { if (Util.isNotNull(notice.semifinals_end_date)) { //时间是否是今天 if (notice.semifinals_end_date.Date == DateTime.Now.Date) { //找出前几百名作品,更新作品状态(必须是审核通过的) ArticleBLL bll = new ArticleBLL(); apiResult = bll.GetSemifinalsAndUpdate(notice.competition_season_id, 200); LogHelper.Info("同步更新半决赛作品时间:" + DateTime.Now + ",结果:" + Newtonsoft.Json.JsonConvert.SerializeObject(apiResult)); } } else { LogHelper.Error(DateTime.Now + ":半决赛数据自动评选,没有找到半决赛结束时间"); apiResult.success = false; apiResult.message = "没有找到半决赛结束时间"; } } else { LogHelper.Error(DateTime.Now + ":初赛数据自动评选,没有找到开启的赛季"); apiResult.success = false; apiResult.message = "没有找到开启的赛季"; } return(apiResult); }
public WeixinXAPI(string _appid, string _appsecret, string _access_token, string _access_token_time) { rootSuccess = true; AppId = _appid; AppSecret = _appsecret; AccessToken = _access_token; AccessTokenTime = _access_token_time; //检查授权有效期,如果凭证为空,或者已失效,则需要请求授权 DateTime time = DateTime.Now; if (!string.IsNullOrEmpty(_access_token_time)) { time = DateTime.Parse(_access_token_time); } int comtime = (int)time.Subtract(DateTime.Now).TotalMinutes; //凭证在5分钟以内将失效,则重新获取凭证 if (comtime < 5) { string s = Util.MethodGET("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + AppId + "&secret=" + AppSecret, "UTF-8"); try { JObject jo = JObject.Parse(s); AccessToken = jo["access_token"].ToString(); AccessTokenTime = System.DateTime.Now.AddSeconds(double.Parse(jo["expires_in"].ToString())).ToString(); //将获取的最新 AccessToken 保存到数据库中 BaseBLL <weixin_applet> baseBLL = new BaseBLL <weixin_applet>(); var weixin_applet = baseBLL.Find(x => x.appid == AppId && x.secret == AppSecret); if (weixin_applet != null) { weixin_applet.access_token = AccessToken; weixin_applet.access_token_time = Convert.ToDateTime(AccessTokenTime); baseBLL.Update(weixin_applet); } } catch (Exception e) { rootSuccess = false; rootErrMsg = e.Message; } resource = s; } }
/// <summary> /// 扫码登陆请求(前端生成二维码) /// </summary> public ApiResult ScanLoginByJs() { ApiResult apiResult = new ApiResult(); BaseBLL <weixin_open> bll = new BaseBLL <weixin_open>(); var weixin_open = bll.Find(o => o.appid != null && o.secret != null); string appid = weixin_open.appid; string secret = weixin_open.secret; string state = sys.getRandomCode(16); //使用session存state //HttpContext.Current.Session["session_weixin_login_state"] = state; //CookieHelper.SetCookie("cookie_weixin_login_state", state); apiResult.success = true; apiResult.message = ""; apiResult.data = new { appid, state }; return(apiResult); }
/// <summary> /// 导出比赛记录 /// </summary> /// <param name="article_state">2:初赛,3是半决赛,4是决赛</param> /// <returns></returns> public ApiResult ExportCompetitionRecord(int article_state = 2) { ApiResult apiResult = new ApiResult(); //赛季 BaseBLL <competition_notice> notice_bll = new BaseBLL <competition_notice>(); var notice = notice_bll.Find(o => o.is_delete == 0 && o.is_open == 1); if (notice?.competition_season_id > 0) { CompetitionBLL bll = new CompetitionBLL(); var dt = bll.GetAllArticle(article_state, notice.competition_season_id); //导出excel string folder = HttpContext.Current.Server.MapPath("/download/"); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } string excel_file = folder + sys.getRandomStr() + ".xls"; Rays.Utility.NPOIHelper.GridToExcelByNPOI(dt, excel_file, "导出结果"); if (File.Exists(excel_file)) { string file = Util.UploadFileToServices(excel_file); apiResult.success = true; apiResult.message = "导出成功"; apiResult.data = file; } else { return(new ApiResult() { success = false, message = "导出失败" }); } } else { return(new ApiPageResult() { success = false, message = "当前没有开启的赛季" }); } return(apiResult); }
/// <summary> /// 获取个人信息 /// </summary> /// <param name="uid"></param> /// <returns></returns> public ApiResult GetUserInfo(int uid) { ApiResult apiResult = new ApiResult(); BaseBLL <author_info> info_bll = new BaseBLL <author_info>(); var author_info = info_bll.Find(o => o.uid == uid); if (author_info?.author_info_id > 0) { apiResult.success = true; apiResult.message = "获取个人信息"; apiResult.data = author_info; } else { apiResult.success = false; apiResult.message = "未获取个人信息"; } return(apiResult); }
/// <summary> /// 按照 id 获取通知 /// </summary> /// <param name="notice_id">通知 id</param> /// <returns></returns> public ApiResult GetNoticeById(int notice_id) { ApiResult apiResult = new ApiResult(); BaseBLL <user_notice> bll = new BaseBLL <user_notice>(); var notice = bll.Find(n => n.notice_id == notice_id); if (notice == null) { apiResult.success = false; apiResult.message = "该通知不存在"; return(apiResult); } else { apiResult.success = true; apiResult.data = notice; return(apiResult); } }
/// <summary> /// 获取作品列表(小程序,必须是审核过的) /// </summary> /// <param name="uid">赛区id</param> /// <param name="zone_id">赛区id</param> /// <param name="keyword">作品编号/标题/作者</param> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <returns></returns> public ApiPageResult GetArticleList(int uid, int zone_id = 0, string keyword = null, int pageIndex = GloabManager.PAGEINDEX, int pageSize = GloabManager.PAGESIZE) { ApiPageResult apiResult = new ApiPageResult(); var checkResult = Util.CheckParameters( new Parameter { Value = uid.ToString(), Msg = "uid 不能为空值" }, new Parameter { Value = uid.ToString(), Msg = "uid 必须是数字类型", Regex = @"^[1-9]\d*$" }, new Parameter { Value = zone_id.ToString(), Msg = "zone_id 不能为空值" }, new Parameter { Value = zone_id.ToString(), Msg = "zone_id 必须是数字类型", Regex = @"^[0-9]\d*$" } ); if (!checkResult.OK) { apiResult.success = false; apiResult.status = ApiStatusCode.InvalidParam; apiResult.message = checkResult.Msg; return(apiResult); } //查到当前默认开启的赛季 BaseBLL <competition_notice> notice_bll = new BaseBLL <competition_notice>(); var competion_season = notice_bll.Find(o => o.is_delete == 0 && o.is_open == 1); int competiontion_season_id = competion_season?.competition_season_id ?? 0; if (competiontion_season_id == 0) { return(new ApiPageResult() { success = false, message = "当前没有开启任何赛季" }); } ArticleBLL bll = new ArticleBLL(); return(bll.GetArticleList(uid, zone_id, competiontion_season_id, keyword, pageIndex, pageSize)); }
/// <summary> /// 我的作品(默认当前开启的赛季的作品) /// </summary> /// <param name="uid"></param> /// <param name="img_count">取几个头像</param> /// <param name="competiontion_season_id">赛季id,没有就不传</param> /// <returns></returns> public ApiResult GetMyArticle(int uid, int img_count = 4, int competiontion_season_id = 0) { ApiResult apiResult = new ApiResult(); //查到当前默认开启的赛季 BaseBLL <competition_notice> notice_bll = new BaseBLL <competition_notice>(); var competion_season = notice_bll.Find(o => o.is_delete == 0 && o.is_open == 1); competiontion_season_id = competion_season?.competition_season_id ?? 0; if (competiontion_season_id == 0) { return(new ApiResult() { success = false, message = "当前没有开启任何赛季" }); } UsersBLL bll = new UsersBLL(); return(bll.GetMyArticle(uid, img_count, competiontion_season_id)); }
/// <summary> /// 作品管理查询 /// </summary> /// <param name="keyword">查询的关键字:作品编号/标题/作者</param> /// <param name="state">-1全部,0初始,1审核不通过,2审核通过,3半决赛,4决赛</param> /// <param name="zone_id">0全部</param> /// <param name="start">开始时间</param> /// <param name="end">结束时间</param> /// <param name="orderby">排序字段:vote按票数顺序排,votedesc按票数倒叙排,date按投稿时间顺序排,datedesc按投稿时间倒叙排</param> /// <param name="pageIndex">1</param> /// <param name="pageSize">10</param> /// <returns></returns> public ApiPageResult GetArticleList(string keyword = null, int state = -1, int zone_id = 0, DateTime?start = null, DateTime?end = null, string orderby = null, int pageIndex = GloabManager.PAGEINDEX, int pageSize = GloabManager.PAGESIZE) { ApiPageResult apiResult = new ApiPageResult(); //赛季 BaseBLL <competition_notice> notice_bll = new BaseBLL <competition_notice>(); var notice = notice_bll.Find(o => o.is_delete == 0 && o.is_open == 1); if (notice?.competition_season_id > 0) { CompetitionBLL bll = new CompetitionBLL(); return(bll.GetArticleList(keyword, state, notice.competition_season_id, zone_id, start, end, orderby, pageIndex, pageSize)); } else { return(new ApiPageResult() { success = false, message = "当前没有开启的赛季" }); } }
/// <summary> /// 按照 id 删除通知 /// </summary> /// <param name="notice_id">通知的 id</param> /// <returns></returns> public ApiResult DelNotice(int notice_id) { ApiResult apiResult = new ApiResult(); BaseBLL <user_notice> bll = new BaseBLL <user_notice>(); var notice = bll.Find(n => n.notice_id == notice_id); if (notice == null) { apiResult.success = false; apiResult.message = "不存在该通知"; return(apiResult); } else { var success = bll.Delete(notice); apiResult.success = success; apiResult.message = success ? "成功" : "删除失败"; } return(apiResult); }
/// <summary> /// 作品打分 /// </summary> /// <param name="article_id"></param> /// <param name="score">分数</param> /// <param name="name">专家名字</param> /// <param name="sign">0是编辑,1是专家</param> /// <returns></returns> public ApiResult AddScore(int article_id, double score, string name, int sign = 0) { ApiResult apiResult = new ApiResult(); BaseBLL <article_states> state_bll = new BaseBLL <article_states>(); var article_states = state_bll.Find(o => o.article_id == article_id); if (article_states == null) { return(new ApiResult() { success = false, message = "数据不存在" }); } if (sign == 0) { article_states.adviser_score = score; article_states.update_time = DateTime.Now; state_bll.Update(article_states); } else if (sign == 1) { article_states.expert_name = name; article_states.expert_score = score; article_states.update_time = DateTime.Now; state_bll.Update(article_states); } else { return(new ApiResult() { success = true, message = "参数错误" }); } apiResult.success = true; apiResult.message = "打分成功"; return(apiResult); }
public void ScanLogin() { BaseBLL <weixin_open> bll = new BaseBLL <weixin_open>(); var weixin_open = bll.Find(o => o.appid != null && o.secret != null); string appid = weixin_open.appid; string secret = weixin_open.secret; string server = Util.getServerPath(); string redirect_uri = System.Web.HttpUtility.UrlEncode("http://tg.zhiyin.cn/"); LogHelper.Info("redirect_uri:" + redirect_uri); string state = sys.getRandomCode(16); ////缓存state //HttpContext.Current.Session["weixin_login_state"] = state; WeixinOpenAPI api = new WeixinOpenAPI(appid, secret); LogHelper.Info(api.GetCode("登陆的code:" + redirect_uri, state)); string result = api.GetCode(redirect_uri, state); result = result.Replace("/connect/qrcode/", "https://open.weixin.qq.com/connect/qrcode/"); HttpContext.Current.Response.Write(result); HttpContext.Current.Response.End(); }
/// <summary> /// 获取现在是属于初赛还是半决赛还是决赛 /// </summary> /// <returns></returns> public ApiResult GetGetCompetition() { ApiResult apiResult = new ApiResult(); BaseBLL <competition_notice> competition_season_bll = new BaseBLL <competition_notice>(); var competition_season = competition_season_bll.Find(o => o.is_delete == 0 && o.is_open == 1); if (competition_season?.competition_season_id > 0) { DateTime now = DateTime.Now.Date; if (now <= competition_season.preliminaries_end_date) { apiResult.data = "初赛"; } else if (now >= competition_season.semifinals_start_date && now <= competition_season.semifinals_end_date) { apiResult.data = "半决赛"; } else if (now >= competition_season.final_start_date) { apiResult.data = "决赛"; } else { apiResult.data = "初赛"; } } else { return(new ApiResult() { success = false, message = "当前没有赛季" }); } apiResult.success = true; apiResult.message = "获取现在是属于初赛还是半决赛还是决赛"; return(apiResult); }
/// <summary> /// 生成公众号带参数的二维码 /// </summary> /// <param name="appid"></param> /// <param name="secret"></param> /// <param name="path"></param> /// <returns></returns> public static string CreateWeixinCode(string appid, string secret, string path) { BaseBLL <weixin> weixin_bll = new BaseBLL <weixin>(); var weixin = weixin_bll.Find(o => o.appid == appid && o.appsecret == secret); if (weixin == null) { return(null); } string access_token_time = Util.isNotNull(weixin.access_token_time) ? weixin.access_token_time.ToString() : ""; WeixinAPI api = new WeixinAPI(weixin.appid, weixin.appsecret, weixin.access_token, access_token_time); string url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + api.AccessToken; string post_data = Newtonsoft.Json.JsonConvert.SerializeObject(new { expire_seconds = 604800, action_name = "QR_STR_SCENE", action_info = new { scene = new { scene_str = path } } }); string result = HttpHelper.HttpPost(url, post_data); JObject obj = JObject.Parse(result); if (Util.isNotNull(obj["url"]) && Util.isNotNull(obj["ticket"])) { string ticket = obj["ticket"].ToString(); return(api.GetWeixinCode(ticket)); } return(null); }
public ApiResult AdviserLoginIn() { string user_name = HttpContext.Current.Request.Form["user_name"]; string password = HttpContext.Current.Request.Form["password"]; ApiResult apiResult = new ApiResult(); var checkResult = Util.CheckParameters( new Parameter { Value = user_name, Msg = "user_name 不能为空值" }, new Parameter { Value = password, Msg = "password 不能为空值" } ); if (!checkResult.OK) { apiResult.success = false; apiResult.status = ApiStatusCode.InvalidParam; apiResult.message = checkResult.Msg; return(apiResult); } BaseBLL <adviser> bll = new BaseBLL <adviser>(); var adviser = bll.Find(o => o.user_name == user_name && o.password == password); if (adviser?.adviser_id > 0) { apiResult.success = true; apiResult.message = "登陆成功"; apiResult.data = adviser; } else { apiResult.success = false; apiResult.message = "登陆失败"; } return(apiResult); }
/// <summary> /// 录入个人信息 /// </summary> /// <param name="data"> /// {"author_info_id":0,"uid":1,"user_name":"xxx","sex":"男","area":"xxx","school":"xxxx","grade":"一年级","age":9,"phone":"1234567","teacher":"xxx","idcard":"2424242424242424242424242424"} /// </param> /// <returns></returns> public ApiResult AddUserInfo(dynamic data) { ApiResult apiResult = new ApiResult(); LogHelper.Info("录入个人信息data:" + data); if (Util.isNotNull(data)) { LogHelper.Info("录入个人信息data:" + Newtonsoft.Json.JsonConvert.SerializeObject(data)); string json = Newtonsoft.Json.JsonConvert.SerializeObject(data); var user = Newtonsoft.Json.JsonConvert.DeserializeObject <author_info>(json); if (user == null || user.uid == 0) { return(new ApiResult() { success = false, message = "参数错误" }); } string idcrad = user?.idcard; if (Util.isNull(idcrad) || !System.Text.RegularExpressions.Regex.IsMatch(user.idcard, @"(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)")) { return(new ApiResult() { success = false, message = "身份证输入不合法" }); } BaseBLL <author_info> bll = new BaseBLL <author_info>(); if (user.author_info_id > 0) { var _user = bll.Find(o => o.author_info_id == user.author_info_id); if (_user?.author_info_id > 0) { user.update_time = DateTime.Now; user.create_time = _user.create_time; user.uid = _user.uid; bll.Update(user); } else { return(new ApiResult() { success = false, message = "修改失败" }); } } else { user.create_time = DateTime.Now; user.update_time = DateTime.Now; bll.Add(user); } apiResult.success = true; apiResult.message = "成功"; } else { apiResult.success = false; apiResult.message = "参数错误"; } return(apiResult); }
public ApiResult WeixinLogin(dynamic data) { ApiResult apiResult = new ApiResult(); var checkResult = Util.CheckParameters( new Parameter { Value = data?.code, Msg = "code不能为空" }, new Parameter { Value = data?.userinfo.ToString(), Msg = "userInfo不能为空" }, new Parameter { Value = data?.appcode, Msg = "appcode不能为空!" } ); if (!checkResult.OK) { apiResult.success = false; apiResult.status = ApiStatusCode.InvalidParam; apiResult.message = checkResult.Msg; return(apiResult); } try { //根据code查找APPID与Secret,获取微信session、openid和unionid string appcode = data.appcode.ToString(); BaseBLL <weixin_applet> weixinAppletBll = new BaseBLL <weixin_applet>(); weixin_applet weixinApplet = weixinAppletBll.Find(x => x.appcode == appcode); WeixinXAPI weixinxapi = new WeixinXAPI(weixinApplet.appid, weixinApplet.secret); string str = weixinxapi.codeToSession(data.code.ToString()); JObject session_json = JObject.Parse(str); if (session_json["errcode"].To <string>().IsNotNullAndEmpty()) { apiResult.success = false; apiResult.status = ApiStatusCode.NotFound; apiResult.message = str; return(apiResult); } string openid = session_json["openid"].ToString(); string session_key = session_json["session_key"].ToString(); string unionid = session_json["unionid"].To <string>(); if (StringHelper.IsNullOrEmpty(unionid) && !StringHelper.IsNullOrEmpty(data?.encryptedData) && !StringHelper.IsNullOrEmpty(data?.iv)) { string info = DEncrypt.XCXDecrypt(data?.encryptedData.ToString(), session_key, data?.iv.ToString()); JObject userInfoJson = JObject.Parse(info); unionid = userInfoJson["unionId"].To <string>(); } weixin_user userInfo = new weixin_user { openid = openid, unionid = unionid, nickname = data.userinfo["nickName"], sex = data.userinfo["gender"], language = data.userinfo["language"], city = data.userinfo["city"], province = data.userinfo["province"], country = data.userinfo["country"], headimgurl = data.userinfo["avatarUrl"], source_code = appcode, weixin_applet_id = weixinApplet.id }; if (Util.isNotNull(userInfo.unionid)) { //查询当前openid的用户是否存在 //如果不存在则要创建,创建时,先创建 iuser ,再创建 weixin_user BaseBLL <weixin_user> weixinUserBll = new BaseBLL <weixin_user>(); var weixinUser = weixinUserBll.Find(x => x.unionid == unionid); bool first_login = false; //可能是第一次登陆,在网页端登陆 if (weixinUser == null) { //微信开发平台的openid与小程序的openid不一致 first_login = true; //先存iuser var iuser = new iuser(); BaseBLL <iuser> iuserBll = new BaseBLL <iuser>(); iuser.random = sys.getRandomStr(); iuser.createtime = DateTime.Now; iuser.updatetime = DateTime.Now; iuser = iuserBll.Add(iuser); //再存weixin_user userInfo.uid = iuser.id; userInfo.sub_time = DateTime.Now; userInfo.first_sub_time = DateTime.Now; LogHelper.Info("first_login:"******",userInfo:" + Newtonsoft.Json.JsonConvert.SerializeObject(userInfo)); weixinUser = weixinUserBll.Add(userInfo); } else { weixinUser.nickname = userInfo.nickname; weixinUser.headimgurl = userInfo.headimgurl; LogHelper.Info("first_login:"******",userInfo:" + Newtonsoft.Json.JsonConvert.SerializeObject(userInfo)); weixinUserBll.Update(weixinUser); } apiResult.success = true; apiResult.data = new { first_login = first_login, weixinUser = weixinUser }; apiResult.status = ApiStatusCode.OK; } else { return(new ApiResult() { success = false, message = "unionid不能为空,小程序必须绑定开放平台" }); } } catch (Exception ex) { LogHelper.Error(ex.Message, ex); apiResult.success = false; apiResult.status = ApiStatusCode.Error; } return(apiResult); }
/// <summary> /// 上传作品(一个赛季/一个人只能有一份作品)(必须在作品征集时间段内上传) /// formdata:"article_id":0,"article_title":"xxxx","uid":1,"","article_content":"xxxxx","article_pic":"图片","zone_id"(赛区):1,"competiontion_season_id"(赛季):1 /// </summary> /// <returns></returns> public ApiResult UploadArticle() { ApiResult apiResult = new ApiResult(); #region 参数检测 //var pic = System.Web.HttpContext.Current.Request.Files[0]; var _article_pic = System.Web.HttpContext.Current.Request.Form["article_pic"]; string _article_id = System.Web.HttpContext.Current.Request.Form["article_id"]; string _article_title = System.Web.HttpContext.Current.Request.Form["article_title"]; string _uid = System.Web.HttpContext.Current.Request.Form["uid"]; string _article_content = System.Web.HttpContext.Current.Request.Form["article_content"]; string _zone_id = System.Web.HttpContext.Current.Request.Form["zone_id"]; string _competiontion_season_id = System.Web.HttpContext.Current.Request.Form["competiontion_season_id"]; LogHelper.Info("zone_id:" + _zone_id); //一个赛季,一个作者,只能有一份作品 var checkResult = Util.CheckParameters( new Parameter { Value = _zone_id, Msg = "zone_id 不能为空值" }, new Parameter { Value = _zone_id, Msg = "zone_id 必须是数字类型", Regex = @"^[1-9]\d*$" }, new Parameter { Value = _uid, Msg = "uid 不能为空值" }, new Parameter { Value = _uid, Msg = "uid 必须是数字类型", Regex = @"^[1-9]\d*$" }, new Parameter { Value = _article_title, Msg = "article_title 不能为空值" }, new Parameter { Value = _article_content, Msg = "article_content 不能为空值" } ); if (!checkResult.OK) { apiResult.success = false; apiResult.status = ApiStatusCode.InvalidParam; apiResult.message = checkResult.Msg; return(apiResult); } int uid = int.Parse(_uid); int zone_id = int.Parse(_zone_id); int article_id = int.Parse(_article_id); #endregion #region 赛季检查 //开启的赛季 int competiontion_season_id = 0; if (Util.isNotNull(_competiontion_season_id)) { competiontion_season_id = int.Parse(_competiontion_season_id); } else { //查到当前默认开启的赛季 BaseBLL <competition_notice> notice_bll = new BaseBLL <competition_notice>(); var competion_season = notice_bll.Find(o => o.is_delete == 0 && o.is_open == 1); competiontion_season_id = competion_season?.competition_season_id ?? 0; //是否已过期 if (competion_season.preliminaries_start_date > DateTime.Now.Date) { return(new ApiResult() { success = false, message = "大赛投稿时间还没开始" }); } if (competion_season.preliminaries_end_date < DateTime.Now.Date) { return(new ApiResult() { success = false, message = "大赛投稿已截止" }); } } if (competiontion_season_id == 0) { return(new ApiResult() { success = false, message = "当前没有开启任何赛季" }); } #endregion ArticleBLL bll = new ArticleBLL(); BaseBLL <article_states> state_bll = new BaseBLL <article_states>(); BaseBLL <articles> article_bll = new BaseBLL <articles>(); if (article_id > 0) { //判断状态是否可修改 int article_state = state_bll.Find(o => o.article_id == article_id)?.article_state ?? 0; if (article_state > 1) { return(new ApiResult() { success = false, message = "当前状态不可修改" }); } #region 修改 var article = article_bll.Find(o => o.article_id == article_id); if (article?.article_id > 0) { //修改 article.article_pic = _article_pic ?? ""; article.article_title = _article_title; article.article_content = _article_content; article.create_time = DateTime.Now; article.update_time = DateTime.Now; if (article_bll.Update(article)) { //关联表更新 BaseBLL <article_competition_season> article_season_bll = new BaseBLL <article_competition_season>(); var article_competition_season = article_season_bll.Find(o => o.article_id == article_id); if (article_competition_season?.article_season_id > 0) { article_competition_season.zone_id = zone_id; article_competition_season.competiontion_season_id = competiontion_season_id; article_competition_season.update_time = DateTime.Now; article_season_bll.Update(article_competition_season); } //更新作品的状态 BaseBLL <article_states> states_bll = new BaseBLL <article_states>(); var article_states = states_bll.Find(o => o.article_id == article_id); if (article_states?.article_id > 0) { article_states.article_state = 0; article_states.return_remark = ""; article_states.return_tag = ""; article_states.update_time = DateTime.Now; states_bll.Update(article_states); } apiResult.success = true; apiResult.message = "修改成功"; } else { apiResult.success = false; apiResult.message = "修改失败"; } } else { apiResult.success = false; apiResult.message = "数据不存在"; } #endregion } else { #region 新增 //是否已存在 if (bll.ExistUserArticle(uid, competiontion_season_id)) { return(new ApiResult() { success = false, message = "您在当前赛季已经有一份作品了~" }); } articles article = new articles(); //后台自动生成 article.article_pic = _article_pic ?? ""; article.article_title = _article_title; article.article_content = _article_content; article.create_time = DateTime.Now; article.uid = uid; article.update_time = DateTime.Now; var result = article_bll.Add(article); if (result?.article_id > 0) { //更新编号 apiResult = bll.UploadAritcleNo(result); if (apiResult.success) { //更新关联表 BaseBLL <article_competition_season> article_season_bll = new BaseBLL <article_competition_season>(); article_season_bll.Add(new article_competition_season() { article_id = result.article_id, zone_id = zone_id, competiontion_season_id = competiontion_season_id, create_time = DateTime.Now, update_time = DateTime.Now, }); //更新状态表 state_bll.Add(new article_states() { article_id = result.article_id, article_state = 0, create_time = DateTime.Now, update_time = DateTime.Now, }); apiResult.success = true; apiResult.message = "保存成功"; } } else { apiResult.success = false; apiResult.message = "保存失败"; } #endregion } return(apiResult); }
/// <summary> /// 添加通知 /// </summary> /// <param name="data"> /// { /// "notice_id": 若大于零则为修改,小于零则为新增, /// "title": 通知标题, /// "content": 通知内容, /// "logo": 通知的 logo, /// "is_top": 0 不置顶,1 置顶, /// "publish_time": 发布时间,在该时间后才能查询到该通知,若不设置,则为当前时间 /// } /// </param> /// <returns></returns> public ApiResult AddNotice(dynamic data) { ApiResult apiResult = new ApiResult(); if (Util.isNotNull(data)) { string json = Newtonsoft.Json.JsonConvert.SerializeObject(data); var notice = Newtonsoft.Json.JsonConvert.DeserializeObject <user_notice>(json); BaseBLL <user_notice> bll = new BaseBLL <user_notice>(); if (notice?.notice_id > 0) { //如果是置顶,应先将之前置顶的数据取消 if (notice.is_top == 1) { var is_top_notices = bll.FindList <int>(o => o.is_top == 1); List <user_notice> is_top_notice_list = new List <user_notice>(); foreach (var _notice in is_top_notices) { _notice.is_top = 0; _notice.update_time = DateTime.Now; is_top_notice_list.Add(_notice); } bll.UpdateMore(is_top_notice_list); } // 修改 var findNotice = bll.Find(n => n.notice_id == notice.notice_id); if (findNotice == null) { apiResult.success = false; apiResult.message = "不存在该通知"; return(apiResult); } notice.create_time = findNotice.create_time; notice.update_time = DateTime.Now; bll.Update(notice); } else if (Util.isNotNull(notice)) { //如果是置顶,应先将之前置顶的数据取消 if (notice.is_top == 1) { var is_top_notices = bll.FindList <int>(o => o.is_top == 1); List <user_notice> is_top_notice_list = new List <user_notice>(); foreach (var _notice in is_top_notices) { _notice.is_top = 0; _notice.update_time = DateTime.Now; is_top_notice_list.Add(_notice); } bll.UpdateMore(is_top_notice_list); } // 新增 if (!notice.publish_time.HasValue) { notice.publish_time = DateTime.Now; } notice.create_time = DateTime.Now; notice.update_time = DateTime.Now; bll.Add(notice); } else { apiResult.success = false; apiResult.message = "参数错误"; return(apiResult); } } else { apiResult.success = false; apiResult.message = "参数错误"; } apiResult.success = true; apiResult.message = "成功"; return(apiResult); }
/// <summary> /// 根据条件查询数据库,并返回对象集合 /// </summary> /// <param name="condition">查询的条件</param> /// <returns>指定对象的集合</returns> public virtual List <T> Find(string condition) { return(baseBLL.Find(condition)); }
/// <summary> /// 回调函数 /// </summary> /// <param name="code">请求微信返回的code</param> /// <param name="state">请求微信的参数state</param> /// <returns></returns> public ApiResult LoginReturn(string code, string state) { ApiResult apiResult = new ApiResult(); LogHelper.Info("code:" + code + ",state:" + state); ////必须用cookie或者session //var session = HttpContext.Current.Session["session_weixin_login_state"]; //string session_state = session == null ? "" : session.ToString(); //string cookie_state = CookieHelper.GetCookieValue("cookie_weixin_login_state"); //LogHelper.Info("session_state:" + session_state + ",cookie_state:" + cookie_state); //if (state == _state) //{ BaseBLL <weixin_open> bll = new BaseBLL <weixin_open>(); var weixin_open = bll.Find(o => o.appid != null && o.secret != null); string appid = weixin_open.appid; string secret = weixin_open.secret; WeixinOpenAPI api = new WeixinOpenAPI(appid, secret); //string access_token = weixin_open.access_token; //string access_token_time = weixin_open.access_token_time == null ? "" : weixin_open.access_token_time.Value.ToString(); api.GetAccessToken(code); LogHelper.Info("access_token:" + api.access_token); string user_json = api.GetUserInfo(api.openid); LogHelper.Info("user_json:" + user_json); JObject obj = JObject.Parse(user_json); string openid = obj["openid"] == null ? "" : obj["openid"].ToString(); LogHelper.Info("openid:" + openid); BaseBLL <weixin_applet> weixinAppletBll = new BaseBLL <weixin_applet>(); weixin_applet weixinApplet = weixinAppletBll.Find(x => x.appcode == "ZHIYIN"); weixin_user userInfo = new weixin_user { openid = obj["openid"] == null ? "" : obj["openid"].ToString(), unionid = obj["unionid"] == null ? "" : obj["unionid"].ToString(), nickname = obj["nickname"] == null ? "" : obj["nickname"].ToString(), sex = obj["sex"] == null ? 0 : int.Parse(obj["sex"].ToString()), language = obj["language"] == null ? "" : obj["language"].ToString(), city = obj["city"] == null ? "" : obj["city"].ToString(), province = obj["province"] == null ? "" : obj["province"].ToString(), country = obj["country"] == null ? "" : obj["country"].ToString(), headimgurl = obj["headimgurl"] == null ? "" : obj["headimgurl"].ToString(), source_code = weixinApplet.appcode, weixin_applet_id = weixinApplet.id }; if (!Util.isNotNull(openid)) { return(new ApiResult() { success = false, message = "openid为空" }); } #region 微信登陆,保存信息 //如果不存在则要创建,创建时,先创建 iuser ,再创建 weixin_user bool first_login = false; BaseBLL <weixin_user> weixinUserBll = new BaseBLL <weixin_user>(); if (Util.isNotNull(userInfo.unionid)) { var weixinUser = weixinUserBll.Find(o => o.unionid == userInfo.unionid); //可能是第一次登陆,在网页端登陆 if (weixinUser == null) { //微信开发平台的openid与小程序的openid不一致 //var _weixin_user = weixinUserBll.Find(o => o.nickname == userInfo.nickname); first_login = true; //先存iuser var iuser = new iuser(); BaseBLL <iuser> iuserBll = new BaseBLL <iuser>(); iuser.random = sys.getRandomStr(); iuser.createtime = DateTime.Now; iuser.updatetime = DateTime.Now; iuser = iuserBll.Add(iuser); //再存weixin_user userInfo.uid = iuser.id; userInfo.sub_time = DateTime.Now; userInfo.first_sub_time = DateTime.Now; LogHelper.Info("first_login:"******",userInfo:" + Newtonsoft.Json.JsonConvert.SerializeObject(userInfo)); weixinUser = weixinUserBll.Add(userInfo); } else { weixinUser.nickname = userInfo.nickname; weixinUser.headimgurl = userInfo.headimgurl; LogHelper.Info("first_login:"******",userInfo:" + Newtonsoft.Json.JsonConvert.SerializeObject(userInfo)); weixinUserBll.Update(weixinUser); } apiResult.success = true; apiResult.data = new { first_login = first_login, weixinUser = weixinUser }; apiResult.status = ApiStatusCode.OK; } else { return(new ApiResult() { success = false, message = "微信开发平台未获取到unionid" }); } #endregion //} //else //{ // return new ApiResult() // { // success = false, // message = "请求超时" // }; //} return(apiResult); }
/// <summary> /// 生成小程序码(圆形) /// </summary> /// <param name="path">地址</param> /// <param name="appcode">小程序标识</param> /// <returns></returns> public static string CreateCircleWxaCodeByPath(string path, string appcode) { string img_path = string.Empty; BaseBLL <weixin_applet> appBLL = new BaseBLL <weixin_applet>(); weixin_applet app = appBLL.Find(x => x.appcode == appcode); string code_name = app.applet_name; string code_desc = $"{app.applet_name}小程序码"; //1、进入首先记录调用情况 //2、根据path去搜索,如果找到则返回没找到继续执行 //3、生成小程序图片上传到服务器 //4、存入数据库 #region 记录调用情况 BaseBLL <weixin_applet_log> logBLL = new BaseBLL <weixin_applet_log>(); weixin_applet_log log = new weixin_applet_log(); log.appcode = appcode; log.title = "后台生成小程序码WeiXinHelper.CreateCircleWxaCodeByPath"; log.ip = Util.GetUserIp(); log.createtime = DateTime.Now; log.request_url = System.Web.HttpContext.Current.Request.RawUrl; log.info = $"接口参数为:path:{path},appcode:{appcode}"; logBLL.Add(log); #endregion //2、根据path去搜索,如果找到则返回没找到继续执行 BaseBLL <weixin_applet_code> appCodeBLL = new BaseBLL <weixin_applet_code>(); weixin_applet_code appletCode = appCodeBLL.Find(x => x.xcx_url == path && x.weixin_applet_id == app.id && x.code_type == 2); if (appletCode != null) { img_path = appletCode.img_path; } else { //3、生成小程序图片上传到服务器 WeixinXAPI weixinApi = new WeixinXAPI(app.appid, app.secret, app.access_token, app.access_token_time?.ToString() ?? "", app.id); if (weixinApi.rootSuccess) { string imgpath = weixinApi.CreateWxaCode(path); if (!string.IsNullOrEmpty(imgpath)) { //4、存入数据库 #region 存入数据库 var newAppCode = new weixin_applet_code { code_name = code_name, code_desc = code_desc, weixin_applet_id = app.id, create_time = DateTime.Now, random = sys.getRandomStr(), img_path = imgpath, is_delete = 0, xcx_url = path, code_type = 2 }; appCodeBLL.Add(newAppCode); #endregion } img_path = imgpath; } } return(img_path); }