StatisticsQueryImpl.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. package com.ssj.statistics.dao.impl;
  2. import com.ssj.api.domain.vo.homework.CheckDetailVO;
  3. import com.ssj.api.domain.vo.statistics.ListVO;
  4. import com.ssj.api.domain.vo.statistics.TeacherSalarysVO;
  5. import com.ssj.framework.core.persistence.PagingHibernateJdbcDao;
  6. import com.ssj.statistics.dao.IStatisticsQueryDao;
  7. import org.apache.commons.collections4.MapUtils;
  8. import org.apache.commons.lang3.StringUtils;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.data.domain.Page;
  11. import org.springframework.data.domain.Pageable;
  12. import org.springframework.stereotype.Repository;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.Map;
  16. import java.util.Objects;
  17. /**
  18. * @author sh
  19. * @className StatisticsQueryImpl
  20. * @description queryImpl
  21. * @date 2021/2/27
  22. */
  23. @Repository
  24. public class StatisticsQueryImpl implements IStatisticsQueryDao {
  25. @Autowired
  26. private PagingHibernateJdbcDao dao;
  27. @Override
  28. public Page<Map<String, Object>> statisticsList(Map<String, Object> params, Pageable initPage) {
  29. StringBuffer sql = new StringBuffer();
  30. List<Object> queryParams = new ArrayList<>();
  31. /**
  32. *teacherId string list 老师id
  33. * teacherName string list 老师姓名
  34. * subject string list 科目
  35. * allSubject string list 老师拥有的科目,多科目英文逗号隔开,
  36. * correctNums int list 批注页数
  37. * overtimeNums int list 超时批注页数
  38. * notCorrectNums int list 未批注页数
  39. * notCommentNums int list 不批注页数
  40. * repeatNums int list 重复页数
  41. * accuracy string list 正确率
  42. * errorNums int list 报错页数
  43. */
  44. sql.append("select a.correctNums,a.overtimeNums, ");
  45. sql.append("a.notCorrectNums,a.notCommentNums, ");
  46. sql.append("a.repeatNums,concat(floor(100*(a.totalNums- a.errorNums-a.notCorrectNums)/a.totalNums),'%') as accuracy,a.errorNums,a.teacherId,a.teacherName,a.subject,a.allSubject ");
  47. sql.append(" from (");
  48. listInfo(params,queryParams,sql);
  49. sql.append(" ) a");
  50. return dao.findPage(sql.toString(),queryParams.toArray(),initPage);
  51. }
  52. private void listInfo(Map<String, Object> params,List<Object> queryParams,StringBuffer sql){
  53. sql.append("select t.teacher_id as teacherId,t11.name as teacherName,t11.course_name as subject,t11.course_name as allSubject, \n");
  54. sql.append(" sum(t.correct_nums) as correctNums,sum(t.overtime_nums) as overtimeNums,sum(t.not_correct_nums) as notCorrectNums, \n");
  55. sql.append(" sum(t.not_comment_nums) as notCommentNums,sum(t.repeat_nums) as repeatNums,round(avg(t.accuracy),2) as accuracy,sum(t.error_nums) as errorNums,sum(t.total_nums) as totalNums \n");
  56. sql.append(" from plat_teacher_statistics t \n");
  57. sql.append(" left join tb_lib_manager t11 on t.teacher_id = t11.user_id \n");
  58. sql.append(" where t11.type = 30 \n");
  59. if(Objects.nonNull(params.get("beginDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"beginDate"))){
  60. sql.append(" and t.calculate_date >= ? ");
  61. queryParams.add(params.get("beginDate"));
  62. }
  63. if(Objects.nonNull(params.get("endDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"endDate"))){
  64. sql.append(" and t.calculate_date <= ? ");
  65. queryParams.add(params.get("endDate"));
  66. }
  67. if(Objects.nonNull(params.get("teacherName")) && StringUtils.isNotBlank(MapUtils.getString(params,"teacherName"))){
  68. sql.append(" and t11.name like concat('%',?,'%') ");
  69. queryParams.add(params.get("teacherName"));
  70. }
  71. sql.append(" group by t11.user_id ");
  72. }
  73. @Override
  74. public Page<Map<String, Object>> errorList(Map<String, Object> params, Pageable initPage) {
  75. StringBuffer sql = new StringBuffer();
  76. List<Object> queryParams = new ArrayList<>();
  77. sql.append("SELECT DATE_FORMAT(t11.create_time,'%Y-%m-%d') as year_1,DATE_FORMAT(t11.create_time,'%m月%d日') as workDate from scon_homework_picture_correct t \n");
  78. sql.append("join scon_homework_picture t11 on t.homework_picture_id = t11.id\n");
  79. sql.append("left join tb_lib_vip t12 on t11.vip_id = t12.id\n");
  80. sql.append("where t.type = 8 and t.is_check_error = 1\n");
  81. sql.append("and t11.`subject`=? and t11.teacher_id=?\n");
  82. queryParams.add(params.get("subject"));
  83. queryParams.add(params.get("teacherId"));
  84. if(Objects.nonNull(params.get("beginDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"beginDate"))){
  85. sql.append(" and to_days(t11.create_time) >=to_days(?) ");
  86. queryParams.add(params.get("beginDate"));
  87. }
  88. if(Objects.nonNull(params.get("endDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"endDate"))){
  89. sql.append(" and to_days(t11.create_time) <=to_days(?) ");
  90. queryParams.add(params.get("endDate"));
  91. }
  92. sql.append("GROUP BY DATE_FORMAT(t11.create_time,'%y-%m-%d')");
  93. return dao.findPage(sql.toString(),queryParams.toArray(),initPage);
  94. }
  95. @Override
  96. public List<Map<String, Object>> findStudentErrorList(String date,String teacherId,String subject) {
  97. StringBuffer sql = new StringBuffer();
  98. List<Object> queryParams = new ArrayList<>();
  99. sql.append("SELECT t11.homework_id as homeworkId,t12.child_name as studentName,count(1) as errorNums \n");
  100. sql.append("from scon_homework_picture_correct t \n");
  101. sql.append("join scon_homework_picture t11 on t.homework_picture_id = t11.id\n");
  102. sql.append("left join tb_lib_vip t12 on t11.vip_id = t12.id\n");
  103. sql.append("where t.type = 8 and t.is_check_error = 1\n");
  104. sql.append("and t11.`subject`=? and t11.teacher_id=?\n");
  105. queryParams.add(subject);
  106. queryParams.add(teacherId);
  107. sql.append(" and to_days(t11.create_time) =to_days(?) ");
  108. queryParams.add(date);
  109. sql.append("t11.homework_id");
  110. return dao.findMap(sql.toString(),queryParams.toArray());
  111. }
  112. @Override
  113. public Map<String, Object> findTotalData(Map<String, Object> params) {
  114. /*
  115. correctTotalNums int data 批注总页数
  116. overtimeTotalNums int data 超时批注总页数
  117. notCorrectTotalNums int data 未批注总页数
  118. notCommentTotalNums int data 不批注总页数
  119. repeatTotalNums int data 重复总页数
  120. accuracyTotal string data 总正确率
  121. errorTotalNums
  122. correctNums int list 批注页数
  123. overtimeNums int list 超时批注页数
  124. notCorrectNums int list 未批注页数
  125. notCommentNums int list 不批注页数
  126. repeatNums int list 重复页数
  127. accuracy string list 正确率
  128. errorNums int list 报错页数
  129. */
  130. StringBuffer sql = new StringBuffer();
  131. sql.append("select ifnull(sum(a.correctNums),0) as correctTotalNums,ifnull(sum(overtimeNums),0) as overtimeTotalNums, ");
  132. sql.append("ifnull(sum(a.notCorrectNums),0) as notCorrectTotalNums,ifnull(sum(notCommentNums),0) as notCommentTotalNums, ");
  133. sql.append("ifnull(sum(a.repeatNums),0) as repeatTotalNums,concat(floor(100*(sum(a.totalNums)- sum(a.errorNums)-sum(a.notCorrectNums))/sum(a.totalNums)),'%') as accuracyTotal,ifnull(sum(errorNums),0) as errorTotalNums ");
  134. sql.append(" from (");
  135. List<Object> queryParams = new ArrayList<>();
  136. listInfo(params,queryParams,sql);
  137. sql.append(" ) a");
  138. return dao.findMap(sql.toString(),queryParams.toArray()).get(0);
  139. }
  140. @Override
  141. public List<ListVO> statisticsDataList(String dateTime) {
  142. StringBuffer sql = new StringBuffer();
  143. List<Object> queryParams = new ArrayList<>();
  144. sql.append("SELECT a.teacher_id,a.teacher_name,a.`subject`,a.all_subject,a.correct_nums,a.overtime_nums,a.not_correct_nums,a.not_comment_nums,a.repeat_nums,a.error_nums,\n");
  145. sql.append("floor(100*(a.total- a.error_nums-a.not_correct_nums)/a.total) as accuracy,a.calculate_date,a.total as total_nums\n");
  146. sql.append("from (\n");
  147. sql.append("SELECT t12.name as teacher_name,t.teacher_id,t.`subject`,t12.course_name as all_subject,count(if(t.is_mark in (0,2) and t.is_feedback=1,true,NULL)) as correct_nums, \n");
  148. sql.append("count(if(t.is_feedback=1 and (DATE_FORMAT(t.create_time,'%H:%i')>='20:30' and DATE_FORMAT(t11.end_time,'%Y-%m-%d %H:%i:%s')>concat(DATE_FORMAT(DATE_ADD(t.create_time,interval 1 day),'%Y-%m-%d'),' 12:00:00'))\n" +
  149. " or (DATE_FORMAT(t.create_time,'%H:%i')<'20:30' and DATE_FORMAT(t11.end_time,'%Y-%m-%d %H:%i:%s')>concat(DATE_FORMAT(t.create_time,'%Y-%m-%d'),' 23:59:59')),true,null)) as overtime_nums,\n");
  150. sql.append("count(1) as total,\n");
  151. sql.append("DATE_FORMAT(t.create_time,'%Y-%m-%d') as calculate_date,\n");
  152. sql.append("count(if(t.is_feedback=0 and t.is_mark in (0,2),true,null)) as not_correct_nums,\n");
  153. sql.append("count(if(t.is_mark=10,true,null)) as not_comment_nums,\n");
  154. sql.append("count(if(t.is_mark=15,true,null)) as repeat_nums,\n");
  155. sql.append("count(if(t11.is_check_error=1,true,null)) as error_nums\n");
  156. sql.append("from scon_homework_picture t \n");
  157. sql.append("left join scon_homework_picture_correct t11 on t.id = t11.homework_picture_id \n");
  158. sql.append("left join tb_lib_manager t12 on t.teacher_id = t12.user_id\n");
  159. sql.append("where t12.type = 30 and t11.type = 8 and to_days(t.create_time)<= to_days(?)\n");
  160. queryParams.add(dateTime);
  161. sql.append("GROUP BY t.teacher_id,to_days(t.create_time)\n");
  162. sql.append(")a");
  163. return dao.findList(sql.toString(),queryParams.toArray(),ListVO.class);
  164. }
  165. @Override
  166. public List<TeacherSalarysVO> addTeacherSalarysData(String month) {
  167. StringBuffer sql = new StringBuffer();
  168. List<Object> queryParams = new ArrayList<>();
  169. sql.append("SELECT a.correct_nums,a.teacher_id,a.overtime_nums,a.perk_nums,a.error_nums,a.work_date,FLOOR(a.sum_perk)/a.perk_nums as perk_efficiency,Floor(100*(a.correct_nums-a.error_nums)/a.correct_nums) as accuracy,\n");
  170. sql.append(" case when a.perk_nums<134 and a.sum_perk<120 then 20 else (a.perk_nums-a.error_nums)*0.15 end as perk_salary\n" );
  171. sql.append(",(a.correct_nums-a.perk_nums-a.error_nums)*0.15 as other_salary\n" );
  172. sql.append("from (\n" );
  173. sql.append("SELECT\n" );
  174. sql.append("count(1) as correct_nums,\n" );
  175. sql.append("count(if((DATE_FORMAT(t11.create_time,'%i:%s')>='20:30' and DATE_FORMAT(t.end_time,'%Y-%m-%d %H:%i:%s')>concat(DATE_FORMAT(DATE_ADD(t11.create_time,interval 1 day),'%Y-%m-%d'),' 12:00:00'))\n");
  176. sql.append(" or (DATE_FORMAT(t11.create_time,'%H:%i')<'20:30' and DATE_FORMAT(t.end_time,'%Y-%m-%d %H:%i:%s')>concat(DATE_FORMAT(t11.create_time,'%Y-%m-%d'),' 23:59:59')),true,null)) as overtime_nums,\n");
  177. sql.append("count(IF(DATE_FORMAT(t.end_time,'%H:%i')>='18:00' and DATE_FORMAT(t.end_time,'%H:%i')<='20:00',TRUE,null)) as perk_nums,\n" );
  178. sql.append("count(IF(t.is_check_error=1,TRUE,null)) as error_nums,\n" );
  179. sql.append("DATE_FORMAT(t.end_time,'%Y-%m-%d') as work_date,\n" );
  180. sql.append("sum(IF(DATE_FORMAT(t.end_time,'%H:%i')>='18:00' and DATE_FORMAT(t.end_time,'%H:%i')<='20:00',t.correction_time,0)) as sum_perk,\n" );
  181. sql.append("t11.teacher_id,\n" );
  182. sql.append("t.end_time,\n" );
  183. sql.append("t.start_time \n" );
  184. sql.append("from scon_homework_picture_correct t \n" );
  185. sql.append("join scon_homework_picture t11 on t.homework_picture_id = t11.id\n" );
  186. sql.append("where t.type=8 and t11.is_mark in(0,2) and t11.is_feedback=1 \n" );
  187. sql.append("and t.end_time like concat('%',?,'%')\n" );
  188. queryParams.add(month);
  189. sql.append("GROUP BY t11.teacher_id\n" );
  190. sql.append(") a");
  191. return dao.findList(sql.toString(),queryParams.toArray(),TeacherSalarysVO.class);
  192. }
  193. @Override
  194. public List<CheckDetailVO> checkDetailList(String homeworkId) {
  195. StringBuffer sql = new StringBuffer();
  196. List<Object> queryParams = new ArrayList<>();
  197. sql.append("SELECT t.id as picture_id,t.corrected_picture_url as picture_url,2 as check_state \n");
  198. sql.append("from scon_homework_picture t \n");
  199. sql.append("left join scon_homework_picture_correct t11 on t.id = t11.homework_picture_id\n");
  200. sql.append("where t11.type = 8 and t11.is_check_error=1\n");
  201. sql.append(" and t.homework_id = ?");
  202. queryParams.add(homeworkId);
  203. return dao.findList(sql.toString(),queryParams.toArray(),CheckDetailVO.class);
  204. }
  205. @Override
  206. public List<Map<String, Object>> salaryList(String userId, int month, int year) {
  207. /**
  208. * tb_teacher_salary
  209. *workDate string list 日期
  210. * correctNums int list 批注总张数
  211. * overtimeNums int list 超时批注总张数
  212. * perkNums int list 高峰时段批注张数
  213. * perkEfficiency String list 高峰时段平均批注时间
  214. * errorNums int list 报错张数
  215. * accuracy string list 正确率
  216. * perkSalary String list 高峰时段薪资
  217. * otherSalary String list 其他时段薪资
  218. * salary String list 总薪资
  219. */
  220. StringBuffer sql = new StringBuffer();
  221. List<Object> queryParams = new ArrayList<>();
  222. sql.append("select t.work_date as workDate,t.correct_nums as correctNums, \n");
  223. sql.append("t.overtime_nums as overtimeNums,t.correct_nums as perkNums, \n");
  224. sql.append(" t.perk_efficiency as perkEfficiency,t.error_nums as errorNums, \n");
  225. sql.append(" t.accuracy,t.perk_salary as perkSalary, \n");
  226. sql.append(" t.other_salary as otherSalary,t.salary as salary \n");
  227. sql.append("from tb_teacher_salary t \n");
  228. sql.append("where t.teacher_id = ? and t.month=? and t.year=?");
  229. queryParams.add(userId);
  230. queryParams.add(month);
  231. queryParams.add(year);
  232. return dao.findMap(sql.toString(),queryParams.toArray());
  233. }
  234. }