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.
 
 
 
 
 
 

942 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. //选修课管理使用合班模式
  613. 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,st.AttendOrNo,st.Sort,st.ClockPlace,st.ADPhoto,st.ALon,st.ALat,st.AIsOut,st.ARemark
  614. from
  615. (select olpoeid from ElectiveMergeItem
  616. where emid in (select emid from ElectiveMergeItem aa left
  617. join StuSelectLessonListOfElective bb on aa.olpoeid = bb.olpeid
  618. where bb.StuNo = @userAccount and bb.Status = 2
  619. and bb.AcademicYearNo = @strAcademicYear and bb.Semester = @strSemester
  620. )) as ccc
  621. left join
  622. ArrangeLessonTermOfElective a on ccc.olpoeid = a.PaiKeId
  623. left join LessonInfo e on a.LessonNo=e.LessonNo
  624. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  625. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  626. left join StuAttendance st on st.StuNo=@userAccount and st.AcademicYearNo=a.AcademicYearNo and st.Semester=a.Semester and st.LessonNo=a.LessonNo and st.LessonSortNo=a.LessonSortNo and st.LessonTime=a.LessonSection and st.EmpNo=a.EmpNo and st.ClassRoomNo=a.ClassRoomNo
  627. where
  628. a.AcademicYearNo = @strAcademicYear and a.Semester = @strSemester
  629. and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  630. and a.CheckMark = '1' ";
  631. //选修课管理不使用合班模式,则采用以下语句;
  632. //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,b.OLPEId,st.AttendOrNo,st.Sort,st.ClockPlace,st.ADPhoto,st.ALon,st.ALat,st.AIsOut,st.ARemark
  633. // from StuSelectLessonListOfElective b
  634. // left join ArrangeLessonTermOfElective a on b.OLPEId=a.PaiKeId
  635. // left join LessonInfo e on a.LessonNo=e.LessonNo
  636. // left join EmpInfo emp on a.EmpNo=emp.EmpNo
  637. // left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  638. // left join StuAttendance st on st.StuNo=@userAccount and st.AcademicYearNo=a.AcademicYearNo and st.Semester=a.Semester and st.LessonNo=a.LessonNo and st.LessonSortNo=a.LessonSortNo and st.LessonTime=a.LessonSection and st.EmpNo=a.EmpNo and st.ClassRoomNo=a.ClassRoomNo
  639. // where b.StuNo=@userAccount and b.Status=2
  640. // and b.AcademicYearNo=@strAcademicYear and b.Semester=@strSemester
  641. // and a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  642. // and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  643. // and a.CheckMark='1' ";
  644. }
  645. else
  646. {
  647. 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
  648. from ArrangeLessonTermOfElective a
  649. left join LessonInfo e on a.LessonNo=e.LessonNo
  650. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  651. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  652. where a.EmpNo=@userAccount
  653. and a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  654. and a.LessonDate >= @startDate and a.LessonDate <=@endDate
  655. and a.CheckMark='1'";
  656. }
  657. try
  658. {
  659. var result = BaseRepository("CollegeMIS").FindList<TimeTable>(sql, new { userAccount, startDate, endDate, strAcademicYear, strSemester });
  660. return result;
  661. }
  662. catch (Exception ex)
  663. {
  664. if (ex is ExceptionEx)
  665. {
  666. throw;
  667. }
  668. else
  669. {
  670. throw ExceptionEx.ThrowServiceException(ex);
  671. }
  672. }
  673. }
  674. /// <summary>
  675. /// 选修课课程表【教务】
  676. /// </summary>
  677. /// <param name="startDate">查询开始时间</param>
  678. /// <param name="endDate">查询截止时间</param>
  679. /// <param name="classNo">班级编号</param>
  680. /// <param name="empNo">教师编号</param>
  681. /// <returns></returns>
  682. public IEnumerable<TimeTable> GetTimeTableInEducation(string startDate, string endDate, string classNo, string empNo, string schoolId)
  683. {
  684. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  685. var strAcademicYear = semesterAndYear.AcademicYearShort;
  686. var strSemester = semesterAndYear.Semester;
  687. 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
  688. from ArrangeLessonTermOfElective a
  689. left join LessonInfo e on a.LessonNo=e.LessonNo
  690. left join EmpInfo emp on a.EmpNo=emp.EmpNo
  691. left join ClassroomInfo cr on a.ClassRoomNo=cr.ClassroomNo
  692. where a.AcademicYearNo=@strAcademicYear and a.Semester=@strSemester
  693. and a.LessonDate>=@startDate and a.LessonDate<=@endDate
  694. and a.CheckMark=1";
  695. try
  696. {
  697. var result = BaseRepository("CollegeMIS").FindList<TimeTable>(sql, new { startDate, endDate, strAcademicYear, strSemester });
  698. if (!string.IsNullOrEmpty(classNo))
  699. {
  700. result = result.Where(x => x.TeachClassNo == classNo);
  701. }
  702. if (!string.IsNullOrEmpty(empNo))
  703. {
  704. result = result.Where(x => x.EmpNo == empNo);
  705. }
  706. if (!string.IsNullOrEmpty(schoolId))
  707. {
  708. result = result.Where(x => x.F_SchoolId == schoolId);
  709. }
  710. return result;
  711. }
  712. catch (Exception ex)
  713. {
  714. if (ex is ExceptionEx)
  715. {
  716. throw;
  717. }
  718. else
  719. {
  720. throw ExceptionEx.ThrowServiceException(ex);
  721. }
  722. }
  723. }
  724. /// <summary>
  725. /// 获取相关课程考勤的学生信息--选修课
  726. /// </summary>
  727. /// <param name="year"></param>
  728. /// <param name="semester"></param>
  729. /// <param name="empno"></param>
  730. /// <param name="lessonNo"></param>
  731. /// <param name="teachClassNo"></param>
  732. /// <param name="lessonSortNo"></param>
  733. /// <param name="classRoomNo"></param>
  734. /// <param name="lessonTime"></param>
  735. /// <returns></returns>
  736. public IEnumerable<StuSelectLessonListEntity> AttendanceStudents(Pagination pagination, string queryJson)
  737. {
  738. try
  739. {
  740. var queryParam = queryJson.ToJObject();
  741. var strSql = new StringBuilder();
  742. strSql.Append("SELECT ");
  743. strSql.Append(@"
  744. a.[StuNo]
  745. ,a.[DeptNo]
  746. ,a.[MajorNo]
  747. ,a.[ClassNo]
  748. ,a.[StuName]
  749. ,a.[GenderNo]
  750. ,a.[AcademicYearNo]
  751. ,a.[Semester]
  752. ,a.[LessonNo]
  753. ,a.[LessonName]
  754. ,a.[LessonSortNo]
  755. ,a.[Grade]
  756. ,a.[EmpNo],a.Id as StuSelectLessonListOfElectiveId,b.ID as StuAttendanceNo,b.AttendOrNo,b.Sort,b.AttenCondition,b.AttenScore
  757. ");
  758. 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 ");
  759. strSql.Append($" and b.LessonDate='{queryParam["lessonDate"]}'");
  760. strSql.Append(" WHERE 1=1 ");
  761. 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"]}%'");
  762. return this.BaseRepository("CollegeMIS").FindList<StuSelectLessonListEntity>(strSql.ToString(), pagination);
  763. }
  764. catch (Exception ex)
  765. {
  766. if (ex is ExceptionEx)
  767. {
  768. throw;
  769. }
  770. else
  771. {
  772. throw ExceptionEx.ThrowServiceException(ex);
  773. }
  774. }
  775. }
  776. /// <summary>
  777. /// 考试系统中获取学生成绩数据
  778. /// </summary>
  779. /// <returns></returns>
  780. public async Task<bool> AsyncStuScoreData()
  781. {
  782. bool result = false;
  783. var db = this.BaseRepository("CollegeMIS").BeginTrans();
  784. try
  785. {
  786. var values = new List<KeyValuePair<string, string>>();
  787. values.Add(new KeyValuePair<string, string>("scoolYear", "18-19"));
  788. values.Add(new KeyValuePair<string, string>("term ", "2"));
  789. var content = new FormUrlEncodedContent(values);
  790. var response = await Client.PostAsync("http://192.168.2.125:8088/app/stuScore", content);
  791. response.EnsureSuccessStatusCode();
  792. var responseString = await response.Content.ReadAsStringAsync();
  793. if (!string.IsNullOrEmpty(responseString))
  794. {
  795. var data = JsonConvert.DeserializeObject<StuScoreRoot>(responseString);
  796. if (data.success)
  797. {
  798. var dataList = data.entity.stuScoreList;
  799. if (dataList.Any())
  800. {
  801. foreach (var item in dataList)
  802. {
  803. if (item.lessonno.IndexOf(',') == -1)//单课程
  804. {
  805. //todo:测试是否能找到对应的成绩记录
  806. 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' ");
  807. 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' ");
  808. }
  809. else//多课程
  810. {
  811. var lessonnoList = item.lessonno.Split(',');
  812. foreach (var lessonnoItem in lessonnoList)
  813. {
  814. 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' ");
  815. }
  816. }
  817. }
  818. db.Commit();
  819. result = true;
  820. }
  821. }
  822. }
  823. }
  824. catch (Exception ex)
  825. {
  826. db.Rollback();
  827. if (ex is ExceptionEx)
  828. {
  829. throw;
  830. }
  831. else
  832. {
  833. throw ExceptionEx.ThrowServiceException(ex);
  834. }
  835. }
  836. return result;
  837. }
  838. #endregion
  839. #region 学生成绩数据
  840. public class StuScoreList
  841. {
  842. public string id { get; set; }
  843. public string examname { get; set; }
  844. public string stuno { get; set; }
  845. public string stuname { get; set; }
  846. public string classno { get; set; }
  847. public string classname { get; set; }
  848. public string teachclassno { get; set; }
  849. public string termendscore { get; set; }
  850. public string examtime { get; set; }
  851. public string lessonno { get; set; }
  852. public string lessonname { get; set; }
  853. public string scoolYear { get; set; }
  854. public string term { get; set; }
  855. }
  856. public class StuScoreEntity
  857. {
  858. /// <summary>
  859. /// true
  860. /// </summary>
  861. public string opflag { get; set; }
  862. /// <summary>
  863. /// 1000
  864. /// </summary>
  865. public string opCode { get; set; }
  866. /// <summary>
  867. /// OK!
  868. /// </summary>
  869. public string message { get; set; }
  870. /// <summary>
  871. /// List
  872. /// </summary>
  873. public List<StuScoreList> stuScoreList { get; set; }
  874. }
  875. public class StuScoreRoot
  876. {
  877. /// <summary>
  878. /// 操作成功
  879. /// </summary>
  880. public string message { get; set; }
  881. /// <summary>
  882. /// Success
  883. /// </summary>
  884. public bool success { get; set; }
  885. /// <summary>
  886. /// Entity
  887. /// </summary>
  888. public StuScoreEntity entity { get; set; }
  889. }
  890. #endregion
  891. }
  892. }