NewReportServices.cs 97 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162
  1. using Aspose.Cells;
  2. using EMIS.CommonLogic.UniversityManage.SpecialtyClassManage;
  3. using EMIS.DataLogic.Repositories;
  4. using EMIS.DataLogic.UniversityManage.SpecialtyClassManage;
  5. using EMIS.Utility;
  6. using EMIS.ViewModel.Report;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. using System.Data.SqlClient;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Text;
  14. namespace EMIS.CommonLogic.Report
  15. {
  16. public class NewReportServices: BaseServices, INewReportServices
  17. {
  18. public ClassmajorDAL ClassmajorDAL { get; set; }
  19. public EducationMissionClassRepository EducationMissionClassRepository { get; set; }
  20. public MemoryStream TeacherselfSchedulingPDF(Guid SchoolyearID, Guid? UserID)
  21. {
  22. ReportHelper rh = new ReportHelper();
  23. MemoryStream ms = new MemoryStream();
  24. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  25. string sql2 = rh.GetReportSql("EducationScheduling/TeacherselfSchedulingView.sql");
  26. List<SqlParameter> sParams = new List<SqlParameter>();
  27. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  28. if (UserID.HasValue)
  29. {
  30. sParams.Add(new SqlParameter("@UserID", UserID));
  31. }
  32. else
  33. {
  34. sParams.Add(new SqlParameter("@UserID", DBNull.Value));
  35. }
  36. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  37. var wk = rh.GetReportTemple("EducationScheduling/TeacherselfSchedulingView.xlsx");
  38. var ws = wk.Worksheets[0];
  39. string title = "{0}{1}学期课程表-{2}", code = "", staffName = "";
  40. if (ds.Tables[1].Rows.Count > 0)
  41. {
  42. code = ds.Tables[1].Rows[0]["Code"].ToString();
  43. staffName = ds.Tables[1].Rows[0]["StaffName"].ToString();
  44. }
  45. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], code, staffName);
  46. //聚合唯一
  47. //ds.Tables[1].DefaultView.Sort = "StartTimes asc";
  48. var dtShow = ds.Tables[1].DefaultView.ToTable(true, "StartTimes", "TimeDesc", "Times");
  49. dtShow.DefaultView.Sort = "StartTimes asc";
  50. dtShow = dtShow.DefaultView.ToTable();
  51. int lineEnd = 2;
  52. for (int i = 0; i < dtShow.Rows.Count; i++)
  53. {
  54. string col1Format = "{0}\n{1}";
  55. ws.Cells[lineEnd, 0].PutValue(string.Format(col1Format, dtShow.Rows[i]["TimeDesc"], dtShow.Rows[i]["Times"] == DBNull.Value ? "" : "<" + dtShow.Rows[i]["Times"].ToString() + ">"));
  56. string condition = "StartTimes='{0}'";
  57. var weekRows = ds.Tables[1].Select(string.Format(condition, dtShow.Rows[i]["StartTimes"]), "MinWeekNum asc");
  58. int lineMax = 0;
  59. for (int j = 0; j < weekRows.Count(); j++)
  60. {
  61. int weekDay = (int)weekRows[j]["Weekday"];
  62. //weekDay += 1;
  63. var curCell = GetLastCell(ws, weekDay, 0, lineEnd, ref lineMax);
  64. try
  65. {
  66. StringBuilder sbCell = new StringBuilder();
  67. sbCell.AppendLine(weekRows[j]["Name"].ToString());
  68. if (weekRows[j]["StudentCount"] != DBNull.Value)
  69. {
  70. sbCell.Append("(" + weekRows[j]["StudentCount"].ToString() + "人)\n");
  71. }
  72. sbCell.AppendLine(weekRows[j]["ClassroomName"].ToString());
  73. if (weekRows[j]["WeekNums"] != DBNull.Value)
  74. {
  75. string weekNum = rh.SetNumberMerge(weekRows[j]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  76. sbCell.AppendFormat("第{0}周\n", weekNum);
  77. }
  78. if (weekRows[j]["TeacherName"] != DBNull.Value)
  79. {
  80. sbCell.AppendFormat("<{0}>\n", weekRows[j]["TeacherName"]);
  81. }
  82. curCell.Value += sbCell.ToString();
  83. if (weekRows[j]["StopWeekNumStr"] != DBNull.Value)
  84. {
  85. string stopStr = rh.SetNumberMerge(weekRows[j]["StopWeekNumStr"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  86. curCell.HtmlString += string.Format("<Br><Font Style=\"COLOR: #FF0000;\">({0}停课)</Font>", stopStr);
  87. }
  88. //curCell.PutValue(sbCell.ToString());
  89. }
  90. catch
  91. {
  92. }
  93. }
  94. var mergeRange = ws.Cells.CreateRange(lineEnd, 0, lineMax + 1, 1);
  95. mergeRange.Merge();
  96. var style1 = rh.BuildBorderStyle(wk);
  97. StyleFlag stFlag1 = new StyleFlag();
  98. stFlag1.Borders = true;
  99. mergeRange.ApplyStyle(style1, stFlag1);
  100. var weekRange = ws.Cells.CreateRange(lineEnd, 1, lineMax + 1, 7);
  101. StyleFlag stFlag2 = new StyleFlag();
  102. stFlag2.LeftBorder = true;
  103. stFlag2.RightBorder = true;
  104. weekRange.ApplyStyle(style1, stFlag2);
  105. StyleFlag stFlag3 = new StyleFlag();
  106. stFlag3.BottomBorder = true;
  107. ws.Cells.CreateRange(lineEnd + lineMax, 1, 1, 7).ApplyStyle(style1, stFlag3);
  108. lineEnd = lineEnd + lineMax + 1;
  109. }
  110. ws.AutoFitRows();
  111. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  112. return ms;
  113. }
  114. public MemoryStream StudentForTeacherSchedulingPDF(Guid SchoolyearID, Guid StudentNo)
  115. {
  116. ReportHelper rh = new ReportHelper();
  117. MemoryStream ms = new MemoryStream();
  118. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  119. string sql2 = rh.GetReportSql("EducationScheduling/StudentForTeacherSchedulingView.sql");
  120. List<SqlParameter> sParams = new List<SqlParameter>();
  121. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  122. sParams.Add(new SqlParameter("@StudentNo", StudentNo));
  123. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  124. var wk = rh.GetReportTemple("EducationScheduling/StudentForTeacherSchedulingView.xlsx");
  125. var ws = wk.Worksheets[0];
  126. string title = "{0}{1}学期课程表-{2}", code = "", classMajorName = "";
  127. if (ds.Tables[1].Rows.Count > 0)
  128. {
  129. code = ds.Tables[1].Rows[0]["Code"].ToString();
  130. classMajorName = ds.Tables[1].Rows[0]["ClassmajorName"].ToString();
  131. }
  132. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], code, classMajorName);
  133. //聚合唯一
  134. //ds.Tables[1].DefaultView.Sort = "StartTimes asc";
  135. var dtShow = ds.Tables[1].DefaultView.ToTable(true, "StartTimes", "TimeDesc", "Times");
  136. dtShow.DefaultView.Sort = "StartTimes asc";
  137. dtShow = dtShow.DefaultView.ToTable();
  138. int lineEnd = 2;
  139. for (int i = 0; i < dtShow.Rows.Count; i++)
  140. {
  141. string col1Format = "{0}\n{1}";
  142. ws.Cells[lineEnd, 0].PutValue(string.Format(col1Format, dtShow.Rows[i]["TimeDesc"], dtShow.Rows[i]["Times"] == DBNull.Value ? "" : "<" + dtShow.Rows[i]["Times"].ToString() + ">"));
  143. string condition = "StartTimes='{0}'";
  144. var weekRows = ds.Tables[1].Select(string.Format(condition, dtShow.Rows[i]["StartTimes"]), "MinWeekNum asc");
  145. int lineMax = 0;
  146. for (int j = 0; j < weekRows.Count(); j++)
  147. {
  148. int weekDay = (int)weekRows[j]["Weekday"];
  149. //weekDay += 1;
  150. var curCell = GetLastCell(ws, weekDay, 0, lineEnd, ref lineMax);
  151. try
  152. {
  153. StringBuilder sbCell = new StringBuilder();
  154. sbCell.AppendLine(weekRows[j]["Name"].ToString());
  155. if (weekRows[j]["ClassroomName"] != DBNull.Value)
  156. {
  157. sbCell.Append(weekRows[j]["ClassroomName"].ToString() + "\n");
  158. }
  159. if (weekRows[j]["WeekNums"] != DBNull.Value)
  160. {
  161. string weekNum = rh.SetNumberMerge(weekRows[j]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  162. sbCell.AppendFormat("第{0}周\n", weekNum);
  163. }
  164. if (weekRows[j]["TeacherName"] != DBNull.Value)
  165. {
  166. sbCell.AppendFormat("<{0}>\n", weekRows[j]["TeacherName"]);
  167. }
  168. curCell.Value += sbCell.ToString();
  169. if (weekRows[j]["StopWeekNumStr"] != DBNull.Value)
  170. {
  171. string stopStr = rh.SetNumberMerge(weekRows[j]["StopWeekNumStr"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  172. curCell.HtmlString += string.Format("<Br><Font Style=\"COLOR: #FF0000;\">({0}停课)</Font>", stopStr);
  173. }
  174. //curCell.PutValue(sbCell.ToString());
  175. }
  176. catch
  177. {
  178. }
  179. }
  180. var mergeRange = ws.Cells.CreateRange(lineEnd, 0, lineMax + 1, 1);
  181. mergeRange.Merge();
  182. var style1 = rh.BuildBorderStyle(wk);
  183. StyleFlag stFlag1 = new StyleFlag();
  184. stFlag1.Borders = true;
  185. mergeRange.ApplyStyle(style1, stFlag1);
  186. var weekRange = ws.Cells.CreateRange(lineEnd, 1, lineMax + 1, 7);
  187. StyleFlag stFlag2 = new StyleFlag();
  188. stFlag2.LeftBorder = true;
  189. stFlag2.RightBorder = true;
  190. weekRange.ApplyStyle(style1, stFlag2);
  191. StyleFlag stFlag3 = new StyleFlag();
  192. stFlag3.BottomBorder = true;
  193. ws.Cells.CreateRange(lineEnd + lineMax, 1, 1, 7).ApplyStyle(style1, stFlag3);
  194. lineEnd = lineEnd + lineMax + 1;
  195. }
  196. ws.AutoFitRows();
  197. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  198. return ms;
  199. }
  200. public MemoryStream TeacherSchedulingPDF(Guid SchoolyearID, Guid? CollegeID, Guid? UserID)
  201. {
  202. ReportHelper rh = new ReportHelper();
  203. MemoryStream ms = new MemoryStream();
  204. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  205. string sql2 = rh.GetReportSql("EducationScheduling/TeacherSchedulingView.sql");
  206. List<SqlParameter> sParams = new List<SqlParameter>();
  207. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  208. if (CollegeID.HasValue)
  209. {
  210. sParams.Add(new SqlParameter("@CollegeID", CollegeID));
  211. }
  212. else
  213. {
  214. sParams.Add(new SqlParameter("@CollegeID", DBNull.Value));
  215. }
  216. if (UserID.HasValue)
  217. {
  218. sParams.Add(new SqlParameter("@UserID", UserID));
  219. }
  220. else
  221. {
  222. sParams.Add(new SqlParameter("@UserID", DBNull.Value));
  223. }
  224. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  225. var wk = rh.GetReportTemple("EducationScheduling/TeacherSchedulingView.xlsx");
  226. var ws = wk.Worksheets[0];
  227. string title = "{0}{1}学期课程表-{2}", code = "", staffName = "";
  228. if (ds.Tables[1].Rows.Count > 0)
  229. {
  230. code = ds.Tables[1].Rows[0]["Code"].ToString();
  231. staffName = ds.Tables[1].Rows[0]["StaffName"].ToString();
  232. }
  233. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], code, staffName);
  234. //聚合唯一
  235. //ds.Tables[1].DefaultView.Sort = "StartTimes asc";
  236. var dtShow = ds.Tables[1].DefaultView.ToTable(true, "StartTimes", "TimeDesc", "Times");
  237. dtShow.DefaultView.Sort = "StartTimes asc";
  238. dtShow = dtShow.DefaultView.ToTable();
  239. int lineEnd = 2;
  240. for (int i = 0; i < dtShow.Rows.Count; i++)
  241. {
  242. string col1Format = "{0}\n{1}";
  243. ws.Cells[lineEnd, 0].PutValue(string.Format(col1Format, dtShow.Rows[i]["TimeDesc"], dtShow.Rows[i]["Times"] == DBNull.Value ? "" : "<" + dtShow.Rows[i]["Times"].ToString() + ">"));
  244. string condition = "StartTimes='{0}'";
  245. var weekRows = ds.Tables[1].Select(string.Format(condition, dtShow.Rows[i]["StartTimes"]), "StartTimes asc");
  246. int lineMax = 0;
  247. for (int j = 0; j < weekRows.Count(); j++)
  248. {
  249. int weekDay = (int)weekRows[j]["Weekday"];
  250. //weekDay += 1;
  251. var curCell = GetLastCell(ws, weekDay, 0, lineEnd, ref lineMax);
  252. try
  253. {
  254. StringBuilder sbCell = new StringBuilder();
  255. sbCell.AppendLine(weekRows[j]["Name"].ToString());
  256. sbCell.Append(weekRows[j]["StudentCount"] == DBNull.Value ? "" : "(" + weekRows[j]["StudentCount"].ToString() + "人)\n");
  257. if (weekRows[j]["ClassroomName"] != DBNull.Value)
  258. {
  259. sbCell.Append(weekRows[j]["ClassroomName"].ToString() + "\n");
  260. }
  261. if (weekRows[j]["WeekNums"] != DBNull.Value)
  262. {
  263. string weekNum = rh.SetNumberMerge(weekRows[j]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  264. sbCell.AppendFormat("第{0}周\n", weekNum);
  265. }
  266. if (weekRows[j]["TeacherName"] != DBNull.Value)
  267. {
  268. sbCell.AppendFormat("<{0}>\n", weekRows[j]["TeacherName"]);
  269. }
  270. curCell.Value += sbCell.ToString();
  271. if (weekRows[j]["StopWeekNumStr"] != DBNull.Value)
  272. {
  273. string stopStr = rh.SetNumberMerge(weekRows[j]["StopWeekNumStr"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  274. curCell.HtmlString += string.Format("<Br><Font Style=\"COLOR: #FF0000;\">({0}停课)</Font>", stopStr);
  275. }
  276. //curCell.PutValue(sbCell.ToString());
  277. }
  278. catch
  279. {
  280. }
  281. }
  282. var mergeRange = ws.Cells.CreateRange(lineEnd, 0, lineMax + 1, 1);
  283. mergeRange.Merge();
  284. var style1 = rh.BuildBorderStyle(wk);
  285. StyleFlag stFlag1 = new StyleFlag();
  286. stFlag1.Borders = true;
  287. mergeRange.ApplyStyle(style1, stFlag1);
  288. var weekRange = ws.Cells.CreateRange(lineEnd, 1, lineMax + 1, 7);
  289. StyleFlag stFlag2 = new StyleFlag();
  290. stFlag2.LeftBorder = true;
  291. stFlag2.RightBorder = true;
  292. weekRange.ApplyStyle(style1, stFlag2);
  293. StyleFlag stFlag3 = new StyleFlag();
  294. stFlag3.BottomBorder = true;
  295. ws.Cells.CreateRange(lineEnd + lineMax, 1, 1, 7).ApplyStyle(style1, stFlag3);
  296. lineEnd = lineEnd + lineMax + 1;
  297. }
  298. ws.AutoFitRows();
  299. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  300. return ms;
  301. }
  302. public MemoryStream TeacherPrintingSchedulingPDF(Guid SchoolyearID, Guid? CollegeID)
  303. {
  304. try
  305. {
  306. ReportHelper rh = new ReportHelper();
  307. MemoryStream ms = new MemoryStream();
  308. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  309. string sql2 = rh.GetReportSql("EducationScheduling/TeacherSchedulingView.sql");
  310. var wk = rh.GetReportTemple("EducationScheduling/TeacherSchedulingView.xlsx");
  311. var templateSheetCount = wk.Worksheets.Count;
  312. List<SqlParameter> teacherParams = new List<SqlParameter>();
  313. teacherParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  314. if (CollegeID.HasValue)
  315. {
  316. teacherParams.Add(new SqlParameter("@CollegeID", CollegeID));
  317. }
  318. else
  319. {
  320. teacherParams.Add(new SqlParameter("@CollegeID", DBNull.Value));
  321. }
  322. teacherParams.Add(new SqlParameter("@UserID", DBNull.Value));
  323. var teacherds = this.UnitOfWork.QuerySQL(sql2, teacherParams);
  324. var tsReportViewList = DateTableHelper.DataTableToList<TeacherSchedulingView>(teacherds.Tables[0]);
  325. List<Guid?> teacherIDList = tsReportViewList.Select(x => x.UserID).Distinct().ToList();
  326. for (int i = templateSheetCount; i < teacherIDList.Count; i += templateSheetCount)
  327. {
  328. for (int index = 0; index < templateSheetCount; index++)
  329. {
  330. wk.Worksheets.AddCopy(index); //.CopyTo(wk, "Sheet" + (i + 1).ToString(), true, true);
  331. }
  332. }
  333. for (int m = 0; m < teacherIDList.Count(); m++)
  334. {
  335. var userID = teacherIDList[m];
  336. List<SqlParameter> sParams = new List<SqlParameter>();
  337. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  338. if (CollegeID.HasValue)
  339. {
  340. sParams.Add(new SqlParameter("@CollegeID", CollegeID));
  341. }
  342. else
  343. {
  344. sParams.Add(new SqlParameter("@CollegeID", DBNull.Value));
  345. }
  346. sParams.Add(new SqlParameter("@UserID", userID));
  347. //if (UserID.HasValue)
  348. //{
  349. // sParams.Add(new SqlParameter("@UserID", UserID));
  350. //}
  351. //else
  352. //{
  353. // sParams.Add(new SqlParameter("@UserID", DBNull.Value));
  354. //}
  355. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  356. var ws = wk.Worksheets[m];
  357. string title = "{0}{1}学期课程表-{2}", code = "", staffName = "";
  358. if (ds.Tables[1].Rows.Count > 0)
  359. {
  360. code = ds.Tables[1].Rows[0]["Code"].ToString();
  361. staffName = ds.Tables[1].Rows[0]["StaffName"].ToString();
  362. }
  363. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], code, staffName);
  364. //聚合唯一
  365. //ds.Tables[1].DefaultView.Sort = "StartTimes asc";
  366. var dtShow = ds.Tables[1].DefaultView.ToTable(true, "StartTimes", "TimeDesc", "Times");
  367. dtShow.DefaultView.Sort = "StartTimes asc";
  368. dtShow = dtShow.DefaultView.ToTable();
  369. int lineEnd = 2;
  370. for (int i = 0; i < dtShow.Rows.Count; i++)
  371. {
  372. string col1Format = "{0}\n{1}";
  373. ws.Cells[lineEnd, 0].PutValue(string.Format(col1Format, dtShow.Rows[i]["TimeDesc"], dtShow.Rows[i]["Times"] == DBNull.Value ? "" : "<" + dtShow.Rows[i]["Times"].ToString() + ">"));
  374. string condition = "StartTimes='{0}'";
  375. var weekRows = ds.Tables[1].Select(string.Format(condition, dtShow.Rows[i]["StartTimes"]), "StartTimes asc");
  376. int lineMax = 0;
  377. for (int j = 0; j < weekRows.Count(); j++)
  378. {
  379. int weekDay = (int)weekRows[j]["Weekday"];
  380. //weekDay += 1;
  381. var curCell = GetLastCell(ws, weekDay, 0, lineEnd, ref lineMax);
  382. try
  383. {
  384. StringBuilder sbCell = new StringBuilder();
  385. sbCell.AppendLine(weekRows[j]["Name"].ToString());
  386. sbCell.Append(weekRows[j]["StudentCount"] == DBNull.Value ? "" : "(" + weekRows[j]["StudentCount"].ToString() + "人)\n");
  387. if (weekRows[j]["ClassroomName"] != DBNull.Value)
  388. {
  389. sbCell.Append(weekRows[j]["ClassroomName"].ToString() + "\n");
  390. }
  391. if (weekRows[j]["WeekNums"] != DBNull.Value)
  392. {
  393. string weekNum = rh.SetNumberMerge(weekRows[j]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  394. sbCell.AppendFormat("第{0}周\n", weekNum);
  395. }
  396. if (weekRows[j]["TeacherName"] != DBNull.Value)
  397. {
  398. sbCell.AppendFormat("<{0}>\n", weekRows[j]["TeacherName"]);
  399. }
  400. curCell.Value += sbCell.ToString();
  401. if (weekRows[j]["StopWeekNumStr"] != DBNull.Value)
  402. {
  403. string stopStr = rh.SetNumberMerge(weekRows[j]["StopWeekNumStr"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  404. curCell.HtmlString += string.Format("<Br><Font Style=\"COLOR: #FF0000;\">({0}停课)</Font>", stopStr);
  405. }
  406. //curCell.PutValue(sbCell.ToString());
  407. }
  408. catch
  409. {
  410. }
  411. }
  412. var mergeRange = ws.Cells.CreateRange(lineEnd, 0, lineMax + 1, 1);
  413. mergeRange.Merge();
  414. var style1 = rh.BuildBorderStyle(wk);
  415. StyleFlag stFlag1 = new StyleFlag();
  416. stFlag1.Borders = true;
  417. mergeRange.ApplyStyle(style1, stFlag1);
  418. var weekRange = ws.Cells.CreateRange(lineEnd, 1, lineMax + 1, 7);
  419. StyleFlag stFlag2 = new StyleFlag();
  420. stFlag2.LeftBorder = true;
  421. stFlag2.RightBorder = true;
  422. weekRange.ApplyStyle(style1, stFlag2);
  423. StyleFlag stFlag3 = new StyleFlag();
  424. stFlag3.BottomBorder = true;
  425. ws.Cells.CreateRange(lineEnd + lineMax, 1, 1, 7).ApplyStyle(style1, stFlag3);
  426. lineEnd = lineEnd + lineMax + 1;
  427. }
  428. ws.AutoFitRows();
  429. }
  430. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  431. return ms;
  432. }
  433. catch (Exception ex)
  434. {
  435. throw ex;
  436. }
  437. }
  438. public MemoryStream ClassmajorSchedulingPDF(Guid SchoolyearID, Guid? CollegeID, Guid? ClassmajorID, int? Years)
  439. {
  440. ReportHelper rh = new ReportHelper();
  441. MemoryStream ms = new MemoryStream();
  442. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  443. string sql2 = rh.GetReportSql("EducationScheduling/ClassmajorWithSchedule.sql");
  444. List<SqlParameter> sParams = new List<SqlParameter>();
  445. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  446. if (CollegeID.HasValue)
  447. {
  448. sParams.Add(new SqlParameter("@CollegeID", CollegeID));
  449. }
  450. else
  451. {
  452. sParams.Add(new SqlParameter("@CollegeID", DBNull.Value));
  453. }
  454. if (ClassmajorID.HasValue)
  455. {
  456. sParams.Add(new SqlParameter("@ClassmajorID", ClassmajorID));
  457. }
  458. else
  459. {
  460. sParams.Add(new SqlParameter("@ClassmajorID", DBNull.Value));
  461. }
  462. if (Years.HasValue)
  463. {
  464. sParams.Add(new SqlParameter("@Years", Years));
  465. }
  466. else
  467. {
  468. sParams.Add(new SqlParameter("@Years", DBNull.Value));
  469. }
  470. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  471. var wk = rh.GetReportTemple("EducationScheduling/ClassmajorSchedulingView.xlsx");
  472. var ws = wk.Worksheets[0];
  473. string title = "{0}{1}学期课程表-{2}", code = "", classMajorName = "";
  474. if (ds.Tables[1].Rows.Count > 0)
  475. {
  476. code = ds.Tables[1].Rows[0]["Code"].ToString();
  477. classMajorName = ds.Tables[1].Rows[0]["ClassMajorName"].ToString();
  478. }
  479. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], code, classMajorName);
  480. //聚合唯一
  481. //ds.Tables[1].DefaultView.Sort = "StartTimes asc";
  482. var dtShow = ds.Tables[1].DefaultView.ToTable(true, "StartTimes", "TimeDesc", "Times");
  483. dtShow.DefaultView.Sort = "StartTimes asc";
  484. dtShow = dtShow.DefaultView.ToTable();
  485. int lineEnd = 2;
  486. for (int i = 0; i < dtShow.Rows.Count; i++)
  487. {
  488. string col1Format = "{0}\n{1}";
  489. ws.Cells[lineEnd, 0].PutValue(string.Format(col1Format, dtShow.Rows[i]["TimeDesc"], dtShow.Rows[i]["Times"] == DBNull.Value ? "" : "<" + dtShow.Rows[i]["Times"].ToString() + ">"));
  490. string condition = "StartTimes='{0}'";
  491. var weekRows = ds.Tables[1].Select(string.Format(condition, dtShow.Rows[i]["StartTimes"]), "MinWeekNum asc");
  492. int lineMax = 0;
  493. for (int j = 0; j < weekRows.Count(); j++)
  494. {
  495. int weekDay = (int)weekRows[j]["Weekday"];
  496. //weekDay += 1;
  497. var curCell = GetLastCell(ws, weekDay, 0, lineEnd, ref lineMax);
  498. try
  499. {
  500. StringBuilder sbCell = new StringBuilder();
  501. sbCell.AppendLine(weekRows[j]["Name"].ToString());
  502. sbCell.Append(weekRows[j]["StudentCount"] == DBNull.Value ? "" : "(" + weekRows[j]["StudentCount"].ToString() + "人)\n");
  503. if (weekRows[j]["ClassroomName"] != DBNull.Value)
  504. {
  505. sbCell.Append(weekRows[j]["ClassroomName"].ToString() + "\n");
  506. }
  507. if (weekRows[j]["WeekNums"] != DBNull.Value)
  508. {
  509. string weekNum = rh.SetNumberMerge(weekRows[j]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  510. sbCell.AppendFormat("第{0}周\n", weekNum);
  511. }
  512. if (weekRows[j]["TeacherName"] != DBNull.Value)
  513. {
  514. sbCell.AppendFormat("<{0}>\n", weekRows[j]["TeacherName"]);
  515. }
  516. curCell.Value += sbCell.ToString();
  517. if (weekRows[j]["StopWeekNumStr"] != DBNull.Value)
  518. {
  519. string stopStr = rh.SetNumberMerge(weekRows[j]["StopWeekNumStr"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  520. curCell.HtmlString += string.Format("<Br><Font Style=\"COLOR: #FF0000;\">({0}停课)</Font>", stopStr);
  521. }
  522. //curCell.PutValue(sbCell.ToString());
  523. }
  524. catch
  525. {
  526. }
  527. }
  528. var mergeRange = ws.Cells.CreateRange(lineEnd, 0, lineMax + 1, 1);
  529. mergeRange.Merge();
  530. var style1 = rh.BuildBorderStyle(wk);
  531. StyleFlag stFlag1 = new StyleFlag();
  532. stFlag1.Borders = true;
  533. mergeRange.ApplyStyle(style1, stFlag1);
  534. var weekRange = ws.Cells.CreateRange(lineEnd, 1, lineMax + 1, 7);
  535. StyleFlag stFlag2 = new StyleFlag();
  536. stFlag2.LeftBorder = true;
  537. stFlag2.RightBorder = true;
  538. weekRange.ApplyStyle(style1, stFlag2);
  539. StyleFlag stFlag3 = new StyleFlag();
  540. stFlag3.BottomBorder = true;
  541. ws.Cells.CreateRange(lineEnd + lineMax, 1, 1, 7).ApplyStyle(style1, stFlag3);
  542. lineEnd = lineEnd + lineMax + 1;
  543. }
  544. ws.AutoFitRows();
  545. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  546. return ms;
  547. }
  548. public MemoryStream ClassmajorPrintingSchedulingPDF(Guid SchoolyearID, Guid? CollegeID)
  549. {
  550. try
  551. {
  552. ReportHelper rh = new ReportHelper();
  553. MemoryStream ms = new MemoryStream();
  554. var wk = rh.GetReportTemple("EducationScheduling/ClassmajorSchedulingView.xlsx");
  555. var templateSheetCount = wk.Worksheets.Count;
  556. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  557. string sql2 = rh.GetReportSql("EducationScheduling/ClassmajorWithSchedule.sql");
  558. List<SqlParameter> classParams = new List<SqlParameter>();
  559. classParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  560. if (CollegeID.HasValue)
  561. {
  562. //sParams.Add(new SqlParameter("@CollegeID", CollegeID));
  563. classParams.Add(new SqlParameter("@CollegeID", CollegeID));
  564. }
  565. else
  566. {
  567. //sParams.Add(new SqlParameter("@CollegeID", DBNull.Value));
  568. classParams.Add(new SqlParameter("@CollegeID", DBNull.Value));
  569. }
  570. classParams.Add(new SqlParameter("@ClassmajorID", DBNull.Value));
  571. classParams.Add(new SqlParameter("@Years", DBNull.Value));
  572. var classds = this.UnitOfWork.QuerySQL(sql2, classParams);
  573. //var classTable = classds.Tables[0];
  574. var cpsReportViewList = DateTableHelper.DataTableToList<ClassmajorPrintingSchedulingReportView>(classds.Tables[0]);
  575. List<Guid?> classmajorIDList = cpsReportViewList.Select(x => x.ClassmajorID).Distinct().ToList();
  576. for (int i = templateSheetCount; i < classmajorIDList.Count; i += templateSheetCount)
  577. {
  578. for (int index = 0; index < templateSheetCount; index++)
  579. {
  580. wk.Worksheets.AddCopy(index); //.CopyTo(wk, "Sheet" + (i + 1).ToString(), true, true);
  581. }
  582. }
  583. for (int claI = 0; claI < classmajorIDList.Count(); claI++)
  584. {
  585. List<SqlParameter> sParams = new List<SqlParameter>();
  586. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  587. if (CollegeID.HasValue)
  588. {
  589. sParams.Add(new SqlParameter("@CollegeID", CollegeID));
  590. }
  591. else
  592. {
  593. sParams.Add(new SqlParameter("@CollegeID", DBNull.Value));
  594. }
  595. var ClassmajorID = classmajorIDList[claI];
  596. var cpsReportListByClassmajorID = cpsReportViewList.Where(x => x.ClassmajorID == ClassmajorID).ToList();
  597. sParams.Add(new SqlParameter("@ClassmajorID", ClassmajorID));
  598. sParams.Add(new SqlParameter("@Years", DBNull.Value));
  599. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  600. var ws = wk.Worksheets[claI];
  601. string title = "{0}{1}学期课程表-{2}", code = "", classMajorName = "";
  602. if(ds.Tables.Count == 0)
  603. {
  604. continue;
  605. }
  606. if (cpsReportListByClassmajorID.Count > 0)
  607. {
  608. code = cpsReportListByClassmajorID.FirstOrDefault().Code.ToString();
  609. classMajorName = cpsReportListByClassmajorID.FirstOrDefault().ClassMajorName.ToString();
  610. }
  611. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], code, classMajorName);
  612. //聚合唯一
  613. //ds.Tables[1].DefaultView.Sort = "StartTimes asc";
  614. var dtShow = ds.Tables[1].DefaultView.ToTable(true, "StartTimes", "TimeDesc", "Times");
  615. dtShow.DefaultView.Sort = "StartTimes asc";
  616. dtShow = dtShow.DefaultView.ToTable();
  617. int lineEnd = 2;
  618. for (int i = 0; i < dtShow.Rows.Count; i++)
  619. {
  620. string col1Format = "{0}\n{1}";
  621. ws.Cells[lineEnd, 0].PutValue(string.Format(col1Format, dtShow.Rows[i]["TimeDesc"], dtShow.Rows[i]["Times"] == DBNull.Value ? "" : "<" + dtShow.Rows[i]["Times"].ToString() + ">"));
  622. string condition = "StartTimes='{0}'";
  623. var weekRows = ds.Tables[1].Select(string.Format(condition, dtShow.Rows[i]["StartTimes"]), "MinWeekNum asc");
  624. int lineMax = 0;
  625. for (int j = 0; j < weekRows.Count(); j++)
  626. {
  627. int weekDay = (int)weekRows[j]["Weekday"];
  628. //weekDay += 1;
  629. var curCell = GetLastCell(ws, weekDay, 0, lineEnd, ref lineMax);
  630. try
  631. {
  632. StringBuilder sbCell = new StringBuilder();
  633. sbCell.AppendLine(weekRows[j]["Name"].ToString());
  634. sbCell.Append(weekRows[j]["StudentCount"] == DBNull.Value ? "" : "(" + weekRows[j]["StudentCount"].ToString() + "人)\n");
  635. if (weekRows[j]["ClassroomName"] != DBNull.Value)
  636. {
  637. sbCell.Append(weekRows[j]["ClassroomName"].ToString() + "\n");
  638. }
  639. if (weekRows[j]["WeekNums"] != DBNull.Value)
  640. {
  641. string weekNum = rh.SetNumberMerge(weekRows[j]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  642. sbCell.AppendFormat("第{0}周\n", weekNum);
  643. }
  644. if (weekRows[j]["TeacherName"] != DBNull.Value)
  645. {
  646. sbCell.AppendFormat("<{0}>\n", weekRows[j]["TeacherName"]);
  647. }
  648. curCell.Value += sbCell.ToString();
  649. if (weekRows[j]["StopWeekNumStr"] != DBNull.Value)
  650. {
  651. string stopStr = rh.SetNumberMerge(weekRows[j]["StopWeekNumStr"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  652. curCell.HtmlString += string.Format("<Br><Font Style=\"COLOR: #FF0000;\">({0}停课)</Font>", stopStr);
  653. }
  654. //curCell.PutValue(sbCell.ToString());
  655. }
  656. catch
  657. {
  658. }
  659. }
  660. var mergeRange = ws.Cells.CreateRange(lineEnd, 0, lineMax + 1, 1);
  661. mergeRange.Merge();
  662. var style1 = rh.BuildBorderStyle(wk);
  663. StyleFlag stFlag1 = new StyleFlag();
  664. stFlag1.Borders = true;
  665. mergeRange.ApplyStyle(style1, stFlag1);
  666. var weekRange = ws.Cells.CreateRange(lineEnd, 1, lineMax + 1, 7);
  667. StyleFlag stFlag2 = new StyleFlag();
  668. stFlag2.LeftBorder = true;
  669. stFlag2.RightBorder = true;
  670. weekRange.ApplyStyle(style1, stFlag2);
  671. StyleFlag stFlag3 = new StyleFlag();
  672. stFlag3.BottomBorder = true;
  673. ws.Cells.CreateRange(lineEnd + lineMax, 1, 1, 7).ApplyStyle(style1, stFlag3);
  674. lineEnd = lineEnd + lineMax + 1;
  675. }
  676. ws.AutoFitRows();
  677. }
  678. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  679. return ms;
  680. }
  681. catch (Exception ex)
  682. {
  683. throw ex;
  684. }
  685. }
  686. public MemoryStream ClassroomReportPDF(Guid SchoolyearID, Guid? BuildingsInfoID, Guid? ClassroomID)
  687. {
  688. ReportHelper rh = new ReportHelper();
  689. MemoryStream ms = new MemoryStream();
  690. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  691. string sql2 = rh.GetReportSql("EducationScheduling/ClassroomSchedulingView.sql");
  692. List<SqlParameter> sParams = new List<SqlParameter>();
  693. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  694. if (BuildingsInfoID.HasValue)
  695. {
  696. sParams.Add(new SqlParameter("@BuildingsInfoID", BuildingsInfoID));
  697. }
  698. else
  699. {
  700. sParams.Add(new SqlParameter("@BuildingsInfoID", DBNull.Value));
  701. }
  702. if (ClassroomID.HasValue)
  703. {
  704. sParams.Add(new SqlParameter("@ClassroomID", ClassroomID));
  705. }
  706. else
  707. {
  708. sParams.Add(new SqlParameter("@ClassroomID", DBNull.Value));
  709. }
  710. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  711. var wk = rh.GetReportTemple("EducationScheduling/ClassroomSchedulingView.xlsx");
  712. var ws = wk.Worksheets[0];
  713. string title = "{0}{1}学期课程表-{2}", code = "", classroomName = "";
  714. if (ds.Tables[1].Rows.Count > 0)
  715. {
  716. code = ds.Tables[1].Rows[0]["Code"].ToString();
  717. classroomName = ds.Tables[1].Rows[0]["ClassroomName"].ToString();
  718. }
  719. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], code, classroomName);
  720. //聚合唯一
  721. //ds.Tables[1].DefaultView.Sort = "StartTimes asc";
  722. var dtShow = ds.Tables[1].DefaultView.ToTable(true, "StartTimes", "TimeDesc", "Times");
  723. dtShow.DefaultView.Sort = "StartTimes asc";
  724. dtShow = dtShow.DefaultView.ToTable();
  725. int lineEnd = 2;
  726. for (int i = 0; i < dtShow.Rows.Count; i++)
  727. {
  728. string col1Format = "{0}\n{1}";
  729. ws.Cells[lineEnd, 0].PutValue(string.Format(col1Format, dtShow.Rows[i]["TimeDesc"], dtShow.Rows[i]["Times"] == DBNull.Value ? "" : "<" + dtShow.Rows[i]["Times"].ToString() + ">"));
  730. string condition = "StartTimes='{0}'";
  731. var weekRows = ds.Tables[1].Select(string.Format(condition, dtShow.Rows[i]["StartTimes"]), "StartTimes asc");
  732. int lineMax = 0;
  733. for (int j = 0; j < weekRows.Count(); j++)
  734. {
  735. //Name
  736. int weekDay = (int)weekRows[j]["Weekday"];
  737. //weekDay += 1;
  738. var curCell = GetLastCell(ws, weekDay, 0, lineEnd, ref lineMax);
  739. try
  740. {
  741. StringBuilder sbCell = new StringBuilder();
  742. sbCell.AppendLine(weekRows[j]["Name"].ToString());
  743. sbCell.Append(weekRows[j]["StudentCount"] == DBNull.Value ? "" : "(" + weekRows[j]["StudentCount"].ToString() + "人)\n");
  744. if (weekRows[j]["Name"] != DBNull.Value)
  745. {
  746. sbCell.Append(weekRows[j]["ClassroomName"].ToString() + "\n");
  747. }
  748. if (weekRows[j]["WeekNums"] != DBNull.Value)
  749. {
  750. string weekNum = rh.SetNumberMerge(weekRows[j]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  751. sbCell.AppendFormat("第{0}周\n", weekNum);
  752. }
  753. if (weekRows[j]["TeacherName"] != DBNull.Value)
  754. {
  755. sbCell.AppendFormat("<{0}>\n", weekRows[j]["TeacherName"]);
  756. }
  757. curCell.Value = sbCell.ToString();
  758. //curCell.PutValue(sbCell.ToString());
  759. }
  760. catch
  761. {
  762. }
  763. }
  764. var mergeRange = ws.Cells.CreateRange(lineEnd, 0, lineMax + 1, 1);
  765. mergeRange.Merge();
  766. var style1 = rh.BuildBorderStyle(wk);
  767. StyleFlag stFlag1 = new StyleFlag();
  768. stFlag1.Borders = true;
  769. mergeRange.ApplyStyle(style1, stFlag1);
  770. var weekRange = ws.Cells.CreateRange(lineEnd, 1, lineMax + 1, 7);
  771. StyleFlag stFlag2 = new StyleFlag();
  772. stFlag2.LeftBorder = true;
  773. stFlag2.RightBorder = true;
  774. weekRange.ApplyStyle(style1, stFlag2);
  775. StyleFlag stFlag3 = new StyleFlag();
  776. stFlag3.BottomBorder = true;
  777. ws.Cells.CreateRange(lineEnd + lineMax, 1, 1, 7).ApplyStyle(style1, stFlag3);
  778. lineEnd = lineEnd + lineMax + 1;
  779. }
  780. ws.AutoFitRows();
  781. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  782. return ms;
  783. }
  784. public MemoryStream DepartmentSchedulingPDF(Guid SchoolyearID, Guid CollegeID, Guid DepartmentID, Guid? HandleModeID)
  785. {
  786. ReportHelper rh = new ReportHelper();
  787. MemoryStream ms = new MemoryStream();
  788. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  789. string sql2 = rh.GetReportSql("EducationScheduling/DepartmentWithSchedule.sql");
  790. List<SqlParameter> sParams = new List<SqlParameter>();
  791. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  792. sParams.Add(new SqlParameter("@CollegeID ", CollegeID));
  793. sParams.Add(new SqlParameter("@DepartmentID", DepartmentID));
  794. if (HandleModeID.HasValue)
  795. {
  796. sParams.Add(new SqlParameter("@HandleModeID", HandleModeID));
  797. }
  798. else
  799. {
  800. sParams.Add(new SqlParameter("@HandleModeID", DBNull.Value));
  801. }
  802. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  803. var wk = rh.GetReportTemple("EducationScheduling/DepartmentWithSchedule.xlsx");
  804. var ws = wk.Worksheets[0];
  805. string title = "{0}{1}学期-{2}课程表", schoolyearCode = "", DepartmentName = "";
  806. if (ds.Tables[1].Rows.Count > 0)
  807. {
  808. schoolyearCode = ds.Tables[1].Rows[0]["SchoolyearCode"].ToString();
  809. DepartmentName = ds.Tables[1].Rows[0]["DepartmentName"].ToString();
  810. }
  811. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], schoolyearCode, DepartmentName);
  812. //聚合唯一
  813. var dtShow = ds.Tables[1].DefaultView.ToTable(true, "CourseName", "EducationMissionClassName", "TotalHours", "StudentCount", "TeacherName", "TitleDesc");
  814. for (int i = 0; i < dtShow.Rows.Count; i++)
  815. {
  816. ws.Cells[i + 2, 0].PutValue(dtShow.Rows[i]["CourseName"]);
  817. ws.Cells[i + 2, 1].PutValue(dtShow.Rows[i]["EducationMissionClassName"]);
  818. ws.Cells[i + 2, 2].PutValue(dtShow.Rows[i]["TotalHours"]);
  819. ws.Cells[i + 2, 3].PutValue(dtShow.Rows[i]["StudentCount"]);
  820. ws.Cells[i + 2, 4].PutValue(dtShow.Rows[i]["TeacherName"]);
  821. ws.Cells[i + 2, 5].PutValue(dtShow.Rows[i]["TitleDesc"]);
  822. //周几方法
  823. try
  824. {
  825. string condition = "CourseName='{0}' and EducationMissionClassName='{1}' and TotalHours='{2}' and StudentCount='{3}' and TeacherName='{4}' and TitleDesc='{5}' ";
  826. var weekRows = ds.Tables[1].Select(string.Format(condition, dtShow.Rows[i].ItemArray), "StartTimes asc");
  827. for (int j = 0; j < weekRows.Count(); j++)
  828. {
  829. int weekDay = (int)weekRows[j]["Weekday"] == 0 ? 7 : (int)weekRows[j]["Weekday"];
  830. weekDay += 5;
  831. var curCell = ws.Cells[i + 2, weekDay];
  832. if (weekRows[j]["ClassroomID"] != DBNull.Value)
  833. {
  834. string weekNum = rh.SetNumberMerge(weekRows[j]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  835. string timeNum = rh.SetNumberMerge(weekRows[j]["Times"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  836. if (curCell.Value != null && curCell.Value.ToString() != "")
  837. {
  838. curCell.Value += " \n";
  839. }
  840. else
  841. {
  842. curCell.Value = "";
  843. }
  844. curCell.Value += string.Format("第{0}周\n第{1}节\n({2})", weekNum, timeNum, weekRows[j]["ClassroomName"]);
  845. }
  846. if (weekRows[j]["StopWeekNumStr"] != DBNull.Value)
  847. {
  848. string stopStr = rh.SetNumberMerge(weekRows[j]["StopWeekNumStr"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  849. curCell.HtmlString += string.Format("<Br><Font Style=\"COLOR: #FF0000;\">({0}停课)</Font>", stopStr);
  850. }
  851. }
  852. }
  853. catch (Exception ex)
  854. {
  855. var a = ex;
  856. }
  857. }
  858. var style = rh.BuildBorderStyle(wk);
  859. //style.IsTextWrapped = true;
  860. if (dtShow.Rows.Count > 0)
  861. {
  862. var wstrange = ws.Cells.CreateRange(2, 0, dtShow.Rows.Count, 13);
  863. StyleFlag stFlag = new StyleFlag();
  864. stFlag.Borders = true;
  865. wstrange.ApplyStyle(style, stFlag);
  866. }
  867. ws.AutoFitColumns(0, 5);
  868. ws.AutoFitRows();
  869. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  870. return ms;
  871. }
  872. public MemoryStream CollegeSchedulingPDF(Guid SchoolyearID, Guid? CollegeID, int? Years)
  873. {
  874. ReportHelper rh = new ReportHelper();
  875. MemoryStream ms = new MemoryStream();
  876. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  877. string sql2 = rh.GetReportSql("EducationScheduling/ClassmajorWithSchedule.sql");
  878. List<SqlParameter> sParams = new List<SqlParameter>();
  879. sParams.Add(new SqlParameter("@SchoolyearID", SchoolyearID));
  880. if (CollegeID.HasValue)
  881. {
  882. sParams.Add(new SqlParameter("@CollegeID", CollegeID));
  883. }
  884. else
  885. {
  886. sParams.Add(new SqlParameter("@CollegeID", DBNull.Value));
  887. }
  888. sParams.Add(new SqlParameter("@ClassmajorID", DBNull.Value));
  889. if (Years.HasValue)
  890. {
  891. sParams.Add(new SqlParameter("@Years", Years));
  892. }
  893. else
  894. {
  895. sParams.Add(new SqlParameter("@Years", DBNull.Value));
  896. }
  897. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  898. var wk = rh.GetReportTemple("EducationScheduling/CollegeSchedulingView.xlsx");
  899. var ws = wk.Worksheets[0];
  900. string title = "{0}{1}学期课程表-{2}", code = "", classMajorName = "";
  901. if (ds.Tables[1].Rows.Count > 0)
  902. {
  903. code = ds.Tables[1].Rows[0]["Code"].ToString();
  904. classMajorName = ds.Tables[1].Rows[0]["CollegeName"].ToString();
  905. }
  906. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], code, classMajorName);
  907. var dicWeeks = GetDicWeeks();
  908. var dtTimes = ds.Tables[1].DefaultView.ToTable(true, "StartTimes", "TimeDesc", "Times").AsEnumerable().OrderBy(o => o.Field<int>("StartTimes")).ToList();
  909. //表头
  910. for (int i = 0; i < dicWeeks.Count; i++)
  911. {
  912. var rowFirst = i * dtTimes.Count + 2;
  913. ws.Cells[1, rowFirst].PutValue(dicWeeks[i].Item2);
  914. for (int j = 0; j < dtTimes.Count; j++)
  915. {
  916. string subTitle = "";
  917. if (dtTimes[j]["Times"] != DBNull.Value)
  918. {
  919. subTitle += "<" + dtTimes[j].Field<string>("Times") + ">\n";
  920. }
  921. if (dtTimes[j]["TimeDesc"] != DBNull.Value)
  922. {
  923. subTitle += dtTimes[j].Field<string>("TimeDesc");
  924. }
  925. ws.Cells[2, rowFirst + j].PutValue(subTitle);
  926. }
  927. var subTitleRange = ws.Cells.CreateRange(1, rowFirst, 1, dtTimes.Count);
  928. subTitleRange.Merge();
  929. }
  930. ws.Cells.CreateRange(0, 0, 1, dtTimes.Count * dicWeeks.Count + 2).Merge();
  931. ws.Cells.CreateRange(1, 0, 2, 2).Merge();
  932. var titleRange = ws.Cells.CreateRange(0, 0, 3, dtTimes.Count * dicWeeks.Count + 2);
  933. var style = rh.BuildBorderStyle(wk);
  934. StyleFlag stFlag = new StyleFlag();
  935. stFlag.Borders = true;
  936. titleRange.ApplyStyle(style, stFlag);
  937. //学年和班级聚合
  938. var dtSecond = ds.Tables[1].DefaultView.ToTable(true, "GrademajorID", "GrademajorName", "ClassMajorID", "ClassMajorName");
  939. dtSecond.DefaultView.Sort = "GrademajorName asc";
  940. var dtFirst = dtSecond.DefaultView.ToTable(true, "GrademajorID", "GrademajorName");
  941. int lineEnd = 3;
  942. for (int i = 0; i < dtFirst.Rows.Count; i++)
  943. {
  944. string condition = "GrademajorID='{0}'";
  945. var classRows = dtSecond.Select(string.Format(condition, dtFirst.Rows[i]["GrademajorID"]), "ClassMajorName asc");
  946. int jLineMax = 0;
  947. for (int j = 0; j < classRows.Count(); j++)
  948. {
  949. string conditionItem = "GrademajorID='{0}' and ClassMajorID='{1}'";
  950. var cellItems = ds.Tables[1].Select(string.Format(conditionItem, classRows[j]["GrademajorID"], classRows[j]["ClassMajorID"]));
  951. int klineMax = 0;
  952. for (int k = 0; k < cellItems.Count(); k++)
  953. {
  954. int addCol = 2;
  955. addCol += dtTimes.FindIndex(w => w.Field<int>("StartTimes") == cellItems[k].Field<int>("StartTimes"));
  956. var curCell = GetCrossTimeCell(ws, cellItems[k].Field<int>("Weekday"), dtTimes.Count, addCol, lineEnd + jLineMax, ref klineMax);
  957. //var curCell=GetLastCell(ws,(int)cellItems[k]["Weekday"],
  958. try
  959. {
  960. StringBuilder sbCell = new StringBuilder();
  961. sbCell.AppendLine(cellItems[k]["Name"].ToString());
  962. sbCell.Append(cellItems[k]["StudentCount"] == DBNull.Value ? "" : "(" + cellItems[k]["StudentCount"].ToString() + "人)\n");
  963. if (cellItems[k]["Name"] != DBNull.Value)
  964. {
  965. sbCell.Append(cellItems[k].Field<string>("ClassroomName") + "\n");
  966. }
  967. if (cellItems[k]["WeekNums"] != DBNull.Value)
  968. {
  969. string weekNum = rh.SetNumberMerge(cellItems[k]["WeekNums"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  970. sbCell.AppendFormat("第{0}周\n", weekNum);
  971. }
  972. if (cellItems[k]["TeacherName"] != DBNull.Value)
  973. {
  974. sbCell.AppendFormat("<{0}>\n", cellItems[k]["TeacherName"]);
  975. }
  976. curCell.Value = sbCell.ToString();
  977. if (cellItems[k]["StopWeekNumStr"] != DBNull.Value)
  978. {
  979. string stopStr = rh.SetNumberMerge(cellItems[k]["StopWeekNumStr"].ToString().Split(',').Select(s => int.Parse(s)).ToList());
  980. curCell.HtmlString += string.Format("<Br><Font Style=\"COLOR: #FF0000;\">({0}停课)</Font>", stopStr);
  981. }
  982. //curCell.PutValue(sbCell.ToString());
  983. }
  984. catch
  985. {
  986. }
  987. }
  988. //第二格合并
  989. ws.Cells[lineEnd + jLineMax, 1].Value = classRows[j].Field<string>("ClassMajorName").Replace(classRows[j].Field<string>("GrademajorName"), "");
  990. ws.Cells.CreateRange(lineEnd + jLineMax, 1, klineMax + 1, 1).Merge();
  991. StyleFlag jLineFlag = new StyleFlag();
  992. jLineFlag.LeftBorder = true;
  993. jLineFlag.RightBorder = true;
  994. ws.Cells.CreateRange(lineEnd + jLineMax, 0, klineMax + 1, dtTimes.Count * dicWeeks.Count + 2).ApplyStyle(style, jLineFlag);
  995. StyleFlag jLinebuttFlag = new StyleFlag();
  996. jLinebuttFlag.BottomBorder = true;
  997. ws.Cells.CreateRange(lineEnd + jLineMax + klineMax, 1, 1, dtTimes.Count * dicWeeks.Count + 2).ApplyStyle(style, jLinebuttFlag);
  998. //style
  999. //lineEnd
  1000. jLineMax += klineMax + 1;
  1001. }
  1002. //第一格合并
  1003. ws.Cells[lineEnd, 0].Value = dtFirst.Rows[i].Field<string>("GrademajorName");
  1004. var gRange = ws.Cells.CreateRange(lineEnd, 0, jLineMax, 1);
  1005. gRange.Merge();
  1006. StyleFlag gFlag = new StyleFlag();
  1007. gFlag.Borders = true;
  1008. gRange.ApplyStyle(style, gFlag);
  1009. lineEnd += jLineMax;
  1010. }
  1011. ws.AutoFitRows();
  1012. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  1013. return ms;
  1014. }
  1015. public MemoryStream StudentCountPDF(int? InSchoolStatusID)
  1016. {
  1017. try
  1018. {
  1019. ReportHelper rh = new ReportHelper();
  1020. MemoryStream ms = new MemoryStream();
  1021. StyleFlag commentFlag = new StyleFlag();
  1022. commentFlag.Borders = true;
  1023. commentFlag.Font = true;
  1024. commentFlag.VerticalAlignment = true;
  1025. commentFlag.HorizontalAlignment = true;
  1026. string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  1027. string sql2 = rh.GetReportSql("StudentManage/StudentCountView.sql");
  1028. List<SqlParameter> sParams = new List<SqlParameter>();
  1029. if (InSchoolStatusID.HasValue)
  1030. {
  1031. sParams.Add(new SqlParameter("@InSchoolStatusID", InSchoolStatusID));
  1032. }
  1033. else
  1034. {
  1035. sParams.Add(new SqlParameter("@InSchoolStatusID", DBNull.Value));
  1036. }
  1037. var ds = this.UnitOfWork.QuerySQL(sql1 + "\r\n" + sql2, sParams);
  1038. var wk = rh.GetReportTemple("StudentManage/StudentCountView.xlsx");
  1039. var ws = wk.Worksheets[0];
  1040. var style = rh.BuildBorderStyle(wk);
  1041. int allRow = 4;
  1042. string title = "{0}{1}学生学籍信息统计表", schoolyearCode = "";
  1043. if (ds.Tables[1].Rows.Count > 0)
  1044. {
  1045. schoolyearCode = ds.Tables[1].Rows[0]["SchoolyearCode"].ToString();
  1046. }
  1047. var table1 = DateTableHelper.DataTableToList<StudentCountReportView>(ds.Tables[1]);
  1048. var gradeYearCount = table1.Select(x => x.GradeYear).Distinct().ToList().Count();
  1049. var educationNameList = table1.Select(x => new { x.EducationID, x.EducationName }).Distinct().OrderBy(x => x.EducationID).ToList();
  1050. var studentTypeList = table1.Select(x => new { x.EducationID, x.EducationName, x.StudentType, x.StudentTypeName }).Distinct().OrderBy(x => x.StudentType).ToList();
  1051. var gGradeYearList = table1.GroupBy(x => new { x.GradeYear, x.EducationID, x.EducationName, x.StudentType, x.StudentTypeName }).Select(x => new
  1052. {
  1053. GradeYear = x.Key.GradeYear,
  1054. StudentMaleCount = x.Sum(y => y.StudentMaleCount),
  1055. StudentFemaleCount = x.Sum(y => y.StudentFemaleCount),
  1056. ClassmajorCount = x.Sum(y => y.ClassmajorCount),
  1057. EducationID = x.Key.EducationID,
  1058. EducationName = x.Key.EducationName,
  1059. StudentType = x.Key.StudentType,
  1060. StudentTypeName = x.Key.StudentTypeName,
  1061. }).OrderBy(x => x.GradeYear).ToList();
  1062. var campusNameList = table1.Select(x => new { x.CampusID, x.CampusNo, x.CampusName }).OrderBy(x => x.CampusID).Distinct().OrderBy(x => x.CampusID).ToList();
  1063. var collegeNameList = table1.Select(x => new { x.CampusID, x.CampusNo, x.CampusName, x.CollegeID, x.CollegeNo, x.CollegeName }).Distinct().OrderBy(x => x.CollegeID).ToList();
  1064. var standardNameList = table1.Select(x => new { x.CampusID, x.CampusNo, x.CampusName, x.CollegeID, x.CollegeNo, x.CollegeName, x.StandardID, x.StandardName }).Distinct().OrderBy(x => x.StandardID).ToList();
  1065. var gGradeYearList2 = table1.GroupBy(x => new
  1066. {
  1067. x.GradeYear,
  1068. x.EducationID,
  1069. x.EducationName,
  1070. x.StudentType,
  1071. x.StudentTypeName,
  1072. x.CampusID,
  1073. x.CampusNo,
  1074. x.CampusName,
  1075. x.CollegeID,
  1076. x.CollegeNo,
  1077. x.CollegeName,
  1078. x.StandardID,
  1079. x.StandardName
  1080. }).Select(x => new
  1081. {
  1082. GradeYear = x.Key.GradeYear,
  1083. StudentMaleCount = x.Sum(y => y.StudentMaleCount),
  1084. StudentFemaleCount = x.Sum(y => y.StudentFemaleCount),
  1085. ClassmajorCount = x.Sum(y => y.ClassmajorCount),
  1086. EducationID = x.Key.EducationID,
  1087. EducationName = x.Key.EducationName,
  1088. StudentType = x.Key.StudentType,
  1089. StudentTypeName = x.Key.StudentTypeName,
  1090. CampusID = x.Key.CampusID,
  1091. CampusNo = x.Key.CampusNo,
  1092. CampusName = x.Key.CampusName,
  1093. CollegeID = x.Key.CollegeID,
  1094. CollegeNo = x.Key.CollegeNo,
  1095. CollegeName = x.Key.CollegeName,
  1096. StandardID = x.Key.StandardID,
  1097. StandardName = x.Key.StandardName,
  1098. }).OrderBy(x => x.CampusID).ThenBy(x => x.CollegeID).ThenBy(x => x.StandardID).ThenBy(x => x.GradeYear).ToList();
  1099. var collegeTotalList = table1.GroupBy(x => new
  1100. {
  1101. x.CollegeID,
  1102. x.CollegeNo,
  1103. x.CollegeName,
  1104. x.GradeYear,
  1105. x.StudentType,
  1106. x.StudentTypeName,
  1107. x.EducationID,
  1108. x.EducationName,
  1109. }).Select(x => new
  1110. {
  1111. GradeYear = x.Key.GradeYear,
  1112. StudentMaleCount = x.Sum(y => y.StudentMaleCount),
  1113. StudentFemaleCount = x.Sum(y => y.StudentFemaleCount),
  1114. ClassmajorCount = x.Sum(y => y.ClassmajorCount),
  1115. CollegeID = x.Key.CollegeID,
  1116. CollegeNo = x.Key.CollegeNo,
  1117. CollegeName = x.Key.CollegeName,
  1118. StudentType = x.Key.StudentType,
  1119. StudentTypeName = x.Key.StudentTypeName,
  1120. EducationID = x.Key.EducationID,
  1121. EducationName = x.Key.EducationName,
  1122. }).OrderBy(x => x.CollegeID).ThenBy(x => x.GradeYear).ToList();
  1123. ws.Cells[0, 0].Value = string.Format(title, ds.Tables[0].Rows[0]["Name"], schoolyearCode);
  1124. var titleRange = ws.Cells.CreateRange(0, 0, 1, 5 * studentTypeList.Count + 5);
  1125. var titlestyle = rh.BuildBorderStyleAndSize(wk);
  1126. titleRange.Merge();
  1127. StyleFlag titleFlag = new StyleFlag();
  1128. titleFlag.Borders = true;
  1129. titleFlag.Font = true;
  1130. titleFlag.VerticalAlignment = true;
  1131. titleFlag.HorizontalAlignment = true;
  1132. titleRange.ApplyStyle(titlestyle, titleFlag);
  1133. var colCount = 4;
  1134. var rowCount = 1;
  1135. for (int i = 0; i < educationNameList.Count; i++)
  1136. {
  1137. var education = educationNameList[i];
  1138. //第一行标题合并
  1139. ws.Cells[rowCount, colCount].Value = education.EducationName;
  1140. var gRange = ws.Cells.CreateRange(rowCount, colCount, 1, 5);
  1141. gRange.Merge();
  1142. gRange.ApplyStyle(style, commentFlag);
  1143. var stCount = colCount;
  1144. var studentTypeListByEducation = studentTypeList.Where(x => x.EducationID == education.EducationID).ToList();
  1145. for (int j = 0; j < studentTypeListByEducation.Count; j++)
  1146. {
  1147. var studentType = studentTypeListByEducation[j];
  1148. //第三行标题
  1149. ws.Cells[rowCount + 2, stCount].Value = "男";
  1150. ws.Cells[rowCount + 2, stCount].SetStyle(style);
  1151. ws.Cells[rowCount + 2, stCount + 1].Value = "女";
  1152. ws.Cells[rowCount + 2, stCount + 1].SetStyle(style);
  1153. ws.Cells[rowCount + 2, stCount + 2].Value = "总人数";
  1154. ws.Cells[rowCount + 2, stCount + 2].SetStyle(style);
  1155. ws.Cells[rowCount + 2, stCount + 3].Value = "班级数";
  1156. ws.Cells[rowCount + 2, stCount + 3].SetStyle(style);
  1157. //第二行标题合并
  1158. ws.Cells[rowCount + 1, stCount].Value = studentType.StudentTypeName;
  1159. var stRange = ws.Cells.CreateRange(rowCount + 1, stCount, 1, 4);
  1160. stRange.Merge();
  1161. stRange.ApplyStyle(style, commentFlag);
  1162. stCount += 4;
  1163. ws.Cells[rowCount + 1, stCount].Value = "小计";
  1164. var xiaojiRange = ws.Cells.CreateRange(rowCount + 1, stCount, 2, 1);
  1165. xiaojiRange.Merge();
  1166. xiaojiRange.ApplyStyle(style, commentFlag);
  1167. stCount += 1;
  1168. var gradeYearListByStudentType = gGradeYearList.Where(x => x.EducationID == education.EducationID && x.StudentType == studentType.StudentType).ToList();
  1169. int? allSchoolMaleCount = 0;
  1170. int? allSchoolFemaleCount = 0;
  1171. int? allSchoolClassCount = 0;
  1172. for (int k = 0; k < gradeYearListByStudentType.Count; k++)
  1173. {
  1174. var gradeYear = gradeYearListByStudentType[k];
  1175. if (j == 0)
  1176. {
  1177. //年级
  1178. ws.Cells[allRow + k, 3].Value = gradeYear.GradeYear.ToString();
  1179. ws.Cells[allRow + k, 3].SetStyle(style);
  1180. }
  1181. //男
  1182. ws.Cells[allRow + k, 4 + j * 4].Value = gradeYear.StudentMaleCount.ToString();
  1183. ws.Cells[allRow + k, 4 + j * 4].SetStyle(style);
  1184. allSchoolMaleCount += gGradeYearList[i].StudentMaleCount;
  1185. //女
  1186. ws.Cells[allRow + k, 5 + j * 4].Value = gradeYear.StudentFemaleCount.ToString();
  1187. ws.Cells[allRow + k, 5 + j * 4].SetStyle(style);
  1188. allSchoolFemaleCount += gGradeYearList[i].StudentFemaleCount;
  1189. //总
  1190. ws.Cells[allRow + k, 6 + j * 4].Value = (gradeYear.StudentMaleCount + gradeYear.StudentFemaleCount).ToString();
  1191. ws.Cells[allRow + k, 6 + j * 4].SetStyle(style);
  1192. //班级数
  1193. ws.Cells[allRow + k, 7 + j * 4].Value = gradeYear.ClassmajorCount.ToString();
  1194. ws.Cells[allRow + k, 7 + j * 4].SetStyle(style);
  1195. allSchoolClassCount += gGradeYearList[i].ClassmajorCount;
  1196. if (j == studentTypeListByEducation.Count - 1)
  1197. {
  1198. //小计
  1199. var xiaojiCount = gGradeYearList.Where(x => x.EducationID == education.EducationID && x.GradeYear == gradeYear.GradeYear).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1200. ws.Cells[allRow + k, 8 + j * 4].Value = xiaojiCount.ToString();
  1201. ws.Cells[allRow + k, 8 + j * 4].SetStyle(style);
  1202. }
  1203. if (i == educationNameList.Count - 1)
  1204. {
  1205. //总计
  1206. var zongjiCount = gGradeYearList2.Where(x => x.GradeYear == gradeYear.GradeYear).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1207. ws.Cells[allRow + k, 4 + studentTypeListByEducation.Count * 5].Value = zongjiCount.ToString();
  1208. ws.Cells[allRow + k, 4 + studentTypeListByEducation.Count * 5].SetStyle(style);
  1209. }
  1210. }
  1211. //总计
  1212. ws.Cells[allRow + gradeYearListByStudentType.Count(), 4 + j * 4].Value = allSchoolMaleCount;
  1213. ws.Cells[allRow + gradeYearListByStudentType.Count(), 4 + j * 4].SetStyle(style);
  1214. ws.Cells[allRow + gradeYearListByStudentType.Count(), 5 + j * 4].Value = allSchoolFemaleCount;
  1215. ws.Cells[allRow + gradeYearListByStudentType.Count(), 5 + j * 4].SetStyle(style);
  1216. ws.Cells[allRow + gradeYearListByStudentType.Count(), 6 + j * 4].Value = allSchoolMaleCount + allSchoolFemaleCount;
  1217. ws.Cells[allRow + gradeYearListByStudentType.Count(), 6 + j * 4].SetStyle(style);
  1218. ws.Cells[allRow + gradeYearListByStudentType.Count(), 7 + j * 4].Value = allSchoolClassCount;
  1219. ws.Cells[allRow + gradeYearListByStudentType.Count(), 7 + j * 4].SetStyle(style);
  1220. if (j == studentTypeListByEducation.Count - 1)
  1221. {
  1222. //总计小计
  1223. var xiaojiCount = gGradeYearList.Where(x => x.EducationID == education.EducationID).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1224. ws.Cells[allRow + gradeYearListByStudentType.Count(), 8 + j * 4].Value = xiaojiCount.ToString();
  1225. ws.Cells[allRow + gradeYearListByStudentType.Count(), 8 + j * 4].SetStyle(style);
  1226. }
  1227. if (i == educationNameList.Count - 1)
  1228. {
  1229. //总计小计
  1230. var xiaojiCount = gGradeYearList.Where(x => x.EducationID == education.EducationID).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1231. ws.Cells[allRow + gradeYearListByStudentType.Count(), 4 + studentTypeListByEducation.Count * 5].Value = xiaojiCount.ToString();
  1232. ws.Cells[allRow + gradeYearListByStudentType.Count(), 4 + studentTypeListByEducation.Count * 5].SetStyle(style);
  1233. }
  1234. allRow += gradeYearListByStudentType.Count + 1;
  1235. }
  1236. colCount += 5;
  1237. }
  1238. for (int i = 0; i < campusNameList.Count(); i++)
  1239. {
  1240. var campus = campusNameList[i];
  1241. int? campusRowCout = 0;
  1242. var collegeListByCampus = collegeNameList.Where(x => x.CampusID == campus.CampusID).OrderBy(x => x.CollegeID).ToList();
  1243. var campusStartRow = allRow;
  1244. for (int j = 0; j < collegeListByCampus.Count(); j++)
  1245. {
  1246. var college = collegeListByCampus[j];
  1247. int? collegeRowCount = 0;
  1248. //var collegeGradeYearCount = gGradeYearList2.Where(x => x.CampusID == campus.CampusID && x.CollegeID == college.CollegeID).Count();
  1249. //ws.Cells[allRow, 2].Value = college.CollegeName;
  1250. //var collegeRange = ws.Cells.CreateRange(allRow, 2, 1, collegeRowCount.Value);
  1251. //collegeRange.Merge();
  1252. //collegeRange.ApplyStyle(style, commentFlag);
  1253. //campusRowCout += collegeGradeYearCount + 1;
  1254. var startRow = allRow;
  1255. var standardListByCollege = standardNameList.Where(x => x.CampusID == campus.CampusID && x.CollegeID == college.CollegeID).OrderBy(x => x.StandardID).ToList();
  1256. for (int k = 0; k < standardListByCollege.Count(); k++)
  1257. {
  1258. var standard = standardListByCollege[k];
  1259. var standardGradeYearCount = gGradeYearList2.Where(x => x.CampusID == campus.CampusID && x.CollegeID == college.CollegeID
  1260. && x.StandardID == standard.StandardID).Count();
  1261. collegeRowCount += standardGradeYearCount + 1;
  1262. ws.Cells[allRow, 2].Value = standard.StandardName;
  1263. var gRange = ws.Cells.CreateRange(allRow, 2, standardGradeYearCount + 1, 1);
  1264. gRange.Merge();
  1265. gRange.ApplyStyle(style, commentFlag);
  1266. for (int m = 0; m < educationNameList.Count(); m++)
  1267. {
  1268. var education = educationNameList[m];
  1269. var studentTypeListByEducation = studentTypeList.Where(x => x.EducationID == education.EducationID).OrderBy(x => x.StudentType).ToList();
  1270. for (int n = 0; n < studentTypeListByEducation.Count(); n++)
  1271. {
  1272. var studentType = studentTypeListByEducation[n];
  1273. var dbListByStudentType = gGradeYearList2.Where(x => x.CampusID == campus.CampusID && x.CollegeID == college.CollegeID
  1274. && x.StandardID == standard.StandardID && x.EducationID == education.EducationID && x.StudentType == studentType.StudentType).OrderBy(x => x.GradeYear).ToList();
  1275. //int? allSchoolMaleCount = 0;
  1276. //int? allSchoolFemaleCount = 0;
  1277. //int? allSchoolClassCount = 0;
  1278. for (int p = 0; p < dbListByStudentType.Count(); p++)
  1279. {
  1280. var db = dbListByStudentType[p];
  1281. if (n == 0)
  1282. {
  1283. ws.Cells[allRow + p, 3].Value = db.GradeYear;
  1284. ws.Cells[allRow + p, 3].SetStyle(style);
  1285. }
  1286. //男
  1287. ws.Cells[allRow + p, 4 + n * 4].Value = db.StudentMaleCount.ToString();
  1288. ws.Cells[allRow + p, 4 + n * 4].SetStyle(style);
  1289. //allSchoolMaleCount += db.StudentMaleCount;
  1290. //女
  1291. ws.Cells[allRow + p, 5 + n * 4].Value = db.StudentFemaleCount.ToString();
  1292. ws.Cells[allRow + p, 5 + n * 4].SetStyle(style);
  1293. //allSchoolFemaleCount += gGradeYearList[i].StudentFemaleCount;
  1294. //总
  1295. ws.Cells[allRow + p, 6 + n * 4].Value = (db.StudentMaleCount + db.StudentFemaleCount).ToString();
  1296. ws.Cells[allRow + p, 6 + n * 4].SetStyle(style);
  1297. //班级数
  1298. ws.Cells[allRow + p, 7 + n * 4].Value = db.ClassmajorCount.ToString();
  1299. ws.Cells[allRow + p, 7 + n * 4].SetStyle(style);
  1300. //allSchoolClassCount += gGradeYearList[i].ClassmajorCount;
  1301. if (n == studentTypeListByEducation.Count - 1)
  1302. {
  1303. //小计
  1304. var xiaojiCount = gGradeYearList2.Where(x => x.CampusID == campus.CampusID && x.CollegeID == college.CollegeID
  1305. && x.StandardID == standard.StandardID && x.EducationID == education.EducationID
  1306. && x.GradeYear == db.GradeYear).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1307. ws.Cells[allRow + p, 8 + n * 4].Value = xiaojiCount.ToString();
  1308. ws.Cells[allRow + p, 8 + n * 4].SetStyle(style);
  1309. }
  1310. if (m == educationNameList.Count - 1)
  1311. {
  1312. //总计
  1313. var zongjiCount = gGradeYearList2.Where(x => x.CampusID == campus.CampusID && x.CollegeID == college.CollegeID
  1314. && x.StandardID == standard.StandardID && x.GradeYear == db.GradeYear).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1315. ws.Cells[allRow + p, 4 + studentTypeListByEducation.Count * 5].Value = zongjiCount.ToString();
  1316. ws.Cells[allRow + p, 4 + studentTypeListByEducation.Count * 5].SetStyle(style);
  1317. }
  1318. }
  1319. if (n == 0)
  1320. {
  1321. ws.Cells[allRow + dbListByStudentType.Count(), 3].Value = "小计";
  1322. ws.Cells[allRow + dbListByStudentType.Count(), 3].SetStyle(style);
  1323. }
  1324. //男
  1325. ws.Cells[allRow + dbListByStudentType.Count(), 4 + n * 4].Value = dbListByStudentType.Sum(x => x.StudentMaleCount).ToString();
  1326. ws.Cells[allRow + dbListByStudentType.Count(), 4 + n * 4].SetStyle(style);
  1327. //allSchoolMaleCount += db.StudentMaleCount;
  1328. //女
  1329. ws.Cells[allRow + dbListByStudentType.Count(), 5 + n * 4].Value = dbListByStudentType.Sum(x => x.StudentFemaleCount).ToString();
  1330. ws.Cells[allRow + dbListByStudentType.Count(), 5 + n * 4].SetStyle(style);
  1331. //allSchoolFemaleCount += gGradeYearList[i].StudentFemaleCount;
  1332. //总
  1333. ws.Cells[allRow + dbListByStudentType.Count(), 6 + n * 4].Value = dbListByStudentType.Sum(x => x.StudentFemaleCount + x.StudentFemaleCount).ToString();
  1334. ws.Cells[allRow + dbListByStudentType.Count(), 6 + n * 4].SetStyle(style);
  1335. //班级数
  1336. ws.Cells[allRow + dbListByStudentType.Count(), 7 + n * 4].Value = dbListByStudentType.Sum(x => x.ClassmajorCount).ToString();
  1337. ws.Cells[allRow + dbListByStudentType.Count(), 7 + n * 4].SetStyle(style);
  1338. //allSchoolClassCount += gGradeYearList[i].ClassmajorCount;
  1339. if (n == studentTypeListByEducation.Count - 1)
  1340. {
  1341. //小计
  1342. var xiaojiCount = gGradeYearList2.Where(x => x.CampusID == campus.CampusID && x.CollegeID == college.CollegeID
  1343. && x.StandardID == standard.StandardID && x.EducationID == education.EducationID).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1344. ws.Cells[allRow + dbListByStudentType.Count(), 8 + n * 4].Value = xiaojiCount.ToString();
  1345. ws.Cells[allRow + dbListByStudentType.Count(), 8 + n * 4].SetStyle(style);
  1346. }
  1347. if (m == educationNameList.Count - 1)
  1348. {
  1349. //总计
  1350. var zongjiCount = gGradeYearList2.Where(x => x.CampusID == campus.CampusID && x.CollegeID == college.CollegeID
  1351. && x.StandardID == standard.StandardID).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1352. ws.Cells[allRow + dbListByStudentType.Count(), 4 + studentTypeListByEducation.Count * 5].Value = zongjiCount.ToString();
  1353. ws.Cells[allRow + dbListByStudentType.Count(), 4 + studentTypeListByEducation.Count * 5].SetStyle(style);
  1354. }
  1355. }
  1356. }
  1357. allRow += standardGradeYearCount + 1;
  1358. }
  1359. var collegeList = collegeTotalList.Where(x => x.CollegeID == college.CollegeID).ToList();
  1360. var gradeYearByCollegeList = collegeList.Select(x => x.GradeYear).Distinct().ToList();
  1361. for (int s = 0; s < educationNameList.Count(); s++)
  1362. {
  1363. var education = educationNameList[s];
  1364. //var collegeTotalListByEducation = collegeList.Where(x => x.EducationID == education.EducationID).ToList();
  1365. var studentTypeListByEducation = studentTypeList.Where(x => x.EducationID == education.EducationID).ToList();
  1366. for (int t = 0; t < studentTypeListByEducation.Count(); t++)
  1367. {
  1368. var studentType = studentTypeListByEducation[t];
  1369. var collegeTotalListByStudentType = collegeList.Where(x => x.EducationID == education.EducationID && x.StudentType == studentType.StudentType).ToList();
  1370. for (int u = 0; u < collegeTotalListByStudentType.Count(); u++)
  1371. {
  1372. var db = collegeTotalListByStudentType[u];
  1373. if (t == 0)
  1374. {
  1375. ws.Cells[allRow + u, 3].Value = db.GradeYear;
  1376. var collegeYearRange = ws.Cells.CreateRange(allRow + u, 2, 1, 2);
  1377. collegeYearRange.Merge();
  1378. collegeYearRange.ApplyStyle(style, commentFlag);
  1379. }
  1380. //男
  1381. ws.Cells[allRow + u, 4 + t * 4].Value = db.StudentMaleCount.ToString();
  1382. ws.Cells[allRow + u, 4 + t * 4].SetStyle(style);
  1383. //allSchoolMaleCount += db.StudentMaleCount;
  1384. //女
  1385. ws.Cells[allRow + u, 5 + t * 4].Value = db.StudentFemaleCount.ToString();
  1386. ws.Cells[allRow + u, 5 + t * 4].SetStyle(style);
  1387. //allSchoolFemaleCount += gGradeYearList[i].StudentFemaleCount;
  1388. //总
  1389. ws.Cells[allRow + u, 6 + t * 4].Value = (db.StudentMaleCount + db.StudentFemaleCount).ToString();
  1390. ws.Cells[allRow + u, 6 + t * 4].SetStyle(style);
  1391. //班级数
  1392. ws.Cells[allRow + u, 7 + t * 4].Value = db.ClassmajorCount.ToString();
  1393. ws.Cells[allRow + u, 7 + t * 4].SetStyle(style);
  1394. //allSchoolClassCount += gGradeYearList[i].ClassmajorCount;
  1395. if (t == studentTypeListByEducation.Count - 1)
  1396. {
  1397. //小计
  1398. var xiaojiCount = collegeList.Where(x => x.EducationID == education.EducationID && x.GradeYear == db.GradeYear).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1399. ws.Cells[allRow + u, 8 + t * 4].Value = xiaojiCount.ToString();
  1400. ws.Cells[allRow + u, 8 + t * 4].SetStyle(style);
  1401. }
  1402. if (s == educationNameList.Count - 1)
  1403. {
  1404. //总计
  1405. var zongjiCount = collegeList.Where(x => x.GradeYear == db.GradeYear).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1406. ws.Cells[allRow + u, 4 + studentTypeListByEducation.Count * 5].Value = zongjiCount.ToString();
  1407. ws.Cells[allRow + u, 4 + studentTypeListByEducation.Count * 5].SetStyle(style);
  1408. }
  1409. }
  1410. if (t == 0)
  1411. {
  1412. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 3].Value = "合计";
  1413. var collegehejiRange = ws.Cells.CreateRange(allRow + collegeTotalListByStudentType.Count(), 2, 1, 2);
  1414. collegehejiRange.Merge();
  1415. collegehejiRange.ApplyStyle(style, commentFlag);
  1416. }
  1417. //男
  1418. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 4 + t * 4].Value = collegeTotalListByStudentType.Sum(x => x.StudentMaleCount).ToString();
  1419. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 4 + t * 4].SetStyle(style);
  1420. //allSchoolMaleCount += db.StudentMaleCount;
  1421. //女
  1422. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 5 + t * 4].Value = collegeTotalListByStudentType.Sum(x => x.StudentFemaleCount).ToString();
  1423. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 5 + t * 4].SetStyle(style);
  1424. //allSchoolFemaleCount += gGradeYearList[i].StudentFemaleCount;
  1425. //总
  1426. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 6 + t * 4].Value = collegeTotalListByStudentType.Sum(x => x.StudentFemaleCount + x.StudentFemaleCount).ToString();
  1427. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 6 + t * 4].SetStyle(style);
  1428. //班级数
  1429. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 7 + t * 4].Value = collegeTotalListByStudentType.Sum(x => x.ClassmajorCount).ToString();
  1430. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 7 + t * 4].SetStyle(style);
  1431. //allSchoolClassCount += gGradeYearList[i].ClassmajorCount;
  1432. if (t == studentTypeListByEducation.Count - 1)
  1433. {
  1434. //小计
  1435. var xiaojiCount = collegeList.Where(x => x.EducationID == education.EducationID).Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1436. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 8 + t * 4].Value = xiaojiCount.ToString();
  1437. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 8 + t * 4].SetStyle(style);
  1438. }
  1439. if (s == educationNameList.Count - 1)
  1440. {
  1441. //总计
  1442. var zongjiCount = collegeList.Sum(x => x.StudentMaleCount + x.StudentFemaleCount);
  1443. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 4 + studentTypeListByEducation.Count * 5].Value = zongjiCount.ToString();
  1444. ws.Cells[allRow + collegeTotalListByStudentType.Count(), 4 + studentTypeListByEducation.Count * 5].SetStyle(style);
  1445. }
  1446. }
  1447. }
  1448. allRow += gradeYearByCollegeList.Count() + 1;
  1449. ws.Cells[startRow, 1].Value = college.CollegeName;
  1450. var collegeRange = ws.Cells.CreateRange(startRow, 1, collegeRowCount.Value, 1);
  1451. collegeRange.Merge();
  1452. collegeRange.ApplyStyle(style, commentFlag);
  1453. ws.Cells[startRow + collegeRowCount.Value + 1, 1].Value = college.CollegeName + "合计";
  1454. var collegeTotalRange = ws.Cells.CreateRange(startRow + collegeRowCount.Value, 1, gradeYearByCollegeList.Count() + 1, 1);
  1455. collegeTotalRange.Merge();
  1456. collegeTotalRange.ApplyStyle(style, commentFlag);
  1457. campusRowCout += collegeRowCount + gradeYearByCollegeList.Count() + 1;
  1458. }
  1459. ws.Cells[campusStartRow, 0].Value = campus.CampusName;
  1460. var campusRange = ws.Cells.CreateRange(campusStartRow, 0, campusRowCout.Value, 1);
  1461. campusRange.Merge();
  1462. campusRange.ApplyStyle(style, commentFlag);
  1463. }
  1464. ws.Cells[rowCount, colCount].Value = "合计";
  1465. var hejiRange = ws.Cells.CreateRange(1, colCount, 3, 1);
  1466. hejiRange.Merge();
  1467. hejiRange.ApplyStyle(style, commentFlag);
  1468. //var gGradeYear = dtGradeYear.GroupBy(x => x.Field<int>("GradeYear")).ToList();
  1469. //校区
  1470. ws.Cells[4, 0].Value = "校区";
  1471. var xiaoquRange = ws.Cells.CreateRange(4, 0, gradeYearCount + 1, 1);
  1472. xiaoquRange.Merge();
  1473. xiaoquRange.ApplyStyle(style, commentFlag);
  1474. //全校
  1475. ws.Cells[4, 1].Value = "全校";
  1476. var quanxiaoRange = ws.Cells.CreateRange(4, 1, gradeYearCount + 1, 2);
  1477. quanxiaoRange.Merge();
  1478. quanxiaoRange.ApplyStyle(style, commentFlag);
  1479. //全校总计
  1480. ws.Cells[4 + gradeYearCount, 3].Value = "总计";
  1481. var quanxiaoHejiRange = ws.Cells.CreateRange(4 + gradeYearCount, 3, 1, 1);
  1482. quanxiaoHejiRange.Merge();
  1483. quanxiaoHejiRange.ApplyStyle(style, commentFlag);
  1484. ws.AutoFitColumns();
  1485. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  1486. return ms;
  1487. }
  1488. catch (Exception ex)
  1489. {
  1490. throw ex;
  1491. }
  1492. }
  1493. public MemoryStream StudentStatisticsPDF(int? InSchoolStatusID)
  1494. {
  1495. try
  1496. {
  1497. ReportHelper rh = new ReportHelper();
  1498. MemoryStream ms = new MemoryStream();
  1499. StyleFlag commentFlag = new StyleFlag();
  1500. commentFlag.Borders = true;
  1501. commentFlag.Font = true;
  1502. commentFlag.VerticalAlignment = true;
  1503. commentFlag.HorizontalAlignment = true;
  1504. //string sql1 = rh.GetReportSql("EducationScheduling/University.sql");
  1505. string sql2 = rh.GetReportSql("StudentManage/StudentStatisticsData.sql");
  1506. List<SqlParameter> sParams = new List<SqlParameter>();
  1507. if (InSchoolStatusID.HasValue)
  1508. {
  1509. sParams.Add(new SqlParameter("@INSchoolStatus", InSchoolStatusID));
  1510. }
  1511. else
  1512. {
  1513. sParams.Add(new SqlParameter("@INSchoolStatus", DBNull.Value));
  1514. }
  1515. var ds = this.UnitOfWork.QuerySQL(sql2, sParams);
  1516. var wk = rh.GetReportTemple("StudentManage/StudentStatisticsData.xlsx");
  1517. var ws = wk.Worksheets[0];
  1518. var style = rh.BuildBorderStyle(wk);
  1519. var table = DateTableHelper.DataTableToList<StudentStatisticsDataView>(ds.Tables[0]);
  1520. var title = table.FirstOrDefault().unicersityName + table.FirstOrDefault().schoolCode + "年级专业学籍统计表";
  1521. var classNoList = table.Select(x => x.classNo).Distinct().ToList();
  1522. var collegeList = table.Select(x => x.collegeName).Distinct().ToList();
  1523. var listByClassNo = table.GroupBy(x => new { x.collegeName, x.StandardsName, x.year, x.classNo }).ToList();
  1524. ws.Cells[0, 0].Value = title;
  1525. var titleRange = ws.Cells.CreateRange(0, 0, 1, classNoList.Count + 4);
  1526. var titlestyle = rh.BuildBorderStyleAndSize(wk);
  1527. titleRange.Merge();
  1528. StyleFlag titleFlag = new StyleFlag();
  1529. titleFlag.Borders = true;
  1530. titleFlag.Font = true;
  1531. titleFlag.VerticalAlignment = true;
  1532. titleFlag.HorizontalAlignment = true;
  1533. titleRange.ApplyStyle(titlestyle, titleFlag);
  1534. ws.Cells[1, 1].Value = "系所函授站";
  1535. ws.Cells[1, 1].SetStyle(style);
  1536. ws.Cells[1, 2].Value = "院系所专业";
  1537. ws.Cells[1, 2].SetStyle(style);
  1538. ws.Cells[1, 3].Value = "年级";
  1539. ws.Cells[1, 3].SetStyle(style);
  1540. ws.Cells[1, 3 + classNoList.Count()].Value = "总计";
  1541. ws.Cells[1, 3 + classNoList.Count()].SetStyle(style);
  1542. for (int i = 0; i < classNoList.Count(); i++)
  1543. {
  1544. ws.Cells[1, 3 + i + 1].Value = classNoList[i] + "班";
  1545. ws.Cells[1, 3 + i + 1].SetStyle(style);
  1546. }
  1547. for (int i = 0; i < collegeList.Count(); i++)
  1548. {
  1549. var college = collegeList[i];
  1550. var standardList = table.Where(x => x.collegeName == college).Select(x => x.StandardsName).Distinct().ToList();
  1551. for (int j = 0; j < standardList.Count(); j++)
  1552. {
  1553. var standard = standardList[j];
  1554. var yearList = table.Where(x => x.collegeName == college && x.StandardsName == standard).Select(x => x.year).Distinct().ToList();
  1555. //ws.Cells[2 + j, 2].Value = standard;
  1556. //var standardRange = ws.Cells.CreateRange(2, 2, 1, 2);
  1557. //standardRange.Merge();
  1558. //standardRange.ApplyStyle(style, commentFlag);
  1559. for (int k = 0; k < yearList.Count(); k++)
  1560. {
  1561. var year = yearList[k];
  1562. var listByYearAndClassNo = listByClassNo.Where(x => x.Key.year == year).Select(x => new { x.Key.classNo, StudentCount = x.Sum(y => y.StudentCount) }).ToList();
  1563. ws.Cells[2 + k, 3].Value = year;
  1564. ws.Cells[2 + k, 3].SetStyle(style);
  1565. for (int m = 0; m < classNoList.Count(); m++)
  1566. {
  1567. var classNo = classNoList[m];
  1568. var listByClass = listByYearAndClassNo.Where(x => x.classNo == classNo).ToList();
  1569. ws.Cells[2 + k, 3 + m + 1].Value = listByClass.Sum(y => y.StudentCount);
  1570. ws.Cells[2 + k, 3 + m + 1].SetStyle(style);
  1571. }
  1572. }
  1573. }
  1574. }
  1575. wk.Save(ms, Aspose.Cells.SaveFormat.Pdf);
  1576. return ms;
  1577. }
  1578. catch (Exception)
  1579. {
  1580. throw;
  1581. }
  1582. }
  1583. /// <summary>
  1584. /// 获取空格和当行最大行数
  1585. /// </summary>
  1586. /// <param name="ws"></param>
  1587. /// <param name="weekDay"></param>
  1588. /// <param name="firstCol"></param>
  1589. /// <param name="lineEnd"></param>
  1590. /// <param name="maxRow">最大行数</param>
  1591. /// <returns>空格</returns>
  1592. private Cell GetLastCell(Worksheet ws, int weekDay, int firstCol, int lineEnd, ref int maxRow)
  1593. {
  1594. int curRow = 0;
  1595. int curCol = weekDay == 0 ? 7 : weekDay;
  1596. curCol += firstCol;
  1597. while (ws.Cells[curRow + lineEnd, curCol].Value != null)
  1598. {
  1599. curRow++;
  1600. }
  1601. if (maxRow < curRow)
  1602. {
  1603. maxRow = curRow;
  1604. }
  1605. return ws.Cells[curRow + lineEnd, curCol];
  1606. }
  1607. /// <summary>
  1608. /// 时间段横向计算定位
  1609. /// </summary>
  1610. /// <param name="ws"></param>
  1611. /// <param name="weekDay"></param>
  1612. /// <param name="dayNum"></param>
  1613. /// <param name="addCol">原始偏量+时间段偏量</param>
  1614. /// <param name="lineEnd"></param>
  1615. /// <param name="maxRow"></param>
  1616. /// <returns></returns>
  1617. private Cell GetCrossTimeCell(Worksheet ws, int weekDay, int dayNum, int addCol, int lineEnd, ref int maxRow)
  1618. {
  1619. int curRow = 0;
  1620. var dicWeeks = GetDicWeeks();
  1621. int curCol = dicWeeks.FindIndex(w => w.Item1 == weekDay) * dayNum;
  1622. curCol += addCol;
  1623. while (ws.Cells[curRow + lineEnd, curCol].Value != null)
  1624. {
  1625. curRow++;
  1626. }
  1627. if (maxRow < curRow)
  1628. {
  1629. maxRow = curRow;
  1630. }
  1631. return ws.Cells[curRow + lineEnd, curCol];
  1632. }
  1633. private List<Tuple<int, string>> GetDicWeeks()
  1634. {
  1635. List<Tuple<int, string>> dic = new List<Tuple<int, string>>();
  1636. dic.Add(new Tuple<int, string>(1, "星期一"));
  1637. dic.Add(new Tuple<int, string>(2, "星期二"));
  1638. dic.Add(new Tuple<int, string>(3, "星期三"));
  1639. dic.Add(new Tuple<int, string>(4, "星期四"));
  1640. dic.Add(new Tuple<int, string>(5, "星期五"));
  1641. dic.Add(new Tuple<int, string>(6, "星期六"));
  1642. dic.Add(new Tuple<int, string>(0, "星期日"));
  1643. return dic;
  1644. }
  1645. }
  1646. }