You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

906 lines
47 KiB

  1. using Dapper;
  2. using Learun.DataBase.Repository;
  3. using Learun.Util;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Linq;
  9. using System.Net.Http;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace Learun.Application.TwoDevelopment.EducationalAdministration
  13. {
  14. /// <summary>
  15. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  16. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  17. /// 创 建:超级管理员
  18. /// 日 期:2019-05-14 09:49
  19. /// 描 述:选修课排课
  20. /// </summary>
  21. public class ArrangeLessonTermOfElectiveService : RepositoryFactory
  22. {
  23. private static readonly HttpClient Client;
  24. static ArrangeLessonTermOfElectiveService()
  25. {
  26. Client = new HttpClient();
  27. }
  28. #region 获取数据
  29. /// <summary>
  30. /// 获取页面显示列表数据
  31. /// <summary>
  32. /// <param name="queryJson">查询参数</param>
  33. /// <returns></returns>
  34. public IEnumerable<ArrangeLessonTermOfElectiveEntity> GetPageList(Pagination pagination, string queryJson)
  35. {
  36. try
  37. {
  38. var strSql = new StringBuilder();
  39. strSql.Append("SELECT ");
  40. strSql.Append(@"
  41. t.Id,
  42. t.PaiKeId,
  43. t.LessonDate,
  44. t.AcademicYearNo,
  45. t.Semester,
  46. t.LessonNo,
  47. t.LessonName,
  48. t.LessonSortNo,
  49. t.LessonSection,
  50. t.LessonTime,
  51. t.StudyScore,
  52. t.EmpNo,
  53. t.EmpName,
  54. t.ClassRoomNo,
  55. t.ClassRoomName,
  56. t.CheckMark
  57. ");
  58. strSql.Append(" FROM ArrangeLessonTermOfElective t ");
  59. strSql.Append(" WHERE 1=1 ");
  60. var queryParam = queryJson.ToJObject();
  61. // 虚拟参数
  62. var dp = new DynamicParameters(new { });
  63. return this.BaseRepository("CollegeMIS").FindList<ArrangeLessonTermOfElectiveEntity>(strSql.ToString(), dp, pagination);
  64. }
  65. catch (Exception ex)
  66. {
  67. if (ex is ExceptionEx)
  68. {
  69. throw;
  70. }
  71. else
  72. {
  73. throw ExceptionEx.ThrowServiceException(ex);
  74. }
  75. }
  76. }
  77. /// <summary>
  78. /// 获取ArrangeLessonTermOfElective表实体数据
  79. /// <param name="keyValue">主键</param>
  80. /// <summary>
  81. /// <returns></returns>
  82. public ArrangeLessonTermOfElectiveEntity GetArrangeLessonTermOfElectiveEntity(string keyValue)
  83. {
  84. try
  85. {
  86. return this.BaseRepository("CollegeMIS").FindEntity<ArrangeLessonTermOfElectiveEntity>(keyValue);
  87. }
  88. catch (Exception ex)
  89. {
  90. if (ex is ExceptionEx)
  91. {
  92. throw;
  93. }
  94. else
  95. {
  96. throw ExceptionEx.ThrowServiceException(ex);
  97. }
  98. }
  99. }
  100. #endregion
  101. #region 提交数据
  102. /// <summary>
  103. /// 删除实体数据
  104. /// <param name="keyValue">主键</param>
  105. /// <summary>
  106. /// <returns></returns>
  107. public void DeleteEntity(string keyValue)
  108. {
  109. try
  110. {
  111. this.BaseRepository("CollegeMIS").Delete<ArrangeLessonTermOfElectiveEntity>(t => t.Id == keyValue);
  112. }
  113. catch (Exception ex)
  114. {
  115. if (ex is ExceptionEx)
  116. {
  117. throw;
  118. }
  119. else
  120. {
  121. throw ExceptionEx.ThrowServiceException(ex);
  122. }
  123. }
  124. }
  125. /// <summary>
  126. /// 保存实体数据(新增、修改)
  127. /// <param name="keyValue">主键</param>
  128. /// <summary>
  129. /// <returns></returns>
  130. public void SaveEntity(string keyValue, ArrangeLessonTermOfElectiveEntity entity)
  131. {
  132. try
  133. {
  134. if (!string.IsNullOrEmpty(keyValue))
  135. {
  136. entity.Modify(keyValue);
  137. this.BaseRepository("CollegeMIS").Update(entity);
  138. }
  139. else
  140. {
  141. entity.Create();
  142. this.BaseRepository("CollegeMIS").Insert(entity);
  143. }
  144. }
  145. catch (Exception ex)
  146. {
  147. if (ex is ExceptionEx)
  148. {
  149. throw;
  150. }
  151. else
  152. {
  153. throw ExceptionEx.ThrowServiceException(ex);
  154. }
  155. }
  156. }
  157. #endregion
  158. #region 扩展数据
  159. /// <summary>
  160. /// 按条件同步选修排课系统数据
  161. /// </summary>
  162. /// <returns></returns>
  163. public async Task<bool> AsyncArrangeLessonOfElectiveDataByCondition(ArrangeLessonTermOfElectiveEntity entity)
  164. {
  165. bool result = false;
  166. try
  167. {
  168. HttpContent httpContent = new StringContent("{\"school\":\"" + entity.F_SchoolId + "\",\"year\":\"" + entity.AcademicYearNo + "\",\"number\":\"" + entity.Semester + "\"}");
  169. httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
  170. string apiData = await Client.PostAsync(Config.GetValue("ArrangeLessonOfElectiveAPI"), httpContent).Result.Content.ReadAsStringAsync();
  171. if (!string.IsNullOrEmpty(apiData))
  172. {
  173. var data = JsonConvert.DeserializeObject<Root>(apiData);
  174. if (!data.success)
  175. {
  176. return result;
  177. }
  178. var dataList = data.entity.list;
  179. if (dataList.Any())
  180. {
  181. //ArrangeLessonTermOfElective数据处理
  182. var insertDataList = new List<ArrangeLessonTermOfElectiveEntity>();
  183. var lessonData = (await BaseRepository("CollegeMIS").FindListAsync<LessonInfoEntity>()).ToList();
  184. var oldArrangeLessonTermOfElectiveDataList = BaseRepository("CollegeMIS")
  185. .FindList<ArrangeLessonTermOfElectiveEntity>(m => m.F_SchoolId == entity.F_SchoolId
  186. && m.AcademicYearNo == entity.AcademicYearNo && m.Semester == entity.Semester).ToList();
  187. foreach (var item in dataList)
  188. {
  189. if (!string.IsNullOrEmpty(item.paike.timeText))
  190. {
  191. foreach (var lessontime in item.paike.timeText.TrimEnd(',').Split(','))
  192. {
  193. var insertData = new ArrangeLessonTermOfElectiveEntity
  194. {
  195. Id = Guid.NewGuid().ToString(),
  196. PaiKeId = item.paike.id,
  197. LessonDate = DateTime.Parse(lessontime),
  198. AcademicYearNo = item.paike.year,
  199. Semester = item.paike.number,
  200. LessonNo = item.paike.curriculunNumber,
  201. LessonName = item.paike.curriculunName,
  202. LessonSortNo = "2",
  203. LessonTime = (item.paike.section == "7" ? "16:20-17:05" : "17:15-18:00"),
  204. LessonSection = item.paike.week + item.paike.section,
  205. StudyScore = lessonData.FirstOrDefault(x => x.LessonNo == item.paike.curriculunNumber)?.StudyScore,
  206. EmpNo = item.paike.teacherNumber,
  207. EmpName = item.paike.teacherName,
  208. ClassRoomNo = item.paike.classRoomNumber,
  209. ClassRoomName = item.paike.classRoomName,
  210. F_SchoolId = entity.F_SchoolId,
  211. CheckMark = "1"
  212. };
  213. if (oldArrangeLessonTermOfElectiveDataList.Count(m => m.AcademicYearNo == insertData.AcademicYearNo
  214. && m.Semester == insertData.Semester && m.LessonNo == insertData.LessonNo
  215. && m.LessonSection == insertData.LessonSection && m.EmpNo == insertData.EmpNo
  216. && m.ClassRoomNo == insertData.ClassRoomNo) == 0)
  217. {
  218. insertDataList.Add(insertData);
  219. }
  220. }
  221. }
  222. }
  223. var insertResult = await BaseRepository("CollegeMIS").InsertAsync(insertDataList);
  224. //OpenLessonPlanOfElective数据处理
  225. var strAcademicYear = entity.AcademicYearNo;
  226. var strSemester = entity.Semester;
  227. var schoolId = entity.F_SchoolId;
  228. var ArrangeLessonTermOfElectiveData = (await BaseRepository("CollegeMIS").FindListAsync<ArrangeLessonTermOfElectiveEntity>(@"select * from ArrangeLessonTermOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "' and F_SchoolId='" + schoolId + "'")).ToList();
  229. var arrangeLessonTermData = (await BaseRepository("CollegeMIS").FindListAsync<ArrangeLessonTermOfElectiveEntity>(@"select PaiKeId,AcademicYearNo,Semester,LessonNo,LessonName,LessonSection,EmpNo,EmpName,ClassRoomNo,ClassRoomName,F_SchoolId from ArrangeLessonTermOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "' and F_SchoolId='" + schoolId + "' group by PaiKeId, AcademicYearNo, Semester, LessonNo, LessonName, LessonSection, EmpNo, EmpName, ClassRoomNo, ClassRoomName,F_SchoolId ")).ToList();
  230. var OpenLessonPlanOfElectiveData = (await BaseRepository("CollegeMIS").FindListAsync<OpenLessonPlanOfElectiveEntity>(@"select * from OpenLessonPlanOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "' and F_SchoolId='" + schoolId + "'")).ToList();
  231. var insertOpenLessonPlanOfElectiveDataList = new List<OpenLessonPlanOfElectiveEntity>();
  232. if (arrangeLessonTermData.Any())
  233. {
  234. foreach (var item in arrangeLessonTermData)
  235. {
  236. var insertOpenLessonPlanOfElectiveData = new OpenLessonPlanOfElectiveEntity()
  237. {
  238. Id = item.PaiKeId,
  239. MakeDate = DateTime.Now,
  240. AcademicYearNo = item.AcademicYearNo,
  241. Semester = item.Semester,
  242. LessonNo = item.LessonNo,
  243. PartCode = "",
  244. LessonName = item.LessonName,
  245. LessonSortNo = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.LessonSortNo,
  246. LessonSortDetailNo = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.LessonSortDetailNo,
  247. LessonSection = item.LessonSection,
  248. LessonTime = ArrangeLessonTermOfElectiveData.FirstOrDefault(x => x.PaiKeId == item.PaiKeId)?.LessonTime,
  249. StudyScore = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.StudyScore,
  250. StartWeek = 1,
  251. EndWeek = ArrangeLessonTermOfElectiveData.Count(x => x.PaiKeId == item.PaiKeId),
  252. StartDate = ArrangeLessonTermOfElectiveData.Where(x => x.PaiKeId == item.PaiKeId).OrderBy(x => x.LessonDate).FirstOrDefault()?.LessonDate,
  253. EndDate = ArrangeLessonTermOfElectiveData.Where(x => x.PaiKeId == item.PaiKeId).OrderBy(x => x.LessonDate).LastOrDefault()?.LessonDate,
  254. CheckStyleNo = "1",
  255. ScoreRecordStyleNo = "1",
  256. EmpNo = item.EmpNo,
  257. EmpName = item.EmpName,
  258. ClassRoomNo = item.ClassRoomNo,
  259. ClassRoomName = item.ClassRoomName,
  260. CheckMark = "1",
  261. StuNumMax = 0,
  262. StuNum = 0,
  263. F_SchoolId = item.F_SchoolId
  264. };
  265. //非空判断
  266. if (OpenLessonPlanOfElectiveData.Count(x =>
  267. x.AcademicYearNo == insertOpenLessonPlanOfElectiveData.AcademicYearNo &&
  268. x.Semester == insertOpenLessonPlanOfElectiveData.Semester &&
  269. x.LessonNo == insertOpenLessonPlanOfElectiveData.LessonNo &&
  270. x.LessonSortNo == insertOpenLessonPlanOfElectiveData.LessonSortNo &&
  271. x.LessonSection == insertOpenLessonPlanOfElectiveData.LessonSection &&
  272. x.EmpNo == insertOpenLessonPlanOfElectiveData.EmpNo &&
  273. x.ClassRoomNo == insertOpenLessonPlanOfElectiveData.ClassRoomNo &&
  274. x.F_SchoolId == insertOpenLessonPlanOfElectiveData.F_SchoolId) == 0 && insertOpenLessonPlanOfElectiveDataList.Count(x =>
  275. x.AcademicYearNo == insertOpenLessonPlanOfElectiveData.AcademicYearNo &&
  276. x.Semester == insertOpenLessonPlanOfElectiveData.Semester &&
  277. x.LessonNo == insertOpenLessonPlanOfElectiveData.LessonNo &&
  278. x.LessonSortNo == insertOpenLessonPlanOfElectiveData.LessonSortNo &&
  279. x.LessonSection == insertOpenLessonPlanOfElectiveData.LessonSection &&
  280. x.EmpNo == insertOpenLessonPlanOfElectiveData.EmpNo &&
  281. x.ClassRoomNo == insertOpenLessonPlanOfElectiveData.ClassRoomNo &&
  282. x.F_SchoolId == insertOpenLessonPlanOfElectiveData.F_SchoolId) == 0)
  283. {
  284. if (BaseRepository("CollegeMIS").FindEntity<OpenLessonPlanOfElectiveEntity>(m => m.Id == insertOpenLessonPlanOfElectiveData.Id) == null
  285. && BaseRepository("CollegeMIS").FindEntity<OpenLessonPlanOfElectiveDelEntity>(m => m.Id == insertOpenLessonPlanOfElectiveData.Id) == null)
  286. {
  287. insertOpenLessonPlanOfElectiveDataList.Add(insertOpenLessonPlanOfElectiveData);
  288. }
  289. }
  290. }
  291. await BaseRepository("CollegeMIS").InsertAsync(insertOpenLessonPlanOfElectiveDataList);
  292. }
  293. if (insertResult > 0)
  294. {
  295. result = true;
  296. }
  297. }
  298. }
  299. }
  300. catch (Exception ex)
  301. {
  302. if (ex is ExceptionEx)
  303. {
  304. throw;
  305. }
  306. else
  307. {
  308. throw ExceptionEx.ThrowServiceException(ex);
  309. }
  310. }
  311. return result;
  312. }
  313. /// <summary>
  314. /// 按条件清空选修排课数据
  315. /// </summary>
  316. /// <returns></returns>
  317. public async Task<bool> AsyncModifyArrangeLessonOfElectiveDataByCondition(ArrangeLessonTermOfElectiveEntity entity)
  318. {
  319. var db = BaseRepository("CollegeMIS");
  320. bool result = false;
  321. try
  322. {
  323. db.BeginTrans();
  324. HttpContent httpContent = new StringContent("{\"school\":\"" + entity.F_SchoolId + "\",\"year\":\"" + entity.AcademicYearNo + "\",\"number\":\"" + entity.Semester + "\"}");
  325. httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
  326. string apiData = await Client.PostAsync(Config.GetValue("ModifyArrangeLessonOfElectiveAPI"), httpContent).Result.Content.ReadAsStringAsync();
  327. if (!string.IsNullOrEmpty(apiData))
  328. {
  329. var data = JsonConvert.DeserializeObject<Root>(apiData);
  330. if (data.success)
  331. {
  332. var strAcademicYear = entity.AcademicYearNo;
  333. var strSemester = entity.Semester;
  334. var schoolId = entity.F_SchoolId;
  335. await db.ExecuteAsyncBySql(
  336. $"delete from ElectiveMajor where OLPOEId in(select id from OpenLessonPlanOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}' ) or OLPOEId in (select id from OpenLessonPlanOfElectiveDel where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}' ) ");
  337. var executeResult = await db.ExecuteAsyncBySql(
  338. $"delete from ArrangeLessonTermOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  339. await db.ExecuteAsyncBySql(
  340. $"delete from OpenLessonPlanOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  341. await db.ExecuteAsyncBySql(
  342. $"delete from ElectiveMergeItem where emid in (select emid from ElectiveMerge where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}')");
  343. await db.ExecuteAsyncBySql(
  344. $"delete from ElectiveMerge where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  345. await db.ExecuteAsyncBySql(
  346. $"delete from OpenLessonPlanOfElectiveDel where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  347. await db.ExecuteAsyncBySql(
  348. $"delete from StuSelectLessonListOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  349. if (executeResult > 0)
  350. {
  351. result = true;
  352. }
  353. db.Commit();
  354. }
  355. }
  356. }
  357. catch (Exception ex)
  358. {
  359. db.Rollback();
  360. if (ex is ExceptionEx)
  361. {
  362. throw;
  363. }
  364. else
  365. {
  366. throw ExceptionEx.ThrowServiceException(ex);
  367. }
  368. }
  369. return result;
  370. }
  371. /// <summary>
  372. /// 同步当前学期选修排课系统数据
  373. /// </summary>
  374. /// <returns></returns>
  375. public async Task<bool> AsyncArrangeLessonOfElectiveData()
  376. {
  377. bool result = false;
  378. try
  379. {
  380. var apiData = await Client.GetStringAsync(Config.GetValue("ArrangeLessonOfElectiveAPI"));
  381. if (!string.IsNullOrEmpty(apiData))
  382. {
  383. var data = JsonConvert.DeserializeObject<Root>(apiData);
  384. if (!data.success)
  385. {
  386. return result;
  387. }
  388. var dataList = data.entity.list;
  389. if (dataList.Any())
  390. {
  391. //ArrangeLessonTermOfElective数据处理
  392. var insertDataList = new List<ArrangeLessonTermOfElectiveEntity>();
  393. var lessonData = (await BaseRepository("CollegeMIS").FindListAsync<LessonInfoEntity>()).ToList();
  394. foreach (var item in dataList)
  395. {
  396. var insertData = new ArrangeLessonTermOfElectiveEntity
  397. {
  398. Id = Guid.NewGuid().ToString(),
  399. PaiKeId = item.paike.id,
  400. LessonDate = DateTime.Parse(item.times),
  401. AcademicYearNo = item.schoolYear,
  402. Semester = item.paike.semester,
  403. LessonNo = item.paike.curriculunId,
  404. LessonName = item.paike.curriculunName,
  405. LessonSortNo = lessonData.FirstOrDefault(m => m.LessonNo == item.paike.curriculunId)?.LessonSortNo,
  406. LessonTime = item.paike.curriculunTime,
  407. LessonSection = item.paike.week + item.paike.section,
  408. StudyScore = lessonData.FirstOrDefault(x => x.LessonNo == item.paike.curriculunId)?.StudyScore,
  409. EmpNo = item.paike.teacherId,
  410. EmpName = item.paike.teacherName,
  411. ClassRoomNo = item.paike.classRoomId,
  412. ClassRoomName = item.paike.classRoomName,
  413. CheckMark = "1"
  414. };
  415. insertDataList.Add(insertData);
  416. }
  417. var insertResult = await BaseRepository("CollegeMIS").InsertAsync(insertDataList);
  418. //OpenLessonPlanOfElective数据处理
  419. var strAcademicYear = insertDataList.First().AcademicYearNo;
  420. var strSemester = insertDataList.First().Semester;
  421. var ArrangeLessonTermOfElectiveData = (await BaseRepository("CollegeMIS").FindListAsync<ArrangeLessonTermOfElectiveEntity>(@"select * from ArrangeLessonTermOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "'")).ToList();
  422. var arrangeLessonTermData = (await BaseRepository("CollegeMIS").FindListAsync<ArrangeLessonTermOfElectiveEntity>(@"select PaiKeId,AcademicYearNo,Semester,LessonNo,LessonName,LessonSection,EmpNo,EmpName,ClassRoomNo,ClassRoomName from ArrangeLessonTermOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "' group by PaiKeId, AcademicYearNo, Semester, LessonNo, LessonName, LessonSection, EmpNo, EmpName, ClassRoomNo, ClassRoomName")).ToList();
  423. var OpenLessonPlanOfElectiveData = (await BaseRepository("CollegeMIS").FindListAsync<OpenLessonPlanOfElectiveEntity>(@"select * from OpenLessonPlanOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "'")).ToList();
  424. var insertOpenLessonPlanOfElectiveDataList = new List<OpenLessonPlanOfElectiveEntity>();
  425. if (arrangeLessonTermData.Any())
  426. {
  427. foreach (var item in arrangeLessonTermData)
  428. {
  429. var insertOpenLessonPlanOfElectiveData = new OpenLessonPlanOfElectiveEntity()
  430. {
  431. Id = item.PaiKeId,
  432. MakeDate = DateTime.Now,
  433. AcademicYearNo = item.AcademicYearNo,
  434. Semester = item.Semester,
  435. LessonNo = item.LessonNo,
  436. PartCode = "",
  437. LessonName = item.LessonName,
  438. LessonSortNo = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.LessonSortNo,
  439. LessonSortDetailNo = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.LessonSortDetailNo,
  440. LessonSection = item.LessonSection,
  441. LessonTime = ArrangeLessonTermOfElectiveData.FirstOrDefault(x => x.PaiKeId == item.PaiKeId)?.LessonTime,
  442. StudyScore = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.StudyScore,
  443. StartWeek = 1,
  444. EndWeek = ArrangeLessonTermOfElectiveData.Count(x => x.PaiKeId == item.PaiKeId),
  445. StartDate = ArrangeLessonTermOfElectiveData.Where(x => x.PaiKeId == item.PaiKeId).OrderBy(x => x.LessonDate).FirstOrDefault()?.LessonDate,
  446. EndDate = ArrangeLessonTermOfElectiveData.Where(x => x.PaiKeId == item.PaiKeId).OrderBy(x => x.LessonDate).LastOrDefault()?.LessonDate,
  447. CheckStyleNo = "1",
  448. ScoreRecordStyleNo = "1",
  449. EmpNo = item.EmpNo,
  450. EmpName = item.EmpName,
  451. ClassRoomNo = item.ClassRoomNo,
  452. ClassRoomName = item.ClassRoomName,
  453. CheckMark = "1",
  454. StuNumMax = 0,
  455. StuNum = 0
  456. };
  457. //非空判断
  458. if (OpenLessonPlanOfElectiveData.Count(x =>
  459. x.AcademicYearNo == insertOpenLessonPlanOfElectiveData.AcademicYearNo &&
  460. x.Semester == insertOpenLessonPlanOfElectiveData.Semester &&
  461. x.LessonNo == insertOpenLessonPlanOfElectiveData.LessonNo &&
  462. x.LessonSortNo == insertOpenLessonPlanOfElectiveData.LessonSortNo &&
  463. x.LessonSection == insertOpenLessonPlanOfElectiveData.LessonSection &&
  464. x.EmpNo == insertOpenLessonPlanOfElectiveData.EmpNo &&
  465. x.ClassRoomNo == insertOpenLessonPlanOfElectiveData.ClassRoomNo) == 0 && insertOpenLessonPlanOfElectiveDataList.Count(x =>
  466. x.AcademicYearNo == insertOpenLessonPlanOfElectiveData.AcademicYearNo &&
  467. x.Semester == insertOpenLessonPlanOfElectiveData.Semester &&
  468. x.LessonNo == insertOpenLessonPlanOfElectiveData.LessonNo &&
  469. x.LessonSortNo == insertOpenLessonPlanOfElectiveData.LessonSortNo &&
  470. x.LessonSection == insertOpenLessonPlanOfElectiveData.LessonSection &&
  471. x.EmpNo == insertOpenLessonPlanOfElectiveData.EmpNo &&
  472. x.ClassRoomNo == insertOpenLessonPlanOfElectiveData.ClassRoomNo) == 0)
  473. {
  474. insertOpenLessonPlanOfElectiveDataList.Add(insertOpenLessonPlanOfElectiveData);
  475. }
  476. }
  477. await BaseRepository("CollegeMIS").InsertAsync(insertOpenLessonPlanOfElectiveDataList);
  478. }
  479. if (insertResult > 0)
  480. {
  481. result = true;
  482. }
  483. }
  484. }
  485. }
  486. catch (Exception ex)
  487. {
  488. if (ex is ExceptionEx)
  489. {
  490. throw;
  491. }
  492. else
  493. {
  494. throw ExceptionEx.ThrowServiceException(ex);
  495. }
  496. }
  497. return result;
  498. }
  499. /// <summary>
  500. /// 清空当前学期选修排课数据
  501. /// </summary>
  502. /// <returns></returns>
  503. public async Task<bool> AsyncModifyArrangeLessonOfElectiveData()
  504. {
  505. var db = BaseRepository("CollegeMIS");
  506. bool result = false;
  507. try
  508. {
  509. db.BeginTrans();
  510. var apiData = await Client.GetStringAsync(Config.GetValue("ModifyArrangeLessonOfElectiveAPI"));
  511. if (!string.IsNullOrEmpty(apiData))
  512. {
  513. var data = JsonConvert.DeserializeObject<Root>(apiData);
  514. if (data.success)
  515. {
  516. var semesterAndYear = Common.GetSemesterAndYear();
  517. var strAcademicYear = semesterAndYear.AcademicYearShort;
  518. var strSemester = semesterAndYear.Semester;
  519. await db.ExecuteAsyncBySql(
  520. $"delete from ElectiveMajor where OLPOEId in(select id from OpenLessonPlanOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}') or OLPOEId in (select id from OpenLessonPlanOfElectiveDel where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}') ");
  521. var executeResult = await db.ExecuteAsyncBySql(
  522. $"delete from ArrangeLessonTermOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  523. await db.ExecuteAsyncBySql(
  524. $"delete from OpenLessonPlanOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  525. await db.ExecuteAsyncBySql(
  526. $"delete from ElectiveMergeItem where emid in (select emid from ElectiveMerge where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}') ");
  527. await db.ExecuteAsyncBySql(
  528. $"delete from ElectiveMerge where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  529. await db.ExecuteAsyncBySql(
  530. $"delete from OpenLessonPlanOfElectiveDel where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  531. await db.ExecuteAsyncBySql(
  532. $"delete from StuSelectLessonListOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  533. if (executeResult > 0)
  534. {
  535. result = true;
  536. }
  537. db.Commit();
  538. }
  539. }
  540. }
  541. catch (Exception ex)
  542. {
  543. db.Rollback();
  544. if (ex is ExceptionEx)
  545. {
  546. throw;
  547. }
  548. else
  549. {
  550. throw ExceptionEx.ThrowServiceException(ex);
  551. }
  552. }
  553. return result;
  554. }
  555. /// <summary>
  556. /// 选修课课程表
  557. /// </summary>
  558. /// <param name="userAccount">账号</param>
  559. /// <param name="userType">用户类型 学生 教师</param>
  560. /// <param name="startDate">查询开始时间</param>
  561. /// <param name="endDate">查询截止时间</param>
  562. /// <returns></returns>
  563. public IEnumerable<TimeTable> GetTimeTable(string userAccount, string userType, string startDate, string endDate)
  564. {
  565. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  566. var strAcademicYear = semesterAndYear.AcademicYearShort;
  567. var strSemester = semesterAndYear.Semester;
  568. string sql;
  569. if (userType == "学生")
  570. {
  571. //sql = @"select a.LessonDate,a.AcademicYearNo as AcademicYear,a.Semester,a.LessonNo,a.LessonName+'[选修]' as LessonName,a.LessonSection as LessonTime,a.EmpNo,a.EmpName,a.ClassRoomName as ClassroomName,a.ClassRoomNo,a.LessonSortNo,b.OLPEId
  572. // from StuSelectLessonListOfElective b
  573. // left join ArrangeLessonTermOfElective a on b.OLPEId=a.PaiKeId
  574. // where b.StuNo=@userAccount and b.Status=2
  575. // and b.AcademicYearNo=@strAcademicYear and b.Semester=@strSemester
  576. // and a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  577. // and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  578. // and a.CheckMark='1'";
  579. sql = @" select e.EnName,a.LessonDate,a.AcademicYearNo as AcademicYear,a.Semester,a.LessonNo,e.LessonName,a.LessonSection as LessonTime,a.EmpNo,emp.EmpName,cr.ClassroomName,a.ClassRoomNo,a.LessonSortNo,ccc.olpoeid as OLPEId
  580. from
  581. (select olpoeid from ElectiveMergeItem
  582. where emid in (select emid from ElectiveMergeItem aa left
  583. join StuSelectLessonListOfElective bb on aa.olpoeid = bb.olpeid
  584. where bb.StuNo = @userAccount and bb.Status = 2
  585. and bb.AcademicYearNo = @strAcademicYear and bb.Semester = @strSemester
  586. )) as ccc
  587. left join
  588. ArrangeLessonTermOfElective a on ccc.olpoeid = a.PaiKeId
  589. left join LessonInfo e on a.LessonNo=e.LessonNo
  590. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  591. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  592. where
  593. a.AcademicYearNo = @strAcademicYear and a.Semester = @strSemester
  594. and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  595. and a.CheckMark = '1'
  596. union
  597. select e.EnName,a.LessonDate,a.AcademicYearNo as AcademicYear,a.Semester,a.LessonNo,e.LessonName,a.LessonSection as LessonTime,a.EmpNo,emp.EmpName,cr.ClassroomName,a.ClassRoomNo,a.LessonSortNo,b.OLPEId
  598. from StuSelectLessonListOfElective b
  599. left join ArrangeLessonTermOfElective a on b.OLPEId=a.PaiKeId
  600. left join LessonInfo e on a.LessonNo=e.LessonNo
  601. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  602. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  603. where b.StuNo=@userAccount and b.Status=2
  604. and b.AcademicYearNo=@strAcademicYear and b.Semester=@strSemester
  605. and a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  606. and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  607. and a.CheckMark='1'
  608. ";
  609. }
  610. else
  611. {
  612. sql = @"select e.EnName,a.LessonDate,a.AcademicYearNo as AcademicYear,a.Semester,a.LessonNo,e.LessonName,a.LessonSection as LessonTime,a.EmpNo,emp.EmpName,cr.ClassroomName,a.ClassRoomNo,a.LessonSortNo
  613. from ArrangeLessonTermOfElective a
  614. left join LessonInfo e on a.LessonNo=e.LessonNo
  615. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  616. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  617. where a.EmpNo=@userAccount
  618. and a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  619. and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  620. and a.CheckMark='1'";
  621. }
  622. try
  623. {
  624. var result = BaseRepository("CollegeMIS").FindList<TimeTable>(sql, new { userAccount, startDate, endDate, strAcademicYear, strSemester });
  625. return result;
  626. }
  627. catch (Exception ex)
  628. {
  629. if (ex is ExceptionEx)
  630. {
  631. throw;
  632. }
  633. else
  634. {
  635. throw ExceptionEx.ThrowServiceException(ex);
  636. }
  637. }
  638. }
  639. /// <summary>
  640. /// 选修课课程表【教务】
  641. /// </summary>
  642. /// <param name="startDate">查询开始时间</param>
  643. /// <param name="endDate">查询截止时间</param>
  644. /// <param name="classNo">班级编号</param>
  645. /// <param name="empNo">教师编号</param>
  646. /// <returns></returns>
  647. public IEnumerable<TimeTable> GetTimeTableInEducation(string startDate, string endDate, string classNo, string empNo, string schoolId)
  648. {
  649. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  650. var strAcademicYear = semesterAndYear.AcademicYearShort;
  651. var strSemester = semesterAndYear.Semester;
  652. string sql = @"select e.EnName,a.F_SchoolId,a.LessonDate,a.AcademicYearNo as AcademicYear,a.Semester,a.LessonNo,e.LessonName,a.LessonSection as LessonTime,a.EmpNo,emp.EmpName,cr.ClassroomName,a.ClassRoomNo,a.LessonSortNo
  653. from ArrangeLessonTermOfElective a
  654. left join LessonInfo e on a.LessonNo=e.LessonNo
  655. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  656. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  657. where a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  658. and a.LessonDate>=@startDate and a.LessonDate<=@endDate
  659. and a.CheckMark=1";
  660. try
  661. {
  662. var result = BaseRepository("CollegeMIS").FindList<TimeTable>(sql, new { startDate, endDate, strAcademicYear, strSemester });
  663. if (!string.IsNullOrEmpty(classNo))
  664. {
  665. result = result.Where(x => x.TeachClassNo == classNo);
  666. }
  667. if (!string.IsNullOrEmpty(empNo))
  668. {
  669. result = result.Where(x => x.EmpNo == empNo);
  670. }
  671. if (!string.IsNullOrEmpty(schoolId))
  672. {
  673. result = result.Where(x => x.F_SchoolId == schoolId);
  674. }
  675. return result;
  676. }
  677. catch (Exception ex)
  678. {
  679. if (ex is ExceptionEx)
  680. {
  681. throw;
  682. }
  683. else
  684. {
  685. throw ExceptionEx.ThrowServiceException(ex);
  686. }
  687. }
  688. }
  689. /// <summary>
  690. /// 获取相关课程考勤的学生信息--选修课
  691. /// </summary>
  692. /// <param name="year"></param>
  693. /// <param name="semester"></param>
  694. /// <param name="empno"></param>
  695. /// <param name="lessonNo"></param>
  696. /// <param name="teachClassNo"></param>
  697. /// <param name="lessonSortNo"></param>
  698. /// <param name="classRoomNo"></param>
  699. /// <param name="lessonTime"></param>
  700. /// <returns></returns>
  701. public IEnumerable<StuSelectLessonListEntity> AttendanceStudents(Pagination pagination, string queryJson)
  702. {
  703. try
  704. {
  705. var queryParam = queryJson.ToJObject();
  706. var strSql = new StringBuilder();
  707. strSql.Append("SELECT ");
  708. strSql.Append(@"
  709. a.[StuNo]
  710. ,a.[DeptNo]
  711. ,a.[MajorNo]
  712. ,a.[ClassNo]
  713. ,a.[StuName]
  714. ,a.[GenderNo]
  715. ,a.[AcademicYearNo]
  716. ,a.[Semester]
  717. ,a.[LessonNo]
  718. ,a.[LessonName]
  719. ,a.[LessonSortNo]
  720. ,a.[Grade]
  721. ,a.[EmpNo],a.Id as StuSelectLessonListOfElectiveId,b.ID as StuAttendanceNo,b.AttendOrNo,b.Sort,b.AttenCondition,b.AttenScore
  722. ");
  723. strSql.Append(" FROM StuSelectLessonListOfElective a left join StuAttendance b on a.AcademicYearNo=b.AcademicYearNo and a.StuNo=b.StuNo and a.Semester=b.Semester and a.EmpNo=b.EmpNo and a.LessonNo=b.LessonNo and a.ClassRoomNo=b.ClassRoomNo and a.LessonSection=b.LessonTime ");
  724. strSql.Append(" WHERE 1=1 ");
  725. strSql.Append($"and a.AcademicYearNo='{ queryParam["year"]}' and a.Semester='{queryParam["semester"]}' and a.Status=2 and a.EmpNo='{queryParam["empno"]}' and a.LessonNo='{queryParam["lessonNo"]}' and a.ClassRoomNo='{queryParam["classRoomNo"]}' and a.LessonSection like '%{queryParam["lessonTime"]}%'");
  726. return this.BaseRepository("CollegeMIS").FindList<StuSelectLessonListEntity>(strSql.ToString(), pagination);
  727. }
  728. catch (Exception ex)
  729. {
  730. if (ex is ExceptionEx)
  731. {
  732. throw;
  733. }
  734. else
  735. {
  736. throw ExceptionEx.ThrowServiceException(ex);
  737. }
  738. }
  739. }
  740. /// <summary>
  741. /// 考试系统中获取学生成绩数据
  742. /// </summary>
  743. /// <returns></returns>
  744. public async Task<bool> AsyncStuScoreData()
  745. {
  746. bool result = false;
  747. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  748. try
  749. {
  750. var values = new List<KeyValuePair<string, string>>();
  751. values.Add(new KeyValuePair<string, string>("scoolYear", "18-19"));
  752. values.Add(new KeyValuePair<string, string>("term ", "2"));
  753. var content = new FormUrlEncodedContent(values);
  754. var response = await Client.PostAsync("http://192.168.2.125:8088/app/stuScore", content);
  755. response.EnsureSuccessStatusCode();
  756. var responseString = await response.Content.ReadAsStringAsync();
  757. if (!string.IsNullOrEmpty(responseString))
  758. {
  759. var data = JsonConvert.DeserializeObject<StuScoreRoot>(responseString);
  760. if (data.success)
  761. {
  762. var dataList = data.entity.stuScoreList;
  763. if (dataList.Any())
  764. {
  765. foreach (var item in dataList)
  766. {
  767. if (item.lessonno.IndexOf(',') == -1)//单课程
  768. {
  769. //todo:测试是否能找到对应的成绩记录
  770. var aa = this.BaseRepository("CollegeMIS").FindObject("select * from StuScore where where StuNo='" + item.stuno + "' and AcademicYearNo='" + item.scoolYear + "' and Semester='" + item.term + "' and LessonNo='" + item.lessonno + "' and TeachClassNo='" + item.teachclassno + "' and LessonSortNo='1' and CheckMark='0' ");
  771. this.BaseRepository("CollegeMIS").ExecuteBySql("update StuScore set TermEndScore='" + Convert.ToDecimal(item.termendscore) + "' where StuNo='" + item.stuno + "' and AcademicYearNo='" + item.scoolYear + "' and Semester='" + item.term + "' and LessonNo='" + item.lessonno + "' and TeachClassNo='" + item.teachclassno + "' and LessonSortNo='1' and CheckMark='0' ");
  772. }
  773. else//多课程
  774. {
  775. var lessonnoList = item.lessonno.Split(',');
  776. foreach (var lessonnoItem in lessonnoList)
  777. {
  778. this.BaseRepository("CollegeMIS").ExecuteBySql("update StuScore set TermEndScore='" + Convert.ToDecimal(item.termendscore) + "' where StuNo='" + item.stuno + "' and AcademicYearNo='" + item.scoolYear + "' and Semester='" + item.term + "' and LessonNo='" + lessonnoItem + "' and TeachClassNo='" + item.teachclassno + "' and LessonSortNo='1' and CheckMark='0' ");
  779. }
  780. }
  781. }
  782. db.Commit();
  783. result = true;
  784. }
  785. }
  786. }
  787. }
  788. catch (Exception ex)
  789. {
  790. db.Rollback();
  791. if (ex is ExceptionEx)
  792. {
  793. throw;
  794. }
  795. else
  796. {
  797. throw ExceptionEx.ThrowServiceException(ex);
  798. }
  799. }
  800. return result;
  801. }
  802. #endregion
  803. #region 学生成绩数据
  804. public class StuScoreList
  805. {
  806. public string id { get; set; }
  807. public string examname { get; set; }
  808. public string stuno { get; set; }
  809. public string stuname { get; set; }
  810. public string classno { get; set; }
  811. public string classname { get; set; }
  812. public string teachclassno { get; set; }
  813. public string termendscore { get; set; }
  814. public string examtime { get; set; }
  815. public string lessonno { get; set; }
  816. public string lessonname { get; set; }
  817. public string scoolYear { get; set; }
  818. public string term { get; set; }
  819. }
  820. public class StuScoreEntity
  821. {
  822. /// <summary>
  823. /// true
  824. /// </summary>
  825. public string opflag { get; set; }
  826. /// <summary>
  827. /// 1000
  828. /// </summary>
  829. public string opCode { get; set; }
  830. /// <summary>
  831. /// OK!
  832. /// </summary>
  833. public string message { get; set; }
  834. /// <summary>
  835. /// List
  836. /// </summary>
  837. public List<StuScoreList> stuScoreList { get; set; }
  838. }
  839. public class StuScoreRoot
  840. {
  841. /// <summary>
  842. /// 操作成功
  843. /// </summary>
  844. public string message { get; set; }
  845. /// <summary>
  846. /// Success
  847. /// </summary>
  848. public bool success { get; set; }
  849. /// <summary>
  850. /// Entity
  851. /// </summary>
  852. public StuScoreEntity entity { get; set; }
  853. }
  854. #endregion
  855. }
  856. }