Преглед на файлове

Merge branch 'feature/0427-school' of http://git.dayaedu.com/yonge/mec into master_saas

 Conflicts:
	.idea/httpRequests/http-requests-log.http
zouxuan преди 2 години
родител
ревизия
1d6d70388f
променени са 35 файла, в които са добавени 624 реда и са изтрити 1231 реда
  1. 129 451
      .idea/httpRequests/http-requests-log.http
  2. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/annotation/PushSchoolCourseChange.java
  3. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/aspect/PushSchoolCourseChangeAspect.java
  4. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  5. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  6. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/CourseStudentDto.java
  7. 6 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/TeacherAttendanceDto.java
  8. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/TeacherAttendanceSumDto.java
  9. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/page/TeacherAttendanceQueryDto.java
  10. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/page/TeacherAttendanceQueryInfo.java
  11. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TeacherAttendanceWrapper.java
  12. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleModifyLogService.java
  13. 1 8
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  14. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  15. 2 3
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java
  16. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  17. 114 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleModifyLogServiceImpl.java
  18. 42 646
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  19. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  20. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  21. 65 43
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java
  22. 4 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupQuitServiceImpl.java
  23. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  24. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  25. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysNewsInformationServiceImpl.java
  26. 59 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  27. 3 3
      mec-biz/src/main/resources/config/mybatis/CoursePatrolEvaluationMapper.xml
  28. 2 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml
  29. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  30. 28 17
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  31. 4 1
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  32. 1 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java
  33. 8 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/JiguangPushPlugin.java
  34. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/SchoolMessageController.java
  35. 5 7
      mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolTeacherAttendanceController.java

+ 129 - 451
.idea/httpRequests/http-requests-log.http

@@ -1,3 +1,131 @@
+POST http://127.0.0.1:8005/open/school/staffSave
+Content-Type: application/json
+coopId: 19
+tenantId: 1
+Content-Length: 129
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+{
+  "schoolId": 3,
+  "userType": "ORCHESTRA_LEADER",
+  "username": "测试113",
+  "mobile": "19900990114",
+  "smsCode" : 666666
+}
+
+<> 2023-05-29T183339.200.json
+
+###
+
+GET http://127.0.0.1:8005/imGroup/queryGroupMemberList?imGroupId=62
+Content-Type: application/json
+Authorization: bearer 9e3a8ca3-b369-485a-aae0-5cdf17d46e61
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-05-29T182845.200.json
+
+###
+
+POST http://127.0.0.1:8005/coursePatrolEvaluation/pageStat
+Authorization: bearer 9e3a8ca3-b369-485a-aae0-5cdf17d46e61
+Content-Type: application/json
+coopId: 12
+Content-Length: 58
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+{
+  "startTime": "2023-01-01",
+  "endTime": "2024-04-04"
+}
+
+<> 2023-05-29T182738.200.json
+
+###
+
+POST http://127.0.0.1:8005/coursePatrolEvaluation/pageStat
+Authorization: bearer 703c9711-ca6d-45c3-9583-34d7b9d86705
+Content-Type: application/json
+coopId: 12
+Content-Length: 58
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+{
+  "startTime": "2023-01-01",
+  "endTime": "2024-04-04"
+}
+
+<> 2023-05-29T182713.200.json
+
+###
+
+GET http://127.0.0.1:8005/schoolStaff/cooperation
+Authorization: bearer 66862b1d-938b-467e-b7c9-65f77f0e7347
+tenantId: 1
+coopId: 14
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-05-25T181738.200.json
+
+###
+
+GET http://127.0.0.1:8005/schoolStaff/cooperation
+Authorization: bearer 66862b1d-938b-467e-b7c9-65f77f0e7347
+tenantId: 1
+coopId: 14
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-05-25T181606.200.json
+
+###
+
+GET http://127.0.0.1:8005/schoolStaff/cooperation
+Authorization: bearer 66862b1d-938b-467e-b7c9-65f77f0e7347
+tenantId: 1
+coopId: 14
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-05-25T180935.200.json
+
+###
+
+GET http://127.0.0.1:8005/schoolStaff/cooperation
+Authorization: bearer 66862b1d-938b-467e-b7c9-65f77f0e7347
+tenantId: 1
+coopId: 14
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-05-25T180923.200.json
+
+###
+
+GET http://127.0.0.1:8005/schoolStaff/cooperation
+Authorization: bearer 3f804d4e-b7f0-41ad-8dbf-119a0c54becc
+tenantId: 1
+coopId: 1
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-05-25T180355.200.json
+
+###
+
 POST http://127.0.0.1:8005/imGroup/schoolQueryFriendList
 Authorization: bearer 07bef4ad-6d9e-46e0-8fd3-c24a2fd11332
 Content-Type: application/json
@@ -372,7 +500,7 @@ Connection: Keep-Alive
 User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
 Accept-Encoding: br,deflate,gzip,x-gzip
 
-<> 2023-05-18T145937.200.json
+<> 2023-05-19T170850.200.json
 
 ###
 
@@ -501,453 +629,3 @@ Accept-Encoding: br,deflate,gzip,x-gzip
 
 ###
 
