1 仅仅作为自己的笔记 2 /// <summary> 3 /// *****-课堂资源统计 4 /// </summary> 5 /// <param name="subjectId"></param> 6 /// <param name="secId"></param> 7 /// <param name="startDate"></param> 8 /// <param name="endDate"></param> 9 /// <returns></returns> 10 public IQueryable<ShowClassRoomResourceStatistics> GetClassRoomResourceStatistics(string subjectId, string secId, string startDate, string endDate) 11 { 12 //得到资源信息 13 var gallerys = _guideLearnLogic.GetGallery().Where(s => s.isdel == 0); 14 //得到资源文件夹信息 15 var galleryDirs = _guideLearnLogic.GetGalleryDir().Where(s => s.isdel == 0); 16 //资源操作记录 17 var galleryLogs = _guideLearnLogic.GetGalleryLog().Where(s => s.act == "dn" && s.cll_id != null); 18 //得到科目信息 19 var subjects = _subjectLogic.GetSubject().Where(s => s.isdel == 0); 20 //得到人的信息 21 var persons = _personLogic.GetPersonnel().Where(s => s.isdel == 0 && s.per_role == 30); 22 //如果科目编号不为空的话 23 if (!string.IsNullOrEmpty(subjectId)) 24 { 25 subjects = subjects.Where(s => s.sub_id == subjectId); 26 } 27 //如果年级不为空的话 28 if (!string.IsNullOrEmpty(secId)) 29 { 30 subjects = subjects.Where(s => s.sec_id == secId); 31 } 32 //时间搜索 33 if (!string.IsNullOrEmpty(startDate) && !string.IsNullOrEmpty(endDate)) 34 { 35 var formatStartDate = Convert.ToDateTime(startDate); 36 var formatEndDate = Convert.ToDateTime(endDate); 37 galleryLogs = galleryLogs.Where(s => Convert.ToDateTime(s.cdate) >= formatStartDate && Convert.ToDateTime(s.cdate) <= formatEndDate); 38 } 39 if (galleryLogs != null && galleryLogs.Count() > 0) 40 { 41 var data = from galleryLog in galleryLogs 42 43 join gallery in gallerys on galleryLog.galleryid equals gallery.galleryid into tempGallerys 44 from tempGallery in tempGallerys.DefaultIfEmpty() 45 46 join galleryDir in galleryDirs on tempGallery.gallerydirid equals galleryDir.gallerydirid into tempGalleryDirs 47 from tempGalleryDir in tempGalleryDirs.DefaultIfEmpty() 48 49 join subject in subjects on tempGalleryDir.subjectid equals subject.sub_id into tempSubjects 50 from tempSubject in tempSubjects.DefaultIfEmpty() 51 52 join person in persons on galleryLog.per_id equals person.per_id into tempPersons 53 from tempPerson in tempPersons.DefaultIfEmpty() 54 group tempPerson by new { galleryLog.per_id, tempPerson.per_userid, tempPerson.per_name, galleryLog.galleryid } into g 55 orderby g.ToList().Count() descending 56 select new ShowClassRoomResourceStatistics 57 { 58 per_userid = g.Key.per_userid, 59 per_name = g.Key.per_name, 60 count = g.Count(), 61 galleryid = g.Key.galleryid, 62 }; 63 return data; 64 } 65 return null; 66 } 67 /// <summary> 68 /// *****-教学手段 69 /// </summary> 70 /// <param name="subjectId"></param> 71 /// <param name="secId"></param> 72 /// <param name="startDate"></param> 73 /// <param name="endDate"></param> 74 /// <returns></returns> 75 public List<ShowTeacherDevicesResult> GetTeachingDevices(string subjectId, string secId, string startDate, string endDate) 76 { 77 if (string.IsNullOrEmpty(subjectId) || string.IsNullOrEmpty(secId)) 78 { 79 return null; 80 } 81 //班级记录 82 var classesLogs = _classesLogic.GetClassLog(); 83 var functionRecords = _guideLearnLogic.GetFunctionRecord(); 84 //人员信息 85 var personnel = _personLogic.GetPersonnel().Where(s => s.isdel == 0); 86 //科目信息 87 var subjects = _subjectLogic.GetSubject().Where(s => s.isdel == 0); 88 89 if (classesLogs != null) 90 { 91 var data = from L in classesLogs 92 join R in functionRecords on L.cll_id equals R.cll_id into tempR 93 from RData in tempR.DefaultIfEmpty() 94 95 join P in personnel on L.per_id equals P.per_id into tempP 96 from Pdata in tempP.DefaultIfEmpty() 97 98 join S in subjects on L.sub_id equals S.sub_id into tempS 99 from SData in tempS.DefaultIfEmpty() 100 where SData.sub_id == subjectId && Pdata.isdel == 0 && SData.isdel == 0 101 select new ShowTeachingDevices 102 { 103 per_id = Pdata.per_id, 104 per_name = Pdata.per_name, 105 sub_name = SData.sub_name, 106 fcd_code = RData.fcd_code.StartsWith("C") ? "C" : ( 107 RData.fcd_code.StartsWith("D") ? "D" : "ELSE"), 108 109 sub_id = SData.sub_id, 110 sec_id = SData.sec_id, 111 cll_cdate = L.cll_cdate, 112 113 }; 114 if (!string.IsNullOrEmpty(subjectId)) 115 { 116 data = data.Where(c => c.sub_id == subjectId); 117 } 118 if (!string.IsNullOrEmpty(secId)) 119 { 120 data = data.Where(c => c.sec_id == secId); 121 } 122 //时间搜索 123 if (!string.IsNullOrEmpty(startDate) && !string.IsNullOrEmpty(endDate)) 124 { 125 var formatStartDate = DateTime.Parse(startDate); 126 var formatEndDate = DateTime.Parse(endDate); 127 data = data.Where(c => c.cll_cdate >= formatStartDate && c.cll_cdate <= formatEndDate); 128 } 129 /* 130 SELECT per_id,per_name, SUM(count_num),fcd_code 131 FROM( 132 SELECT P.per_id,P.per_name, COUNT(1) AS count_num, CASE WHEN R.fcd_code LIKE 'C%' THEN 'C' WHEN R.fcd_code LIKE 'D%' THEN 'D' ELSE 'ELSE' END fcd_code 133 FROM class_log L 134 LEFT JOIN function_record R ON R.cll_id=L.cll_id 135 LEFT JOIN personnel P ON L.per_id= P.per_id 136 LEFT JOIN subject S ON L.sub_id=S.sub_id 137 WHERE L.sub_id='95301ab4-1e5f-11e5-b161-1c4bd611580c' AND L.cll_cdate BETWEEN '2016-01-10' AND '2020-01-10' 138 GROUP BY P.per_id,R.fcd_code 139 ORDER BY L.cll_cdate DESC 140 )T 141 GROUP BY per_id,fcd_code; 142 */ 143 144 data = data.OrderByDescending(c => c.cll_cdate); 145 var groupByData = (from G in data 146 group G by new 147 { 148 G.per_id, 149 G.per_name, 150 G.fcd_code 151 } into G 152 select new ShowTeacherDevicesResult 153 { 154 per_id = G.Key.per_id, 155 per_name = G.Key.per_name, 156 fcd_code = G.Key.fcd_code, 157 count = G.Count() 158 }).ToList(); 159 160 var dataList = (from T in groupByData 161 group T by new 162 { 163 T.per_id, 164 T.per_name, 165 T.fcd_code 166 } into Td 167 let sumCount = Td.Where(c => c.per_id == Td.Key.per_id && c.fcd_code == Td.Key.fcd_code).Sum(c => c.count) 168 select new ShowTeacherDevicesTemp 169 { 170 per_id = Td.Key.per_id, 171 per_name = Td.Key.per_name, 172 fcd_code = Td.Key.fcd_code, 173 count = sumCount 174 }).ToList(); 175 if (dataList != null && dataList.Count > 0) 176 { 177 List<ShowTeacherDevicesResult> result = new List<ShowTeacherDevicesResult>(); 178 foreach (ShowTeacherDevicesTemp item in dataList) 179 { 180 ShowTeacherDevicesResult r = new ShowTeacherDevicesResult(); 181 r.per_id = item.per_id; 182 r.per_name = item.per_name; 183 r.fcd_code = item.fcd_code=="C"?"富媒体":(item.fcd_code=="D"?"教学工具":"互动工具"); 184 int pcount = dataList.Where(c => c.per_id == item.per_id).Count();//多少个分组 185 int itemCount = item.count == 0 ? 1 : item.count; 186 int totalCount = item.count; 187 if (pcount >= 2) 188 totalCount = dataList.Where(c => c.per_id == item.per_id).Sum(c => c.count); 189 r.count = itemCount; 190 r.perfentRate = $"{(itemCount / totalCount * 1.0 * 100).ToString("f2")}%"; 191 result.Add(r); 192 } 193 return result; 194 } 195 196 } 197 198 return null; 199 } 200 201 /// <summary> 202 /// *****-教学准备 203 /// </summary> 204 /// <param name="subjectId"></param> 205 /// <param name="secId"></param> 206 /// <param name="startDate"></param> 207 /// <param name="endDate"></param> 208 /// <returns></returns> 209 public async Task<List<ShowTeacherCourseResult>> GetTeachingPreparation(string subjectId, string secId, string startDate, string endDate) 210 { 211 if (string.IsNullOrEmpty(subjectId)) 212 { 213 return null; 214 } 215 var classLogic = _classesLogic.GetClassLog(); 216 var courseLogic = _courseLogic.GetCourse().Where(c => c.isdel == 0); 217 var functionRecordLogic = _guideLearnLogic.GetFunctionRecord(); 218 var personnelLgic = _personLogic.GetPersonnel().Where(c => c.isdel == 0); 219 var subjectLogic = _subjectLogic.GetSubject().Where(c => c.isdel == 0); 220 221 #region 没有分组的所有过滤的数据 222 var data = (from L in classLogic 223 join C in courseLogic on L.cou_id equals C.cou_id into Ctemp 224 from Cdata in Ctemp.DefaultIfEmpty() 225 226 join R in functionRecordLogic on L.cll_id equals R.cll_id 227 228 join P in personnelLgic on L.per_id equals P.per_id 229 230 join S in subjectLogic on L.sub_id equals S.sub_id into Stemp 231 from Sdata in Stemp.DefaultIfEmpty() 232 233 orderby Cdata.cdate descending 234 where (new string[] { "in", "ou" }).Contains(L.cll_type) 235 select new ShowTeachingPreparationBase 236 { 237 sub_id = Sdata.sub_id, 238 sub_name = Sdata.sub_name, 239 cll_id = L.cll_id, 240 cll_type = L.cll_type, 241 level = Cdata.level, 242 per_id = Cdata.per_id, 243 per_name = P.per_name, 244 per_userid = P.per_userid, 245 cll_edate = L.cll_edate, 246 cll_cdate = L.cll_cdate, 247 fcd_code = R.fcd_code.StartsWith("C") ? "C" : (R.fcd_code.StartsWith("D") ? "D" : "ELSE"), 248 sec_id = Sdata.sec_id, 249 cdate = R.cdate 250 }); 251 252 //科目不为空时 253 if (!string.IsNullOrEmpty(subjectId)) 254 { 255 data = data.Where(c => c.sub_id == subjectId); 256 } 257 //年段,小学,中学,高中... 258 if (!string.IsNullOrEmpty(secId)) 259 { 260 data = data.Where(c => c.sec_id == secId); 261 } 262 //开始与结束时间 263 if (!string.IsNullOrEmpty(startDate) && !string.IsNullOrEmpty(endDate)) 264 { 265 var formatStartDate = Convert.ToDateTime(startDate); 266 var formatEndDate = Convert.ToDateTime(endDate); 267 data = data.Where(c => c.cdate >= formatStartDate && c.cdate <= formatEndDate); 268 data = data.Where(c => c.cll_cdate >= formatStartDate && c.cll_edate <= formatEndDate); 269 } 270 #endregion 271 272 #region 分组后的数据 273 var tempdata = ( 274 from tt in data 275 where tt.per_id != null 276 group tt by new 277 { 278 tt.cll_id, 279 tt.sub_id, 280 tt.per_id, 281 tt.per_name, 282 tt.level, 283 tt.cll_type, 284 tt.fcd_code 285 286 } into G 287 select new ShowTeachingPreparationTemp 288 { 289 cll_id = G.Key.cll_id, 290 per_id = G.Key.per_id, 291 per_name = G.Key.per_name, 292 sub_id = G.Key.sub_id, 293 level = G.Key.level, 294 cll_type = G.Key.cll_type, 295 fcd_code = G.Key.fcd_code, 296 count_num = G.Count() 297 }).ToList(); 298 // 按照老系统的数据展示,必须要分组两次 299 var newGroup = (from TD in tempdata 300 group TD by new 301 { 302 TD.sub_id, 303 TD.per_id, 304 TD.per_name, 305 TD.level, 306 TD.cll_type, 307 TD.fcd_code, 308 309 } into DD 310 select new ShowTeachingPreparationTemp 311 { 312 per_id = DD.Key.per_id, 313 per_name = DD.Key.per_name, 314 sub_id = DD.Key.sub_id, 315 level = DD.Key.level, 316 cll_type = DD.Key.cll_type, 317 fcd_code = DD.Key.fcd_code, 318 count_num = DD.Count() 319 320 }).ToList(); 321 322 #endregion 323 324 List<ShowTeacherCourseResult> resultList = new List<ShowTeacherCourseResult>(); 325 // Key 的分组的总的次数 326 int totalRowCount = newGroup.Count; 327 328 //-有做数据的合并(同一个老师的相同的课程会存在多条数据,如相同老师的相同课程相同年段 C,D,ELSE的情况需要合并) 329 for (int i = 0; i < totalRowCount; i++) 330 { 331 var sub_id = newGroup[i].sub_id; 332 var level = newGroup[i].level;//年级 333 var cll_type = newGroup[i].cll_type; 334 var fcd_code = newGroup[i].fcd_code; 335 var per_id = newGroup[i].per_id; 336 var per_name = newGroup[i].per_name;//课程教师 337 338 //获取当前这个老师的所有 cll_id 339 string[] getcll_idList = tempdata.Where(c => c.per_id == per_id && c.sub_id == sub_id && c.level == level).Select(c => c.cll_id).ToArray(); 340 var M = tempdata.Where(c => c.per_id == per_id && c.sub_id == sub_id && c.level == c.level).ToList(); 341 int nowGroupCount = M.Count();//登录的次数 342 ShowTeacherCourseResult re = new ShowTeacherCourseResult(); 343 await AssemblingModel(M, nowGroupCount, re, getcll_idList, per_id, level, sub_id, per_name, cll_type); 344 resultList.Add(re); 345 } 346 return resultList; 347 } 348 349 private async Task AssemblingModel(List<ShowTeachingPreparationTemp> M, int nowGroupCount, ShowTeacherCourseResult re, string[] cll_idList, string per_id, string level, string sub_id, string per_name, string cll_type) 350 { 351 re.level = level;//年* 352 re.sub_id = sub_id; 353 re.per_id = per_id; 354 re.per_name = per_name;//姓名 355 re.loginCount = nowGroupCount.ToString(); //登录的次数 356 string type = cll_type; 357 re.loginCount = type == "in" ? $"{nowGroupCount}/0" : $"0/{nowGroupCount}"; 358 //获取到这个人的该课程的所有的cll_id,方便来获取总的时间 359 var getCllid_list = M.Select(c => new cll_idList { cll_id = c.cll_id }).ToList(); 360 361 //使用的时间 362 string havaUseTime = await Task.Factory.StartNew(() => ((from T in _classesLogic.GetClassLog() 363 where cll_idList.Contains(T.cll_id) 364 select new { T.cll_edate, T.cll_cdate }).ToList().Sum(c => (c.cll_edate - c.cll_cdate).TotalSeconds / 60.0).ToString("f2"))); 365 366 re.havaUseTime = type == "in" ? $"{havaUseTime}/0" : $"0/{havaUseTime}"; 367 //C *媒体 368 int dataC = GetDataCDEDataRateCount(M, "C", level, per_id, sub_id); 369 //D 教*工具 370 int dataD = GetDataCDEDataRateCount(M, "D", level, per_id, sub_id); 371 //ELSE 互*工具 372 int dataE = GetDataCDEDataRateCount(M, "ELSE", level, per_id, sub_id); 373 374 int totalCount = dataC + dataD + dataE; 375 376 string dataC_PercentRage = $"{(dataC * 1.0 * 100 / totalCount).ToString("f2")}"; 377 string dataD_PercentRage = $"{(dataD * 1.0 * 100 / totalCount).ToString("f2")}"; 378 string dataE_PercentRage = $"{(dataE * 1.0 * 100 / totalCount).ToString("f2")}"; 379 380 re.richMedia = type == "in" ? $"{dataC_PercentRage}%/0.00%" : $"0.00%/{dataC_PercentRage}%"; 381 re.teacherTool = type == "in" ? $"{dataD_PercentRage}%/0.00%" : $"0.00%/{dataD_PercentRage}%"; 382 re.interactiveTools = type == "in" ? $"{dataE_PercentRage}%/0.00%" : $"0.00%/{dataE_PercentRage}%"; 383 } 384 385 private static int GetDataCDEDataRateCount(List<ShowTeachingPreparationTemp> M, string fcd_code, string level, string per_id, string sub_id) 386 { 387 return M.Where(c => c.fcd_code == fcd_code && c.level == level && c.per_id == per_id && c.sub_id == sub_id).Count(); 388 }
来源:https://www.cnblogs.com/Fengge518/p/12193935.html