using Learun.Application.Organization; using Learun.Application.TwoDevelopment.EducationalAdministration; using Learun.Application.TwoDevelopment.LR_Desktop; using Learun.Util; using Learun.Util.Operat; using Microsoft.AspNet.SignalR.Client; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; namespace Learun.Application.Web.Areas.EducationalAdministration.Controllers { /// /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园 /// Copyright (c) 2013-2018 北京泉江科技有限公司 /// 创 建:超级管理员 /// 日 期:2019-02-27 11:05 /// 描 述:排课 /// public class ArrangeLessonTermController : MvcControllerBase { private ArrangeLessonTermIBLL arrangeLessonTermIBLL = new ArrangeLessonTermBLL(); private Sys_InformationPushIBLL sys_InformationPushIBLL = new Sys_InformationPushBLL(); private UserIBLL userIbll = new UserBLL(); private WeChatConfigIBLL weChatConfigIbll = new WeChatConfigBLL(); private WeChatTempletIBLL weChatTempletIbll = new WeChatTempletBLL(); #region 视图功能 /// /// 主页面 /// /// [HttpGet] public ActionResult Index() { return View(); } /// /// 表单页 /// /// [HttpGet] public ActionResult Form() { return View(); } /// /// 按条件清空排课数据 /// /// [HttpGet] public ActionResult EmptyByConditionForm() { return View(); } /// /// 按条件同步排课数据 /// /// [HttpGet] public ActionResult SyncByConditionForm() { return View(); } [HttpGet] public ActionResult ClearByConditionForm() { return View(); } #endregion #region 获取数据 /// /// 获取列表数据 /// /// [HttpGet] [AjaxOnly] public ActionResult GetList(string queryJson) { var data = arrangeLessonTermIBLL.GetList(queryJson).ToList() .OrderBy(x => x.AcademicYearNo).ThenBy(x => x.Semester).ThenBy(x => x.DeptNo).ThenBy(x => x.MajorNo).ThenBy(x => x.LessonNo).ThenBy(x => x.TeachClassNo.Replace(x.LessonName, "")).ThenBy(x => x.EmpNo).ThenBy(x => x.ClassroomNo).ThenBy(x => x.LessonDate); return Success(data); } /// /// 获取列表分页数据 /// 分页参数 /// /// [HttpGet] [AjaxOnly] public ActionResult GetPageList(string pagination, string queryJson) { Pagination paginationobj = pagination.ToObject(); var data = arrangeLessonTermIBLL.GetPageList(paginationobj, queryJson); var jsonData = new { rows = data, total = paginationobj.total, page = paginationobj.page, records = paginationobj.records }; return Success(jsonData); } /// /// 获取表单数据 /// 主键 /// /// [HttpGet] [AjaxOnly] public ActionResult GetFormData(string keyValue) { var data = arrangeLessonTermIBLL.GetEntity(keyValue); return Success(data); } /// /// 获取调度时间数据 /// /// [HttpGet] [AjaxOnly] public ActionResult GetLessonDateList(string queryJson) { var data = arrangeLessonTermIBLL.GetList(queryJson).Where(x => x.LessonDate.HasValue).Select(x => x.LessonDate).Distinct().Select(x => new { text = x, value = x }).OrderBy(x => x.value); return Success(data); } #endregion #region 提交数据 /// /// 删除实体数据 /// 主键 /// /// [HttpPost] [AjaxOnly] public ActionResult DeleteForm(string keyValue) { arrangeLessonTermIBLL.DeleteEntity(keyValue); return Success("删除成功!"); } /// /// 保存实体数据(新增、修改) /// 主键 /// /// [HttpPost] [ValidateAntiForgeryToken] [AjaxOnly] public ActionResult SaveForm(string keyValue, ArrangeLessonTermEntity entity) { arrangeLessonTermIBLL.SaveEntity(keyValue, entity); return Success("保存成功!"); } #endregion /// /// 当前学期排课数据同步 /// /// [HttpGet] [AjaxOnly] public async Task AsyncArrangeLessonData() { var data = await arrangeLessonTermIBLL.AsyncArrangeLessonData(); return Success(data); } /// /// 清空当前学期排课数据 /// /// [HttpGet] [AjaxOnly] public async Task AsyncModifyArrangeLessonData() { var data = await arrangeLessonTermIBLL.AsyncModifyArrangeLessonData(); return Success(data); } /// /// 按条件清空排课数据 /// /// [HttpPost] [AjaxOnly] public async Task AsyncModifyArrangeLessonDataByCondition(ArrangeLessonTermEntity entity) { var data = await arrangeLessonTermIBLL.AsyncModifyArrangeLessonDataByCondition(entity); return Success(data); } /// /// 按条件同步排课数据 /// /// [HttpPost] [AjaxOnly] public async Task AsyncArrangeLessonDataByCondition(ArrangeLessonTermEntity entity) { var data = await arrangeLessonTermIBLL.AsyncArrangeLessonDataByCondition(entity); if (data) { //读取信息推送管理-课表同步推送(09)的配置 var informationPushEntity = sys_InformationPushIBLL.GetEntityByPushItem("09"); if (informationPushEntity != null && informationPushEntity.Status == true) { var title = string.Format("{0}学年第{1}学期必修课课表同步", entity.AcademicYearNo, entity.Semester); var needpostuserlist = userIbll.GetAllList().Where(m => m.F_DeleteMark != 1 && m.F_EnabledMark == 1 && m.F_Description == "教师").ToList(); //微信推送 try { PushWeixin(needpostuserlist, title); } catch (Exception e) { } //飞星推送 await Task.Run(async () => { using (var hubConnection = new HubConnection(ConfigurationManager.AppSettings["CommunicationServeraddress"])) { var hubProxy = hubConnection.CreateHubProxy("SignalRHub"); await hubConnection.Start(); await hubProxy.Invoke("PushAnnouncement", LoginUserInfo.Get().userId, "课表同步", Util.Str.ReplaceHtml(HttpUtility.HtmlDecode(title)).Length < 20 ? Util.Str.ReplaceHtml(HttpUtility.HtmlDecode(title)) : Util.Str.ReplaceHtml(HttpUtility.HtmlDecode(title)).Substring(0, 20), "synclesson", string.Join(",", needpostuserlist.Select(m => m.F_UserId)), ""); } }); } } return Success(data); } /// /// 按条件重置基础数据同步状态 /// /// /// [HttpPost] [AjaxOnly] public ActionResult InitAsyncDataByCondition(ArrangeLessonTermEntity entity) { var data = arrangeLessonTermIBLL.InitAsyncDataByCondition(entity); return Success(data); } public void PushWeixin(List needpostuserlist, string title) { var WeChatConfigentity = weChatConfigIbll.GetEnableEntity(); string appid = WeChatConfigentity.APPId; string secret = WeChatConfigentity.secret; var wechatemplete = weChatTempletIbll.GetWeChatTemplateEntityByCodeConfigId(WeChatConfigentity.ID, "task"); string weixintaskurl = wechatemplete.TUrl; string weixintasktempid = wechatemplete.TempId; var responsejson = Util.HttpMethods.HttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret); OperateLogModel operateLogModel = new OperateLogModel(); operateLogModel.title = title; operateLogModel.type = OperationType.Other; operateLogModel.url = "ArrangeLessonTermController"; operateLogModel.sourceObjectId = "002"; operateLogModel.sourceContentJson = responsejson; OperatorHelper.Instance.WriteOperateLog(operateLogModel); foreach (UserEntity userinfo in needpostuserlist) { if (userinfo != null && !string.IsNullOrEmpty(userinfo.OpenIdForWeixin)) { //执行推送任务 if (!string.IsNullOrEmpty(appid) && !string.IsNullOrEmpty(secret) && !string.IsNullOrEmpty(weixintaskurl) && !string.IsNullOrEmpty(weixintasktempid)) { if (!string.IsNullOrEmpty(responsejson)) { var weixintokenobj = JsonConvert.DeserializeObject(responsejson); if (string.IsNullOrEmpty(weixintokenobj.errcode)) { string access_token = weixintokenobj.access_token; string jsondata = "{\"touser\":\"" + userinfo.OpenIdForWeixin + "\"," + "\"template_id\":\"" + weixintasktempid + "\"," + "\"url\":\"" + weixintaskurl + "\"," + "\"data\":{" + "\"first\": {\"value\":\"您有新的课表同步\",\"color\":\"#173177\"}," + "\"keyword1\":{\"value\":\"课表同步\",\"color\":\"#173177\"}," + "\"keyword2\": {\"value\":\"" + title + "\",\"color\":\"#173177\"}," + "\"keyword3\": {\"value\":\"待查看\",\"color\":\"#173177\"}," + "\"keyword4\": {\"value\":\"您有新的课表同步【" + title + "】\",\"color\":\"#173177\"}" + "}" + "}"; string pushresult = Util.HttpMethods.HttpPost("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token, jsondata); operateLogModel.title = title; operateLogModel.type = OperationType.Other; operateLogModel.url = "ArrangeLessonTermController"; operateLogModel.sourceObjectId = "002"; operateLogModel.sourceContentJson = pushresult; OperatorHelper.Instance.WriteOperateLog(operateLogModel); } } } } } } } }