-POST http://127.0.0.1:8005/imLiveBroadcastRoomMember/queryRoomMember
-Content-Type: application/json
-Authorization: bearer 70c30cec-f77c-4871-beaa-ce4b5224bf3e
-Content-Length: 59
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{"rows":10,"page":1,"roomUid":"LIVE-2248475-1683777517444"}
-
-<> 2023-05-12T184412.200.json
-
-###
-
-POST http://127.0.0.1:8005/imLiveBroadcastRoomMember/queryRoomMember
-Content-Type: application/json
-Authorization: bearer 70c30cec-f77c-4871-beaa-ce4b5224bf3e
-Content-Length: 59
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{"rows":10,"page":1,"roomUid":"LIVE-2248475-1683777517444"}
-
-<> 2023-05-12T183529.200.json
-
-###
-
-POST http://127.0.0.1:8005/imLiveBroadcastRoomMember/queryRoomMember
-Content-Type: application/json
-Authorization: bearer 70c30cec-f77c-4871-beaa-ce4b5224bf3e
-Content-Length: 59
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{"rows":10,"page":1,"roomUid":"LIVE-2248475-1683777517444"}
-
-<> 2023-05-12T183456.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorRoomInfo?roomUid=LIVE-2248475-1683777517444&userId=10001
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T204659.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111112
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T204644.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorJoinRoom?roomUid=LIVE-2248475-1683777517444&userId=10000
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T204620.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorRoomInfo?roomUid=LIVE-2248475-1683777517444&userId=10000
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T204529.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111111
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T204510.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111112
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T203037.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111111
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T203024.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111111
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T203016.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111111
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T202954.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111111
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T202704.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111111
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T202141.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111111
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T202117.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorJoinRoom?roomUid=LIVE-2248475-1683777517444&userId=10000
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T201906.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorRoomInfo?roomUid=LIVE-2248475-1683777517444&userId=10000
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T201829.200.json
-
-###
-
-GET http://127.0.0.1:9001/open/liveBroadcastRoom/visitorCredentials?roomUid=LIVE-2248475-1683777517444&fingerprint=111111111
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-11T201306.200.json
-
-###
-
-POST http://127.0.0.1:8005/open/school/staffSave
-Content-Type: application/json
-Content-Length: 127
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-  "schoolId": 3,
-  "userType": "ORCHESTRA_LEADER",
-  "username": "李四",
-  "mobile": "18682475902",
-  "smsCode": "666666"
-}
-
-<> 2023-05-10T212648.200.json
-
-###
-
-POST http://127.0.0.1:8005/open/school/staffSave
-Content-Type: application/json
-Content-Length: 104
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-  "schoolId": 3,
-  "userType": "ORCHESTRA_LEADER",
-  "username": "李四",
-  "mobile": "18682475902"
-}
-
-<> 2023-05-10T212627.200.json
-
-###
-
-GET http://127.0.0.1:8005/schoolStaff/cooperation
-Authorization: bearer ae333169-e0f2-4fc3-adc1-08048fd77196
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T202004.200.json
-
-###
-
-GET http://127.0.0.1:8005/schoolStaff/cooperation
-Authorization: bearer ae333169-e0f2-4fc3-adc1-08048fd77196
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T201748.200.json
-
-###
-
-GET http://127.0.0.1:8005/schoolStaff/cooperation
-Authorization: bearer ae333169-e0f2-4fc3-adc1-08048fd77196
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T201724.200.json
-
-###
-
-POST http://127.0.0.1:8001/smsLogin?clientId=EDUCATION&clientSecret=EDUCATION&deviceNum=&phone=18682475952&smsCode=666666
-Content-Type: application/x-www-form-urlencoded
-Content-Length: 2
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{}
-
-<> 2023-05-10T201707.200.json
-
-###
-
-POST http://127.0.0.1:8001/smsLogin?clientId=EDUCATION&clientSecret=EDUCATION&deviceNum=&phone=18682475901&smsCode=666666
-Content-Type: application/x-www-form-urlencoded
-Content-Length: 2
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{}
-
-<> 2023-05-10T201654.200.json
-
-###
-
-GET http://127.0.0.1:8005/schoolStaff/cooperation
-Authorization: bearer 7d12c468-e8cf-4e81-bc56-a9de18ba8fc5
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T201550.200.json
-
-###
-
-POST http://127.0.0.1:8005/open/school/staffSave
-Content-Type: application/json
-Content-Length: 104
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-  "schoolId": 3,
-  "userType": "ORCHESTRA_LEADER",
-  "username": "李四",
-  "mobile": "18682475902"
-}
-
-<> 2023-05-10T155616.200.json
-
-###
-
-POST http://127.0.0.1:8005/open/school/staffSave
-Content-Type: application/json
-Content-Length: 104
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-  "schoolId": 3,
-  "userType": "ORCHESTRA_LEADER",
-  "username": "李四",
-  "mobile": "18682475902"
-}
-
-<> 2023-05-10T154304.200.json
-
-###
-
-POST http://127.0.0.1:8005/open/school/staffSave
-Content-Type: application/json
-Content-Length: 104
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-  "schoolId": 3,
-  "userType": "ORCHESTRA_LEADER",
-  "username": "李四",
-  "mobile": "18682475902"
-}
-
-<> 2023-05-10T154238.200.json
-
-###
-
-POST http://127.0.0.1:8005/open/school/staffSave
-Content-Type: application/json
-Content-Length: 104
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-  "schoolId": 3,
-  "userType": "ORCHESTRA_LEADER",
-  "username": "李四",
-  "mobile": "18682475902"
-}
-
-<> 2023-05-10T154216.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-tenantid: 1
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T153150.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-tenantid: 1
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T152508.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-tenantid: 1
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T152417.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-tenantid: 1
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T152236.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-tenantid: 1
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T152033.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-tenantid: 1
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T151724.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-tenantid: 1
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T151501.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-tenantid: 1
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T151443.200.json
-
-###
-
-GET http://127.0.0.1:8006/news/list?type=29
-Authorization: bearer e50cd2ae-3fad-4b3a-93ce-c86689cae2dc
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-05-10T151238.200.json
-
-###
-

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/annotation/PushSchoolCourseChange.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface PushSchoolCourseChange {
+
+    //课程编号
+    long courseId();
+
+    //事件、1创建,2修改
+    int event();
+}

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/aspect/PushSchoolCourseChangeAspect.java

@@ -0,0 +1,32 @@
+package com.ym.mec.biz.aspect;
+
+import com.ym.mec.biz.annotation.PushSchoolCourseChange;
+import com.ym.mec.biz.service.CourseScheduleModifyLogService;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@Aspect
+public class PushSchoolCourseChangeAspect {
+
+    @Pointcut("@annotation(pushSchoolCourseChange)")
+    public void courseChange(PushSchoolCourseChange pushSchoolCourseChange){}
+
+    @Autowired
+    private CourseScheduleModifyLogService courseScheduleModifyLogService;
+
+    @AfterReturning(pointcut = "courseChange(pushSchoolCourseChange)")
+    public void afterPush(JoinPoint joinPoint, PushSchoolCourseChange pushSchoolCourseChange){
+        long courseId = pushSchoolCourseChange.courseId();
+        int event = pushSchoolCourseChange.event();
+        //事件、1创建,2修改
+        if(event == 1){
+            courseScheduleModifyLogService.pushSchoolCourseCreate(courseId);
+        }else {
+            courseScheduleModifyLogService.pushSchoolCourseChange(courseId);
+        }
+
+    }
+}

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceSumDto;
 import com.ym.mec.biz.dal.school.page.TeacherAttendanceQueryInfo;
+import com.ym.mec.biz.dal.wrapper.TeacherAttendanceWrapper;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -271,7 +272,7 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 
     List<TeacherAttendanceSumDto> queryTeacherAttendance(@Param("queryInfo") TeacherAttendanceQueryInfo queryInfo);
 
-	List<Map<Integer,Integer>> queryTeacherAttendanceForWeek(@Param("queryInfo") TeacherAttendanceQueryInfo queryInfo);
+	List<TeacherAttendanceWrapper.CourseTeacherAttendance> queryTeacherAttendanceForWeek(@Param("queryInfo") TeacherAttendanceQueryInfo queryInfo);
 
 	/**
 	* @description: 获取班级老师考勤列表
@@ -281,7 +282,7 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	* @author zx
 	* @date 2023/5/10 11:55
 	*/
