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.
 
 
 
 
 
 

948 lines
49 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. string tmplessontime = "";
  194. if (item.paike.section == "1")
  195. {
  196. tmplessontime = "10:00-10:40";
  197. }
  198. if (item.paike.section == "2")
  199. {
  200. tmplessontime = "10:50-11:30";
  201. }
  202. if (item.paike.section == "3")
  203. {
  204. tmplessontime = "12:00-12:40";
  205. }
  206. if (item.paike.section == "4")
  207. {
  208. tmplessontime = "12:50-13:30";
  209. }
  210. if (item.paike.section == "5")
  211. {
  212. tmplessontime = "16:00-16:40";
  213. }
  214. if (item.paike.section == "6")
  215. {
  216. tmplessontime = "16:50-17:30";
  217. }
  218. if (item.paike.section == "7")
  219. {
  220. tmplessontime = "18:00-18:40";
  221. }
  222. if (item.paike.section == "8")
  223. {
  224. tmplessontime = "18:50-19:30";
  225. }
  226. if (item.paike.section == "9")
  227. {
  228. tmplessontime = "20:20-21:00";
  229. }
  230. if (item.paike.section == "10")
  231. {
  232. tmplessontime = "21:10-21:50";
  233. }
  234. var insertData = new ArrangeLessonTermOfElectiveEntity
  235. {
  236. Id = Guid.NewGuid().ToString(),
  237. PaiKeId = item.paike.id,
  238. LessonDate = DateTime.Parse(lessontime),
  239. AcademicYearNo = item.paike.year,
  240. Semester = item.paike.number,
  241. LessonNo = item.paike.curriculunNumber,
  242. LessonName = item.paike.curriculunName,
  243. LessonSortNo = "2",
  244. LessonTime = tmplessontime,
  245. LessonSection = item.paike.week + item.paike.section,
  246. StudyScore = lessonData.FirstOrDefault(x => x.LessonNo == item.paike.curriculunNumber)?.StudyScore,
  247. EmpNo = item.paike.teacherNumber,
  248. EmpName = item.paike.teacherName,
  249. ClassRoomNo = item.paike.classRoomNumber,
  250. ClassRoomName = item.paike.classRoomName,
  251. F_SchoolId = entity.F_SchoolId,
  252. CheckMark = "1"
  253. };
  254. if (oldArrangeLessonTermOfElectiveDataList.Count(m => m.AcademicYearNo == insertData.AcademicYearNo
  255. && m.Semester == insertData.Semester && m.LessonNo == insertData.LessonNo
  256. && m.LessonSection == insertData.LessonSection && m.EmpNo == insertData.EmpNo
  257. && m.ClassRoomNo == insertData.ClassRoomNo) == 0)
  258. {
  259. insertDataList.Add(insertData);
  260. }
  261. }
  262. }
  263. }
  264. var insertResult = await BaseRepository("CollegeMIS").InsertAsync(insertDataList);
  265. //OpenLessonPlanOfElective数据处理
  266. var strAcademicYear = entity.AcademicYearNo;
  267. var strSemester = entity.Semester;
  268. var schoolId = entity.F_SchoolId;
  269. var ArrangeLessonTermOfElectiveData = (await BaseRepository("CollegeMIS").FindListAsync<ArrangeLessonTermOfElectiveEntity>(@"select * from ArrangeLessonTermOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "' and F_SchoolId='" + schoolId + "'")).ToList();
  270. 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();
  271. var OpenLessonPlanOfElectiveData = (await BaseRepository("CollegeMIS").FindListAsync<OpenLessonPlanOfElectiveEntity>(@"select * from OpenLessonPlanOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "' and F_SchoolId='" + schoolId + "'")).ToList();
  272. var insertOpenLessonPlanOfElectiveDataList = new List<OpenLessonPlanOfElectiveEntity>();
  273. if (arrangeLessonTermData.Any())
  274. {
  275. foreach (var item in arrangeLessonTermData)
  276. {
  277. var insertOpenLessonPlanOfElectiveData = new OpenLessonPlanOfElectiveEntity()
  278. {
  279. Id = item.PaiKeId,
  280. MakeDate = DateTime.Now,
  281. AcademicYearNo = item.AcademicYearNo,
  282. Semester = item.Semester,
  283. LessonNo = item.LessonNo,
  284. PartCode = "",
  285. LessonName = item.LessonName,
  286. LessonSortNo = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.LessonSortNo,
  287. LessonSortDetailNo = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.LessonSortDetailNo,
  288. LessonSection = item.LessonSection,
  289. LessonTime = ArrangeLessonTermOfElectiveData.FirstOrDefault(x => x.PaiKeId == item.PaiKeId)?.LessonTime,
  290. StudyScore = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.StudyScore,
  291. StartWeek = 1,
  292. EndWeek = ArrangeLessonTermOfElectiveData.Count(x => x.PaiKeId == item.PaiKeId),
  293. StartDate = ArrangeLessonTermOfElectiveData.Where(x => x.PaiKeId == item.PaiKeId).OrderBy(x => x.LessonDate).FirstOrDefault()?.LessonDate,
  294. EndDate = ArrangeLessonTermOfElectiveData.Where(x => x.PaiKeId == item.PaiKeId).OrderBy(x => x.LessonDate).LastOrDefault()?.LessonDate,
  295. CheckStyleNo = "1",
  296. ScoreRecordStyleNo = "1",
  297. EmpNo = item.EmpNo,
  298. EmpName = item.EmpName,
  299. ClassRoomNo = item.ClassRoomNo,
  300. ClassRoomName = item.ClassRoomName,
  301. CheckMark = "1",
  302. StuNumMax = 0,
  303. StuNum = 0,
  304. F_SchoolId = item.F_SchoolId
  305. };
  306. //非空判断
  307. if (OpenLessonPlanOfElectiveData.Count(x =>
  308. x.AcademicYearNo == insertOpenLessonPlanOfElectiveData.AcademicYearNo &&
  309. x.Semester == insertOpenLessonPlanOfElectiveData.Semester &&
  310. x.LessonNo == insertOpenLessonPlanOfElectiveData.LessonNo &&
  311. x.LessonSortNo == insertOpenLessonPlanOfElectiveData.LessonSortNo &&
  312. x.LessonSection == insertOpenLessonPlanOfElectiveData.LessonSection &&
  313. x.EmpNo == insertOpenLessonPlanOfElectiveData.EmpNo &&
  314. x.ClassRoomNo == insertOpenLessonPlanOfElectiveData.ClassRoomNo &&
  315. x.F_SchoolId == insertOpenLessonPlanOfElectiveData.F_SchoolId) == 0 && insertOpenLessonPlanOfElectiveDataList.Count(x =>
  316. x.AcademicYearNo == insertOpenLessonPlanOfElectiveData.AcademicYearNo &&
  317. x.Semester == insertOpenLessonPlanOfElectiveData.Semester &&
  318. x.LessonNo == insertOpenLessonPlanOfElectiveData.LessonNo &&
  319. x.LessonSortNo == insertOpenLessonPlanOfElectiveData.LessonSortNo &&
  320. x.LessonSection == insertOpenLessonPlanOfElectiveData.LessonSection &&
  321. x.EmpNo == insertOpenLessonPlanOfElectiveData.EmpNo &&
  322. x.ClassRoomNo == insertOpenLessonPlanOfElectiveData.ClassRoomNo &&
  323. x.F_SchoolId == insertOpenLessonPlanOfElectiveData.F_SchoolId) == 0)
  324. {
  325. if (BaseRepository("CollegeMIS").FindEntity<OpenLessonPlanOfElectiveEntity>(m => m.Id == insertOpenLessonPlanOfElectiveData.Id) == null
  326. && BaseRepository("CollegeMIS").FindEntity<OpenLessonPlanOfElectiveDelEntity>(m => m.Id == insertOpenLessonPlanOfElectiveData.Id) == null)
  327. {
  328. insertOpenLessonPlanOfElectiveDataList.Add(insertOpenLessonPlanOfElectiveData);
  329. }
  330. }
  331. }
  332. await BaseRepository("CollegeMIS").InsertAsync(insertOpenLessonPlanOfElectiveDataList);
  333. }
  334. if (insertResult > 0)
  335. {
  336. result = true;
  337. }
  338. }
  339. }
  340. }
  341. catch (Exception ex)
  342. {
  343. if (ex is ExceptionEx)
  344. {
  345. throw;
  346. }
  347. else
  348. {
  349. throw ExceptionEx.ThrowServiceException(ex);
  350. }
  351. }
  352. return result;
  353. }
  354. /// <summary>
  355. /// 按条件清空选修排课数据
  356. /// </summary>
  357. /// <returns></returns>
  358. public async Task<bool> AsyncModifyArrangeLessonOfElectiveDataByCondition(ArrangeLessonTermOfElectiveEntity entity)
  359. {
  360. var db = BaseRepository("CollegeMIS");
  361. bool result = false;
  362. try
  363. {
  364. db.BeginTrans();
  365. HttpContent httpContent = new StringContent("{\"school\":\"" + entity.F_SchoolId + "\",\"year\":\"" + entity.AcademicYearNo + "\",\"number\":\"" + entity.Semester + "\"}");
  366. httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
  367. string apiData = await Client.PostAsync(Config.GetValue("ModifyArrangeLessonOfElectiveAPI"), httpContent).Result.Content.ReadAsStringAsync();
  368. if (!string.IsNullOrEmpty(apiData))
  369. {
  370. var data = JsonConvert.DeserializeObject<Root>(apiData);
  371. if (data.success)
  372. {
  373. var strAcademicYear = entity.AcademicYearNo;
  374. var strSemester = entity.Semester;
  375. var schoolId = entity.F_SchoolId;
  376. await db.ExecuteAsyncBySql(
  377. $"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}' ) ");
  378. var executeResult = await db.ExecuteAsyncBySql(
  379. $"delete from ArrangeLessonTermOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  380. await db.ExecuteAsyncBySql(
  381. $"delete from OpenLessonPlanOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  382. await db.ExecuteAsyncBySql(
  383. $"delete from ElectiveMergeItem where emid in (select emid from ElectiveMerge where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}')");
  384. await db.ExecuteAsyncBySql(
  385. $"delete from ElectiveMerge where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  386. await db.ExecuteAsyncBySql(
  387. $"delete from OpenLessonPlanOfElectiveDel where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  388. await db.ExecuteAsyncBySql(
  389. $"delete from StuSelectLessonListOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' and F_SchoolId='{schoolId}'");
  390. if (executeResult > 0)
  391. {
  392. result = true;
  393. }
  394. db.Commit();
  395. }
  396. }
  397. }
  398. catch (Exception ex)
  399. {
  400. db.Rollback();
  401. if (ex is ExceptionEx)
  402. {
  403. throw;
  404. }
  405. else
  406. {
  407. throw ExceptionEx.ThrowServiceException(ex);
  408. }
  409. }
  410. return result;
  411. }
  412. /// <summary>
  413. /// 同步当前学期选修排课系统数据
  414. /// </summary>
  415. /// <returns></returns>
  416. public async Task<bool> AsyncArrangeLessonOfElectiveData()
  417. {
  418. bool result = false;
  419. try
  420. {
  421. var apiData = await Client.GetStringAsync(Config.GetValue("ArrangeLessonOfElectiveAPI"));
  422. if (!string.IsNullOrEmpty(apiData))
  423. {
  424. var data = JsonConvert.DeserializeObject<Root>(apiData);
  425. if (!data.success)
  426. {
  427. return result;
  428. }
  429. var dataList = data.entity.list;
  430. if (dataList.Any())
  431. {
  432. //ArrangeLessonTermOfElective数据处理
  433. var insertDataList = new List<ArrangeLessonTermOfElectiveEntity>();
  434. var lessonData = (await BaseRepository("CollegeMIS").FindListAsync<LessonInfoEntity>()).ToList();
  435. foreach (var item in dataList)
  436. {
  437. var insertData = new ArrangeLessonTermOfElectiveEntity
  438. {
  439. Id = Guid.NewGuid().ToString(),
  440. PaiKeId = item.paike.id,
  441. LessonDate = DateTime.Parse(item.times),
  442. AcademicYearNo = item.schoolYear,
  443. Semester = item.paike.semester,
  444. LessonNo = item.paike.curriculunId,
  445. LessonName = item.paike.curriculunName,
  446. LessonSortNo = lessonData.FirstOrDefault(m => m.LessonNo == item.paike.curriculunId)?.LessonSortNo,
  447. LessonTime = item.paike.curriculunTime,
  448. LessonSection = item.paike.week + item.paike.section,
  449. StudyScore = lessonData.FirstOrDefault(x => x.LessonNo == item.paike.curriculunId)?.StudyScore,
  450. EmpNo = item.paike.teacherId,
  451. EmpName = item.paike.teacherName,
  452. ClassRoomNo = item.paike.classRoomId,
  453. ClassRoomName = item.paike.classRoomName,
  454. CheckMark = "1"
  455. };
  456. insertDataList.Add(insertData);
  457. }
  458. var insertResult = await BaseRepository("CollegeMIS").InsertAsync(insertDataList);
  459. //OpenLessonPlanOfElective数据处理
  460. var strAcademicYear = insertDataList.First().AcademicYearNo;
  461. var strSemester = insertDataList.First().Semester;
  462. var ArrangeLessonTermOfElectiveData = (await BaseRepository("CollegeMIS").FindListAsync<ArrangeLessonTermOfElectiveEntity>(@"select * from ArrangeLessonTermOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "'")).ToList();
  463. 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();
  464. var OpenLessonPlanOfElectiveData = (await BaseRepository("CollegeMIS").FindListAsync<OpenLessonPlanOfElectiveEntity>(@"select * from OpenLessonPlanOfElective where AcademicYearNo='" + strAcademicYear + "' and Semester='" + strSemester + "'")).ToList();
  465. var insertOpenLessonPlanOfElectiveDataList = new List<OpenLessonPlanOfElectiveEntity>();
  466. if (arrangeLessonTermData.Any())
  467. {
  468. foreach (var item in arrangeLessonTermData)
  469. {
  470. var insertOpenLessonPlanOfElectiveData = new OpenLessonPlanOfElectiveEntity()
  471. {
  472. Id = item.PaiKeId,
  473. MakeDate = DateTime.Now,
  474. AcademicYearNo = item.AcademicYearNo,
  475. Semester = item.Semester,
  476. LessonNo = item.LessonNo,
  477. PartCode = "",
  478. LessonName = item.LessonName,
  479. LessonSortNo = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.LessonSortNo,
  480. LessonSortDetailNo = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.LessonSortDetailNo,
  481. LessonSection = item.LessonSection,
  482. LessonTime = ArrangeLessonTermOfElectiveData.FirstOrDefault(x => x.PaiKeId == item.PaiKeId)?.LessonTime,
  483. StudyScore = lessonData.FirstOrDefault(x => x.LessonNo == item.LessonNo)?.StudyScore,
  484. StartWeek = 1,
  485. EndWeek = ArrangeLessonTermOfElectiveData.Count(x => x.PaiKeId == item.PaiKeId),
  486. StartDate = ArrangeLessonTermOfElectiveData.Where(x => x.PaiKeId == item.PaiKeId).OrderBy(x => x.LessonDate).FirstOrDefault()?.LessonDate,
  487. EndDate = ArrangeLessonTermOfElectiveData.Where(x => x.PaiKeId == item.PaiKeId).OrderBy(x => x.LessonDate).LastOrDefault()?.LessonDate,
  488. CheckStyleNo = "1",
  489. ScoreRecordStyleNo = "1",
  490. EmpNo = item.EmpNo,
  491. EmpName = item.EmpName,
  492. ClassRoomNo = item.ClassRoomNo,
  493. ClassRoomName = item.ClassRoomName,
  494. CheckMark = "1",
  495. StuNumMax = 0,
  496. StuNum = 0
  497. };
  498. //非空判断
  499. if (OpenLessonPlanOfElectiveData.Count(x =>
  500. x.AcademicYearNo == insertOpenLessonPlanOfElectiveData.AcademicYearNo &&
  501. x.Semester == insertOpenLessonPlanOfElectiveData.Semester &&
  502. x.LessonNo == insertOpenLessonPlanOfElectiveData.LessonNo &&
  503. x.LessonSortNo == insertOpenLessonPlanOfElectiveData.LessonSortNo &&
  504. x.LessonSection == insertOpenLessonPlanOfElectiveData.LessonSection &&
  505. x.EmpNo == insertOpenLessonPlanOfElectiveData.EmpNo &&
  506. x.ClassRoomNo == insertOpenLessonPlanOfElectiveData.ClassRoomNo) == 0 && insertOpenLessonPlanOfElectiveDataList.Count(x =>
  507. x.AcademicYearNo == insertOpenLessonPlanOfElectiveData.AcademicYearNo &&
  508. x.Semester == insertOpenLessonPlanOfElectiveData.Semester &&
  509. x.LessonNo == insertOpenLessonPlanOfElectiveData.LessonNo &&
  510. x.LessonSortNo == insertOpenLessonPlanOfElectiveData.LessonSortNo &&
  511. x.LessonSection == insertOpenLessonPlanOfElectiveData.LessonSection &&
  512. x.EmpNo == insertOpenLessonPlanOfElectiveData.EmpNo &&
  513. x.ClassRoomNo == insertOpenLessonPlanOfElectiveData.ClassRoomNo) == 0)
  514. {
  515. insertOpenLessonPlanOfElectiveDataList.Add(insertOpenLessonPlanOfElectiveData);
  516. }
  517. }
  518. await BaseRepository("CollegeMIS").InsertAsync(insertOpenLessonPlanOfElectiveDataList);
  519. }
  520. if (insertResult > 0)
  521. {
  522. result = true;
  523. }
  524. }
  525. }
  526. }
  527. catch (Exception ex)
  528. {
  529. if (ex is ExceptionEx)
  530. {
  531. throw;
  532. }
  533. else
  534. {
  535. throw ExceptionEx.ThrowServiceException(ex);
  536. }
  537. }
  538. return result;
  539. }
  540. /// <summary>
  541. /// 清空当前学期选修排课数据
  542. /// </summary>
  543. /// <returns></returns>
  544. public async Task<bool> AsyncModifyArrangeLessonOfElectiveData()
  545. {
  546. var db = BaseRepository("CollegeMIS");
  547. bool result = false;
  548. try
  549. {
  550. db.BeginTrans();
  551. var apiData = await Client.GetStringAsync(Config.GetValue("ModifyArrangeLessonOfElectiveAPI"));
  552. if (!string.IsNullOrEmpty(apiData))
  553. {
  554. var data = JsonConvert.DeserializeObject<Root>(apiData);
  555. if (data.success)
  556. {
  557. var semesterAndYear = Common.GetSemesterAndYear();
  558. var strAcademicYear = semesterAndYear.AcademicYearShort;
  559. var strSemester = semesterAndYear.Semester;
  560. await db.ExecuteAsyncBySql(
  561. $"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}') ");
  562. var executeResult = await db.ExecuteAsyncBySql(
  563. $"delete from ArrangeLessonTermOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  564. await db.ExecuteAsyncBySql(
  565. $"delete from OpenLessonPlanOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  566. await db.ExecuteAsyncBySql(
  567. $"delete from ElectiveMergeItem where emid in (select emid from ElectiveMerge where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}') ");
  568. await db.ExecuteAsyncBySql(
  569. $"delete from ElectiveMerge where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  570. await db.ExecuteAsyncBySql(
  571. $"delete from OpenLessonPlanOfElectiveDel where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  572. await db.ExecuteAsyncBySql(
  573. $"delete from StuSelectLessonListOfElective where AcademicYearNo='{strAcademicYear}' and Semester='{strSemester}' ");
  574. if (executeResult > 0)
  575. {
  576. result = true;
  577. }
  578. db.Commit();
  579. }
  580. }
  581. }
  582. catch (Exception ex)
  583. {
  584. db.Rollback();
  585. if (ex is ExceptionEx)
  586. {
  587. throw;
  588. }
  589. else
  590. {
  591. throw ExceptionEx.ThrowServiceException(ex);
  592. }
  593. }
  594. return result;
  595. }
  596. /// <summary>
  597. /// 选修课课程表
  598. /// </summary>
  599. /// <param name="userAccount">账号</param>
  600. /// <param name="userType">用户类型 学生 教师</param>
  601. /// <param name="startDate">查询开始时间</param>
  602. /// <param name="endDate">查询截止时间</param>
  603. /// <returns></returns>
  604. public IEnumerable<TimeTable> GetTimeTable(string userAccount, string userType, string startDate, string endDate)
  605. {
  606. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  607. var strAcademicYear = semesterAndYear.AcademicYearShort;
  608. var strSemester = semesterAndYear.Semester;
  609. string sql;
  610. if (userType == "学生")
  611. {
  612. //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
  613. // from StuSelectLessonListOfElective b
  614. // left join ArrangeLessonTermOfElective a on b.OLPEId=a.PaiKeId
  615. // where b.StuNo=@userAccount and b.Status=2
  616. // and b.AcademicYearNo=@strAcademicYear and b.Semester=@strSemester
  617. // and a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  618. // and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  619. // and a.CheckMark='1'";
  620. 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
  621. from
  622. (select olpoeid from ElectiveMergeItem
  623. where emid in (select emid from ElectiveMergeItem aa left
  624. join StuSelectLessonListOfElective bb on aa.olpoeid = bb.olpeid
  625. where bb.StuNo = @userAccount and bb.Status = 2
  626. and bb.AcademicYearNo = @strAcademicYear and bb.Semester = @strSemester
  627. )) as ccc
  628. left join
  629. ArrangeLessonTermOfElective a on ccc.olpoeid = a.PaiKeId
  630. left join LessonInfo e on a.LessonNo=e.LessonNo
  631. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  632. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  633. where
  634. a.AcademicYearNo = @strAcademicYear and a.Semester = @strSemester
  635. and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  636. and a.CheckMark = '1'
  637. union
  638. 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
  639. from StuSelectLessonListOfElective b
  640. left join ArrangeLessonTermOfElective a on b.OLPEId=a.PaiKeId
  641. left join LessonInfo e on a.LessonNo=e.LessonNo
  642. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  643. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  644. where b.StuNo=@userAccount and b.Status=2
  645. and b.AcademicYearNo=@strAcademicYear and b.Semester=@strSemester
  646. and a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  647. and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  648. and a.CheckMark='1'
  649. ";
  650. }
  651. else
  652. {
  653. 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
  654. from ArrangeLessonTermOfElective a
  655. left join LessonInfo e on a.LessonNo=e.LessonNo
  656. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  657. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  658. where a.EmpNo=@userAccount
  659. and a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  660. and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  661. and a.CheckMark='1'";
  662. }
  663. try
  664. {
  665. var result = BaseRepository("CollegeMIS").FindList<TimeTable>(sql, new { userAccount, startDate, endDate, strAcademicYear, strSemester });
  666. return result;
  667. }
  668. catch (Exception ex)
  669. {
  670. if (ex is ExceptionEx)
  671. {
  672. throw;
  673. }
  674. else
  675. {
  676. throw ExceptionEx.ThrowServiceException(ex);
  677. }
  678. }
  679. }
  680. /// <summary>
  681. /// 选修课课程表【教务】
  682. /// </summary>
  683. /// <param name="startDate">查询开始时间</param>
  684. /// <param name="endDate">查询截止时间</param>
  685. /// <param name="classNo">班级编号</param>
  686. /// <param name="empNo">教师编号</param>
  687. /// <returns></returns>
  688. public IEnumerable<TimeTable> GetTimeTableInEducation(string startDate, string endDate, string classNo, string empNo, string schoolId)
  689. {
  690. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  691. var strAcademicYear = semesterAndYear.AcademicYearShort;
  692. var strSemester = semesterAndYear.Semester;
  693. 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
  694. from ArrangeLessonTermOfElective a
  695. left join LessonInfo e on a.LessonNo=e.LessonNo
  696. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  697. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  698. where a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  699. and a.LessonDate>=@startDate and a.LessonDate<=@endDate
  700. and a.CheckMark=1";
  701. try
  702. {
  703. var result = BaseRepository("CollegeMIS").FindList<TimeTable>(sql, new { startDate, endDate, strAcademicYear, strSemester });
  704. if (!string.IsNullOrEmpty(classNo))
  705. {
  706. result = result.Where(x => x.TeachClassNo == classNo);
  707. }
  708. if (!string.IsNullOrEmpty(empNo))
  709. {
  710. result = result.Where(x => x.EmpNo == empNo);
  711. }
  712. if (!string.IsNullOrEmpty(schoolId))
  713. {
  714. result = result.Where(x => x.F_SchoolId == schoolId);
  715. }
  716. return result;
  717. }
  718. catch (Exception ex)
  719. {
  720. if (ex is ExceptionEx)
  721. {
  722. throw;
  723. }
  724. else
  725. {
  726. throw ExceptionEx.ThrowServiceException(ex);
  727. }
  728. }
  729. }
  730. /// <summary>
  731. /// 获取相关课程考勤的学生信息--选修课
  732. /// </summary>
  733. /// <param name="year"></param>
  734. /// <param name="semester"></param>
  735. /// <param name="empno"></param>
  736. /// <param name="lessonNo"></param>
  737. /// <param name="teachClassNo"></param>
  738. /// <param name="lessonSortNo"></param>
  739. /// <param name="classRoomNo"></param>
  740. /// <param name="lessonTime"></param>
  741. /// <returns></returns>
  742. public IEnumerable<StuSelectLessonListEntity> AttendanceStudents(Pagination pagination, string queryJson)
  743. {
  744. try
  745. {
  746. var queryParam = queryJson.ToJObject();
  747. var strSql = new StringBuilder();
  748. strSql.Append("SELECT ");
  749. strSql.Append(@"
  750. a.[StuNo]
  751. ,a.[DeptNo]
  752. ,a.[MajorNo]
  753. ,a.[ClassNo]
  754. ,a.[StuName]
  755. ,a.[GenderNo]
  756. ,a.[AcademicYearNo]
  757. ,a.[Semester]
  758. ,a.[LessonNo]
  759. ,a.[LessonName]
  760. ,a.[LessonSortNo]
  761. ,a.[Grade]
  762. ,a.[EmpNo],a.Id as StuSelectLessonListOfElectiveId,b.ID as StuAttendanceNo,b.AttendOrNo,b.Sort,b.AttenCondition,b.AttenScore
  763. ");
  764. 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 ");
  765. strSql.Append($" and b.LessonDate='{queryParam["lessonDate"]}'");
  766. strSql.Append(" WHERE 1=1 ");
  767. 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"]}%'");
  768. return this.BaseRepository("CollegeMIS").FindList<StuSelectLessonListEntity>(strSql.ToString(), pagination);
  769. }
  770. catch (Exception ex)
  771. {
  772. if (ex is ExceptionEx)
  773. {
  774. throw;
  775. }
  776. else
  777. {
  778. throw ExceptionEx.ThrowServiceException(ex);
  779. }
  780. }
  781. }
  782. /// <summary>
  783. /// 考试系统中获取学生成绩数据
  784. /// </summary>
  785. /// <returns></returns>
  786. public async Task<bool> AsyncStuScoreData()
  787. {
  788. bool result = false;
  789. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  790. try
  791. {
  792. var values = new List<KeyValuePair<string, string>>();
  793. values.Add(new KeyValuePair<string, string>("scoolYear", "18-19"));
  794. values.Add(new KeyValuePair<string, string>("term ", "2"));
  795. var content = new FormUrlEncodedContent(values);
  796. var response = await Client.PostAsync("http://192.168.2.125:8088/app/stuScore", content);
  797. response.EnsureSuccessStatusCode();
  798. var responseString = await response.Content.ReadAsStringAsync();
  799. if (!string.IsNullOrEmpty(responseString))
  800. {
  801. var data = JsonConvert.DeserializeObject<StuScoreRoot>(responseString);
  802. if (data.success)
  803. {
  804. var dataList = data.entity.stuScoreList;
  805. if (dataList.Any())
  806. {
  807. foreach (var item in dataList)
  808. {
  809. if (item.lessonno.IndexOf(',') == -1)//单课程
  810. {
  811. //todo:测试是否能找到对应的成绩记录
  812. 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' ");
  813. 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' ");
  814. }
  815. else//多课程
  816. {
  817. var lessonnoList = item.lessonno.Split(',');
  818. foreach (var lessonnoItem in lessonnoList)
  819. {
  820. 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' ");
  821. }
  822. }
  823. }
  824. db.Commit();
  825. result = true;
  826. }
  827. }
  828. }
  829. }
  830. catch (Exception ex)
  831. {
  832. db.Rollback();
  833. if (ex is ExceptionEx)
  834. {
  835. throw;
  836. }
  837. else
  838. {
  839. throw ExceptionEx.ThrowServiceException(ex);
  840. }
  841. }
  842. return result;
  843. }
  844. #endregion
  845. #region 学生成绩数据
  846. public class StuScoreList
  847. {
  848. public string id { get; set; }
  849. public string examname { get; set; }
  850. public string stuno { get; set; }
  851. public string stuname { get; set; }
  852. public string classno { get; set; }
  853. public string classname { get; set; }
  854. public string teachclassno { get; set; }
  855. public string termendscore { get; set; }
  856. public string examtime { get; set; }
  857. public string lessonno { get; set; }
  858. public string lessonname { get; set; }
  859. public string scoolYear { get; set; }
  860. public string term { get; set; }
  861. }
  862. public class StuScoreEntity
  863. {
  864. /// <summary>
  865. /// true
  866. /// </summary>
  867. public string opflag { get; set; }
  868. /// <summary>
  869. /// 1000
  870. /// </summary>
  871. public string opCode { get; set; }
  872. /// <summary>
  873. /// OK!
  874. /// </summary>
  875. public string message { get; set; }
  876. /// <summary>
  877. /// List
  878. /// </summary>
  879. public List<StuScoreList> stuScoreList { get; set; }
  880. }
  881. public class StuScoreRoot
  882. {
  883. /// <summary>
  884. /// 操作成功
  885. /// </summary>
  886. public string message { get; set; }
  887. /// <summary>
  888. /// Success
  889. /// </summary>
  890. public bool success { get; set; }
  891. /// <summary>
  892. /// Entity
  893. /// </summary>
  894. public StuScoreEntity entity { get; set; }
  895. }
  896. #endregion
  897. }
  898. }