-    List<TeacherAttendanceListDto> getClassTeacherAttendance(@Param("classGroupId") Integer classGroupId, @Param("teacherId") Integer teacherId);
+    List<TeacherAttendanceListDto> getClassTeacherAttendance(@Param("query") TeacherAttendanceWrapper.ClassTeacherAttendanceQuery query);
 
 	/**
 	* @description: 获取课程关联的老师考勤

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -283,6 +283,12 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     // 学校端注册短信通知
     SMS_SCHOOL_ACCOUNT_REGISTER("SMS_SCHOOL_ACCOUNT_REGISTER","学校端注册短信通知-极光推送"),
+
+    // 学校端注册短信通知
+    JIGUANG_SCHOOL_COURSE_CHANGE("JIGUANG_SCHOOL_COURSE_CHANGE","课程信息变更"),
+
+    // 学校端注册短信通知
+    JIGUANG_SCHOOL_COURSE_CREATE("JIGUANG_SCHOOL_COURSE_CREATE","课程创建"),
     ;
 
     MessageTypeEnum(String code, String msg) {

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/CourseStudentDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.school.dto;
 
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -23,4 +24,7 @@ public class CourseStudentDto {
 
     @ApiModelProperty(value = "课后评价是否达标",required = false)
     private Boolean qualifiedFlag;
+
+    @ApiModelProperty(value = "课程状态",required = false)
+    private CourseStatusEnum courseStatus;
 }

+ 6 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/TeacherAttendanceDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.school.dto;
 
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
@@ -22,10 +23,10 @@ public class TeacherAttendanceDto {
     private Date signOutTime;
 
     @ApiModelProperty(value = "教学点签到状态")
-    private Boolean signInAddressStatus = false;
+    private Boolean signInAddressStatus = true;
 
     @ApiModelProperty(value = "教学点签退状态")
-    private Boolean signOutAddressStatus = false;
+    private Boolean signOutAddressStatus = true;
 
     @ApiModelProperty(value = "签到经纬度")
     private String signInLongitudeLatitude;
@@ -39,4 +40,7 @@ public class TeacherAttendanceDto {
     @ApiModelProperty(value = "教学点签到经纬度")
     private String schoolLongitudeLatitude;
 
+    @ApiModelProperty(value = "课程状态")
+    private CourseStatusEnum courseStatus;
+
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/TeacherAttendanceSumDto.java

@@ -23,7 +23,7 @@ public class TeacherAttendanceSumDto {
     private Integer teacherId;
 
     @ApiModelProperty(value = "本周课程考勤状态")
-    private TeacherAttendanceQueryInfo.TeacherAttendanceEnum teacherAttendanceStatus;
+    private TeacherAttendanceQueryInfo.TeacherAttendanceEnum teacherAttendanceStatus = TeacherAttendanceQueryInfo.TeacherAttendanceEnum.NO_COURSE;
 
     @ApiModelProperty(value = "本学期异常考勤课程数")
     private Integer errCourseNum;

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/school/page/TeacherAttendanceQueryDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.school.page;
 
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -14,4 +15,7 @@ public class TeacherAttendanceQueryDto {
 
     @ApiModelProperty(value = "老师编号",required = true)
     private Integer teacherId;
+
+    @ApiModelProperty(value = "课程状态",required = true)
+    private CourseStatusEnum courseStatus;
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/school/page/TeacherAttendanceQueryInfo.java

@@ -1,7 +1,9 @@
 package com.ym.mec.biz.dal.school.page;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.common.enums.BaseEnum;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -34,6 +36,9 @@ public class TeacherAttendanceQueryInfo{
         }
     }
 
+    @ApiModelProperty(value = "班级类型",required = false)
+    private String classType;
+
     @ApiModelProperty(value = "模糊查询",required = false)
     private String search;
 
@@ -57,4 +62,9 @@ public class TeacherAttendanceQueryInfo{
 
     @ApiModelProperty(value = "(不用传)",required = false)
     private List<String> musicGroupIds;
+
+    @ApiModelProperty(value = "课程状态",required = true)
+    private CourseStatusEnum courseStatus;
+
+    private Integer tenantId = TenantContextHolder.getTenantId();
 }

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TeacherAttendanceWrapper.java

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+public class TeacherAttendanceWrapper {
+
+    @Data
+    public static class CourseTeacherAttendance{
+        private Long courseScheduleId;
+
+        private Integer actualTeacherId;
+
+        private CourseStatusEnum courseStatus;
+
+        private Integer signInStatus = 0;
+
+        private Integer signOutStatus = 0;
+
+        private String signInLongitudeLatitude;
+
+        private String signOutLongitudeLatitude;
+
+        private Integer schoolId;
+
+        private TeachModeEnum teachMode;
+    }
+
+    @Data
+    public static class ClassTeacherAttendanceQuery{
+        @ApiModelProperty("课程类型")
+        private String courseType;
+
+        @ApiModelProperty("班级编号")
+        private Integer classGroupId;
+
+        @ApiModelProperty("老师编号")
+        private Integer teacherId;
+
+        @ApiModelProperty("考勤状态")
+        private Boolean signStatus;
+    }
+}

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleModifyLogService.java

@@ -1,8 +1,23 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dao.CourseScheduleModifyLogDao;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleModifyLog;
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.common.service.BaseService;
 
 public interface CourseScheduleModifyLogService extends BaseService<Integer, CourseScheduleModifyLog> {
+    CourseScheduleModifyLogDao getDao();
 
+    void pushSchoolCourseChange(long courseId);
+
+    void pushSchoolCourseChange(CourseSchedule courseSchedule, MusicGroup musicGroup);
+
+    void pushSchoolCourseChange(CourseSchedule courseSchedule);
+
+    void pushSchoolCourseCreate(long courseId);
+
+    void pushSchoolCourseCreate(CourseSchedule courseSchedule, MusicGroup musicGroup);
+
+    void pushSchoolCourseCreate(CourseSchedule courseSchedule);
 }

+ 1 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -18,6 +18,7 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.Date;
@@ -232,14 +233,6 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	HttpResponseResult courseAdjust(List<CourseSchedule> newCourseSchedules, Boolean allowZeroSalary);
 
 	/**
-	 * @Author: Joburgess
-	 * @Date: 2019/9/23
-	 * 课时调整
-	 */
-	@Deprecated
-	void classStartDateAdjust(List<CourseSchedule> newCourseSchedules);
-
-	/**
 	 * @describe 小课课程批量调整
 	 * @author Joburgess
 	 * @date 2019/12/11

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -417,6 +417,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     // 微信公众号secret
     String WECHAT_SECRET = "wechat_secret";
 
+    // 微信公众号secret
+    String SCHOOL_IM_GROUP_IMG = "school_im_group_img";
 
     static void checkActivityDate(String startTimeStr, String endTimeStr) {
         if(StringUtils.isEmpty(startTimeStr) || StringUtils.isEmpty(startTimeStr)){

+ 2 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -14,6 +14,7 @@ import com.ym.mec.biz.dal.school.dto.TeacherAttendanceDto;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceSumDto;
 import com.ym.mec.biz.dal.school.page.TeacherAttendanceQueryInfo;
+import com.ym.mec.biz.dal.wrapper.TeacherAttendanceWrapper;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
@@ -176,13 +177,11 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 
 	/**
 	* @description: 获取本学期当前班级老师所有课程考勤
-	 * @param classGroupId
-	 * @param teacherId
 	* @return java.util.List<com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto>
 	* @author zx
 	* @date 2023/5/5 09:54
 	*/
-	List<TeacherAttendanceListDto> getClassTeacherAttendance(Integer classGroupId, Integer teacherId);
+	List<TeacherAttendanceListDto> getClassTeacherAttendance(TeacherAttendanceWrapper.ClassTeacherAttendanceQuery query);
 
 	/**
 	* @description: 获取课程老师考勤

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -84,6 +84,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     @Autowired
     private ClassGroupTeacherMapperService classGroupTeacherMapperService;
     @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
     private TeacherDefaultMusicGroupSalaryService teacherDefaultMusicGroupSalaryService;
     @Autowired
     private StudentRegistrationDao studentRegistrationDao;
@@ -94,8 +96,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     @Autowired
     private SubjectService subjectService;
     @Autowired
-    private CourseScheduleDao courseScheduleDao;
-    @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
     private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;

+ 114 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleModifyLogServiceImpl.java

@@ -1,22 +1,131 @@
 package com.ym.mec.biz.service.impl;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleModifyLogDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleModifyLog;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+import com.ym.mec.biz.service.CourseScheduleModifyLogService;
+import com.ym.mec.biz.service.SchoolStaffService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 @Service
-public class CourseScheduleModifyLogServiceImpl extends BaseServiceImpl<Integer,CourseScheduleModifyLog>{
+public class CourseScheduleModifyLogServiceImpl extends BaseServiceImpl<Integer,CourseScheduleModifyLog> implements CourseScheduleModifyLogService {
 	
 	@Autowired
 	private CourseScheduleModifyLogDao courseScheduleModifyLogDao;
+	@Autowired
+	private CourseScheduleDao courseScheduleDao;
+	@Autowired
+	private MusicGroupDao musicGroupDao;
+	@Autowired
+	private SysMessageService sysMessageService;
+	@Autowired
+	private SchoolStaffService schoolStaffService;
 
 	@Override
 	public BaseDAO<Integer, CourseScheduleModifyLog> getDAO() {
 		return courseScheduleModifyLogDao;
 	}
-	
+
+	@Override
+	public CourseScheduleModifyLogDao getDao() {
+		return courseScheduleModifyLogDao;
+	}
+
+	@Override
+	public void pushSchoolCourseChange(long courseId) {
+		CourseSchedule courseSchedule = courseScheduleDao.get(courseId);
+		if(Objects.isNull(courseSchedule)){
+			return;
+		}
+		if(courseSchedule.getGroupType() != GroupType.MUSIC){
+			return;
+		}
+		MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+		this.pushSchoolCourseChange(courseSchedule,musicGroup);
+	}
+
+	@Override
+	public void pushSchoolCourseChange(CourseSchedule courseSchedule, MusicGroup musicGroup) {
+		if(musicGroup.getCooperationOrganId() != null){
+			IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+					SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(musicGroup.getCooperationOrganId().longValue()).build());
+			List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+			if (CollectionUtils.isNotEmpty(records)) {
+				Map<Integer, String> usersMap = new HashMap<>(records.size());
+				records.stream().forEach(o -> usersMap.put(o.getUserId().intValue(), o.getUserId().toString()));
+
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_SCHOOL_COURSE_CHANGE,
+						usersMap, null, 0, null,
+						"SCHOOL",musicGroup.getName(),courseSchedule.getType().getMsg());
+			}
+		}
+	}
+
+	@Override
+	public void pushSchoolCourseChange(CourseSchedule courseSchedule) {
+		if(courseSchedule.getGroupType() != GroupType.MUSIC){
+			return;
+		}
+		MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+		this.pushSchoolCourseChange(courseSchedule,musicGroup);
+	}
+
+	@Override
+	public void pushSchoolCourseCreate(long courseId) {
+		CourseSchedule courseSchedule = courseScheduleDao.get(courseId);
+		if(Objects.isNull(courseSchedule)){
+			return;
+		}
+		if(courseSchedule.getGroupType() != GroupType.MUSIC){
+			return;
+		}
+		String musicGroupId = courseSchedule.getMusicGroupId();
+		MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+		this.pushSchoolCourseChange(courseSchedule,musicGroup);
+	}
+
+	@Override
+	public void pushSchoolCourseCreate(CourseSchedule courseSchedule, MusicGroup musicGroup) {
+		if(musicGroup.getCooperationOrganId() != null){
+			IPage<SchoolStaffWrapper.SchoolStaff> page = schoolStaffService.selectPage(new Page<>(1, -1),
+					SchoolStaffWrapper.SchoolStaffQuery.builder().schoolId(musicGroup.getCooperationOrganId().longValue()).build());
+			List<SchoolStaffWrapper.SchoolStaff> records = page.getRecords();
+			if (CollectionUtils.isNotEmpty(records)) {
+				Map<Integer, String> usersMap = new HashMap<>(records.size());
+				records.stream().forEach(o -> usersMap.put(o.getUserId().intValue(), o.getUserId().toString()));
+
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_SCHOOL_COURSE_CREATE,
+						usersMap, null, 0, null,
+						"SCHOOL",musicGroup.getName(),courseSchedule.getType().getMsg());
+			}
+		}
+	}
+
+	@Override
+	public void pushSchoolCourseCreate(CourseSchedule courseSchedule) {
+		if(courseSchedule.getGroupType() != GroupType.MUSIC){
+			return;
+		}
+		MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+		this.pushSchoolCourseChange(courseSchedule,musicGroup);
+	}
 }

Файловите разлики са ограничени, защото са твърде много
+ 42 - 646
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java


+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java

@@ -83,6 +83,8 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     @Autowired
     private ImGroupMemberService imGroupMemberService;
     @Autowired
+    private CourseScheduleModifyLogService courseScheduleModifyLogService;
+    @Autowired
     private ImUserFriendService imUserFriendService;
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -187,6 +187,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
 
         for (ImGroupMemberDto imGroupMemberDto : imGroupMemberDtos) {
             imGroupMemberDto.setType(EFriendRoleType.getByName(imGroupMemberDto.getRoleType()).name());
+            imGroupMemberDto.getUser().setUsername(imGroupMemberDto.getGroupNickname());
         }
         return imGroupMemberDtos;
     }
@@ -376,6 +377,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             imGroup.setIntroduce(imGroup.getName());
             imGroup.setMemo(cooperationOrgan.getName());
             imGroup.setMemberNum(0);
+            imGroup.setImg(sysConfigService.findByParamName(SysConfigService.SCHOOL_IM_GROUP_IMG).getParanValue());
             imGroup.setType(ImGroup.GroupTypeEnum.SCHOOL.getCode());
             imGroup.setGroupType(ImGroup.GroupTypeEnum.SCHOOL);
             imGroup.setCreateTime(new Date());

+ 65 - 43
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java

@@ -4,6 +4,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.EFriendRoleType;
@@ -195,6 +196,17 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
         });
 
 
+        if(imUserFriends.size() > 0){
+            batchInsert(imUserFriends);
+        }
+        //更新用户朋友昵称是空的历史数据(线上没有发现这种问题)
+        imUserFriendDao.updateNullNickName();
+//		},executor);
+//		executor.shutdown();
+    }
+
+    private SchoolStaff getSchoolOrchestraLeaderByMusicGroupId(String musicGroupId){
+
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         // 更新学校端乐团主管的群好友列表
         if (musicGroup != null && musicGroup.getCooperationOrganId() != null) {
@@ -202,50 +214,10 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
             List<SchoolStaff> schoolStaffs = schoolStaffMapper.getByCoopIdAndType(musicGroup.getCooperationOrganId(), ESchoolStaffType.ORCHESTRA_LEADER);
 
             if (CollectionUtils.isNotEmpty(schoolStaffs)) {
-                SchoolStaff schoolStaff = schoolStaffs.get(0);
-                // 群组ID集合
-                List<String> imGroupIds = new ArrayList<>();
-//                imGroupIds.add(musicGroupId);
-                if (CollectionUtils.isNotEmpty(classGroups)) {
-                    imGroupIds.addAll(classGroups.stream().map(o -> o.getId().toString()).collect(Collectors.toList()));
-
-                    // 获取乐团群的人员列表
-                    List<ImGroupMember> memberList = imGroupMemberDao.getByGroupId(imGroupIds);
-                    if (CollectionUtils.isNotEmpty(memberList)) {
-                        Long staffUserId = schoolStaff.getUserId();
-                        // 设置角色
-                        memberList = memberList.stream().map(o -> {
-                            if (StringUtils.isBlank(o.getRoleType())) {
-                                o.setRoleType(EFriendRoleType.STUDENT.name());
-                            } else {
-                                o.setRoleType(EFriendRoleType.getByName(o.getRoleType()).name());
-                            }
-                            return o;
-                        }).collect(Collectors.toList());
-
-                        // ID toMap roleType
-                        Map<Integer, String> roleTypeMap = memberList.stream().collect(Collectors.toMap(ImGroupMember::getUserId, ImGroupMember::getRoleType, (k1, k2) -> k2));
-
-
-                        Set<Integer> userIds = memberList.stream().map(ImGroupMember::getUserId)
-                                .collect(Collectors.toSet());
-                        userFriends(imUserFriends, musicGroup, staffUserId, userIds, roleTypeMap);
-                    }
-                }
+                return schoolStaffs.get(0);
             }
-            // 更新学校端好友列表
-            imUserFriends.addAll(schoolStaffFriend(musicGroup.getCooperationOrganId()));
-
-        }
-
-
-        if(imUserFriends.size() > 0){
-            batchInsert(imUserFriends);
         }
-        //更新用户朋友昵称是空的历史数据(线上没有发现这种问题)
-        imUserFriendDao.updateNullNickName();
-//		},executor);
-//		executor.shutdown();
+        return null;
     }
 
     @Override
@@ -273,18 +245,23 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
     public List<ImUserFriend> saveImUserFriends(Set<Integer> studentIds,Set<Integer> teacherIds,GroupType groupType,String musicGroupId){
         List<ImUserFriend> imUserFriends = new ArrayList<>();
         Set<Integer> educationIds = new HashSet<>();
+        Set<Integer> schoolStaffIds = new HashSet<>();
+        SchoolStaff schoolStaff = null;
         Integer repairUserId = null;
         String repairUserName = null;
+        Integer musicGroupLeader = null;
         MusicGroup musicGroup = new MusicGroup();
         //获取当前学员声部
         Map<Integer,String> studentSubjectName = new HashMap<>();
         Map<Integer, String> teacherSubjectNameMap = new HashMap<>();
+        Map<Integer, String> schoolStaffRealNameMap = new HashMap<>();
         if(teacherIds.size() > 0){
             teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(teacherIds)));
         }
         if(groupType == MUSIC){
             //学员关联乐团管理人员通讯录
             musicGroup = musicGroupDao.get(musicGroupId);
+            musicGroupLeader= musicGroup.getDirectorUserId();
             educationIds.add(musicGroup.getDirectorUserId());
             educationIds.add(musicGroup.getEducationalTeacherId());
             educationIds.add(musicGroup.getTeamTeacherId());
@@ -295,6 +272,12 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
             if(studentIds.size() > 0){
                 studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
             }
+
+            //学校乐团领队关联 乐团管理人员、教务、学员
+            schoolStaff = getSchoolOrchestraLeaderByMusicGroupId(musicGroupId);
+            if (schoolStaff != null) {
+                schoolStaffIds.add(schoolStaff.getUserId().intValue());
+            }
         }else if(groupType == VIP){
             VipGroup vipGroup = vipGroupDao.get(Long.parseLong(musicGroupId));
             educationIds.add(vipGroup.getEducationalTeacherId());
@@ -317,12 +300,18 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
         if(educationIds.size() > 0){
             educationRealNameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(educationIds)));
         }
+        if (schoolStaffIds.size() > 0) {
+             schoolStaffRealNameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(schoolStaffIds)));
+
+        }
         //老师关联教务、学员
         for (Integer teacherId : teacherIds) {
             //老师关联学员
             this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),teacherId,imUserFriends);
             //老师关联教务
             this.addImUserFriend(educationIds,null,educationRealNameMap,null,teacherId,imUserFriends);
+            //老师关联学校乐团领队
+            this.addImUserFriend(schoolStaffIds,null,schoolStaffRealNameMap,null,teacherId,imUserFriends);
         }
         //教务关联的老师、学员
         for (Integer educationId : educationIds) {
@@ -330,6 +319,8 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
             this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),educationId,imUserFriends);
             //教务关联老师
             this.addImUserFriend(teacherIds,teacherSubjectNameMap,teacherRealNameMap,musicGroup.getName(),educationId,imUserFriends);
+            //老师关联学校乐团领队
+            this.addImUserFriend(schoolStaffIds,null,schoolStaffRealNameMap,null,educationId,imUserFriends);
         }
         //学员关联的老师、教务、维修技师
         for (Integer studentId : studentIds) {
@@ -337,9 +328,11 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
             this.addImUserFriend(teacherIds,teacherSubjectNameMap,teacherRealNameMap,musicGroup.getName(),studentId,imUserFriends);
             //学员关联的教务
             this.addImUserFriend(educationIds,null,educationRealNameMap,null,studentId,imUserFriends);
+            //老师关联学校乐团领队
+            this.addImUserFriend(schoolStaffIds,null,schoolStaffRealNameMap,null,studentId,imUserFriends);
             //学员关联维修技师
             if(repairUserId != null){
-                if(repairUserId == studentId){
+                if(repairUserId.equals(studentId)){
                     continue;
                 }
                 ImUserFriend imUserFriend = new ImUserFriend();
@@ -351,6 +344,29 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
                 imUserFriends.add(imUserFriend);
             }
         }
+
+        if(schoolStaff != null){
+            //学校乐团领队关联乐团管理人员
+            this.addImUserFriend(teacherIds,teacherSubjectNameMap,teacherRealNameMap,musicGroup.getName()
+                    ,schoolStaff.getId().intValue(),imUserFriends,EFriendRoleType.ORCHESTRA_TEACHER.name());
+            //学校乐团领队关联教务
+            this.addImUserFriend(Sets.newHashSet(musicGroupLeader),null,educationRealNameMap,null
+                    ,schoolStaff.getId().intValue(),imUserFriends,EFriendRoleType.ORCHESTRA_MANAGER.name());
+            //学校乐团领队关联学员
+            this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName()
+                    ,schoolStaff.getId().intValue(),imUserFriends,EFriendRoleType.STUDENT.name());
+            //学员关联维修技师
+            if(repairUserId != null){
+                ImUserFriend imUserFriend = new ImUserFriend();
+                imUserFriend.setUserId(schoolStaff.getUserId().intValue());
+                imUserFriend.setFriendId(repairUserId);
+                imUserFriend.setFriendNickname(repairUserName);
+                imUserFriend.setMemo(musicGroup.getName());
+                imUserFriend.setTags("维修技师");
+                imUserFriend.setRoleType(EFriendRoleType.MAINTENANCE_TECHNICIAN.name());
+                imUserFriends.add(imUserFriend);
+            }
+        }
         //维修技师关联学员
         if(repairUserId != null){
             this.addImUserFriend(studentIds,studentSubjectName,usernameMap,musicGroup.getName(),repairUserId,imUserFriends);
@@ -446,8 +462,13 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 
     }
 
+
     public void addImUserFriend(Set<Integer> friendUserIds,Map<Integer,String> tagsMap,
                                 Map<Integer,String> nameMap,String memo,Integer userId,List<ImUserFriend> imUserFriends){
+        addImUserFriend(friendUserIds,tagsMap,nameMap,memo,userId,imUserFriends,"");
+    }
+    public void addImUserFriend(Set<Integer> friendUserIds,Map<Integer,String> tagsMap,
+                                Map<Integer,String> nameMap,String memo,Integer userId,List<ImUserFriend> imUserFriends,String roleType){
         if(friendUserIds != null && friendUserIds.size() > 0){
             for (Integer friendId : friendUserIds) {
                 if(userId == friendId){
@@ -458,6 +479,7 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
                 imUserFriend.setFriendId(friendId);
                 imUserFriend.setFriendNickname(nameMap.get(friendId));
                 imUserFriend.setMemo(memo);
+                imUserFriend.setRoleType(roleType);
                 if(tagsMap != null){
                     imUserFriend.setTags(tagsMap.get(friendId));
                 }

+ 4 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupQuitServiceImpl.java

@@ -2,24 +2,23 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.enums.school.EQuitGroupAuditStatusEnum;
 import com.ym.mec.biz.dal.school.dto.MusicGroupQuitDetailDto;
 import com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto;
 import com.ym.mec.biz.dal.school.page.MusicGroupQuitQueryInfo;
+import com.ym.mec.biz.service.MusicGroupQuitService;
 import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
-import com.ym.mec.biz.dal.entity.MusicGroupQuit;
-import com.ym.mec.biz.service.MusicGroupQuitService;
-import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.service.impl.BaseServiceImpl;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
@@ -65,18 +64,10 @@ public class MusicGroupQuitServiceImpl extends BaseServiceImpl<Long, MusicGroupQ
 			params.put("offset", pageInfo.getOffset());
 			dataList = musicGroupQuitDao.queryPageBySchool(params);
 			if(CollectionUtils.isNotEmpty(dataList)){
-				List<Integer> studentIds = dataList.stream().map(e -> e.getStudentId()).collect(Collectors.toList());
-				List<SimpleUserDto> usersSimpleInfo = teacherDao.getUsersSimpleInfo(studentIds);
-				Map<Integer, SimpleUserDto> simpleUserDtoMap = usersSimpleInfo.stream().collect(Collectors.groupingBy(e -> e.getUserId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
 				List<Integer> subjectIds = dataList.stream().map(e -> e.getSubjectId()).distinct().collect(Collectors.toList());
 				Map<Integer, String> subjectNameMap = subjectDao.findBySubjectIds(subjectIds).stream().collect(Collectors.groupingBy(e -> e.getId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0).getName())));
 				for (MusicGroupQuitPageDto dto : dataList) {
 					dto.setSubjectName(subjectNameMap.get(dto.getSubjectId()));
-					SimpleUserDto userDto = simpleUserDtoMap.get(dto.getStudentId());
-					if(Objects.nonNull(userDto)){
-						dto.setStudentAvatar(userDto.getAvatar());
-						dto.setStudentName(userDto.getNickName());
-					}
 				}
 			}
 		}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -1702,7 +1702,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     public List<OperatingTotalIncomeDto> queryOperatingSummaryIncome(Map<String, Object> params) {
         List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderDao.ExportQueryPage1(params);
-        studentPaymentOrderExportDtos.addAll(studentPaymentOrderDao.ExportQueryPage2(params));
+//        studentPaymentOrderExportDtos.addAll(studentPaymentOrderDao.ExportQueryPage2(params));
         long i = 1;
         //获取机构费率
         List<Long> otherOrderIds = studentPaymentOrderExportDtos.stream().filter(e -> e.getGroupType() != GroupType.GOODS_SELL

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -1398,6 +1398,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
      */
     @Override
     public StudentWrapper.StudentDetail userDetail(StudentWrapper.StudentQuery queryInfo) {
+        queryInfo.setStatusList(Arrays.asList(StudentMusicGroupStatusEnum.NORMAL, StudentMusicGroupStatusEnum.QUIT, StudentMusicGroupStatusEnum.QUIT_SCHOOL));
         IPage<StudentWrapper.StudentList> studentListIPage = userPage(new Page<>(1, 1), queryInfo);
         if (CollectionUtils.isEmpty(studentListIPage.getRecords())) {
             return null;

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysNewsInformationServiceImpl.java

@@ -58,7 +58,7 @@ public class SysNewsInformationServiceImpl extends ServiceImpl<SysNewsInformatio
                 .eq(SysNewsInformation::getType, type)
                 .eq(SysNewsInformation::getStatus, 1)
                 .eq(SysNewsInformation::getDelFlag, false)
-                .orderByAsc(SysNewsInformation::getOrder).list();
+                .orderByDesc(SysNewsInformation::getOrder).list();
         List<NewsInformationDto> resultList = new ArrayList<>();
         if(CollectionUtils.isNotEmpty(dtos)){
             List<String> musicGroupIds = musicGroupDao.findNormalByCooperationId(coopId);

+ 59 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -16,6 +16,7 @@ import com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceSumDto;
 import com.ym.mec.biz.dal.school.page.TeacherAttendanceQueryInfo;
 import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+import com.ym.mec.biz.dal.wrapper.TeacherAttendanceWrapper;
 import com.ym.mec.biz.event.source.SendMessageSource;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
@@ -36,6 +37,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -1186,9 +1188,6 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		queryInfo.setClassGroupId(queryInfo.getClassGroupId());
 		List<TeacherAttendanceSumDto> dtoList = teacherAttendanceDao.queryTeacherAttendance(queryInfo);
 		if(CollectionUtils.isNotEmpty(dtoList)){
-			List<Integer> teacherIds = dtoList.stream().map(e -> e.getTeacherId()).collect(Collectors.toList());
-			List<SimpleUserDto> usersSimpleInfo = teacherDao.getUsersSimpleInfo(teacherIds);
-			Map<Integer, SimpleUserDto> simpleUserDtoMap = usersSimpleInfo.stream().collect(Collectors.groupingBy(e -> e.getUserId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
 			//获取本周老师考勤状态
 			Date now = new Date();
 			String monday = DateUtil.dateToString(DateUtil.getWeekDayWithDate(now, Calendar.MONDAY), DateUtil.ISO_EXPANDED_DATE_FORMAT);
@@ -1197,21 +1196,52 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			info.setStartTerm(monday);
 			info.setEndTerm(sunday);
 			info.setMusicGroupIds(queryInfo.getMusicGroupIds());
-			Map<Integer,Long> weekCount = MapUtil.convertIntegerMap(teacherAttendanceDao.queryTeacherAttendanceForWeek(info));
-			for (TeacherAttendanceSumDto dto : dtoList) {
-				SimpleUserDto userDto = simpleUserDtoMap.get(dto.getTeacherId());
-				if(Objects.nonNull(userDto)){
-					dto.setTeacherName(userDto.getUserName());
-					dto.setTeacherAvatar(userDto.getAvatar());
+			List<TeacherAttendanceWrapper.CourseTeacherAttendance> courseTeacherAttendances = teacherAttendanceDao.queryTeacherAttendanceForWeek(info);
+			Map<Integer, List<TeacherAttendanceWrapper.CourseTeacherAttendance>> attendanceMap = new HashMap<>(dtoList.size());
+			Map<Integer, School> idSchoolMap = new HashMap<>();
+			if(CollectionUtils.isNotEmpty(courseTeacherAttendances)){
+				attendanceMap = courseTeacherAttendances.stream().collect(Collectors.groupingBy(e -> e.getActualTeacherId()));
+				Set<Integer> schoolIds = courseTeacherAttendances.stream().map(TeacherAttendanceWrapper.CourseTeacherAttendance::getSchoolId).collect(Collectors.toSet());
+				if(schoolIds != null && schoolIds.size() > 0){
+					List<School> schools = schoolDao.getSchools(new ArrayList<>(schoolIds));
+					if(!org.springframework.util.CollectionUtils.isEmpty(schools)){
+						idSchoolMap = schools.stream().collect(Collectors.toMap(School::getId, s->s, (s1, s2)->s1));
+					}
 				}
-				Long errCourseNum = weekCount.get(dto.getTeacherId());
-				if(errCourseNum == null){
-					dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.NO_COURSE);
-				}else {
-					if(errCourseNum > 0L){
-						dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.ERR);
-					}else {
-						dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.NORMAL);
+			}
+			//定位范围
+			String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,queryInfo.getTenantId());
+
+			for (TeacherAttendanceSumDto dto : dtoList) {
+				List<TeacherAttendanceWrapper.CourseTeacherAttendance> attendances = attendanceMap.get(dto.getTeacherId());
+				if(CollectionUtils.isNotEmpty(attendances)){
+					dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.NORMAL);
+					att:for (TeacherAttendanceWrapper.CourseTeacherAttendance attendance : attendances) {
+						if(attendance.getCourseStatus() == CourseStatusEnum.NOT_START){
+							continue att;
+						}
+						if(attendance.getSignInStatus() == 0 || attendance.getSignOutStatus() == 0){
+							dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.ERR);
+							break att;
+						}
+						if(attendance.getTeachMode() == TeachModeEnum.OFFLINE){
+							if(StringUtils.isEmpty(attendance.getSignInLongitudeLatitude()) || StringUtils.isEmpty(attendance.getSignOutLongitudeLatitude())){
+								//计算考勤范围
+								School school = idSchoolMap.get(attendance.getSchoolId());
+								if(school != null){
+									Boolean signRange = courseScheduleTeacherSalaryService.getSignRange(school.getLongitudeLatitude(), attendance.getSignInLongitudeLatitude(), attendanceRange);
+									if(!signRange){
+										dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.ERR);
+										break att;
+									}
+									signRange = courseScheduleTeacherSalaryService.getSignRange(school.getLongitudeLatitude(), attendance.getSignOutLongitudeLatitude(), attendanceRange);
+									if(!signRange){
+										dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.ERR);
+										break att;
+									}
+								}
+							}
+						}
 					}
 				}
 			}
@@ -1223,8 +1253,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
     }
 
 	@Override
-	public List<TeacherAttendanceListDto> getClassTeacherAttendance(Integer classGroupId, Integer teacherId) {
-		List<TeacherAttendanceListDto> attendanceDtos = teacherAttendanceDao.getClassTeacherAttendance(classGroupId,teacherId);
+	public List<TeacherAttendanceListDto> getClassTeacherAttendance(TeacherAttendanceWrapper.ClassTeacherAttendanceQuery query) {
+		List<TeacherAttendanceListDto> attendanceDtos = teacherAttendanceDao.getClassTeacherAttendance(query);
 		Integer tenantId = TenantContextHolder.getTenantId();
 		//计算考勤范围
 		//定位范围
@@ -1242,6 +1272,14 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					}
 				}
 			}
+			if(query.getSignStatus() != null){
+				if(query.getSignStatus()){
+					attendanceDtos = attendanceDtos.stream().filter(e->e.getSignInStatus() && e.getSignOutStatus() && e.getSignInAddressStatus() && e.getSignOutAddressStatus()).collect(Collectors.toList());
+				}else {
+					attendanceDtos = attendanceDtos.stream().filter(e->!e.getSignInStatus() || !e.getSignOutStatus() || !e.getSignInAddressStatus() || !e.getSignOutAddressStatus()).collect(Collectors.toList());
+				}
+			}
+
 		}
 		return attendanceDtos;
 	}
@@ -1261,6 +1299,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				attendanceDto.setSignOutAddressStatus(signRange1);
 			}
 		}
+		CourseSchedule courseSchedule = courseScheduleDao.get(courseId);
+		attendanceDto.setCourseStatus(courseSchedule.getStatus());
 		return attendanceDto;
 	}
 

+ 3 - 3
mec-biz/src/main/resources/config/mybatis/CoursePatrolEvaluationMapper.xml

@@ -81,9 +81,9 @@
         select
             cs.class_date_ as `date`
             ,count(distinct cs.id_) as `totalCount`
-            ,sum(distinct if(cs.type_ = 'SINGLE',1,0)) as  singleCourseCount
-            ,sum(distinct if(cs.type_ = 'MIX',1,0)) as minCourseCount
-            ,sum(distinct if(cpe.id_ is not null,1,0)) as patrolCount
+            ,sum( if(cs.type_ = 'SINGLE',1,0)) as  singleCourseCount
+            ,sum( if(cs.type_ = 'MIX',1,0)) as minCourseCount
+            ,sum( if(cpe.id_ is not null,1,0)) as patrolCount
         from
             course_schedule cs
             left join music_group mg on mg.id_ = cs.music_group_id_

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml

@@ -213,9 +213,10 @@
     </select>
     <select id="queryPageBySchool" resultType="com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto">
         select mgq.user_id_ studentId,mgq.create_time_ createTime,mgq.school_staff_audit_status_ status,
-               sr.actual_subject_id_ subjectId,mgq.id_ musicGroupQuitId
+               sr.actual_subject_id_ subjectId,mgq.id_ musicGroupQuitId,su.username_ studentName,su.avatar_ studentAvatar
         from music_group_quit mgq
         left join student_registration sr ON sr.music_group_id_ = mgq.music_group_id_ AND sr.user_id_ = mgq.user_id_
+        left join sys_user su ON su.id_ = sr.user_id_
         <where>
             <if test="musicGroupIds != null">
                 AND mgq.music_group_id_ IN

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -636,7 +636,7 @@
         (CASE WHEN b.b IS NULL THEN 0 ELSE b.b END) amount_
         FROM
         (SELECT SUM(CASE WHEN expect_amount_ IS NULL THEN 0 ELSE expect_amount_ END) a FROM student_payment_order
-             WHERE group_type_ = 'VIP' AND type_ = 'SMALL_CLASS_TO_BUY' AND music_group_id_ = 41 AND status_ = 'SUCCESS') a,
+             WHERE group_type_ = 'VIP' AND type_ = 'SMALL_CLASS_TO_BUY' AND music_group_id_ = #{vipGroupId} AND status_ = 'SUCCESS') a,
         (SELECT SUM(CASE WHEN amount_ IS NULL THEN 0 ELSE amount_ END) b FROM sys_user_cash_account_log WHERE group_id_ = #{vipGroupId} AND group_type_ = 'VIP') b,
         (SELECT SUM(CASE WHEN actual_price_ IS NULL THEN 0 ELSE actual_price_ END) c FROM activity_user_mapper WHERE vip_group_id_ = #{vipGroupId}) c,
         (SELECT SUM(CASE WHEN amount_ IS NULL THEN 0 ELSE amount_ END) d FROM sys_user_cash_account_detail WHERE group_id_ = #{vipGroupId}) d,

+ 28 - 17
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -629,10 +629,11 @@
     <select id="queryTeacherAttendance" resultType="com.ym.mec.biz.dal.school.dto.TeacherAttendanceSumDto">
         select cg.type_ classGroupType,cs.actual_teacher_id_ teacherId,COUNT(distinct cs.id_) totalCourseNum,
                COUNT(CASE WHEN ta.sign_in_status_ = 1 and ta.sign_in_status_ = 1 THEN NULL ELSE 1 END) errCourseNum,
-               cs.class_group_id_ classGroupId
+               cs.class_group_id_ classGroupId,su.avatar_ teacherAvatar,su.real_name_ teacherName
         from course_schedule cs
         left join class_group cg ON cg.id_ = cs.class_group_id_
         left join teacher_attendance ta ON ta.course_schedule_id_ = cs.id_ AND ta.teacher_id_ = cs.actual_teacher_id_
+        left join sys_user su ON su.id_ = cs.actual_teacher_id_
         <include refid="queryTeacherAttendanceSql"/>
         group by cs.actual_teacher_id_
     </select>
@@ -649,6 +650,12 @@
             <if test="queryInfo.teacherId != null">
                 AND cs.actual_teacher_id_ = #{queryInfo.teacherId}
             </if>
+            <if test="queryInfo.classType != null and queryInfo.classType != ''">
+                AND cg.type_ = #{queryInfo.classType}
+            </if>
+            <if test="queryInfo.search != null and queryInfo.search != ''">
+                AND (su.real_name_ LIKE CONCAT('%',#{queryInfo.search},'%') OR cs.actual_teacher_id_ = #{queryInfo.search})
+            </if>
             <if test="queryInfo.musicGroupIds != null and queryInfo.musicGroupIds.size > 0">
                 AND cs.music_group_id_ IN
                 <foreach collection="queryInfo.musicGroupIds" item="musicGroupId" open="(" separator="," close=")">
@@ -657,26 +664,15 @@
             </if>
         </where>
     </sql>
-    <select id="queryTeacherAttendanceForWeek" resultType="java.util.Map">
-        select cs.actual_teacher_id_ 'key',
-               COUNT(CASE WHEN ta.sign_in_status_ = 0 or ta.sign_in_status_ = 0
-                   or ta.sign_in_status_ IS NULL or ta.sign_in_status_ IS NULL THEN 1 ELSE 1 END) 'value'
+    <select id="queryTeacherAttendanceForWeek" resultType="com.ym.mec.biz.dal.wrapper.TeacherAttendanceWrapper$CourseTeacherAttendance">
+        select cs.actual_teacher_id_ actualTeacherId,cs.id_ courseScheduleId,
+        cs.status_ courseStatus,ta.sign_in_status_ signInStatus,ta.sign_out_status_ signOutStatus,cs.teach_mode_ teachMode,
+               ta.sign_in_longitude_latitude_ signInLongitudeLatitude,ta.sign_out_longitude_latitude_ signOutLongitudeLatitude,cs.schoole_id_ schoolId
         from course_schedule cs
-                 left join teacher_attendance ta ON ta.course_schedule_id_ = cs.id_ AND ta.teacher_id_ = cs.actual_teacher_id_
+        left join teacher_attendance ta ON ta.course_schedule_id_ = cs.id_ AND ta.teacher_id_ = cs.actual_teacher_id_
         <include refid="queryTeacherAttendanceSql"/>
         group by cs.actual_teacher_id_
     </select>
-    <select id="getClassTeacherAttendance" resultType="com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto">
-        select cs.type_ courseScheduleType,CONCAT(cs.class_date_,' ',cs.start_class_time_,'~',cs.end_class_time_) classDate,
-               ta.sign_in_time_ signInTime,ta.sign_in_status_ signInStatus,ta.sign_in_longitude_latitude_ signInLongitudeLatitude,
-               ta.sign_out_time_ signOutTime,ta.sign_out_status_ signOutStatus,ta.sign_out_longitude_latitude_ signOutLongitudeLatitude,
-               s.longitude_latitude_ schoolLongitudeLatitude,cs.teach_mode_ teachMode
-        from course_schedule cs
-        left join teacher_attendance ta ON cs.id_ = ta.course_schedule_id_ AND ta.teacher_id_ = cs.actual_teacher_id_
-        left join school s ON s.id_ = cs.schoole_id_
-        where cs.class_group_id_ = #{classGroupId} and cs.actual_teacher_id_ = #{teacherId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) &lt; NOW()
-        AND cs.is_lock_ = 0 AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.new_course_id_ IS NULL
-    </select>
     <select id="getCourseTeacherAttendance" resultType="com.ym.mec.biz.dal.school.dto.TeacherAttendanceDto">
         select ta.sign_in_time_ signInTime,ta.sign_in_status_ signInStatus,ta.sign_in_longitude_latitude_ signInLongitudeLatitude,
                ta.sign_out_time_ signOutTime,ta.sign_out_status_ signOutStatus,ta.sign_out_longitude_latitude_ signOutLongitudeLatitude,
@@ -690,6 +686,21 @@
     	UPDATE teacher_attendance SET sign_out_status_ = 1,sign_out_time_= now()
     	WHERE FIND_IN_SET(course_schedule_id_,#{courseScheduleIdList}) AND sign_in_status_ = 1
     </update>
+    <select id="getClassTeacherAttendance" resultType="com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto">
+        select cs.type_ courseScheduleType,CONCAT(cs.class_date_,' ',cs.start_class_time_,'~',cs.end_class_time_) classDate,
+        ta.sign_in_time_ signInTime,ta.sign_in_status_ signInStatus,ta.sign_in_longitude_latitude_ signInLongitudeLatitude,
+        ta.sign_out_time_ signOutTime,ta.sign_out_status_ signOutStatus,ta.sign_out_longitude_latitude_ signOutLongitudeLatitude,
+        s.longitude_latitude_ schoolLongitudeLatitude,cs.teach_mode_ teachMode
+        from course_schedule cs
+        left join teacher_attendance ta ON cs.id_ = ta.course_schedule_id_ AND ta.teacher_id_ = cs.actual_teacher_id_
+        left join school s ON s.id_ = cs.schoole_id_
+        where cs.class_group_id_ = #{query.classGroupId} and cs.actual_teacher_id_ = #{query.teacherId}
+        AND CONCAT(cs.class_date_,' ',cs.start_class_time_) &lt; NOW()
+        <if test="query.courseType != null and query.courseType != ''">
+            AND cs.type_ = #{query.courseType}
+        </if>
+        AND cs.is_lock_ = 0 AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.new_course_id_ IS NULL
+    </select>
     <update id="cleanCourseTeacherSignInfo">
         UPDATE teacher_attendance
         SET sign_in_time_ = NULL,sign_in_status_=NULL,sign_out_status_ = NULL,sign_out_time_= NULL

+ 4 - 1
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -212,7 +212,10 @@ public class MusicGroupController extends BaseController {
         musicGroupQuit.setReasonEnum(reasonEnum);
 		musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
         musicGroupQuit.setOperatorId(userId);
-        musicGroupQuit.setSchoolStaffAuditStatus(EQuitGroupAuditStatusEnum.ING);
+        MusicGroup musicGroup = musicGroupService.get(musicGroupId);
+        if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
+            musicGroupQuit.setSchoolStaffAuditStatus(EQuitGroupAuditStatusEnum.ING);
+        }
         return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit,"STUDENT"));
     }
 

+ 1 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java

@@ -80,7 +80,7 @@ public class ClassGroupController extends BaseController {
 
             Map<Integer, StudentSubjectDto> subjectDtoMap = subjectService.getSubjectByStudentId(collect);
             courseStudents.forEach(studentAttendanceViewDto -> {
-                if (studentAttendanceViewDto.getSubjectId() == null) {
+                if (studentAttendanceViewDto.getSubjectIdList() == null) {
                     StudentSubjectDto subjectDto = subjectDtoMap.getOrDefault(studentAttendanceViewDto.getUserId(), null);
                     if (subjectDto.getSubjectId() != null) {
                         studentAttendanceViewDto.setSubjectName(subjectDto.getSubjectName());

+ 8 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/JiguangPushPlugin.java

@@ -59,7 +59,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
      * @param content 消息内容
      * @return json对象
      */
-    private JSONObject generateJson(String[] alias, String alert, String content, String url, String sound, String channelId, JSONObject androidIntent) {
+    private JSONObject generateJson(String[] alias, String alert, String content, String url, String sound, String channelId, JSONObject androidIntent,String type) {
         JSONObject json = new JSONObject();
         JSONArray platform = new JSONArray();// 平台
         platform.add("android");
@@ -90,6 +90,9 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
         android_extras.put("type", "infomation");
         android_extras.put("url", url);
         android_extras.put("memo", url);
+        if (StringUtils.isNotEmpty(type) && type.equals("SCHOOL")) {
+            android_extras.put("clientType", type);
+        }
         //2022年6月22日 增加 third_url_encode 参数,极光推送数据中带有#号需要转译
         android_extras.put("third_url_encode", true);
         android.put("extras", android_extras);
@@ -104,6 +107,9 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
         ios_extras.put("type", "infomation");
         ios_extras.put("url", url);
         ios_extras.put("memo", url);
+        if (StringUtils.isNotEmpty(type) && type.equals("SCHOOL")) {
+            ios_extras.put("clientType", type);
+        }
         ios.put("extras", ios_extras);
         notification.put("android", android);
         notification.put("ios", ios);
@@ -155,7 +161,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
                 break;
         }
         String authorization = "Basic " + base64_auth_string;
-        JSONObject jsonObject = generateJson(alias, alert, content, url, sound, channelId, androidIntent);
+        JSONObject jsonObject = generateJson(alias, alert, content, url, sound, channelId, androidIntent,type);
         return sendPostRequest(jsonObject.toString(), authorization);
     }
 

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/SchoolMessageController.java

@@ -86,6 +86,6 @@ public class SchoolMessageController extends BaseController {
         if (sysUser == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(sysMessageService.queryCountOfUnread(null, sysUser.getId(),"SCHOOL", null));
+        return succeed(sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"SCHOOL", null));
     }
 }

+ 5 - 7
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolTeacherAttendanceController.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.school.dto.TeacherAttendanceListDto;
 import com.ym.mec.biz.dal.school.dto.TeacherAttendanceSumDto;
 import com.ym.mec.biz.dal.school.page.TeacherAttendanceQueryDto;
 import com.ym.mec.biz.dal.school.page.TeacherAttendanceQueryInfo;
+import com.ym.mec.biz.dal.wrapper.TeacherAttendanceWrapper;
 import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -40,6 +41,7 @@ public class SchoolTeacherAttendanceController extends BaseController {
         queryInfo.setCoopId(coopId);
         queryInfo.setTeacherId(queryDto.getTeacherId());
         queryInfo.setClassGroupId(queryDto.getClassGroupId());
+        queryInfo.setCourseStatus(queryDto.getCourseStatus());
         List<TeacherAttendanceSumDto> sumDtos = teacherAttendanceService.queryTeacherAttendance(queryInfo);
         return succeed(CollectionUtils.isEmpty(sumDtos)?new TeacherAttendanceSumDto():sumDtos.get(0));
     }
@@ -56,13 +58,9 @@ public class SchoolTeacherAttendanceController extends BaseController {
     }
 
 
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "classGroupId", dataType = "Integer", required = true, value = "班级编号"),
-            @ApiImplicitParam(name = "teacherId", dataType = "Integer", required = true, value = "老师编号"),
-    })
     @ApiOperation(value = "获取单个老师所在班级考勤列表----获取本学期当前班级老师所有课程考勤")
-    @GetMapping("/getClassTeacherAttendance")
-    public HttpResponseResult<List<TeacherAttendanceListDto>> getClassTeacherAttendance(Integer classGroupId, Integer teacherId) {
-        return succeed(teacherAttendanceService.getClassTeacherAttendance(classGroupId,teacherId));
+    @PostMapping("/getClassTeacherAttendance")
+    public HttpResponseResult<List<TeacherAttendanceListDto>> getClassTeacherAttendance(@RequestBody TeacherAttendanceWrapper.ClassTeacherAttendanceQuery query) {
+        return succeed(teacherAttendanceService.getClassTeacherAttendance(query));
     }
 }

Някои файлове не бяха показани, защото твърде много файлове са промени