Forráskód Böngészése

Merge branch 'master' of http://git.dayaedu.com/yonge/mec into new_teacher_app

zouxuan 4 éve
szülő
commit
5bf0298552
60 módosított fájl, 2507 hozzáadás és 268 törlés
  1. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  2. 147 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexErrDataRecordDao.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ReplacementInstrumentActivityDao.java
  4. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  5. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java
  6. 75 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexErrorDataExportDto.java
  7. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ReplacementInstrumentActivityStatDto.java
  8. 105 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexErrDataRecord.java
  9. 22 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/InspectionItem.java
  10. 22 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/InspectionItemPlan.java
  11. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/School.java
  12. 40 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/EndCourseScheduleQueryInfo.java
  13. 50 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/IndexErrRecordQueryInfo.java
  14. 40 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionItemPlanQueryInfo.java
  15. 40 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionQueryInfo.java
  16. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SchoolQueryInfo.java
  17. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java
  18. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java
  19. 87 0
      mec-biz/src/main/java/com/ym/mec/biz/service/IndexErrDataRecordService.java
  20. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreAccompanimentService.java
  21. 29 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  22. 8 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationOrganServiceImpl.java
  23. 0 52
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  24. 1 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  25. 45 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  26. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  27. 527 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexErrDataRecordServiceImpl.java
  28. 31 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  29. 26 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java
  30. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  31. 19 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  32. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  33. 38 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java
  34. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  35. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  36. 27 5
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  37. 622 0
      mec-biz/src/main/resources/config/mybatis/IndexErrDataRecordMapper.xml
  38. 2 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  39. 8 0
      mec-biz/src/main/resources/config/mybatis/ReplacementInstrumentActivityMapper.xml
  40. 25 18
      mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml
  41. 9 8
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  42. 6 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  43. 11 6
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  44. 7 16
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml
  45. 1 1
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreCategoriesMapper.xml
  46. 0 4
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  47. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  48. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  49. 0 14
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupRegisterController.java
  50. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/SysMusicScoreAccompanimentController.java
  51. 23 0
      mec-task/src/main/java/com/ym/mec/task/jobs/IndexErrDataRecordTask.java
  52. 1 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java
  53. 1 1
      mec-util/src/main/java/com/ym/mec/util/http/HttpUtil.java
  54. 56 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  55. 0 5
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java
  56. 190 0
      mec-web/src/main/java/com/ym/mec/web/controller/IndexErrDataRecordController.java
  57. 10 16
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java
  58. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/ReplacementInstrumentActivityController.java
  59. 11 11
      mec-web/src/main/java/com/ym/mec/web/controller/SchoolController.java
  60. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -10,6 +10,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.poi.ss.formula.functions.Index;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData> {
@@ -297,4 +298,6 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     int countStudentLeaveCourseList(Map<String, Object> params);
 
     List<StudentLeaveCourseDto> queryStudentLeaveCourseList(Map<String, Object> params);
+
+    List<Map<Integer, BigDecimal>> getStudentErrorLeaveNumMap(Map<String, Object> params);
 }

+ 147 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexErrDataRecordDao.java

@@ -0,0 +1,147 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.dto.CourseScheduleEndDto;
+import com.ym.mec.biz.dal.entity.InspectionItem;
+import com.ym.mec.biz.dal.entity.InspectionItemPlan;
+import com.ym.mec.biz.dal.enums.IndexErrorType;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.IndexErrDataRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public interface IndexErrDataRecordDao extends BaseDAO<Long, IndexErrDataRecord> {
+
+    int batchInsert(@Param("datas") List<IndexErrDataRecord> datas);
+
+    int batchUpdate(@Param("datas") List<IndexErrDataRecord> datas);
+
+    int deleteWithGenerateTimeAndType(@Param("generateTime") String generateTime,
+                                      @Param("dataType") IndexErrorType dataType);
+
+    /**
+     * @describe 统计指定日期产生的异常数量
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param generateTime:
+     * @return int
+     */
+    int countWithGenerateTime(@Param("generateTime") String generateTime);
+
+    /**
+     * @describe 获取所有异常相关教务老师编号
+     * @author Joburgess
+     * @date 2021/6/2 0002
+     * @param organIds:
+     * @return java.util.List<java.lang.Integer>
+     */
+    List<Integer> getAllDealUserIds(@Param("organIds") Collection organIds);
+
+    /**
+     * @describe 根据产生日期
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param generateStartTime:
+     * @param generateEndTime:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexErrDataRecord>
+     */
+    List<IndexErrDataRecord> getWithGenerateTime(@Param("organIds") Set<Integer> organIds,
+                                                 @Param("generateStartTime") String generateStartTime,
+                                                @Param("generateEndTime") String generateEndTime);
+
+    /**
+     * @describe 查询未处理记录
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexErrDataRecord>
+     */
+    List<IndexErrDataRecord> findUntreatedRecord();
+
+    /**
+     * @describe 乐团巡查事项异常
+     * @author Joburgess
+     * @date 2021/5/27 0027
+     * @param date:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexErrDataRecord>
+     */
+    List<IndexErrDataRecord> queryErrInspection(@Param("date") String date,
+                                                @Param("dates") Set<String> dates);
+
+    /**
+     * @describe 乐团巡查任务未提交
+     * @author Joburgess
+     * @date 2021/5/27 0027
+     * @param date:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexErrDataRecord>
+     */
+    List<IndexErrDataRecord> queryInspectionItemPlan(@Param("date") String date,
+                                                     @Param("dates") Set<String> dates);
+
+    /**
+     * @describe 回访任务未完成
+     * @author Joburgess
+     * @date 2021/5/27 0027
+     * @param date:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexErrDataRecord>
+     */
+    List<IndexErrDataRecord> queryStudentVisit(@Param("date") String date,
+                                               @Param("dates") Set<String> dates);
+
+    /**
+     * @describe 课程考勤异常
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param date:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexErrDataRecord>
+     */
+    List<IndexErrDataRecord> getAttendanceError(@Param("date") String date,
+                                                @Param("dates") Set<String> dates);
+
+    /**
+     * @describe 课程异常
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param date:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexErrDataRecord>
+     */
+    List<IndexErrDataRecord> getNoAttendance(@Param("date") String date,
+                                             @Param("dates") Set<String> dates);
+
+    List<String> queryErrStrings(Map<String, Object> params);
+    int queryErrStringsCount(Map<String, Object> params);
+    List<IndexErrDataRecord> getWithOrganMonthUserStr(@Param("omuStrings") List<String> omuStrings);
+    List<IndexErrDataRecord> getAllErrDatas(Map<String, Object> params);
+
+    /**
+     * @describe 历史异常数据-乐团巡查事项异常/乐团巡查任务未提交
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param params:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.InspectionItemPlan>
+     */
+    List<InspectionItemPlan> queryErrInspectionData(Map<String, Object> params);
+    int errInspectionDataCount(Map<String, Object> params);
+
+    /**
+     * @describe 历史异常数据-回访任务未完成
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param params:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.InspectionItem>
+     */
+    List<InspectionItem> queryErrStudentVisit(Map<String, Object> params);
+    int studentVisitCount(Map<String, Object> params);
+
+    /**
+     * @return java.util.List<com.ym.mec.biz.dal.dto.CourseScheduleEndDto>
+     * @describe 历史异常数据-课程(课程考勤异常/课程异常)
+     * @author Joburgess
+     * @date 2019/12/27
+     */
+    List<CourseScheduleEndDto> queryHistoryErrCourseData(Map<String, Object> params);
+    int historyErrCourseDataCount(Map<String, Object> params);
+	
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ReplacementInstrumentActivityDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import java.util.List;
 import java.util.Map;
 
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.biz.dal.dto.ReplacementInstrumentActivityStatDto;
@@ -44,6 +45,7 @@ public interface ReplacementInstrumentActivityDao extends BaseDAO<Integer, Repla
 
     /**
      * 获取问卷分页数据
+     *
      * @param params
      * @return
      */
@@ -51,8 +53,17 @@ public interface ReplacementInstrumentActivityDao extends BaseDAO<Integer, Repla
 
     /**
      * 获取问卷总条数
+     *
      * @param params
      * @return
      */
     Integer getCount(Map<String, Object> params);
+
+    /**
+     * 置换活动的订单
+     *
+     * @param ids
+     * @return
+     */
+    List<StudentPaymentOrder> getActivityOrder(@Param("ids") List<Integer> ids);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -25,6 +25,8 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     SysUser lockUserReturnInfo(@Param("userId") Integer userId);
 
+    SysUser getUser(@Param("userId") Integer userId);
+
     List<SysUser> findStudents(Map<String, Object> params);
 
     int countStudents(Map<String, Object> params);

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java

@@ -50,6 +50,27 @@ public class CourseScheduleEndDto extends CourseSchedule {
 
     private boolean beMerged;
 
+    private Date generateTime;
+
+    /** 处理时间 */
+    private java.util.Date dealTime;
+
+    public Date getGenerateTime() {
+        return generateTime;
+    }
+
+    public void setGenerateTime(Date generateTime) {
+        this.generateTime = generateTime;
+    }
+
+    public Date getDealTime() {
+        return dealTime;
+    }
+
+    public void setDealTime(Date dealTime) {
+        this.dealTime = dealTime;
+    }
+
     public String getEducationTeacherName() {
         return educationTeacherName;
     }

+ 75 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexErrorDataExportDto.java

@@ -12,12 +12,19 @@ public class IndexErrorDataExportDto {
 
     private String organName;
 
+    private String generateTime;
+
+    private String dealUserName;
+
     @ApiModelProperty(value = "基础技能班学员数量异常")
     private int highClassStudentLessThanThreeNum;
 
     @ApiModelProperty(value = "乐团巡查事项异常")
     private int musicPatrolItem;
 
+    @ApiModelProperty(value = "乐团巡查事项异常-剩余")
+    private int musicPatrolItemSurplus;
+
     @ApiModelProperty(value = "未加入任何班级学员")
     private int noClassMusicGroupStudentInfo;
 
@@ -39,15 +46,27 @@ public class IndexErrorDataExportDto {
     @ApiModelProperty(value = "乐团巡查任务未提交")
     private int inspectionItemPlan;
 
+    @ApiModelProperty(value = "乐团巡查任务未提交-剩余")
+    private int inspectionItemPlanSurplus;
+
     @ApiModelProperty(value = "回访任务未完成")
     private int studentVisit;
 
+    @ApiModelProperty(value = "回访任务未完成-剩余")
+    private int studentVisitSurplus;
+
     @ApiModelProperty(value = "课程考勤异常")
     private int teacherExceptionAttendance;
 
+    @ApiModelProperty(value = "课程考勤异常-剩余")
+    private int teacherExceptionAttendanceSurplus;
+
     @ApiModelProperty(value = "课程异常")
     private int teacherNotAClass;
 
+    @ApiModelProperty(value = "课程异常-剩余")
+    private int teacherNotAClassSurplus;
+
     @ApiModelProperty(value = "服务指标异常")
     private int teacherServeError;
 
@@ -70,6 +89,22 @@ public class IndexErrorDataExportDto {
         this.organName = organName;
     }
 
+    public String getGenerateTime() {
+        return generateTime;
+    }
+
+    public void setGenerateTime(String generateTime) {
+        this.generateTime = generateTime;
+    }
+
+    public String getDealUserName() {
+        return dealUserName;
+    }
+
+    public void setDealUserName(String dealUserName) {
+        this.dealUserName = dealUserName;
+    }
+
     public int getHighClassStudentLessThanThreeNum() {
         return highClassStudentLessThanThreeNum;
     }
@@ -181,4 +216,44 @@ public class IndexErrorDataExportDto {
     public void setTotal(int total) {
         this.total = total;
     }
+
+    public int getMusicPatrolItemSurplus() {
+        return musicPatrolItemSurplus;
+    }
+
+    public void setMusicPatrolItemSurplus(int musicPatrolItemSurplus) {
+        this.musicPatrolItemSurplus = musicPatrolItemSurplus;
+    }
+
+    public int getInspectionItemPlanSurplus() {
+        return inspectionItemPlanSurplus;
+    }
+
+    public void setInspectionItemPlanSurplus(int inspectionItemPlanSurplus) {
+        this.inspectionItemPlanSurplus = inspectionItemPlanSurplus;
+    }
+
+    public int getStudentVisitSurplus() {
+        return studentVisitSurplus;
+    }
+
+    public void setStudentVisitSurplus(int studentVisitSurplus) {
+        this.studentVisitSurplus = studentVisitSurplus;
+    }
+
+    public int getTeacherExceptionAttendanceSurplus() {
+        return teacherExceptionAttendanceSurplus;
+    }
+
+    public void setTeacherExceptionAttendanceSurplus(int teacherExceptionAttendanceSurplus) {
+        this.teacherExceptionAttendanceSurplus = teacherExceptionAttendanceSurplus;
+    }
+
+    public int getTeacherNotAClassSurplus() {
+        return teacherNotAClassSurplus;
+    }
+
+    public void setTeacherNotAClassSurplus(int teacherNotAClassSurplus) {
+        this.teacherNotAClassSurplus = teacherNotAClassSurplus;
+    }
 }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ReplacementInstrumentActivityStatDto.java

@@ -41,6 +41,12 @@ public class ReplacementInstrumentActivityStatDto extends ReplacementInstrumentA
     @ApiModelProperty(value="是否有置换乐器")
     private String hasInstrumentsId;
 
+    @ApiModelProperty(value="现金支付金额")
+    private BigDecimal actualAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value="余额支付")
+    private BigDecimal balance = BigDecimal.ZERO;
+
     public String getTitle() {
         return title;
     }
@@ -136,4 +142,20 @@ public class ReplacementInstrumentActivityStatDto extends ReplacementInstrumentA
     public void setHasYesFirstAnswer(String hasYesFirstAnswer) {
         this.hasYesFirstAnswer = hasYesFirstAnswer;
     }
+
+    public BigDecimal getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(BigDecimal actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public BigDecimal getBalance() {
+        return balance;
+    }
+
+    public void setBalance(BigDecimal balance) {
+        this.balance = balance;
+    }
 }

+ 105 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexErrDataRecord.java

@@ -0,0 +1,105 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.IndexErrorType;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(index_err_data_record):
+ */
+public class IndexErrDataRecord {
+
+	/**  */
+	private Long id;
+	
+	/** 分部编号 */
+	private Integer organId;
+	
+	/** 数据id */
+	private String dataId;
+	
+	/** 数据类型 */
+	private IndexErrorType dataType;
+	
+	/** 处理人编号 */
+	private Integer dealUserId = -1;
+	
+	/** 生成时间 */
+	private java.util.Date createTime;
+
+	private Date generateTime;
+	
+	/** 处理时间 */
+	private java.util.Date dealTime;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setOrganId(Integer organId){
+		this.organId = organId;
+	}
+	
+	public Integer getOrganId(){
+		return this.organId;
+	}
+			
+	public void setDataId(String dataId){
+		this.dataId = dataId;
+	}
+	
+	public String getDataId(){
+		return this.dataId;
+	}
+
+	public IndexErrorType getDataType() {
+		return dataType;
+	}
+
+	public void setDataType(IndexErrorType dataType) {
+		this.dataType = dataType;
+	}
+
+	public void setDealUserId(Integer dealUserId){
+		this.dealUserId = dealUserId;
+	}
+	
+	public Integer getDealUserId(){
+		return this.dealUserId;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+
+	public Date getGenerateTime() {
+		return generateTime;
+	}
+
+	public void setGenerateTime(Date generateTime) {
+		this.generateTime = generateTime;
+	}
+
+	public void setDealTime(java.util.Date dealTime){
+		this.dealTime = dealTime;
+	}
+	
+	public java.util.Date getDealTime(){
+		return this.dealTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 22 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/InspectionItem.java

@@ -88,6 +88,27 @@ public class InspectionItem {
     @ApiModelProperty(value = "主管名字")
     private String userName;
 
+    private Date generateTime;
+
+    /** 处理时间 */
+    private java.util.Date dealTime;
+
+    public Date getGenerateTime() {
+        return generateTime;
+    }
+
+    public void setGenerateTime(Date generateTime) {
+        this.generateTime = generateTime;
+    }
+
+    public Date getDealTime() {
+        return dealTime;
+    }
+
+    public void setDealTime(Date dealTime) {
+        this.dealTime = dealTime;
+    }
+
     public Long getId() {
         return id;
     }
@@ -207,4 +228,4 @@ public class InspectionItem {
     public void setUserName(String userName) {
         this.userName = userName;
     }
-}
+}

+ 22 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/InspectionItemPlan.java

@@ -136,6 +136,27 @@ public class InspectionItemPlan {
     @ApiModelProperty(value = "乐团主管名字")
     private String realName;
 
+    private Date generateTime;
+
+    /** 处理时间 */
+    private java.util.Date dealTime;
+
+    public Date getGenerateTime() {
+        return generateTime;
+    }
+
+    public void setGenerateTime(Date generateTime) {
+        this.generateTime = generateTime;
+    }
+
+    public Date getDealTime() {
+        return dealTime;
+    }
+
+    public void setDealTime(Date dealTime) {
+        this.dealTime = dealTime;
+    }
+
     public Long getId() {
         return id;
     }
@@ -327,4 +348,4 @@ public class InspectionItemPlan {
     public void setOperatorUserId(Integer operatorUserId) {
         this.operatorUserId = operatorUserId;
     }
-}
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/School.java

@@ -16,6 +16,8 @@ public class School {
 	
 	private Integer userId;
 
+	private String realName;
+
 	/**  */
 	@ApiModelProperty(value = "学校名称", required = false)
 	private String name;
@@ -62,6 +64,14 @@ public class School {
 	@ApiModelProperty(value = "备注", required = false)
 	private String remark;
 
+	public String getRealName() {
+		return realName;
+	}
+
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+
 	public String getOrganName() {
 		return organName;
 	}

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/EndCourseScheduleQueryInfo.java

@@ -81,6 +81,14 @@ public class EndCourseScheduleQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "课程编号搜索")
     private Long courseIdSearch;
 
+    private String generateStartTime;
+
+    private String generateEndTime;
+
+    private String dealStartTime;
+
+    private String dealEndTime;
+
     public Long getCourseIdSearch() {
         return courseIdSearch;
     }
@@ -264,4 +272,36 @@ public class EndCourseScheduleQueryInfo extends QueryInfo {
     public void setTeachType(TeachTypeEnum teachType) {
         this.teachType = teachType;
     }
+
+    public String getGenerateStartTime() {
+        return generateStartTime;
+    }
+
+    public void setGenerateStartTime(String generateStartTime) {
+        this.generateStartTime = generateStartTime;
+    }
+
+    public String getGenerateEndTime() {
+        return generateEndTime;
+    }
+
+    public void setGenerateEndTime(String generateEndTime) {
+        this.generateEndTime = generateEndTime;
+    }
+
+    public String getDealStartTime() {
+        return dealStartTime;
+    }
+
+    public void setDealStartTime(String dealStartTime) {
+        this.dealStartTime = dealStartTime;
+    }
+
+    public String getDealEndTime() {
+        return dealEndTime;
+    }
+
+    public void setDealEndTime(String dealEndTime) {
+        this.dealEndTime = dealEndTime;
+    }
 }

+ 50 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/IndexErrRecordQueryInfo.java

@@ -0,0 +1,50 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/5/31 0031
+ */
+public class IndexErrRecordQueryInfo extends QueryInfo {
+
+    private String organIds;
+
+    private Integer educationUserId;
+
+    private String startDate;
+
+    private String endDate;
+
+    public String getOrganIds() {
+        return organIds;
+    }
+
+    public void setOrganIds(String organIds) {
+        this.organIds = organIds;
+    }
+
+    public Integer getEducationUserId() {
+        return educationUserId;
+    }
+
+    public void setEducationUserId(Integer educationUserId) {
+        this.educationUserId = educationUserId;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+}

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionItemPlanQueryInfo.java

@@ -46,6 +46,14 @@ public class InspectionItemPlanQueryInfo extends QueryInfo {
 
     private String searchStartTime;
 
+    private String generateStartTime;
+
+    private String generateEndTime;
+
+    private String dealStartTime;
+
+    private String dealEndTime;
+
     public String getSearchStartTime() {
         return searchStartTime;
     }
@@ -158,4 +166,36 @@ public class InspectionItemPlanQueryInfo extends QueryInfo {
     public void setIds(String ids) {
         this.ids = ids;
     }
+
+    public String getGenerateStartTime() {
+        return generateStartTime;
+    }
+
+    public void setGenerateStartTime(String generateStartTime) {
+        this.generateStartTime = generateStartTime;
+    }
+
+    public String getGenerateEndTime() {
+        return generateEndTime;
+    }
+
+    public void setGenerateEndTime(String generateEndTime) {
+        this.generateEndTime = generateEndTime;
+    }
+
+    public String getDealStartTime() {
+        return dealStartTime;
+    }
+
+    public void setDealStartTime(String dealStartTime) {
+        this.dealStartTime = dealStartTime;
+    }
+
+    public String getDealEndTime() {
+        return dealEndTime;
+    }
+
+    public void setDealEndTime(String dealEndTime) {
+        this.dealEndTime = dealEndTime;
+    }
 }

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionQueryInfo.java

@@ -31,6 +31,14 @@ public class InspectionQueryInfo extends QueryInfo {
 
     private String searchStartTime;
 
+    private String generateStartTime;
+
+    private String generateEndTime;
+
+    private String dealStartTime;
+
+    private String dealEndTime;
+
     public String getSearchStartTime() {
         return searchStartTime;
     }
@@ -102,4 +110,36 @@ public class InspectionQueryInfo extends QueryInfo {
     public void setIds(String ids) {
         this.ids = ids;
     }
+
+    public String getGenerateStartTime() {
+        return generateStartTime;
+    }
+
+    public void setGenerateStartTime(String generateStartTime) {
+        this.generateStartTime = generateStartTime;
+    }
+
+    public String getGenerateEndTime() {
+        return generateEndTime;
+    }
+
+    public void setGenerateEndTime(String generateEndTime) {
+        this.generateEndTime = generateEndTime;
+    }
+
+    public String getDealStartTime() {
+        return dealStartTime;
+    }
+
+    public void setDealStartTime(String dealStartTime) {
+        this.dealStartTime = dealStartTime;
+    }
+
+    public String getDealEndTime() {
+        return dealEndTime;
+    }
+
+    public void setDealEndTime(String dealEndTime) {
+        this.dealEndTime = dealEndTime;
+    }
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SchoolQueryInfo.java

@@ -10,6 +10,17 @@ public class SchoolQueryInfo extends QueryInfo {
     
     private String organId;
 
+    //是否公共
+    private Integer publicFlag;
+
+    public Integer getPublicFlag() {
+        return publicFlag;
+    }
+
+    public void setPublicFlag(Integer publicFlag) {
+        this.publicFlag = publicFlag;
+    }
+
     public Integer getCooperationOrganId() {
         return cooperationOrganId;
     }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 public class SysExamSongQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "上传人",required = true)
@@ -26,6 +28,16 @@ public class SysExamSongQueryInfo extends QueryInfo {
 
     private ClientTypeEnum clientType;
 
+    private List<Integer> categoriesIdList;
+
+    public List<Integer> getCategoriesIdList() {
+        return categoriesIdList;
+    }
+
+    public void setCategoriesIdList(List<Integer> categoriesIdList) {
+        this.categoriesIdList = categoriesIdList;
+    }
+
     public ClientTypeEnum getClientType() {
         return clientType;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java

@@ -4,6 +4,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroupMember;
 import com.ym.mec.common.service.BaseService;
 
@@ -20,6 +22,15 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	boolean join(Long imGroupId, Integer userId, String roleType, boolean isAdmin);
 
 	/**
+	 * 加入群组
+	 * @param imGroupId 群编号
+	 * @param roleType 角色类型
+	 * @param isAdmin 是否是管理员
+	 * @return
+	 */
+	boolean join(Long imGroupId, String roleType, boolean isAdmin, ImGroup imGroup, SysUser user);
+
+	/**
 	 * 批量加入群组
 	 * @param imGroupId 群组编号
 	 * @param userRoleMap key-用户编号  value-角色类型

+ 87 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/IndexErrDataRecordService.java

@@ -0,0 +1,87 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.dto.CourseScheduleEndDto;
+import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.entity.IndexErrDataRecord;
+import com.ym.mec.biz.dal.entity.InspectionItem;
+import com.ym.mec.biz.dal.entity.InspectionItemPlan;
+import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.IndexErrRecordQueryInfo;
+import com.ym.mec.biz.dal.page.InspectionItemPlanQueryInfo;
+import com.ym.mec.biz.dal.page.InspectionQueryInfo;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.List;
+
+public interface IndexErrDataRecordService extends BaseService<Long, IndexErrDataRecord> {
+
+    /**
+     * @describe 历史异常数据记录
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param date:
+     * @return void
+     */
+    void indexErrDataRecordTask(String date);
+
+    /**
+     * @describe 历史异常数据记录导出
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param startDate:
+     * @param endDate:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.IndexErrDataRecord>
+     */
+    List<IndexErrorDataExportDto> errRecordExport(String organIds, String startDate, String endDate);
+
+    /**
+     * @describe 获取所有异常相关教务人员
+     * @author Joburgess
+     * @date 2021/6/2 0002
+     * @param organIds:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
+     */
+    List<SimpleUserDto> getAllEducationUsers(String organIds);
+
+    PageInfo<IndexErrorDataExportDto> queryRecord(IndexErrRecordQueryInfo queryInfo);
+
+    /**
+     * @describe 异常数据汇总
+     * @author Joburgess
+     * @date 2021/6/2 0002
+     * @param queryInfo:
+     * @return com.ym.mec.biz.dal.dto.IndexErrorDataExportDto
+     */
+    IndexErrorDataExportDto errDataSummarizing(IndexErrRecordQueryInfo queryInfo);
+
+    /**
+     * @describe 历史异常数据-乐团巡查事项异常
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo
+     */
+    PageInfo<InspectionItemPlan> queryErrInspectionData(InspectionItemPlanQueryInfo queryInfo);
+
+    /**
+     * @describe 历史异常数据-回访任务未完成
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.entity.InspectionItem>
+     */
+    PageInfo<InspectionItem> queryErrStudentVisit(InspectionQueryInfo queryInfo);
+
+    /**
+     * @describe 历史异常数据-课程(课程考勤异常/课程异常)
+     * @author Joburgess
+     * @date 2021/5/28 0028
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<java.util.List<com.ym.mec.biz.dal.dto.CourseScheduleEndDto>>
+     */
+    PageInfo<CourseScheduleEndDto> queryHistoryErrCourseData(EndCourseScheduleQueryInfo queryInfo);
+
+}

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreAccompanimentService.java

@@ -2,8 +2,10 @@ package com.ym.mec.biz.service;
 
 
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
@@ -17,4 +19,6 @@ public interface SysMusicScoreAccompanimentService extends BaseService<Integer,
     List<SysMusicScoreAccompaniment> queryAccPage(SysExamSongQueryInfo queryInfo);
 
     List<Subject> querySubjectIds();
+
+    PageInfo<SysMusicScoreAccompaniment> queryScorePage(SysExamSongQueryInfo queryInfo);
 }

+ 29 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -14,6 +14,7 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.util.http.HttpUtil;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -162,7 +163,6 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			SysUserTsign sysUserTsign = sysUserTsignService.queryByCardNo(organCode);
 
 			if (sysUserTsign == null) {
-
 				String accountId = eSealPlugin.createOrganAccount(orgName, organCode);
 
 				if (StringUtils.isBlank(accountId)) {
@@ -178,7 +178,6 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 				sysUserTsign = new SysUserTsign(-1, accountId, sealData, orgName, organCode);
 
 				sysUserTsignService.insert(sysUserTsign);
-
 			}
 		}
 	}
@@ -193,20 +192,30 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
 		if (sysUserTsign == null) {
 
-			if(!debugMode){
-				realnameAuthenticationPluginContext.getRealnameAuthenticationPlugin(LinkfaceRealnameAuthenticationPlugin.getName()).verify(realName, idCardNo);
+			String accountId = "";
+			String sealData = "";
+
+			SysUser user = studentDao.getUser(userId);
+			if (user == null) {
+				throw new BizException("用户信息查询失败");
 			}
 
-			String accountId = eSealPlugin.createUserAccount(realName, idCardNo, mobileNo);
+			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())){
+				if(!debugMode){
+					realnameAuthenticationPluginContext.getRealnameAuthenticationPlugin(LinkfaceRealnameAuthenticationPlugin.getName()).verify(realName, idCardNo);
+				}
+
+				accountId = eSealPlugin.createUserAccount(realName, idCardNo, mobileNo);
 
-			if (StringUtils.isBlank(accountId)) {
-				throw new BizException("创建电子存证账户失败");
-			}
+				if (StringUtils.isBlank(accountId)) {
+					throw new BizException("创建电子存证账户失败");
+				}
 
-			String sealData = eSealPlugin.createUserSeal(accountId);
+				sealData = eSealPlugin.createUserSeal(accountId);
 
-			if (StringUtils.isBlank(sealData)) {
-				throw new BizException("创建电子存证印章失败");
+				if (StringUtils.isBlank(sealData)) {
+					throw new BizException("创建电子存证印章失败");
+				}
 			}
 
 			sysUserTsign = new SysUserTsign(userId, accountId, sealData, realName, idCardNo);
@@ -229,8 +238,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 
 		// 合成freemarker
@@ -317,7 +325,6 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		if(true){
 			return transferProduceContract(userId, musicGroupId);
 		}
-
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
 
 		if (sysUserTsign == null) {
@@ -325,8 +332,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 		Date date = new Date();
 
@@ -522,8 +528,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 		Date date = new Date();
 
@@ -666,8 +671,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 		Date date = new Date();
 
@@ -902,8 +906,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 
 		Date date = new Date();
@@ -985,7 +988,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		}
 
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
-		if (sysUserTsign == null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
+		if (sysUserTsign == null) {
 			try {
 				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 			} catch (Exception e) {
@@ -1063,7 +1066,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		}
 
 		eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
-		if (sysUserTsign != null) {
+		if (sysUserTsign != null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
 			eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
 		}
 
@@ -1172,7 +1175,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		}
 
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
-		if (sysUserTsign == null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
+		if (sysUserTsign == null) {
 			try {
 				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 			} catch (Exception e) {
@@ -1230,7 +1233,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		}
 
 		eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
-		if (sysUserTsign != null) {
+		if (sysUserTsign != null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
 			eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
 		}
 

+ 8 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationOrganServiceImpl.java

@@ -5,6 +5,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ClassGroupDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
@@ -35,6 +37,8 @@ public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, Cooper
 	private ImGroupService imGroupService;
 	@Autowired
 	private EmployeeDao employeeDao;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
 
 	@Override
 	public BaseDAO<Integer, CooperationOrgan> getDAO() {
@@ -57,6 +61,7 @@ public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, Cooper
 		CooperationOrgan cooperationOrgan1 = cooperationOrganDao.get(cooperationOrgan.getId());
 		//修改了乐团主管后,修改关联乐团的乐团主管
 		if(!cooperationOrgan.getEducationUserId().equals(cooperationOrgan1.getEducationUserId())){
+			SysUser sysUser = sysUserFeignService.queryUserById(cooperationOrgan.getEducationUserId());
 			//获取进行中、暂停、筹备中的乐团列表
 			List<MusicGroup> musicGroups = musicGroupDao.findByCooperationIdAndStatus(cooperationOrgan.getId());
 			if(musicGroups.size() > 0){
@@ -67,17 +72,11 @@ public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, Cooper
 						continue;
 					}
 					Integer educationalTeacherId = musicGroup.getEducationalTeacherId();
-					List<Integer> quitUserIdList = new ArrayList<Integer>();
-					if(educationalTeacherId != null){
-						quitUserIdList.add(educationalTeacherId);
-					}
-					Map<Integer, String> userRoleMap = new HashMap<Integer, String>(1);
-					userRoleMap.put(cooperationOrgan.getEducationUserId(), "乐团主管");
 					classGroups.forEach(e -> {
 						if(educationalTeacherId != null){
-							imGroupMemberService.quit(e.getId().longValue(), quitUserIdList);
+							imGroupMemberService.quit(e.getId().longValue(), educationalTeacherId);
 						}
-						imGroupMemberService.join(e.getId().longValue(), userRoleMap);
+						imGroupMemberService.join(e.getId().longValue(),"乐团主管",false,null,sysUser);
 					});
 				}
 			}
@@ -91,7 +90,7 @@ public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, Cooper
 						ImGroup imGroup = imGroupService.get(Long.parseLong(musicGroup.getId()));
 						if(imGroup != null){
 							imGroupMemberService.quit(Long.parseLong(musicGroup.getId()),musicGroup.getEducationalTeacherId());
-							imGroupMemberService.join(Long.parseLong(musicGroup.getId()),cooperationOrgan.getEducationUserId(),"乐团主管",false);
+							imGroupMemberService.join(Long.parseLong(musicGroup.getId()),"乐团主管",false,imGroup,sysUser);
 						}
 					}
 				}

+ 0 - 52
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -264,10 +264,6 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	public void level(List<EmployeeLevelDto> employeeLevelDtos) {
 		Integer levelUserId = employeeLevelDtos.get(0).getLevelUserId();
 		List<ImGroupModel> educationGroupModels = new ArrayList<>();
-//		List<ImGroupModel> teamGroupModels = new ArrayList<>();
-//		List<ImGroupModel> directorGroupModels = new ArrayList<>();
-		//获取用户需要加入的预报名群聊
-//		List<ImGroupModel> applyGroupModels = new ArrayList<>();
 		//获取用户担任教务老师的所有乐团列表
 		List<String> musicGroupIds = employeeDao.queryMusicGroupIdByUserId(levelUserId);
 		//获取用户担任教务老师的所有网管课列表
@@ -311,9 +307,6 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 			}
 		}
 		Date date = new Date();
-//		educationGroupModels.addAll(applyGroupModels);
-//		educationGroupModels.addAll(educationGroupModels);
-//		educationGroupModels.addAll(teamGroupModels);
 		if(educationGroupModels.size() > 0){
 			Map<Integer, String> realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(userIds)));
 			//❤️用户加群
@@ -337,55 +330,10 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 			imGroupMemberService.batchInsert(imGroupMemberList);
 			imFeignService.groupBatchJoin(groupModelList);
 		}
-		/*if(educationGroupModels.size() > 0){
-			//❤️用户加群
-			for (ImGroupModel imGroupModel : educationGroupModels) {
-				Map<Integer,String> userRoleMap = new HashMap<>();
-
-				List<ImGroupMember> memberList = imGroupModel.getMemberList();
-				for(ImGroupMember member : memberList){
-					userRoleMap.put(Integer.parseInt(member.getId()), "乐团主管");
-				}
-				imGroupMemberService.join(Long.parseLong(imGroupModel.getId()), userRoleMap);
-			}
-		}
-		if(teamGroupModels.size() > 0){
-			//❤️用户加群
-			for (ImGroupModel imGroupModel : teamGroupModels) {
-				Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
-
-				List<ImGroupMember> memberList = imGroupModel.getMemberList();
-				for(ImGroupMember member : memberList){
-					userRoleMap.put(Integer.parseInt(member.getId()), "运营主管");
-				}
-				imGroupMemberService.join(Long.parseLong(imGroupModel.getId()), userRoleMap);
-			}
-		}
-		if(directorGroupModels.size() > 0){
-			//❤️用户加群
-			for (ImGroupModel imGroupModel : directorGroupModels) {
-				Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
-
-				List<ImGroupMember> memberList = imGroupModel.getMemberList();
-				for(ImGroupMember member : memberList){
-					userRoleMap.put(Integer.parseInt(member.getId()), "乐队指导");
-				}
-				imGroupMemberService.join(Long.parseLong(imGroupModel.getId()), userRoleMap);
-			}
-		}*/
 		//原有员工退群
 		List<ImGroupModel> groupModels = classGroupDao.queryTeacherQuitGroups(levelUserId);
-		/*if(groupModels.size() > 0){
-
-			List<Long> imGroupIdList = new ArrayList<Long>();
-			for (ImGroupModel imGroupModel : groupModels) {
-				imGroupIdList.add(Long.parseLong(imGroupModel.getId()));
-			}
-			imGroupMemberService.quit(imGroupIdList, levelUserId);
-		}*/
 		//原有员工退预报名群
 		groupModels.addAll(classGroupDao.queryQuitApplyGroups(levelUserId));
-//		groupModels.addAll(imGroupModels);
 		if(groupModels.size() > 0){
 			List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
 			List<GroupModel> groupModelList = new ArrayList<>();

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

@@ -90,16 +90,7 @@ public class ExportServiceImpl implements ExportService {
             }
             BigDecimal transferFee = BigDecimal.ZERO;
             if (row.getPaymentChannel() != null && row.getPaymentChannel().equals("ADAPAY")) {
-                FeeFlagNumDto countFeeFlagNum = studentPaymentRouteOrderDao.getCountFeeFlagNum(row.getOrderNo());
-                if (countFeeFlagNum.getTotalNum() > countFeeFlagNum.getYesNum()) {
-                    transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
-                }
-                if (countFeeFlagNum.getTotalNum().equals(countFeeFlagNum.getYesNum())) {
-                    List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(row.getOrderNo());
-                    for (StudentPaymentRouteOrder routeOrder : routeOrders) {
-                        transferFee = transferFee.add(routeOrder.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP));
-                    }
-                }
+                transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
             }
             row.setTransferFee(transferFee);
 

+ 45 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java

@@ -174,6 +174,51 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	public boolean join(Long imGroupId,String roleType, boolean isAdmin,ImGroup imGroup,SysUser user) {
+		if (imGroup == null) {
+			imGroup = imGroupDao.getLocked(imGroupId);
+		}
+		if (imGroup == null) {
+			joinGroup(imGroupId,user.getId(),roleType,isAdmin,new HashMap<>());
+			return true;
+		}
+		//检查用户是否已存在
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), user.getId().toString());
+		if(imGroupMemberList != null && imGroupMemberList.size() > 0){
+			return true;
+		}
+
+		ImGroupMember imGroupMember = new ImGroupMember();
+		Date date = new Date();
+
+		imGroupMember.setCreateTime(date);
+		imGroupMember.setImGroupId(imGroupId);
+		imGroupMember.setIsAdmin(isAdmin);
+		imGroupMember.setRoleType(roleType);
+		imGroupMember.setUpdateTime(date);
+		imGroupMember.setUserId(user.getId());
+		if (StringUtils.isBlank(roleType)) {
+			imGroupMember.setNickname(user.getUsername()==null?user.getRealName():user.getUsername());
+		} else {
+			imGroupMember.setNickname(user.getRealName()==null?user.getUsername():user.getRealName());
+		}
+
+		imGroupMemberDao.insert(imGroupMember);
+
+		imGroup.setMemberNum(imGroup.getMemberNum() + 1);
+		imGroup.setUpdateTime(date);
+		imGroupDao.update(imGroup);
+
+		String groupId = imGroup.getId().toString();
+
+		GroupMember groupMember = new GroupMember(user.getId().toString(), groupId);
+		imFeignService.groupJoin(new GroupModel(groupId, new GroupMember[] { groupMember }, imGroup.getName()));
+
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public boolean join(Long imGroupId, Map<Integer, String> userRoleMap) {
 		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
 		if (imGroup == null) {

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -516,8 +516,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			two.setErrorType(IndexErrorType.STUDENT_INFO);
 			two.setDesc(IndexErrorType.STUDENT_INFO.getMsg());
 			List<IndexErrInfoDto> twoChild = new ArrayList<>();
-			//学员请假异常提醒(获取前两个月的)
-			String format1 = DateUtil.format(DateUtil.addMonths(new Date(), -1), DateUtil.ISO_YEAR_MONTH_FORMAT);
+			//学员请假异常提醒(只提醒本月的异常)
+			String format1 = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
 			twoChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_ERROR_LEAVE, IndexErrorType.STUDENT_ERROR_LEAVE.getMsg(), indexBaseMonthDataDao.countStudentErrorLeave(organIds,format1,classGroupIds), null));
 
 			//未缴费学员数
@@ -934,7 +934,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		boolean flag2 = false;
 		if(!flag2){
 			//学员请假异常提醒(获取前两个月的)
-			String format1 = DateUtil.format(DateUtil.addMonths(date, -1), DateUtil.ISO_YEAR_MONTH_FORMAT);
+			String format1 = DateUtil.format(date, DateUtil.ISO_YEAR_MONTH_FORMAT);
 			int studentErrorLeaveNum = indexBaseMonthDataDao.countStudentErrorLeave(organIds,format1,classGroupIds);
 			if(studentErrorLeaveNum > 0){
 				flag2 = true;

+ 527 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexErrDataRecordServiceImpl.java

@@ -0,0 +1,527 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserRole;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.CourseScheduleEndDto;
+import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.dto.TeacherVisitDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.IndexErrorType;
+import com.ym.mec.biz.dal.enums.InspectionItemEnum;
+import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.IndexErrRecordQueryInfo;
+import com.ym.mec.biz.dal.page.InspectionItemPlanQueryInfo;
+import com.ym.mec.biz.dal.page.InspectionQueryInfo;
+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.page.QueryInfo;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.biz.service.IndexErrDataRecordService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.enums.GroupType.*;
+
+@Service
+public class IndexErrDataRecordServiceImpl extends BaseServiceImpl<Long, IndexErrDataRecord>  implements IndexErrDataRecordService {
+	
+	@Autowired
+	private IndexErrDataRecordDao indexErrDataRecordDao;
+	@Autowired
+	private StudentVisitDao studentVisitDao;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private EmployeeDao employeeDao;
+	@Autowired
+	private ClassGroupDao classGroupDao;
+	@Autowired
+	private TeacherDao teacherDao;
+	@Autowired
+	private CourseScheduleDao courseScheduleDao;
+	@Autowired
+	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+	@Autowired
+	private MusicGroupDao musicGroupDao;
+	@Autowired
+	private VipGroupDao vipGroupDao;
+	@Autowired
+	private PracticeGroupDao practiceGroupDao;
+	@Autowired
+	private OrganizationDao organizationDao;
+
+	@Override
+	public BaseDAO<Long, IndexErrDataRecord> getDAO() {
+		return indexErrDataRecordDao;
+	}
+
+	@Override
+	public void indexErrDataRecordTask(String date) {
+		if(StringUtils.isBlank(date)){
+			date = LocalDate.now().plusDays(-1).toString();
+		}
+		Date dt = DateUtil.stringToDate(date, "yyyy-MM-dd");
+
+		int errDateNum = indexErrDataRecordDao.countWithGenerateTime(date);
+
+		if(errDateNum<=0){
+			//乐团巡查事项异常
+			List<IndexErrDataRecord> errInspections = indexErrDataRecordDao.queryErrInspection(date, null);
+			if(!CollectionUtils.isEmpty(errInspections)){
+				errInspections.forEach(e->{
+					e.setDataType(IndexErrorType.MUSIC_PATROL_ITEM);
+					e.setGenerateTime(dt);
+				});
+				indexErrDataRecordDao.batchInsert(errInspections);
+			}
+
+			//乐团巡查任务未提交
+			List<IndexErrDataRecord> errInspectionItemPlans = indexErrDataRecordDao.queryInspectionItemPlan(date, null);
+			if(!CollectionUtils.isEmpty(errInspectionItemPlans)) {
+				errInspectionItemPlans.forEach(e -> {
+					e.setDataType(IndexErrorType.INSPECTION_ITEM_PLAN);
+					e.setGenerateTime(dt);
+				});
+				indexErrDataRecordDao.batchInsert(errInspectionItemPlans);
+			}
+
+			//回访任务未完成
+			List<IndexErrDataRecord> errStudentVisits = indexErrDataRecordDao.queryStudentVisit(date, null);
+			if(!CollectionUtils.isEmpty(errStudentVisits)) {
+				errStudentVisits.forEach(e -> {
+					e.setDataType(IndexErrorType.STUDENT_VISIT);
+					e.setGenerateTime(dt);
+				});
+				indexErrDataRecordDao.batchInsert(errStudentVisits);
+			}
+
+			//课程考勤异常
+			List<IndexErrDataRecord> errStudentAttendances = indexErrDataRecordDao.getAttendanceError(date, null);
+			if(!CollectionUtils.isEmpty(errStudentAttendances)) {
+				errStudentAttendances.forEach(e -> {
+					e.setDataType(IndexErrorType.TEACHER_EXCEPTION_ATTENDANCE);
+					e.setGenerateTime(dt);
+				});
+				indexErrDataRecordDao.batchInsert(errStudentAttendances);
+			}
+
+			//课程异常
+			List<IndexErrDataRecord> errNoAttendances = indexErrDataRecordDao.getNoAttendance(date, null);
+			if(!CollectionUtils.isEmpty(errNoAttendances)) {
+				errNoAttendances.forEach(e -> {
+					e.setDataType(IndexErrorType.TEACHER_NOT_A_CLASS);
+					e.setGenerateTime(dt);
+				});
+				indexErrDataRecordDao.batchInsert(errNoAttendances);
+			}
+		}
+
+		//处理历史异常数据
+		checkUntreatedRecord();
+	}
+
+	private void checkUntreatedRecord(){
+		List<IndexErrDataRecord> untreatedRecord = indexErrDataRecordDao.findUntreatedRecord();
+		if(CollectionUtils.isEmpty(untreatedRecord)){
+			return;
+		}
+		Map<IndexErrorType, List<IndexErrDataRecord>> typeDataMap = untreatedRecord.stream().collect(Collectors.groupingBy(IndexErrDataRecord::getDataType));
+
+		List<IndexErrDataRecord> needUpdateRecord = new ArrayList<>();
+		Date now = new Date();
+
+		for (Map.Entry<IndexErrorType, List<IndexErrDataRecord>> typeDataMapEntry : typeDataMap.entrySet()) {
+			Set<String> dates = typeDataMapEntry.getValue().stream().map(i -> DateUtil.dateToString(i.getGenerateTime(), "yyyy-MM-dd")).collect(Collectors.toSet());
+			List<IndexErrDataRecord> newRecord = new ArrayList<>();
+			switch (typeDataMapEntry.getKey()){
+				case MUSIC_PATROL_ITEM:
+					newRecord = indexErrDataRecordDao.queryErrInspection(null, dates);
+					break;
+				case INSPECTION_ITEM_PLAN:
+					newRecord = indexErrDataRecordDao.queryInspectionItemPlan(null, dates);
+					break;
+				case STUDENT_VISIT:
+					newRecord = indexErrDataRecordDao.queryStudentVisit(null, dates);
+					break;
+				case TEACHER_EXCEPTION_ATTENDANCE:
+					newRecord = indexErrDataRecordDao.getAttendanceError(null, dates);
+					break;
+				case TEACHER_NOT_A_CLASS:
+					newRecord = indexErrDataRecordDao.getNoAttendance(null, dates);
+					break;
+			}
+			Set<String> dataIds = newRecord.stream().map(IndexErrDataRecord::getDataId).collect(Collectors.toSet());
+			for (IndexErrDataRecord record : typeDataMapEntry.getValue()) {
+				if(dataIds.contains(record.getDataId())){
+					continue;
+				}
+				record.setDealTime(now);
+				needUpdateRecord.add(record);
+			}
+		}
+		if(!CollectionUtils.isEmpty(needUpdateRecord)){
+			indexErrDataRecordDao.batchUpdate(needUpdateRecord);
+		}
+	}
+
+	@Override
+	public List<SimpleUserDto> getAllEducationUsers(String organIds) {
+		Set<Integer> queryOrganIds = null;
+		if(StringUtils.isNotBlank(organIds)){
+			queryOrganIds = Arrays.stream(organIds.split(",")).map(Integer::new).collect(Collectors.toSet());
+		}
+		List<Integer> allDealUserIds = indexErrDataRecordDao.getAllDealUserIds(queryOrganIds);
+		List<SimpleUserDto> users = teacherDao.getUsersSimpleInfo(allDealUserIds);
+		return users;
+	}
+
+	@Override
+	public List<IndexErrorDataExportDto> errRecordExport(String organIdsStr, String startDate, String endDate) {
+		List<IndexErrorDataExportDto> result = new ArrayList<>();
+		Set<Integer> queryOrganIds = null;
+		if(StringUtils.isNotBlank(organIdsStr)){
+			queryOrganIds = Arrays.stream(organIdsStr.split(",")).map(Integer::new).collect(Collectors.toSet());
+		}
+		List<IndexErrDataRecord> errRecords = indexErrDataRecordDao.getWithGenerateTime(queryOrganIds, startDate, endDate);
+		if(CollectionUtils.isEmpty(errRecords)){
+			return result;
+		}
+		List<Integer> organIds = errRecords.stream().map(IndexErrDataRecord::getOrganId).collect(Collectors.toList());
+		List<Organization> organs = organizationDao.findOrgans(organIds);
+		Map<Integer, String> idOrganNameMap = organs.stream().collect(Collectors.toMap(Organization::getId, o -> o.getName()));
+
+		List<Integer> userIds = errRecords.stream().map(IndexErrDataRecord::getDealUserId).collect(Collectors.toList());
+		Map<Integer, SimpleUserDto> idUserMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(userIds)){
+			List<SimpleUserDto> users = teacherDao.getUsersSimpleInfo(userIds);
+			idUserMap = users.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, u->u, (u1, u2)->u1));
+		}
+		Map<Integer, List<IndexErrDataRecord>> organDataMap = errRecords.stream().collect(Collectors.groupingBy(IndexErrDataRecord::getOrganId));
+		for (Map.Entry<Integer, List<IndexErrDataRecord>> organDataMapEntry : organDataMap.entrySet()) {
+			Map<Date, Map<Integer, List<IndexErrDataRecord>>> dateUserRecordMap = organDataMapEntry.getValue().stream().collect(Collectors.groupingBy(IndexErrDataRecord::getGenerateTime, Collectors.groupingBy(IndexErrDataRecord::getDealUserId)));
+			for (Map.Entry<Date, Map<Integer, List<IndexErrDataRecord>>> dateUserRecordMapEntry : dateUserRecordMap.entrySet()) {
+				String generateTimeStr = DateUtil.dateToString(dateUserRecordMapEntry.getKey(), DateUtil.DATE_FORMAT_MIN);
+				for (Map.Entry<Integer, List<IndexErrDataRecord>> userRecordMapEntry : dateUserRecordMapEntry.getValue().entrySet()) {
+					IndexErrorDataExportDto record = new IndexErrorDataExportDto();
+					record.setGenerateTime(generateTimeStr);
+					record.setOrganName(idOrganNameMap.get(organDataMapEntry.getKey()));
+					if(idUserMap.containsKey(userRecordMapEntry.getKey())){
+						record.setDealUserName(idUserMap.get(userRecordMapEntry.getKey()).getUserName());
+					}
+					Map<IndexErrorType, Long> typeDataNumMap = userRecordMapEntry.getValue().stream().collect(Collectors.groupingBy(IndexErrDataRecord::getDataType, Collectors.counting()));
+					for (Map.Entry<IndexErrorType, Long> typeDataNumMapEntry : typeDataNumMap.entrySet()) {
+						switch (typeDataNumMapEntry.getKey()){
+							case MUSIC_PATROL_ITEM:
+								record.setMusicPatrolItem(typeDataNumMapEntry.getValue().intValue());
+								break;
+							case INSPECTION_ITEM_PLAN:
+								record.setInspectionItemPlan(typeDataNumMapEntry.getValue().intValue());
+								break;
+							case STUDENT_VISIT:
+								record.setStudentVisit(typeDataNumMapEntry.getValue().intValue());
+								break;
+							case TEACHER_EXCEPTION_ATTENDANCE:
+								record.setTeacherExceptionAttendance(typeDataNumMapEntry.getValue().intValue());
+								break;
+							case TEACHER_NOT_A_CLASS:
+								record.setTeacherNotAClass(typeDataNumMapEntry.getValue().intValue());
+								break;
+						}
+					}
+					result.add(record);
+				}
+			}
+		}
+
+		return result;
+	}
+
+	@Override
+	public PageInfo<IndexErrorDataExportDto> queryRecord(IndexErrRecordQueryInfo queryInfo) {
+		PageInfo<IndexErrorDataExportDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+		Set<Integer> queryOrganIds = null;
+		if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
+			queryOrganIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(Integer::new).collect(Collectors.toSet());
+		}
+		params.put("queryOrganIds", queryOrganIds);
+
+		int count = indexErrDataRecordDao.queryErrStringsCount(params);
+		pageInfo.setTotal(count);
+		params.put("offset", pageInfo.getOffset());
+		List<IndexErrorDataExportDto> dataList = new ArrayList<>();
+		List<String> strings = indexErrDataRecordDao.queryErrStrings(params);
+		if (!CollectionUtils.isEmpty(strings)) {
+			List<IndexErrDataRecord> errRecords = indexErrDataRecordDao.getWithOrganMonthUserStr(strings);
+			List<Integer> organIds = errRecords.stream().map(IndexErrDataRecord::getOrganId).collect(Collectors.toList());
+			List<Organization> organs = organizationDao.findOrgans(organIds);
+			Map<Integer, String> idOrganNameMap = organs.stream().collect(Collectors.toMap(Organization::getId, o -> o.getName()));
+
+			List<Integer> userIds = errRecords.stream().map(IndexErrDataRecord::getDealUserId).collect(Collectors.toList());
+			Map<Integer, SimpleUserDto> idUserMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(userIds)){
+				List<SimpleUserDto> users = teacherDao.getUsersSimpleInfo(userIds);
+				idUserMap = users.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, u->u, (u1, u2)->u1));
+			}
+			Map<Integer, List<IndexErrDataRecord>> organDataMap = errRecords.stream().collect(Collectors.groupingBy(IndexErrDataRecord::getOrganId));
+			for (Map.Entry<Integer, List<IndexErrDataRecord>> organDataMapEntry : organDataMap.entrySet()) {
+				Map<Date, Map<Integer, List<IndexErrDataRecord>>> dateUserRecordMap = organDataMapEntry.getValue().stream().collect(Collectors.groupingBy(IndexErrDataRecord::getGenerateTime, Collectors.groupingBy(IndexErrDataRecord::getDealUserId)));
+				for (Map.Entry<Date, Map<Integer, List<IndexErrDataRecord>>> dateUserRecordMapEntry : dateUserRecordMap.entrySet()) {
+					String generateTimeStr = DateUtil.dateToString(dateUserRecordMapEntry.getKey(), DateUtil.DATE_FORMAT_MIN);
+					for (Map.Entry<Integer, List<IndexErrDataRecord>> userRecordMapEntry : dateUserRecordMapEntry.getValue().entrySet()) {
+						IndexErrorDataExportDto record = new IndexErrorDataExportDto();
+						record.setGenerateTime(generateTimeStr);
+						record.setOrganName(idOrganNameMap.get(organDataMapEntry.getKey()));
+						if(idUserMap.containsKey(userRecordMapEntry.getKey())){
+							record.setDealUserName(idUserMap.get(userRecordMapEntry.getKey()).getUserName());
+						}
+						Map<IndexErrorType, Long> typeDataNumMap = userRecordMapEntry.getValue().stream().collect(Collectors.groupingBy(IndexErrDataRecord::getDataType, Collectors.counting()));
+						Map<IndexErrorType, Long> typeSurplusDataNumMap = userRecordMapEntry.getValue().stream().filter(e->Objects.isNull(e.getDealTime())).collect(Collectors.groupingBy(IndexErrDataRecord::getDataType, Collectors.counting()));
+						for (Map.Entry<IndexErrorType, Long> typeDataNumMapEntry : typeDataNumMap.entrySet()) {
+							switch (typeDataNumMapEntry.getKey()){
+								case MUSIC_PATROL_ITEM:
+									record.setMusicPatrolItem(typeDataNumMapEntry.getValue().intValue());
+									if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+										record.setMusicPatrolItemSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+									}
+									break;
+								case INSPECTION_ITEM_PLAN:
+									record.setInspectionItemPlan(typeDataNumMapEntry.getValue().intValue());
+									if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+										record.setInspectionItemPlanSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+									}
+									break;
+								case STUDENT_VISIT:
+									record.setStudentVisit(typeDataNumMapEntry.getValue().intValue());
+									if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+										record.setStudentVisitSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+									}
+									break;
+								case TEACHER_EXCEPTION_ATTENDANCE:
+									record.setTeacherExceptionAttendance(typeDataNumMapEntry.getValue().intValue());
+									if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+										record.setTeacherExceptionAttendanceSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+									}
+									break;
+								case TEACHER_NOT_A_CLASS:
+									record.setTeacherNotAClass(typeDataNumMapEntry.getValue().intValue());
+									if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+										record.setTeacherNotAClassSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+									}
+									break;
+							}
+						}
+						dataList.add(record);
+					}
+				}
+			}
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public IndexErrorDataExportDto errDataSummarizing(IndexErrRecordQueryInfo queryInfo) {
+		PageInfo<IndexErrorDataExportDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+		Set<Integer> queryOrganIds = null;
+		if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
+			queryOrganIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(Integer::new).collect(Collectors.toSet());
+		}
+		params.put("queryOrganIds", queryOrganIds);
+
+		List<IndexErrDataRecord> allErrDatas = indexErrDataRecordDao.getAllErrDatas(params);
+		IndexErrorDataExportDto record = new IndexErrorDataExportDto();
+
+		Map<IndexErrorType, Long> typeDataNumMap = allErrDatas.stream().collect(Collectors.groupingBy(IndexErrDataRecord::getDataType, Collectors.counting()));
+		Map<IndexErrorType, Long> typeSurplusDataNumMap = allErrDatas.stream().filter(e->Objects.isNull(e.getDealTime())).collect(Collectors.groupingBy(IndexErrDataRecord::getDataType, Collectors.counting()));
+		for (Map.Entry<IndexErrorType, Long> typeDataNumMapEntry : typeDataNumMap.entrySet()) {
+			switch (typeDataNumMapEntry.getKey()){
+				case MUSIC_PATROL_ITEM:
+					record.setMusicPatrolItem(typeDataNumMapEntry.getValue().intValue());
+					if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+						record.setMusicPatrolItemSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+					}
+					break;
+				case INSPECTION_ITEM_PLAN:
+					record.setInspectionItemPlan(typeDataNumMapEntry.getValue().intValue());
+					if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+						record.setInspectionItemPlanSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+					}
+					break;
+				case STUDENT_VISIT:
+					record.setStudentVisit(typeDataNumMapEntry.getValue().intValue());
+					if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+						record.setStudentVisitSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+					}
+					break;
+				case TEACHER_EXCEPTION_ATTENDANCE:
+					record.setTeacherExceptionAttendance(typeDataNumMapEntry.getValue().intValue());
+					if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+						record.setTeacherExceptionAttendanceSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+					}
+					break;
+				case TEACHER_NOT_A_CLASS:
+					record.setTeacherNotAClass(typeDataNumMapEntry.getValue().intValue());
+					if(typeSurplusDataNumMap.containsKey(typeDataNumMapEntry.getValue())) {
+						record.setTeacherNotAClassSurplus(typeSurplusDataNumMap.get(typeDataNumMapEntry.getValue()).intValue());
+					}
+					break;
+			}
+		}
+
+		return record;
+	}
+
+	@Override
+	public PageInfo<InspectionItemPlan> queryErrInspectionData(InspectionItemPlanQueryInfo queryInfo) {
+		PageInfo<InspectionItemPlan> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		int count = indexErrDataRecordDao.errInspectionDataCount(params);
+		pageInfo.setTotal(count);
+		params.put("offset", pageInfo.getOffset());
+		List<InspectionItemPlan> dataList = indexErrDataRecordDao.queryErrInspectionData(params);
+
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public PageInfo<InspectionItem> queryErrStudentVisit(InspectionQueryInfo queryInfo) {
+		if (queryInfo.getMonth() != null) {
+			queryInfo.setStartTime(DateUtil.getFirstDayOfMonth(queryInfo.getMonth()));
+			queryInfo.setEndTime(DateUtil.getLastTimeWithDay(DateUtil.getLastDayOfMonth(queryInfo.getMonth())));
+		}
+		if (queryInfo.getStartTime() != null) {
+			queryInfo.setStartTime(DateUtil.getFirstDayOfMonth(queryInfo.getStartTime()));
+		}
+		if (queryInfo.getEndTime() != null) {
+			queryInfo.setEndTime(DateUtil.getLastTimeWithDay(DateUtil.getLastDayOfMonth(queryInfo.getEndTime())));
+		}
+		PageInfo<InspectionItem> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		int count = indexErrDataRecordDao.studentVisitCount(params);
+		pageInfo.setTotal(count);
+		params.put("offset", pageInfo.getOffset());
+		List<InspectionItem> dataList = indexErrDataRecordDao.queryErrStudentVisit(params);
+		pageInfo.setRows(dataList);
+		if (pageInfo.getRows().size() <= 0) {
+			return pageInfo;
+		}
+		List<InspectionItem> rows = pageInfo.getRows();
+		List<Integer> teacherIds = rows.stream().filter(e -> e.getItem().equals(InspectionItemEnum.VISIT)).map(InspectionItem::getUserId).collect(Collectors.toList());
+		if (teacherIds.size() > 0) {
+			Date startTime = rows.stream().map(InspectionItem::getMonth).min(Date::compareTo).get();
+			Date EndTime = rows.stream().map(InspectionItem::getMonth).max(Date::compareTo).get();
+			startTime = DateUtil.getFirstDayOfMonth(startTime);
+			EndTime = DateUtil.getLastTimeWithDay(DateUtil.getLastDayOfMonth(EndTime));
+			List<TeacherVisitDto> teacherVisitCounts = studentVisitDao.getTeacherVisitCount(teacherIds, startTime, EndTime);
+			for (InspectionItem row : rows) {
+				if (row.getItem().equals(InspectionItemEnum.INSPECT)) continue;
+				for (TeacherVisitDto teacherVisitCount : teacherVisitCounts) {
+					if (teacherVisitCount.getTeacherId().equals(row.getUserId()) &&
+							DateUtil.dateToString(row.getMonth(), "yyyy-MM").equals(teacherVisitCount.getMonth())
+					) {
+						row.setSubmittedTimes(teacherVisitCount.getNum());
+					}
+				}
+			}
+		}
+		return pageInfo;
+	}
+
+	@Override
+	public PageInfo<CourseScheduleEndDto> queryHistoryErrCourseData(EndCourseScheduleQueryInfo queryInfo) {
+		PageInfo<CourseScheduleEndDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>(16);
+		MapUtil.populateMap(params, queryInfo);
+
+		List<CourseScheduleEndDto> results;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+		//如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
+		if (!sysUser.getIsSuperAdmin() && userRole.size() == 1 && userRole.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
+			List<Long> classGroupIds = classGroupDao.queryGroupClassGroupIds(sysUser.getId());
+			if(classGroupIds.size() == 0){
+				return pageInfo;
+			}
+			params.put("classGroupIds",classGroupIds);
+		}
+		int count = indexErrDataRecordDao.historyErrCourseDataCount(params);
+		if(queryInfo.getIsExport() && count > 50000){
+			throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
+		}
+		pageInfo.setTotal(count);
+		params.put("offset", pageInfo.getOffset());
+		results = indexErrDataRecordDao.queryHistoryErrCourseData(params);
+		if (!CollectionUtils.isEmpty(results)) {
+			List<Long> courseScheduleIds = results.stream().map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+			List<Integer> teacherIds=results.stream().filter(t->Objects.nonNull(t.getActualTeacherId())).map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
+
+			List<Map<Integer, String>> nameIdMaps = teacherDao.queryNameByIdList(teacherIds);
+			Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
+
+			List<Map<Long, Long>> courseMergeCourseNum = courseScheduleDao.countCourseMergeCourseNum(courseScheduleIds);
+			Map<Long, Long> courseMergeCourseNumMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(courseMergeCourseNum)){
+				courseMergeCourseNumMap = MapUtil.convertIntegerMap(courseMergeCourseNum);
+			}
+			//获取课程的预计人数
+			List<CourseSchedule> courseScheduleStudentNum = courseScheduleStudentPaymentDao.getCourseScheduleStudentNum(courseScheduleIds);
+			Map<Long, Integer> courseScheduleStudentNumMap = courseScheduleStudentNum.stream().collect(Collectors.toMap(CourseSchedule::getId, CourseSchedule::getStudentNum));
+			//获取班级声部名称
+			List<Map<Integer, String>> classGroupSubjectNameMaps = classGroupDao.findClassGroupSubjectNameMaps(courseScheduleIds);
+			Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);
+			Map<Long, String> eduName = null;
+			if(queryInfo.getIsExport()){
+				List<Long> musicCourseIds = results.stream().filter(e -> e.getGroupType() == MUSIC).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+				eduName = new HashMap<>(courseScheduleIds.size());
+				if(musicCourseIds != null && musicCourseIds.size() > 0){
+					eduName.putAll(MapUtil.convertMybatisMap(musicGroupDao.queryEduNameMapByCourseId(musicCourseIds)));
+				}
+				List<Long> vipCourseIds = results.stream().filter(e -> e.getGroupType() == VIP).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+				if(vipCourseIds != null && vipCourseIds.size() > 0){
+					eduName.putAll(MapUtil.convertMybatisMap(vipGroupDao.queryEduNameMapByCourseId(vipCourseIds)));
+				}
+				List<Long> practiceCourseIds = results.stream().filter(e -> e.getGroupType() == PRACTICE).map(CourseScheduleEndDto::getId).collect(Collectors.toList());
+				if(practiceCourseIds != null && practiceCourseIds.size() > 0){
+					eduName.putAll(MapUtil.convertMybatisMap(practiceGroupDao.queryEduNameMapByCourseId(practiceCourseIds)));
+				}
+			}
+			for (CourseScheduleEndDto result : results) {
+				if(eduName != null){
+					result.setEducationTeacherName(eduName.get(result.getId()));
+				}
+				result.setTeacher(null);
+				result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
+				result.setSubjectName(classGroupSubjectNameMap.get(result.getId()));
+				result.setIsSettlement(Objects.isNull(result.getSettlementTime())?0:1);
+				if(courseMergeCourseNumMap.containsKey(result.getId())){
+					result.setBeMerged(courseMergeCourseNumMap.get(result.getId())>0?true:false);
+				}
+				result.setStudentNum(courseScheduleStudentNumMap.getOrDefault(result.getId(), 0));
+			}
+		}
+		pageInfo.setRows(results);
+		return pageInfo;
+	}
+}

+ 31 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -239,8 +239,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         musicGroup.setDelFlag(false);
         CooperationOrgan cooperationOrgan = cooperationOrganDao.get(musicGroup.getCooperationOrganId());
-        if(cooperationOrgan.getEducationUserId() == null){
-            throw new BizException("操作失败:请先配置合作单位: {} 关联的乐团主管",cooperationOrgan.getName());
+        if (cooperationOrgan.getEducationUserId() == null) {
+            throw new BizException("操作失败:请先配置合作单位: {} 关联的乐团主管", cooperationOrgan.getName());
         }
         musicGroup.setEducationalTeacherId(cooperationOrgan.getEducationUserId());
         // 保存乐团基本信息
@@ -388,6 +388,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             student.setCurrentClass(studentPreRegistration.getCurrentClass());
             studentDao.insert(student);
             sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
+        } else {
+            user.setUsername(studentPreRegistration.getUserName());
+            if (!user.getUserType().contains("STUDENT")) {
+                user.setUserType(user.getUserType() + ",STUDENT");
+            }
+            user.setUpdateTime(new Date());
+            teacherDao.updateUser(user);
         }
 
         studentPreRegistration.setCreateTime(date);
@@ -2576,29 +2583,29 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             return;
         }
         List<Integer> quitUserIdList = new ArrayList<>();
-        if(oldMusicGroup.getTeamTeacherId() != null){
+        if (oldMusicGroup.getTeamTeacherId() != null) {
             quitUserIdList.add(oldMusicGroup.getTeamTeacherId());
         }
-        if(oldMusicGroup.getEducationalTeacherId() != null){
+        if (oldMusicGroup.getEducationalTeacherId() != null) {
             quitUserIdList.add(oldMusicGroup.getEducationalTeacherId());
         }
-        if(oldMusicGroup.getDirectorUserId() != null){
+        if (oldMusicGroup.getDirectorUserId() != null) {
             quitUserIdList.add(oldMusicGroup.getDirectorUserId());
         }
-        if(oldMusicGroup.getTransactionTeacherId() != null){
+        if (oldMusicGroup.getTransactionTeacherId() != null) {
             quitUserIdList.add(oldMusicGroup.getTransactionTeacherId());
         }
         Map<Integer, String> userRoleMap = new HashMap<>(4);
-        if(newMusicGroup.getTeamTeacherId() != null){
+        if (newMusicGroup.getTeamTeacherId() != null) {
             userRoleMap.put(newMusicGroup.getTeamTeacherId(), "运营主管");
         }
-        if(newMusicGroup.getEducationalTeacherId() != null){
+        if (newMusicGroup.getEducationalTeacherId() != null) {
             userRoleMap.put(newMusicGroup.getEducationalTeacherId(), "乐团主管");
         }
-        if(newMusicGroup.getDirectorUserId() != null){
+        if (newMusicGroup.getDirectorUserId() != null) {
             userRoleMap.put(newMusicGroup.getDirectorUserId(), "乐队指导");
         }
-        if(newMusicGroup.getTransactionTeacherId() != null){
+        if (newMusicGroup.getTransactionTeacherId() != null) {
             userRoleMap.put(newMusicGroup.getTransactionTeacherId(), "衔接老师");
         }
         classGroups.forEach(e -> {
@@ -2632,8 +2639,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             courseScheduleDao.updateCourseScheduleSchool("MUSIC", musicGroupId, musicGroup.getSchoolId());
         }
         CooperationOrgan cooperationOrgan = cooperationOrganDao.get(musicGroup.getCooperationOrganId());
-        if(cooperationOrgan.getEducationUserId() == null){
-            throw new BizException("操作失败:请先配置合作单位: {} 关联的乐团主管",cooperationOrgan.getName());
+        if (cooperationOrgan.getEducationUserId() == null) {
+            throw new BizException("操作失败:请先配置合作单位: {} 关联的乐团主管", cooperationOrgan.getName());
         }
         boolean refresh = false;
         musicGroup.setEducationalTeacherId(cooperationOrgan.getEducationUserId());
@@ -2642,39 +2649,39 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             updateTeamTeacher(group, musicGroup);
         }
         //不是导入的乐团
-        if(musicGroupId.length() > 10){
+        if (musicGroupId.length() > 10) {
             //是否有预报名的群聊
             ImGroup imGroup = imGroupService.get(Long.parseLong(musicGroupId));
-            if(imGroup != null){
+            if (imGroup != null) {
                 refresh = true;
                 List<Integer> quitUserIdList = new ArrayList<>();
-                if(group.getTeamTeacherId() != null){
+                if (group.getTeamTeacherId() != null) {
                     quitUserIdList.add(group.getTeamTeacherId());
                 }
-                if(group.getEducationalTeacherId() != null){
+                if (group.getEducationalTeacherId() != null) {
                     quitUserIdList.add(group.getEducationalTeacherId());
                 }
-                if(group.getDirectorUserId() != null){
+                if (group.getDirectorUserId() != null) {
                     quitUserIdList.add(group.getDirectorUserId());
                 }
-                if(group.getTransactionTeacherId() != null){
+                if (group.getTransactionTeacherId() != null) {
                     quitUserIdList.add(group.getTransactionTeacherId());
                 }
                 Map<Integer, String> userRoleMap = new HashMap<>(4);
-                if(musicGroup.getTeamTeacherId() != null){
+                if (musicGroup.getTeamTeacherId() != null) {
                     userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
                 }
-                if(musicGroup.getEducationalTeacherId() != null){
+                if (musicGroup.getEducationalTeacherId() != null) {
                     userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
                 }
-                if(musicGroup.getDirectorUserId() != null){
+                if (musicGroup.getDirectorUserId() != null) {
                     userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
                 }
-                if(musicGroup.getTransactionTeacherId() != null){
+                if (musicGroup.getTransactionTeacherId() != null) {
                     userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
                 }
-                imGroupMemberService.quit(Long.parseLong(musicGroupId),quitUserIdList);
-                imGroupMemberService.join(Long.parseLong(musicGroupId),userRoleMap);
+                imGroupMemberService.quit(Long.parseLong(musicGroupId), quitUserIdList);
+                imGroupMemberService.join(Long.parseLong(musicGroupId), userRoleMap);
             }
         }
 

+ 26 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java

@@ -31,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -112,7 +113,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
         }
         ReplacementInstrumentCooperation replacementInstrumentCooperation = replacementInstrumentCooperationDao.get(replacementInstrumentActivity.getReplacementInstrumentCooperationId());
         //如果提交过调查问卷,那么覆盖之前的记录
-        ReplacementInstrumentActivity activity = replacementInstrumentActivityDao.findByUserId(replacementInstrumentActivity.getCooperationOrganId(), sysUser.getId(),replacementInstrumentCooperation.getId());
+        ReplacementInstrumentActivity activity = replacementInstrumentActivityDao.findByUserId(replacementInstrumentActivity.getCooperationOrganId(), sysUser.getId(), replacementInstrumentCooperation.getId());
         if (replacementInstrumentCooperation != null && replacementInstrumentCooperation.getOpenPay().equals(YesOrNoEnum.YES)) {
             replacementInstrumentActivity.setOpenFlag(1);
         }
@@ -188,9 +189,9 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             replacementInstrumentActivity.setId(activity.getId());
             replacementInstrumentActivityDao.update(replacementInstrumentActivity);
 
-            if(questionnaireUserResultList != null && questionnaireUserResultList.size() > 0){
+            if (questionnaireUserResultList != null && questionnaireUserResultList.size() > 0) {
                 //删除原来的问卷结果
-                questionnaireUserResultDao.delByActiveIdAndUserId(activity.getReplacementInstrumentCooperationId(),sysUser.getId());
+                questionnaireUserResultDao.delByActiveIdAndUserId(activity.getReplacementInstrumentCooperationId(), sysUser.getId());
             }
             if (replacementInstrumentActivity.getInstrumentsId() != null && (activity.getInstrumentsId() == null || activity.getInstrumentsId() == 0)) {
                 sendPush = true;
@@ -199,7 +200,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             replacementInstrumentActivityDao.insert(replacementInstrumentActivity);
             sendPush = true;
         }
-        if(questionnaireUserResultList != null && questionnaireUserResultList.size() > 0){
+        if (questionnaireUserResultList != null && questionnaireUserResultList.size() > 0) {
             for (QuestionnaireUserResult result : questionnaireUserResultList) {
                 result.setUserId(sysUser.getId());
                 result.setQuestionnaireTopicId(topicId);
@@ -231,8 +232,8 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
 
 
     @Override
-    public ReplacementInstrumentActivity findByUserId(Integer cooperationOrganId, Integer userId,Integer cooperationId) {
-        return replacementInstrumentActivityDao.findByUserId(cooperationOrganId, userId,cooperationId);
+    public ReplacementInstrumentActivity findByUserId(Integer cooperationOrganId, Integer userId, Integer cooperationId) {
+        return replacementInstrumentActivityDao.findByUserId(cooperationOrganId, userId, cooperationId);
     }
 
     @Override
@@ -248,7 +249,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             ReplacementInstrumentCooperation cooperation = replacementInstrumentCooperationDao.get(queryInfo.getCooperationId());
             CooperationOrgan cooperationOrgan = cooperationOrganDao.get(cooperation.getCooperationOrganId());
             QuestionnaireTopic questionnaireTopic = questionnaireTopicDao.get(cooperation.getTopicId());
-            if(questionnaireTopic != null){
+            if (questionnaireTopic != null) {
                 head.setTopicName(questionnaireTopic.getTitle());
             }
             head.setCooperationOrganName(cooperationOrgan.getName());
@@ -480,11 +481,22 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
 
         List<ReplacementInstrumentActivityStatDto> dataList = new ArrayList<>();
         int count = replacementInstrumentActivityDao.getCount(params);
+        pageInfo.setTotal(count);
 
-        if (count > 0) {
-            pageInfo.setTotal(count);
+        if (queryInfo.getPage() <= pageInfo.getTotalPage()) {
             params.put("offset", pageInfo.getOffset());
             dataList = replacementInstrumentActivityDao.getPageList(params);
+            List<Integer> ids = dataList.stream().map(ReplacementInstrumentActivity::getId).collect(Collectors.toList());
+            if (ids.size() > 0) {
+                List<StudentPaymentOrder> activityPageOrders = replacementInstrumentActivityDao.getActivityOrder(ids);
+                Map<Integer, List<StudentPaymentOrder>> activityOrderMap = activityPageOrders.stream().collect(Collectors.groupingBy(e -> Integer.parseInt(e.getMusicGroupId())));
+                for (ReplacementInstrumentActivityStatDto replacementInstrumentActivityStatDto : dataList) {
+                    if (!activityOrderMap.containsKey(replacementInstrumentActivityStatDto.getId())) continue;
+                    List<StudentPaymentOrder> activityOrders = activityOrderMap.get(replacementInstrumentActivityStatDto.getId());
+                    replacementInstrumentActivityStatDto.setActualAmount(activityOrders.get(0).getActualAmount());
+                    replacementInstrumentActivityStatDto.setBalance(activityOrders.get(0).getBalancePaymentAmount());
+                }
+            }
         }
         pageInfo.setRows(dataList);
         return pageInfo;
@@ -552,13 +564,13 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void resultSync(){
+    public void resultSync() {
         //获取所有问卷结果
         List<ReplacementInstrumentActivity> activities = replacementInstrumentActivityDao.findAll(new HashMap<>());
         List<QuestionnaireUserResult> questionnaireUserResultList = new ArrayList<>();
         for (ReplacementInstrumentActivity activity : activities) {
             String questionResult = activity.getQuestionResult();
-            if(StringUtils.isEmpty(questionResult)){
+            if (StringUtils.isEmpty(questionResult)) {
                 continue;
             }
             String[] split = questionResult.split("");
@@ -573,7 +585,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
                 result.setActiveId(activity.getReplacementInstrumentCooperationId());
                 result.setActiveType(QuestionnaireActiveTypeEnum.REPLACEMENT);
                 result.setQuestionnaireQuestionId(question.getId());
-                result.setQuestionnaireQuestionItemIdList(item.getId() + (Integer.parseInt(split[i]) == 0?1:0) + "");
+                result.setQuestionnaireQuestionItemIdList(item.getId() + (Integer.parseInt(split[i]) == 0 ? 1 : 0) + "");
                 result.setQuestionnaireTopicId(question.getQuestionnaireTopicId());
                 questionnaireUserResultList.add(result);
             }
@@ -582,8 +594,8 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
     }
 
     @Override
-    public ReplacementInstrumentActivity queryUserInfo(Integer cooperationOrganId,SysUser user,Integer cooperationId) {
-        ReplacementInstrumentActivity replacementInstrumentActivity = findByUserId(cooperationOrganId, user.getId(),cooperationId);
+    public ReplacementInstrumentActivity queryUserInfo(Integer cooperationOrganId, SysUser user, Integer cooperationId) {
+        ReplacementInstrumentActivity replacementInstrumentActivity = findByUserId(cooperationOrganId, user.getId(), cooperationId);
         ReplacementInstrumentCooperation cooperation = replacementInstrumentCooperationDao.get(cooperationId);
         if (replacementInstrumentActivity == null) {
             Student student = studentService.get(user.getId());

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

@@ -136,7 +136,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             dataList = studentManageDao.findStudentsByOrganId(params);
         }
         if (dataList == null) {
-            dataList = new ArrayList<StudentManageListDto>();
+            dataList = new ArrayList<>();
         }
         pageInfo.setRows(dataList);
 
@@ -681,6 +681,8 @@ public class StudentManageServiceImpl implements StudentManageService {
         if (sysUser1 != null && !userId.equals(sysUser1.getId())) {
             throw new BizException("手机号已被占用");
         }
+        //不更新真实姓名
+        student.setRealName(null);
         sysUserFeignService.updateSysUser(student);
 
         student.setUserId(student.getId());
@@ -875,8 +877,13 @@ public class StudentManageServiceImpl implements StudentManageService {
         int count = indexBaseMonthDataDao.countStudentErrorLeave1(params);
         List<StudentErrorLeaveDto> dataList = new ArrayList<>();
         if (count > 0) {
+            //获取近两个月异常请假次数
+            Map<Integer,BigDecimal> leaveNumMap = MapUtil.convertIntegerMap(indexBaseMonthDataDao.getStudentErrorLeaveNumMap(params));
             pageInfo.setTotal(count);
             dataList = indexBaseMonthDataDao.queryStudentErrorLeave(params);
+            for (StudentErrorLeaveDto studentErrorLeaveDto : dataList) {
+                studentErrorLeaveDto.setTotalNum(leaveNumMap.get(studentErrorLeaveDto.getUserId()).intValue());
+            }
         }
         pageInfo.setRows(dataList);
         return pageInfo;

+ 19 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -331,9 +331,16 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
         sysUser.setPhone(studentRegistration.getParentsPhone());
         sysUser.setOrganId(studentRegistration.getOrganId());
-        sysUser.setRealName(studentRegistration.getParentsName());
 
-        sysUser.setUsername(studentRegistration.getName());
+        Boolean updateNameFlag = false;
+//        if (sysUser.getRealName() == null) {
+//            sysUser.setRealName(studentRegistration.getParentsName());
+//        }
+
+        if (StringUtils.isEmpty(sysUser.getUsername())) {
+            sysUser.setUsername(studentRegistration.getName());
+            updateNameFlag = true;
+        }
         sysUser.setGender(studentRegistration.getGender());
         sysUser.setBirthdate(studentRegistration.getBirthdate());
         sysUser.setCreateTime(date);
@@ -362,8 +369,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         student.setCurrentGradeNum(studentRegistration.getCurrentGradeNum());
         student.setCurrentClass(studentRegistration.getCurrentClass());
         studentDao.update(student);
-        imGroupDao.updateNickname(userId, studentRegistration.getName());
-        imGroupDao.updateUserFriendNickname(userId, studentRegistration.getName());
+
+        if (updateNameFlag) {
+            imGroupDao.updateNickname(userId, studentRegistration.getName());
+            imGroupDao.updateUserFriendNickname(userId, studentRegistration.getName());
+        }
+
         imFeignService.update(new ImUserModel(userId.toString(), studentRegistration.getName(), sysUser.getAvatar()));
         // 增加报名学生数
         musicGroupSubjectPlanService.addApplyStudentNum(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId(), 1);
@@ -691,11 +702,11 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 //新增user
                 sysUser = new SysUser();
                 sysUser.setPhone(studentRegistration.getParentsPhone());
-                sysUser.setRealName(studentRegistration.getParentsName());
+//                sysUser.setRealName(studentRegistration.getParentsName());
                 sysUser.setUsername(studentRegistration.getName());
                 sysUser.setGender(studentRegistration.getGender());
                 sysUser.setUserType("STUDENT");
-                sysUser.setIdCardNo(studentRegistration.getIdCardNo());
+//                sysUser.setIdCardNo(studentRegistration.getIdCardNo());
                 sysUser.setOrganId(musicGroup.getOrganId());
                 sysUser.setBirthdate(studentRegistration.getBirthdate());
                 teacherDao.addSysUser(sysUser);
@@ -723,7 +734,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     sysUser.setUserType(sysUser.getUserType() + ",STUDENT");
                 }
                 sysUser.setPhone(studentRegistration.getParentsPhone());
-                sysUser.setRealName(studentRegistration.getParentsName());
+//                sysUser.setRealName(studentRegistration.getParentsName());
                 sysUser.setUsername(studentRegistration.getName());
                 sysUser.setGender(studentRegistration.getGender());
                 sysUser.setOrganId(musicGroup.getOrganId());
@@ -1474,9 +1485,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         studentInfo.setCurrentClass(studentRegistration.getCurrentClass());
         studentDao.update(studentInfo);
         // 添加用户电子签章账户
-        if (CertificateTypeEnum.IDENTITY.getCode().equals(studentRegistration.getCertificateType())) {
-            contractService.register(student.getUserId(), student.getParentsName(), student.getIdCardNo(), student.getParentsPhone());
-        }
+        contractService.register(student.getUserId(), student.getParentsName(), student.getIdCardNo(), student.getParentsPhone());
         return student;
     }
 

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

@@ -919,7 +919,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             //获取比例
             BigDecimal ratioAmount = multiply2.divide(totalAmount, 6, BigDecimal.ROUND_HALF_UP);
             //实际支付价格
-            BigDecimal actualAmount = goodsSellDto.getGoodsPrice();
+            BigDecimal actualAmount = multiply2;
             //如果有减免金额
             if (marketAmount.doubleValue() > 0l) {
                 //如果是最后一件商品

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

@@ -1,13 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
 
+import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
+import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 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.springframework.beans.factory.annotation.Autowired;
@@ -17,12 +22,15 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integer, SysMusicScoreAccompaniment> implements SysMusicScoreAccompanimentService {
 	
 	@Autowired
 	private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
+	@Autowired
+	private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
 
 	@Override
 	public BaseDAO<Integer, SysMusicScoreAccompaniment> getDAO() {
@@ -53,7 +61,19 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integ
 
 	@Override
 	public List<SysMusicScoreAccompaniment> queryAccPage(SysExamSongQueryInfo queryInfo) {
-		Map<String, Object> params = new HashMap<String, Object>();
+		if(queryInfo.getCategoriesId() != null){
+			List<Integer> categoriesIdList = new ArrayList<>();
+			MusicScoreQueryInfo musicScoreQueryInfo = new MusicScoreQueryInfo();
+			musicScoreQueryInfo.setParentId(queryInfo.getCategoriesId());
+			List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
+			if(scoreCategories.size() > 0){
+				categoriesIdList = scoreCategories.stream().map(e->e.getId()).collect(Collectors.toList());
+			}else {
+				categoriesIdList.add(queryInfo.getCategoriesId());
+			}
+			queryInfo.setCategoriesIdList(categoriesIdList);
+		}
+		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
 		return sysMusicScoreAccompanimentDao.queryAccPage(params);
 	}
@@ -62,4 +82,21 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integ
 	public List<Subject> querySubjectIds() {
 		return sysMusicScoreAccompanimentDao.querySubjectIds();
 	}
+
+    @Override
+    public PageInfo<SysMusicScoreAccompaniment> queryScorePage(SysExamSongQueryInfo queryInfo) {
+		if(queryInfo.getCategoriesId() != null){
+			List<Integer> categoriesIdList = new ArrayList<>();
+			MusicScoreQueryInfo musicScoreQueryInfo = new MusicScoreQueryInfo();
+			musicScoreQueryInfo.setParentId(queryInfo.getCategoriesId());
+			List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
+			if(scoreCategories.size() > 0){
+				categoriesIdList = scoreCategories.stream().map(e->e.getId()).collect(Collectors.toList());
+			}else {
+				categoriesIdList.add(queryInfo.getCategoriesId());
+			}
+			queryInfo.setCategoriesIdList(categoriesIdList);
+		}
+		return this.queryPage(queryInfo);
+    }
 }

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

@@ -687,10 +687,10 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 
 		Date date = new Date();
 
-		user.setRealName(realName);
-		user.setIdCardNo(idcardNo);
-		user.setUpdateTime(date);
-		sysUserFeignService.updateSysUser(user);
+//		user.setRealName(realName);
+//		user.setIdCardNo(idcardNo);
+//		user.setUpdateTime(date);
+//		sysUserFeignService.updateSysUser(user);
 
 		teacher.setIdcardBackImg(idcardBackImg);
 		teacher.setIdcardFrontImg(idcardFrontImg);

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

@@ -1637,7 +1637,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				}
 			}
 		}
-		if(!"36".equals(user.getOrganId())&& CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())){
+		if(!"36".equals(user.getOrganId())){
 			try {
 				contractService.register(user.getId(),user.getRealName(),user.getIdCardNo(),user.getPhone());
 			} catch (Exception e) {

+ 27 - 5
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -1412,7 +1412,7 @@
 		SELECT sa.user_id_ FROM student_attendance sa
 		LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
 		LEFT JOIN sys_user su ON su.id_ = sa.user_id_
-		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{totalMonth} AND sa.status_ = 'LEAVE'
+		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{currentMonth} AND sa.status_ = 'LEAVE'
 		<if test="organId != null">
 			AND FIND_IN_SET(cs.organ_id_,#{organId})
 		</if>
@@ -1438,14 +1438,14 @@
 		<result property="organName" column="organ_name_"/>
 	</resultMap>
 	<select id="queryStudentErrorLeave" resultMap="StudentErrorLeaveDto">
-		SELECT organ_id_,organ_name_,user_id_,username_,phone_,SUM(total_num_) total_num_,current_num_,class_date_
-		FROM (SELECT cs.organ_id_,o.name_ organ_name_,sa.user_id_,su.username_,su.phone_,COUNT(sa.id_) total_num_,
-		COUNT(CASE WHEN DATE_FORMAT(cs.class_date_,'%Y-%m') = #{currentMonth} THEN 1 ELSE NULL END) current_num_,cs.class_date_
+		SELECT organ_id_,organ_name_,user_id_,username_,phone_,current_num_,class_date_
+		FROM (SELECT cs.organ_id_,o.name_ organ_name_,sa.user_id_,su.username_,su.phone_,
+		COUNT(sa.id_) current_num_,cs.class_date_
 		FROM student_attendance sa
 		LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
 		LEFT JOIN organization o ON o.id_ = cs.organ_id_
 		LEFT JOIN sys_user su ON su.id_ = sa.user_id_
-		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{totalMonth} AND sa.status_ = 'LEAVE'
+		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{currentMonth} AND sa.status_ = 'LEAVE'
 		<if test="organId != null">
 			AND FIND_IN_SET(cs.organ_id_,#{organId})
 		</if>
@@ -1507,4 +1507,26 @@
 		ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC
 		<include refid="global.limit"/>
 	</select>
+	<select id="getStudentErrorLeaveNumMap" resultType="java.util.Map">
+		SELECT user_id_ 'key',SUM(total_num_) 'value'
+		FROM (SELECT sa.user_id_,COUNT(sa.id_) total_num_
+		FROM student_attendance sa
+		LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
+		LEFT JOIN sys_user su ON su.id_ = sa.user_id_
+		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{totalMonth} AND sa.status_ = 'LEAVE'
+		<if test="organId != null">
+			AND FIND_IN_SET(cs.organ_id_,#{organId})
+		</if>
+		<if test="classGroupIds != null and classGroupIds.size() > 0">
+			AND cs.class_group_id_ IN
+			<foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+				#{classGroupId}
+			</foreach>
+		</if>
+		<if test="search != null and search != ''">
+			AND (sa.user_id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
+		</if>
+		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m') HAVING COUNT(sa.id_) > 1 AND COUNT(sa.id_) > SUM(sa.leave_visit_flag_) ORDER BY cs.class_date_ DESC)c
+		GROUP BY c.user_id_
+	</select>
 </mapper>

+ 622 - 0
mec-biz/src/main/resources/config/mybatis/IndexErrDataRecordMapper.xml

@@ -0,0 +1,622 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.IndexErrDataRecordDao">
+
+	<resultMap type="com.ym.mec.biz.dal.entity.IndexErrDataRecord" id="IndexErrDataRecord">
+		<result column="id_" property="id" />
+		<result column="organ_id_" property="organId" />
+		<result column="data_id_" property="dataId" />
+		<result column="data_type_" property="dataType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
+		<result column="deal_user_id_" property="dealUserId" />
+		<result column="generate_time_" property="generateTime"/>
+		<result column="create_time_" property="createTime" />
+		<result column="deal_time_" property="dealTime" />
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="IndexErrDataRecord" >
+		SELECT * FROM index_err_data_record WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="IndexErrDataRecord">
+		SELECT * FROM index_err_data_record ORDER BY id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.IndexErrDataRecord" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO index_err_data_record (organ_id_,data_id_,data_type_,deal_user_id_,generate_time_,deal_time_,create_time_)
+		VALUES(#{organId},#{dataId},#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{dealUserId},#{generateTime},#{dealTime},NOW())
+	</insert>
+
+	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.IndexErrDataRecord" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO index_err_data_record (organ_id_,data_id_,data_type_,deal_user_id_,generate_time_,deal_time_,create_time_)
+		VALUE
+		<foreach collection="datas" item="data" separator=",">
+			(#{data.organId},#{data.dataId},#{data.dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.dealUserId},
+			#{data.generateTime},#{data.dealTime},NOW())
+		</foreach>
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.IndexErrDataRecord">
+		UPDATE index_err_data_record
+		<set>
+			<if test="organId != null">
+				organ_id_ = #{organId},
+			</if>
+			<if test="dealUserId != null">
+				deal_user_id_ = #{dealUserId},
+			</if>
+			<if test="dataId != null">
+				data_id_ = #{dataId},
+			</if>
+			<if test="dataType != null">
+				data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+			</if>
+			<if test="generateTime != null">
+				generate_time_ = #{generateTime},
+			</if>
+			<if test="dealTime != null">
+				deal_time_ = #{dealTime},
+			</if>
+		</set>
+		WHERE id_ = #{id}
+	</update>
+
+	<update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.IndexErrDataRecord">
+		<foreach collection="datas" item="data" separator=";">
+			UPDATE index_err_data_record
+			<set>
+				<if test="data.organId != null">
+					organ_id_ = #{data.organId},
+				</if>
+				<if test="data.dealUserId != null">
+					deal_user_id_ = #{data.dealUserId},
+				</if>
+				<if test="data.dataId != null">
+					data_id_ = #{data.dataId},
+				</if>
+				<if test="data.dataType != null">
+					data_type_ = #{data.dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+				</if>
+				<if test="data.generateTime != null">
+					generate_time_ = #{data.generateTime},
+				</if>
+				<if test="data.dealTime != null">
+					deal_time_ = #{data.dealTime},
+				</if>
+			</set>
+			WHERE id_ = #{data.id}
+		</foreach>
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM index_err_data_record WHERE id_ = #{id}
+	</delete>
+
+	<delete id="deleteWithGenerateTimeAndType" >
+		DELETE FROM index_err_data_record
+		WHERE
+			generate_time_ = #{generateTime}
+			<if test="dataType!=null">
+				AND data_type_=#{dataType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="IndexErrDataRecord" parameterType="map">
+		SELECT * FROM index_err_data_record ORDER BY id_ <include refid="global.limit"/>
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM index_err_data_record
+	</select>
+
+	<select id="countWithGenerateTime" resultType="int">
+		SELECT COUNT(id_) FROM index_err_data_record WHERE generate_time_=#{generateTime}
+	</select>
+
+	<select id="getWithGenerateTime" resultMap="IndexErrDataRecord">
+		SELECT * FROM index_err_data_record
+		<where>
+			<if test="organIds!=null and organIds.size()>0">
+				AND organ_id_ IN
+				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+			<if test="generateStartTime!=null and generateStartTime!=''">
+				AND generate_time_&gt;=#{generateStartTime}
+			</if>
+			<if test="generateEndTime!=null and generateEndTime!=''">
+				AND generate_time_&lt;=#{generateEndTime}
+			</if>
+		</where>
+	</select>
+
+	<select id="findUntreatedRecord" resultMap="IndexErrDataRecord">
+		SELECT * FROM index_err_data_record WHERE deal_time_ IS NULL
+	</select>
+
+	<select id="queryErrInspection" resultMap="IndexErrDataRecord">
+		SELECT
+			id_ data_id_,
+		    organ_id_,
+		    user_id_ deal_user_id_
+		FROM
+			inspection_item_plan
+		WHERE
+			conclusion_status_ = 1 AND memo_ = ''
+			<if test="date!=null">
+				AND DATE_FORMAT(plan_start_,'%Y-%m-%d') = #{date}
+			</if>
+			<if test="dates!=null and dates.size()>0">
+				AND DATE_FORMAT(plan_start_,'%Y-%m-%d') IN
+				<foreach collection="dates" item="dt" separator="," open="(" close=")">
+					#{dt}
+				</foreach>
+			</if>
+	</select>
+
+	<select id="queryInspectionItemPlan" resultMap="IndexErrDataRecord">
+		SELECT
+			iip.id_ data_id_,
+			iip.organ_id_,
+			iip.user_id_ deal_user_id_
+		FROM inspection_item_plan iip
+		WHERE iip.status_ = 0 AND iip.memo_ = ''
+			AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') &lt; DATE_FORMAT(NOW(),'%Y-%m-%d')
+			AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') &lt;= DATE_FORMAT(NOW(),'%Y-%m-%d')
+			<if test="date!=null">
+		  		AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') = #{date}
+			</if>
+			<if test="dates!=null and dates.size()>0">
+				AND DATE_FORMAT(iip.plan_start_,'%Y-%m-%d') IN
+				<foreach collection="dates" item="dt" separator="," open="(" close=")">
+					#{dt}
+				</foreach>
+			</if>
+	</select>
+
+	<select id="queryStudentVisit" resultMap="IndexErrDataRecord">
+		SELECT
+			ii.id_ data_id_,
+		    ii.organ_id_,
+		    ii.user_id_ deal_user_id_
+		FROM inspection_item ii
+		LEFT JOIN inspection i ON ii.inspection_id_ = i.id_
+		WHERE ii.item_ = 'VISIT' AND ii.memo_ =''
+			AND ii.times_ > (SELECT COUNT(DISTINCT sv.id_) FROM student_visit sv
+			WHERE sv.teacher_id_ = ii.user_id_ AND DATE_FORMAT(i.month_,'%Y-%m') = DATE_FORMAT(sv.visit_time_,'%Y-%m'))
+			AND i.month_ &lt;= DATE_FORMAT(NOW(),'%Y-%m-%d')
+			<if test="date!=null">
+				AND i.month_ = #{date}
+			</if>
+			<if test="dates!=null and dates.size()>0">
+				AND i.month_ IN
+				<foreach collection="dates" item="dt" separator="," open="(" close=")">
+					#{dt}
+				</foreach>
+			</if>
+	</select>
+
+	<select id="getAttendanceError" resultMap="IndexErrDataRecord">
+		SELECT
+			cs.id_ data_id_,
+			cs.organ_id_,
+			CASE cs.group_type_ WHEN 'MUSIC' THEN mg.educational_teacher_id_ WHEN 'VIP' THEN vg.educational_teacher_id_ WHEN 'PRACTICE' THEN pg.educational_teacher_id_ END deal_user_id_
+		FROM course_schedule cs
+			LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+			LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
+			LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
+			LEFT JOIN music_group mg ON cs.music_group_id_=mg.id_ AND cs.group_type_='MUSIC'
+			LEFT JOIN vip_group vg ON cs.music_group_id_=vg.id_ AND cs.group_type_='VIP'
+			LEFT JOIN practice_group pg ON cs.music_group_id_=pg.id_ AND cs.group_type_='PRACTICE'
+		WHERE ta.teacher_id_ = cs.actual_teacher_id_
+			AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= '2021-02-01'
+			AND (((ta.sign_in_status_ = 0 OR ta.sign_in_status_ IS NULL OR ta.sign_out_status_ = 0 OR ta.sign_out_status_ IS NULL) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ = 'TRUANT' AND sa.visit_flag_ = 0)))
+			AND ((ta.sign_in_status_ IS NULL AND ta.sign_out_status_ IS NOT NULL) OR (ta.sign_out_status_ IS NULL AND ta.sign_in_status_ IS NOT NULL) OR (ta.sign_out_status_ IS NOT NULL AND ta.sign_in_status_ IS NOT NULL))
+			AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_) AND cssp.id_ IS NOT NULL
+			AND EXISTS (SELECT id_ FROM course_schedule_teacher_salary WHERE cs.id_=course_schedule_id_ AND settlement_time_ IS NULL)
+			<if test="date!=null">
+				AND cs.class_date_=#{date}
+			</if>
+			<if test="dates!=null and dates.size()>0">
+				AND cs.class_date_ IN
+				<foreach collection="dates" item="dt" separator="," open="(" close=")">
+					#{dt}
+				</foreach>
+			</if>
+	</select>
+
+	<select id="getNoAttendance" resultMap="IndexErrDataRecord">
+		SELECT
+			cs.id_ data_id_,
+			cs.organ_id_,
+			CASE cs.group_type_ WHEN 'MUSIC' THEN mg.educational_teacher_id_ WHEN 'VIP' THEN vg.educational_teacher_id_ WHEN 'PRACTICE' THEN pg.educational_teacher_id_ END deal_user_id_
+		FROM course_schedule cs
+			LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+			LEFT JOIN music_group mg ON cs.music_group_id_=mg.id_ AND cs.group_type_='MUSIC'
+			LEFT JOIN vip_group vg ON cs.music_group_id_=vg.id_ AND cs.group_type_='VIP'
+			LEFT JOIN practice_group pg ON cs.music_group_id_=pg.id_ AND cs.group_type_='PRACTICE'
+		WHERE ta.teacher_id_ = cs.actual_teacher_id_
+			AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_>='2021-02-01'
+			AND ta.sign_in_time_ IS NULL AND ta.sign_out_time_ IS NULL AND ta.dispose_content_ IS NULL
+			AND (cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_)
+			AND EXISTS (SELECT id_ FROM course_schedule_teacher_salary WHERE cs.id_=course_schedule_id_ AND settlement_time_ IS NULL)
+			<if test="date!=null">
+		  		AND cs.class_date_=#{date}
+			</if>
+			<if test="dates!=null and dates.size()>0">
+				AND cs.class_date_ IN
+				<foreach collection="dates" item="dt" separator="," open="(" close=")">
+					#{dt}
+				</foreach>
+			</if>
+	</select>
+
+	<sql id="queryErrStringsCondition">
+		<where>
+			<if test="queryOrganIds!=null and queryOrganIds.size()>0">
+				AND organ_id_ IN
+				<foreach collection="queryOrganIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+			<if test="startDate!=null and startDate!=''">
+				AND generate_time_&gt;=#{startDate}
+			</if>
+			<if test="endDate!=null and endDate!=''">
+				AND generate_time_&lt;=#{endDate}
+			</if>
+			<if test="educationUserId!=null">
+				AND deal_user_id_ = #{educationUserId}
+			</if>
+		</where>
+	</sql>
+
+	<select id="queryErrStrings" resultType="string">
+		SELECT CONCAT(generate_time_, organ_id_, deal_user_id_) FROM index_err_data_record
+		<include refid="queryErrStringsCondition"></include>
+		GROUP BY generate_time_,organ_id_,deal_user_id_
+		ORDER BY generate_time_ DESC,organ_id_,deal_user_id_
+		<include refid="global.limit"></include>
+	</select>
+
+	<select id="queryErrStringsCount" resultType="int">
+		SELECT COUNT(DISTINCT CONCAT(generate_time_,organ_id_,deal_user_id_)) FROM index_err_data_record
+		<include refid="queryErrStringsCondition"></include>
+	</select>
+
+	<select id="getWithOrganMonthUserStr" resultMap="IndexErrDataRecord">
+		SELECT * FROM index_err_data_record WHERE CONCAT(generate_time_, organ_id_, deal_user_id_) IN
+		<foreach collection="omuStrings" item="omuString" open="(" close=")" separator=",">
+			#{omuString}
+		</foreach>
+	</select>
+
+	<select id="getAllErrDatas" resultMap="IndexErrDataRecord">
+		SELECT * FROM index_err_data_record
+		<include refid="queryErrStringsCondition"></include>
+	</select>
+
+	<select id="queryErrInspectionData" resultMap="com.ym.mec.biz.dal.dao.InspectionItemPlanDao.InspectionItemPlan" parameterType="map">
+		SELECT iip.*,su.real_name_ realName,o.name_ organName,co.name_ cooperationName,mg.name_ musicGroupName,
+		       irdr.generate_time_ generateTime,irdr.deal_time_ dealTime
+		FROM index_err_data_record irdr
+		LEFT JOIN inspection_item_plan iip ON irdr.data_id_=iip.id_
+		LEFT JOIN sys_user su ON su.id_ = iip.user_id_
+		LEFT JOIN organization o ON o.id_=iip.organ_id_
+		LEFT JOIN cooperation_organ co ON co.id_=iip.cooperation_organ_id_
+		LEFT JOIN music_group mg ON mg.id_ = iip.music_group_id_
+		<include refid="queryErrInspectionDataCondition"/>
+		ORDER BY iip.plan_start_ ASC
+		<include refid="global.limit"/>
+	</select>
+
+	<select id="errInspectionDataCount" resultType="int">
+		SELECT COUNT(*)
+		FROM index_err_data_record irdr
+		LEFT JOIN inspection_item_plan iip ON irdr.data_id_=iip.id_
+		LEFT JOIN music_group mg ON mg.id_ = iip.music_group_id_
+		<include refid="queryErrInspectionDataCondition"/>
+	</select>
+
+	<sql id="queryErrInspectionDataCondition">
+		<where>
+			<if test="searchType != null and searchType != ''">
+				<if test="searchType == 'MUSIC_PATROL_ITEM'">
+					irdr.data_type_ = 'MUSIC_PATROL_ITEM'
+				</if>
+				<if test="searchType == 'INSPECTION_ITEM_PLAN'">
+					irdr.data_type_ = 'INSPECTION_ITEM_PLAN'
+				</if>
+			</if>
+			<if test="itemId != null">
+				AND iip.item_id_ = #{itemId}
+			</if>
+			<if test="userId != null">
+				AND iip.user_id_ = #{userId}
+			</if>
+			<if test="organId != null">
+				AND FIND_IN_SET(iip.organ_id_,#{organId})
+			</if>
+			<if test="cooperationOrganId != null">
+				AND iip.cooperation_organ_id_ = #{cooperationOrganId}
+			</if>
+			<if test="musicGroupId != null">
+				AND iip.music_group_id_ = #{musicGroupId}
+			</if>
+			<if test="conclusionStatus != null">
+				AND iip.conclusion_status_ = #{conclusionStatus}
+			</if>
+			<if test="status !=null">
+				AND iip.status_ = #{status}
+			</if>
+			<if test='hasSubmit != null and hasSubmit.toString()=="1".toString()'>
+				AND iip.status_ > 0
+			</if>
+			<if test='hasSubmit != null and hasSubmit.toString()=="0".toString()'>
+				AND iip.status_ = 0
+			</if>
+			<if test="startTime != null">
+				AND iip.plan_start_ >= #{startTime}
+			</if>
+			<if test="endTime != null">
+				<![CDATA[AND iip.plan_start_ <= #{endTime}]]>
+			</if>
+			<if test="generateStartTime != null">
+				AND irdr.generate_time_ >= #{generateStartTime}
+			</if>
+			<if test="generateEndTime != null">
+				<![CDATA[AND irdr.generate_time_ <= #{generateEndTime}]]>
+			</if>
+			<if test="dealStartTime != null">
+				AND DATE_FORMAT(irdr.deal_time_,"%Y-%m-%d") >= #{dealStartTime}
+			</if>
+			<if test="dealEndTime != null">
+				<![CDATA[AND DATE_FORMAT(irdr.deal_time_,"%Y-%m-%d") <= #{dealEndTime}]]>
+			</if>
+			<if test="search != null">
+				AND mg.name_ LIKE CONCAT('%', #{search}, '%')
+			</if>
+			<if test="ids != null and ids != ''">
+				AND FIND_IN_SET(iip.id_,#{ids})
+			</if>
+		</where>
+	</sql>
+
+	<select id="queryErrStudentVisit" resultMap="com.ym.mec.biz.dal.dao.InspectionItemDao.InspectionItem" parameterType="map">
+		SELECT ii.*,i.month_ month,o.name_ organName,su.real_name_ userName,
+			irdr.generate_time_ generateTime,irdr.deal_time_ dealTime
+		FROM index_err_data_record irdr
+		LEFT JOIN inspection_item ii ON irdr.data_id_=ii.id_
+		LEFT JOIN inspection i ON i.id_ = ii.inspection_id_
+		LEFT JOIN organization o ON o.id_=ii.organ_id_
+		LEFT JOIN sys_user su ON su.id_ = ii.user_id_
+		<include refid="queryErrStudentVisitCondition"/>
+		ORDER BY i.month_ DESC ,ii.id_ DESC
+		<include refid="global.limit"/>
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="studentVisitCount" resultType="int">
+		SELECT COUNT(*)
+		FROM index_err_data_record irdr
+		LEFT JOIN inspection_item ii ON irdr.data_id_=ii.id_
+		LEFT JOIN inspection i ON i.id_ = ii.inspection_id_
+		<include refid="queryErrStudentVisitCondition"/>
+	</select>
+
+	<sql id="queryErrStudentVisitCondition">
+		<where>
+			irdr.data_type_ = 'STUDENT_VISIT'
+			<if test="organId != null">
+				AND FIND_IN_SET(ii.organ_id_,#{organId})
+			</if>
+			<if test="userId != null">
+				AND ii.user_id_ = #{userId}
+			</if>
+			<if test="operation != null">
+				AND ii.operation_ = #{operation}
+			</if>
+			<if test="ids != null">
+				AND FIND_IN_SET(ii.id_,#{ids})
+			</if>
+			<if test="startTime != null">
+				AND i.month_ >= #{startTime}
+			</if>
+			<if test="endTime != null">
+				<![CDATA[AND i.month_ <= #{endTime}]]>
+			</if>
+			<if test="generateStartTime != null">
+				AND irdr.generate_time_ >= #{generateStartTime}
+			</if>
+			<if test="generateEndTime != null">
+				<![CDATA[AND irdr.generate_time_ <= #{generateEndTime}]]>
+			</if>
+			<if test="dealStartTime != null">
+				AND DATE_FORMAT(irdr.deal_time_,"%Y-%m-%d") >= #{dealStartTime}
+			</if>
+			<if test="dealEndTime != null">
+				<![CDATA[AND DATE_FORMAT(irdr.deal_time_,"%Y-%m-%d") <= #{dealEndTime}]]>
+			</if>
+		</where>
+	</sql>
+
+	<select id="queryHistoryErrCourseData" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseScheduleEndDto">
+		SELECT
+			cs.id_ id_,
+			cs.new_course_id_,
+			cs.group_type_,
+			cs.music_group_id_,
+			cs.class_group_id_,
+			cs.status_,
+			cs.name_,
+			cs.class_date_,
+			CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
+			CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
+			cs.actual_teacher_id_,
+			cs.teach_mode_,
+			cs.type_,
+			cs.schoole_id_,
+			cs.create_time_,
+			cs.is_lock_,
+			cs.organ_id_,
+			s.name_ schoole_name_,
+			o.name_ organ_name_,
+			irdr.generate_time_ generateTime,
+		    irdr.deal_time_ dealTime,
+		    eu.real_name_ educationTeacherName,
+			CASE WHEN COUNT(CASE WHEN sa.id_ IS NULL OR (sa.status_ = 'LEAVE' AND sa.remark_ IS NOT NULL) THEN NULL ELSE 1 END) > 0 THEN 1 ELSE 0 END isCallNames,
+			CASE WHEN COUNT(CASE WHEN ta.is_complaints_ = 1 THEN 1 ELSE NULL END) > 0 THEN '1' ELSE '0' END is_complaints_
+		FROM index_err_data_record irdr
+			LEFT JOIN course_schedule cs ON irdr.data_id_=cs.id_
+			LEFT JOIN school s ON cs.schoole_id_=s.id_
+			LEFT JOIN organization o ON cs.organ_id_=o.id_
+			LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
+			left join teacher_attendance ta on ta.course_schedule_id_ = cs.id_
+			<if test="searchType == 'ERR_ATTENDANCE'">
+				LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
+			</if>
+			LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+			<if test="searchType == 'ERR_ATTENDANCE'">
+				AND cssp.user_id_ = sa.user_id_
+			</if>
+			LEFT JOIN sys_user eu ON irdr.deal_user_id_ = eu.id_
+		<include refid="endFindCourseSchedulesCondition"/>
+		GROUP BY cs.class_date_,cs.start_class_time_,cs.id_
+		ORDER BY cs.class_date_,cs.start_class_time_,cs.id_
+		<include refid="global.limit"/>
+	</select>
+
+	<select id="historyErrCourseDataCount" resultType="int">
+		SELECT
+			COUNT(DISTINCT cs.id_)
+		FROM index_err_data_record irdr
+			LEFT JOIN course_schedule cs ON irdr.data_id_=cs.id_
+			<if test="searchType == 'ERR_ATTENDANCE'">
+				LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
+			</if>
+			LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+			<if test="searchType == 'ERR_ATTENDANCE'">
+				AND cssp.user_id_ = sa.user_id_
+			</if>
+			LEFT JOIN teacher_attendance ta on ta.course_schedule_id_ = cs.id_
+			LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
+		<include refid="endFindCourseSchedulesCondition"/>
+	</select>
+
+	<select id="getAllDealUserIds" resultType="int">
+		SELECT DISTINCT deal_user_id_ FROM index_err_data_record
+		<where>
+			<if test="organIds!=null and organIds.size()>0">
+				AND organ_id_ IN
+				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+		</where>
+	</select>
+
+	<sql id="endFindCourseSchedulesCondition">
+		<where>
+			cs.del_flag_ = 0
+			<if test="searchType == 'ERR_ATTENDANCE'">
+				AND irdr.data_type_ = 'TEACHER_EXCEPTION_ATTENDANCE'
+			</if>
+			<if test="searchType == 'NO_ATTENDANCE'">
+				AND irdr.data_type_ = 'TEACHER_NOT_A_CLASS'
+			</if>
+			<if test="mergeCourseType != null and mergeCourseType != ''">
+				<if test="mergeCourseType == 'MASTER'">
+					AND cs.new_course_id_ = cs.id_
+				</if>
+				<if test="mergeCourseType == 'ASSIST'">
+					AND cs.new_course_id_ > 0 AND cs.new_course_id_ != cs.id_
+				</if>
+				<if test="mergeCourseType == 'ALL'">
+					AND cs.new_course_id_ > 0
+				</if>
+			</if>
+			<if test="isCallNames != null and isCallNames == 1">
+				AND sa.id_ IS NOT NULL
+			</if>
+			<if test="isCallNames != null and isCallNames == 0">
+				AND sa.id_ IS NULL
+			</if>
+			<if test="startTime!=null">
+				AND cs.class_date_ &gt;= DATE_FORMAT(#{startTime},"%Y-%m-%d")
+			</if>
+			<if test="endTime!=null">
+				AND cs.class_date_ &lt;= DATE_FORMAT(#{endTime},"%Y-%m-%d")
+			</if>
+			<if test="generateStartTime != null">
+				AND irdr.generate_time_ >= #{generateStartTime}
+			</if>
+			<if test="generateEndTime != null">
+				<![CDATA[AND irdr.generate_time_ <= #{generateEndTime}]]>
+			</if>
+			<if test="dealStartTime != null">
+				AND DATE_FORMAT(irdr.deal_time_,"%Y-%m-%d") >= #{dealStartTime}
+			</if>
+			<if test="dealEndTime != null">
+				<![CDATA[AND DATE_FORMAT(irdr.deal_time_,"%Y-%m-%d") <= #{dealEndTime}]]>
+			</if>
+			<if test="courseStatus!=null">
+				AND cs.status_ = #{courseStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="createStartDate!=null">
+				AND date(cs.create_time_) &gt;= date(#{createStartDate})
+			</if>
+			<if test="createEndDate!=null">
+				AND date(cs.create_time_) &lt;= date(#{createEndDate})
+			</if>
+			<if test="courseType!=null">
+				AND cs.type_ = #{courseType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="groupType!=null">
+				AND cs.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="schoolId!=null">
+				AND cs.schoole_id_ = #{schoolId}
+			</if>
+			<if test="teachMode!=null">
+				AND cs.teach_mode_ = #{teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="teacherIdList != null">
+				AND csts.user_id_=#{teacherIdList}
+			</if>
+			<if test="teachType != null">
+				AND csts.teacher_role_ = #{teachType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="organIdList!=null">
+				AND FIND_IN_SET(cs.organ_id_,#{organIdList})
+			</if>
+			<if test="search != null and search != ''">
+				AND (cs.music_group_id_ = #{search} OR cs.id_=#{search} OR cs.name_ LIKE CONCAT('%' ,#{search}, '%' ))
+			</if>
+			<if test="courseIdSearch != null">
+				AND cs.id_ = #{courseIdSearch}
+			</if>
+			<if test="classGroupIds != null and classGroupIds.size() > 0">
+				AND cs.class_group_id_ IN
+				<foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+					#{classGroupId}
+				</foreach>
+			</if>
+		</where>
+	</sql>
+</mapper>

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

@@ -466,7 +466,7 @@
 			edu.real_name_ edu_teacher_name_,
 			MAX( sub.name_ ) subject_name_,
 			su.gender_ gender_,
-			su.real_name_ parent_name_,
+			sut.name_ parent_name_,
 			su.phone_ phone_
 		FROM
 			music_group_payment_calender_detail mgpcd
@@ -475,6 +475,7 @@
 			LEFT JOIN student_registration sr ON sr.music_group_id_ = mgpc.music_group_id_
 			AND mgpcd.user_id_ = sr.user_id_
 			LEFT JOIN sys_user su ON mgpcd.user_id_ = su.id_
+			LEFT JOIN sys_user_tsign sut ON sut.user_id_ = su.id_
 			LEFT JOIN sys_user edu ON edu.id_ = mg.educational_teacher_id_
 			LEFT JOIN organization organ ON organ.id_ = mg.organ_id_
 			LEFT JOIN `subject` sub ON sr.actual_subject_id_ = sub.id_

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/ReplacementInstrumentActivityMapper.xml

@@ -305,4 +305,12 @@
         LEFT JOIN organization o on o.id_ = co.organ_id_
         <include refid="queryReplacementsCondition"/>
     </select>
+
+    <select id="getActivityOrder" resultMap="com.ym.mec.biz.dal.dao.StudentPaymentOrderDao.StudentPaymentOrder">
+        SELECT * FROM student_payment_order WHERE group_type_ = 'REPLACEMENT' AND status_ = 'SUCCESS' AND music_group_id_ IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        ORDER BY id_ DESC
+    </select>
 </mapper>

+ 25 - 18
mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml

@@ -9,6 +9,7 @@
     <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
         <result column="id_" property="id"/>
         <result column="user_id_" property="userId"/>
+        <result column="real_name_" property="realName"/>
         <result column="name_" property="name"/>
         <result column="organ_id_" property="organId"/>
         <result column="address_" property="address"/>
@@ -92,32 +93,38 @@
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="School" parameterType="map">
-        SELECT * FROM school where del_flag_ != 1
-        <if test="cooperationOrganId != null">
-            AND cooperation_organ_id_ = #{cooperationOrganId}
-        </if>
-        <if test="organId != null">
-            AND FIND_IN_SET(organ_id_,#{organId})
-        </if>
-        <if test="search != null">
-            AND (name_ LIKE CONCAT('%',#{search},'%') OR id_ LIKE CONCAT('%',#{search},'%'))
-        </if>
-        ORDER BY id_
+        SELECT s.*,su.real_name_ FROM school s
+        LEFT JOIN sys_user su ON su.id_ = s.user_id_
+        WHERE s.del_flag_ != 1
+        <include refid="queryPageSql"/>
+        ORDER BY s.id_
         <include refid="global.limit"/>
     </select>
-
-    <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM school where del_flag_ != 1
+    <sql id="queryPageSql">
         <if test="cooperationOrganId != null">
-            AND cooperation_organ_id_ = #{cooperationOrganId}
+            AND s.cooperation_organ_id_ = #{cooperationOrganId}
         </if>
         <if test="organId != null">
-            AND FIND_IN_SET(organ_id_,#{organId})
+            AND FIND_IN_SET(s.organ_id_,#{organId})
+        </if>
+        <if test="publicFlag != null">
+            <if test="publicFlag == 1">
+                AND s.user_id_ IS NULL
+            </if>
+            <if test="publicFlag == 0">
+                AND s.user_id_ IS NOT NULL
+            </if>
         </if>
         <if test="search != null">
-            AND (name_ LIKE CONCAT('%',#{search},'%') OR id_ LIKE CONCAT('%',#{search},'%'))
+            AND (s.name_ LIKE CONCAT('%',#{search},'%') OR s.id_ LIKE CONCAT('%',#{search},'%'))
         </if>
+    </sql>
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(s.id_) FROM school s
+        LEFT JOIN sys_user su ON su.id_ = s.user_id_
+        WHERE s.del_flag_ != 1
+        <include refid="queryPageSql"/>
 	</select>
     <select id="queryByOrganId" resultMap="School">
         SELECT * FROM school

+ 9 - 8
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -157,18 +157,19 @@
     </update>
 
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
-        SELECT o.`name_` organ_name_,o.grade_type_,s.`user_id_` ,su.`username_` ,su.`phone_` parents_phone_,su.`real_name_` ,su.`gender_` , su.organ_id_,
+        SELECT o.`name_` organ_name_,o.grade_type_,s.`user_id_` ,su.`username_` ,su.`phone_` parents_phone_,
+        sut.name_ real_name_,su.`gender_` , su.organ_id_,
 		tu.`real_name_` teacher_name_,CASE s.service_tag_ WHEN 2 THEN 0 ELSE s.service_tag_ END service_tag_ ,s.`operating_tag_` ,
         s.care_package_, s.come_on_package_, suca.`course_balance_` ,suca.balance_,
 		sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,s.current_grade_num_,s.current_class_,
-        case when su.password_ is null then false else true end isActive_,s.is_new_user_,case when sut.user_id_ is null then 0 else 1 end is_signed_contract_,
+        CASE WHEN su.password_ IS NULL THEN FALSE ELSE TRUE END isActive_,s.is_new_user_,CASE WHEN sut.user_id_ IS NULL THEN 0 ELSE 1 END is_signed_contract_,
         s.cooperation_organ_id_,co.name_ cooperation_organ_name_
-		FROM `student` s LEFT JOIN `sys_user` su on s.`user_id_` = su.`id_`
-		LEFT JOIN `organization` o on o.`id_` = su.`organ_id_`
-		LEFT JOIN `sys_user` tu on tu.`id_` = s.`teacher_id_` 
-		LEFT JOIN `sys_user_cash_account` suca on suca.`user_id_` = s.`user_id_`
-		LEFT JOIN `subject` sub on sub.id_ = s.`subject_id_list_`
-		left join sys_user_tsign sut on sut.user_id_ = s.user_id_
+		FROM `student` s LEFT JOIN `sys_user` su ON s.`user_id_` = su.`id_`
+		LEFT JOIN `organization` o ON o.`id_` = su.`organ_id_`
+		LEFT JOIN `sys_user` tu ON tu.`id_` = s.`teacher_id_`
+		LEFT JOIN `sys_user_cash_account` suca ON suca.`user_id_` = s.`user_id_`
+		LEFT JOIN `subject` sub ON sub.id_ = s.`subject_id_list_`
+		LEFT JOIN sys_user_tsign sut ON sut.user_id_ = s.user_id_
         LEFT JOIN cooperation_organ co ON s.cooperation_organ_id_=co.id_
         <include refid="findStudentsByOrganIdSql"/>
         ORDER BY su.create_time_ DESC

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -56,6 +56,12 @@
         WHERE id_ = #{userId} FOR UPDATE
     </select>
 
+    <select id="getUser" resultMap="com.ym.mec.biz.dal.dao.TeacherDao.SysUser">
+        SELECT *
+        FROM sys_user
+        WHERE id_ = #{userId}
+    </select>
+
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.Student" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">

+ 11 - 6
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -408,11 +408,13 @@
     </update>
 
     <select id="queryStudentInfo" resultMap="StudentInfo">
-        SELECT u.*,sr.name_,sr.current_class_,sr.current_grade_,sr.actual_subject_id_,sr.parents_name_,s.name_ subject_name_
-        FROM sys_user u left join
-        student_registration sr on u.id_ = sr.user_id_ left join subject s on sr.actual_subject_id_ = s.id_
-        where u.id_ = #{userId}
-        order by sr.create_time_ desc limit 1
+        SELECT sut.name_ real_name_,sut.card_no_ id_card_no_,u.*,sr.name_,sr.current_class_,sr.current_grade_,sr.actual_subject_id_,sr.parents_name_,s.name_ subject_name_
+        FROM sys_user u
+        LEFT JOIN student_registration sr ON u.id_ = sr.user_id_
+        LEFT JOIN subject s ON sr.actual_subject_id_ = s.id_
+        LEFT JOIN sys_user_tsign sut ON sut.user_id_ = u.id_
+        WHERE u.id_ = #{userId}
+        ORDER BY sr.create_time_ DESC limit 1
     </select>
 
     <select id="queryByUserIdAndMusicGroupId" resultMap="StudentRegistration">
@@ -483,6 +485,7 @@
         SELECT sr.*,cg.name_ class_group_name_,su.gender_ gender_,su.username_ FROM student_registration sr
         LEFT JOIN class_group cg ON cg.id_ = sr.class_group_id_
         LEFT JOIN sys_user su on sr.user_id_ = su.id_
+        LEFT JOIN sys_user_tsign sut ON sut.user_id_ = su.id_
         WHERE sr.music_group_id_ = #{musicGroupId}
         <if test="actualSubjectId != null">
             AND FIND_IN_SET(sr.actual_subject_id_,#{actualSubjectId})
@@ -610,9 +613,11 @@
         GROUP BY sr.music_group_id_
     </select>
     <select id="queryUserByPhone" resultMap="StudentRegistration">
-        SELECT su.id_,su.real_name_ parents_name_,su.phone_,sr.current_grade_,sr.current_grade_num_,
+        SELECT su.id_,CASE WHEN sut.name_ IS NULL THEN su.real_name_ ELSE sut.name_ END parents_name_,
+        su.phone_,sr.current_grade_,sr.current_grade_num_,
         sr.current_class_,su.username_ name_,su.birthdate_,su.gender_
         FROM sys_user su
+        LEFT JOIN sys_user_tsign sut ON sut.user_id_ = su.id_
         LEFT JOIN student_registration sr ON sr.user_id_ = su.id_
         WHERE su.phone_ = #{mobile} ORDER BY sr.id_ DESC
         LIMIT 1

+ 7 - 16
mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml

@@ -76,16 +76,10 @@
 		<if test="speed != null">
 			speed_ = #{speed},
 		</if>
-		<if test="xmlUrl != null">
-			xml_url_ = #{xmlUrl},
-		</if>
 		<if test="examSongId != null">
 			exam_song_id_ = #{examSongId},
 		</if>
-		<if test="mp3Url != null">
-			mp3_url_ = #{mp3Url},
-		</if>
-		update_time_ = NOW()
+			xml_url_ = #{xmlUrl},mp3_url_ = #{mp3Url}, update_time_ = NOW()
 	</set>WHERE id_ = #{id}
 	</update>
 	<update id="batchDel">
@@ -110,16 +104,10 @@
 				<if test="item.subjectId != null">
 					subject_id_ = #{item.subjectId},
 				</if>
-				<if test="item.xmlUrl != null">
-					xml_url_ = #{item.xmlUrl},
-				</if>
 				<if test="item.examSongId != null">
 					exam_song_id_ = #{item.examSongId},
 				</if>
-				<if test="item.mp3Url != null">
-					mp3_url_ = #{item.mp3Url},
-				</if>
-				update_time_ = NOW()
+				xml_url_ = #{item.xmlUrl},mp3_url_ = #{item.mp3Url}, update_time_ = NOW()
 			</set> WHERE id_ = #{item.id}
 		</foreach>
 	</update>
@@ -196,8 +184,11 @@
 			<if test="sysMusicScoreId != null">
 				AND sesa.exam_song_id_ = #{sysMusicScoreId}
 			</if>
-			<if test="categoriesId != null">
-				AND sesc.id_ = #{categoriesId}
+			<if test="categoriesIdList != null">
+				AND sesc.id_ IN
+				<foreach collection="categoriesIdList" separator="," item="item" open="(" close=")">
+					#{item}
+				</foreach>
 			</if>
 			<if test="parentId != null">
 				AND sesc.parent_id_ = #{parentId}

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

@@ -74,7 +74,7 @@
 	<select id="findByParentId" resultMap="SysMusicScoreCategories">
 		SELECT sm.* FROM sys_music_score_categories sm
 		<include refid="queryTree"/>
-		ORDER BY sm.id_ DESC
+		ORDER BY sm.id_
 	</select>
 	<sql id="queryTree">
 		<where>

+ 0 - 4
mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml

@@ -59,9 +59,7 @@
 		<if test="createUserId != null">
 			create_user_id_ = #{createUserId},
 		</if>
-		<if test="url != null and url != ''">
 			url_ = #{url},
-		</if>
 		<if test="subjectIds != null and subjectIds != ''">
 			subject_ids_ = #{subjectIds},
 		</if>
@@ -74,9 +72,7 @@
 		<if test="speed != null">
 			speed_ = #{speed},
 		</if>
-		<if test="updateTime != null">
 			update_time_ = NOW()
-		</if>
 	</set>
 		WHERE id_ = #{id}
 	</update>

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -191,4 +191,8 @@ public interface TaskRemoteService {
 	//乐团云教练订单
 	@GetMapping("task/checkCloudOrderStart")
 	void checkCloudOrderStart();
+
+	//历史异常数据记录
+	@GetMapping("task/indexErrDataRecordTask")
+	void indexErrDataRecord();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -237,4 +237,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void checkCloudOrderStart() {
 		logger.error("乐团云教练订单生效处理失败");
 	}
+
+	@Override
+	public void indexErrDataRecord() {
+		logger.error("历史异常数据记录失败");
+	}
 }

+ 0 - 14
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupRegisterController.java

@@ -2,11 +2,8 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
@@ -16,21 +13,14 @@ import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.date.DateUtil;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
-
-import java.io.IOException;
 import java.util.Date;
-import java.util.List;
 
 @RequestMapping("register")
 @Api(tags = "乐团注册")
@@ -46,10 +36,6 @@ public class MusicGroupRegisterController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
-    private MusicGroupPaymentCalenderDao musicGroupPaymentCalenderDao;
-    @Autowired
-    private CourseScheduleDao courseScheduleDao;
-    @Autowired
     private StudentRegistrationDao studentRegistrationDao;
 
 

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

@@ -34,7 +34,7 @@ public class SysMusicScoreAccompanimentController extends BaseController {
         if(queryInfo.getClientType() == null){
             queryInfo.setClientType(ClientTypeEnum.NETWORK_ROOM);
         }
-        return succeed(sysMusicScoreAccompanimentService.queryPage(queryInfo));
+        return succeed(sysMusicScoreAccompanimentService.queryScorePage(queryInfo));
     }
 
     @ApiOperation(value = "获取伴奏声部列表")

+ 23 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/IndexErrDataRecordTask.java

@@ -0,0 +1,23 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/5/28 0028
+ */
+@Service
+public class IndexErrDataRecordTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() throws TaskException {
+        taskRemoteService.indexErrDataRecord();
+    }
+}

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

@@ -77,6 +77,6 @@ public class SysMusicScoreAccompanimentController extends BaseController {
             queryInfo.setClientType(ClientTypeEnum.NETWORK_ROOM);
         }
         queryInfo.setCreateUserId(sysUser.getId());
-        return succeed(sysMusicScoreAccompanimentService.queryPage(queryInfo));
+        return succeed(sysMusicScoreAccompanimentService.queryScorePage(queryInfo));
     }
 }

+ 1 - 1
mec-util/src/main/java/com/ym/mec/util/http/HttpUtil.java

@@ -47,7 +47,7 @@ public class HttpUtil {
 			JSONArray jsonArray = new JSONArray();
 			JSONObject jsonObject = new JSONObject();
 			jsonObject.put("LongUrl",url);
-			jsonObject.put("TermOfValidity","long-term");
+			jsonObject.put("TermOfValidity","1-year");
 			jsonArray.add(jsonObject);
 			Map<String,String> HeadMap = new HashMap<>();
 			HeadMap.put("Dwz-Token","0a9d3b34eae990d4355653d2ba6c8974");

+ 56 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -140,6 +140,8 @@ public class ExportController extends BaseController {
     private SysUserCoursesAccountDetailDao sysUserCoursesAccountDetailDao;
     @Autowired
     private ChildrenDayReserveService childrenDayReserveService;
+    @Autowired
+    private IndexErrDataRecordService indexErrDataRecordService;
 
     @ApiOperation(value = "21年暑期考级活动统计页面详情导出")
     @PostMapping("export/statisticsDetail")
@@ -2942,4 +2944,58 @@ public class ExportController extends BaseController {
             }
         }
     }
+
+    @ApiOperation(value = "首页历史异常统计导出")
+    @RequestMapping("export/exportIndexHistoryErrData")
+    @PreAuthorize("@pcs.hasPermissions('export/exportIndexHistoryErrData')")
+    public void exportIndexHistoryErrData(IndexErrRecordQueryInfo queryInfo, HttpServletResponse response) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeService.get(sysUser.getId());
+        if (StringUtils.isBlank(queryInfo.getOrganIds())) {
+            queryInfo.setOrganIds(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            throw new BizException("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))){
+                throw new BizException("非法请求");
+            }
+        }
+        List<IndexErrorDataExportDto> result = indexErrDataRecordService.queryRecord(queryInfo).getRows();
+        if (CollectionUtils.isEmpty(result)) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        OutputStream outputStream = response.getOutputStream();
+
+        try {
+            String[] header = {"日期", "分部", "乐团主管", "乐团巡查事项异常", "剩余乐团巡查事项异常", "乐团巡查任务未提交", "剩余乐团巡查任务未提交",
+                    "回访任务未完成", "剩余回访任务未完成", "课程考勤异常", "剩余课程考勤异常", "课程异常", "剩余课程异常"};
+            String[] body = {"generateTime", "organName", "dealUserName", "musicPatrolItem", "musicPatrolItemSurplus", "inspectionItemPlan", "inspectionItemPlanSurplus",
+                    "studentVisit", "studentVisitSurplus", "teacherExceptionAttendance", "teacherExceptionAttendanceSurplus", "teacherNotAClass", "teacherNotAClassSurplus"};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, result);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=teacherDefaultSalary-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }

+ 0 - 5
mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

@@ -9,13 +9,9 @@ import com.ym.mec.biz.service.IndexBaseMonthDataService;
 import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-
-import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -23,7 +19,6 @@ import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.common.controller.BaseController;

+ 190 - 0
mec-web/src/main/java/com/ym/mec/web/controller/IndexErrDataRecordController.java

@@ -0,0 +1,190 @@
+package com.ym.mec.web.controller;
+
+import com.netflix.discovery.converters.Auto;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserRole;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dto.CourseScheduleEndDto;
+import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.InspectionItem;
+import com.ym.mec.biz.dal.entity.InspectionItemPlan;
+import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
+import com.ym.mec.biz.dal.page.IndexErrRecordQueryInfo;
+import com.ym.mec.biz.dal.page.InspectionItemPlanQueryInfo;
+import com.ym.mec.biz.dal.page.InspectionQueryInfo;
+import com.ym.mec.biz.service.IndexErrDataRecordService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.date.DateUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/5/28 0028
+ */
+@Api(tags = "异常数据")
+@RequestMapping("indexErrDataRecord")
+@RestController
+public class IndexErrDataRecordController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
+    @Autowired
+    private IndexErrDataRecordService indexErrDataRecordService;
+
+    @ApiOperation(value = "历史异常记录")
+    @GetMapping("/queryRecord")
+    public HttpResponseResult<PageInfo<IndexErrorDataExportDto>> queryRecord(IndexErrRecordQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganIds())) {
+            queryInfo.setOrganIds(employee.getOrganIdList());
+        } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+            return failed("用户所在分部异常");
+        } else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if (!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))) {
+                return failed("非法请求");
+            }
+        }
+        return succeed(indexErrDataRecordService.queryRecord(queryInfo));
+    }
+
+    @ApiOperation(value = "异常记录汇总")
+    @GetMapping("/errDataSummarizing")
+    public HttpResponseResult errDataSummarizing(IndexErrRecordQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganIds())) {
+            queryInfo.setOrganIds(employee.getOrganIdList());
+        } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+            return failed("用户所在分部异常");
+        } else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if (!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))) {
+                return failed("非法请求");
+            }
+        }
+        return succeed(indexErrDataRecordService.errDataSummarizing(queryInfo));
+    }
+
+    @ApiOperation(value = "获取所有异常相关教务人员")
+    @GetMapping("/getAllEducationUsers")
+    public HttpResponseResult getAllEducationUsers(String organIds){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(organIds)) {
+            organIds = employee.getOrganIdList();
+        } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+            return failed("用户所在分部异常");
+        } else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if (!list.containsAll(Arrays.asList(organIds.split(",")))) {
+                return failed("非法请求");
+            }
+        }
+        return succeed(indexErrDataRecordService.getAllEducationUsers(organIds));
+    }
+
+    @ApiOperation(value = "乐团巡查事项异常/乐团巡查任务未提交")
+    @GetMapping("/queryErrInspectionData")
+    public HttpResponseResult<PageInfo<InspectionItemPlan>> queryErrInspectionData(InspectionItemPlanQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+            return failed("用户所在分部异常");
+        } else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+                return failed("非法请求");
+            }
+        }
+        if (queryInfo.getStartTime() != null) {
+            queryInfo.setStartTime(DateUtil.trunc(queryInfo.getStartTime()));
+        }
+        if (queryInfo.getEndTime() != null) {
+            queryInfo.setEndTime(DateUtil.getLastTimeWithDay(queryInfo.getEndTime()));
+        }
+        String startTime = DateUtil.format(DateUtil.getFirstDayOfMonth(DateUtil.addMonths(new Date(), -2)), DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        queryInfo.setSearchStartTime(startTime);
+
+        return succeed(indexErrDataRecordService.queryErrInspectionData(queryInfo));
+    }
+
+    @ApiOperation(value = "回访任务未完成")
+    @GetMapping("/queryErrStudentVisit")
+    public HttpResponseResult<PageInfo<InspectionItem>> queryErrStudentVisit(InspectionQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+            return failed("用户所在分部异常");
+        } else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+                return failed("非法请求");
+            }
+        }
+        List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+        if (!userRole.contains(SysUserRole.SECTION_MANAGER) && !sysUser.getIsSuperAdmin()) {
+            queryInfo.setUserId(sysUser.getId());
+        }
+        String startTime = DateUtil.format(DateUtil.getFirstDayOfMonth(DateUtil.addMonths(new Date(), -2)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        queryInfo.setSearchStartTime(startTime);
+        return succeed(indexErrDataRecordService.queryErrStudentVisit(queryInfo));
+    }
+
+    @ApiOperation(value = "课程考勤异常/课程异常")
+    @GetMapping("/queryHistoryErrCourseData")
+    public HttpResponseResult<PageInfo<CourseScheduleEndDto>> queryHistoryErrCourseData(EndCourseScheduleQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (org.apache.commons.lang3.StringUtils.isEmpty(queryInfo.getOrganIdList())) {
+            queryInfo.setOrganIdList(employee.getOrganIdList());
+        }else if(org.apache.commons.lang3.StringUtils.isEmpty(employee.getOrganIdList())){
+            return failed("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganIdList().split(",")))){
+                return failed("非法请求");
+            }
+        }
+        return succeed(indexErrDataRecordService.queryHistoryErrCourseData(queryInfo));
+    }
+}

+ 10 - 16
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java

@@ -2,22 +2,17 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dto.MusicArrearageStudentDto;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.page.ArrearageStudentsQueryInfo;
 import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-
 import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Set;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -26,7 +21,6 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAddStudentDto;
 import com.ym.mec.biz.dal.page.MusicCalenderDetailQueryInfo;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
@@ -122,17 +116,17 @@ public class MusicGroupPaymentCalenderDetailController extends BaseController {
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-            Employee employee = employeeService.get(sysUser.getId());
-            if (StringUtils.isBlank(queryInfo.getOrganIds())) {
-                queryInfo.setOrganIds(employee.getOrganIdList());
-            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
-                return failed("用户所在分部异常");
-            }else {
-                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-                if(!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))){
-                    return failed("非法请求");
-                }
+        Employee employee = employeeService.get(sysUser.getId());
+        if (StringUtils.isBlank(queryInfo.getOrganIds())) {
+            queryInfo.setOrganIds(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            return failed("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))){
+                return failed("非法请求");
             }
+        }
         return succeed(musicGroupPaymentCalenderDetailService.queryArrearageStudents(queryInfo));
     }
 

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ReplacementInstrumentActivityController.java

@@ -194,8 +194,8 @@ public class ReplacementInstrumentActivityController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         HSSFWorkbook workbook = null;
         try {
-            String[] header = {"活动编号","分部", "合作单位编号", "合作单位","问卷标题", "缴费状态", "学员编号", "学员姓名", "联系电话", "声部", "品牌", "型号", "是否置换乐器"};
-            String[] body = {"replacementInstrumentCooperationId","organName", "cooperationOrganId", "cooperationOrganName","title","payStatus==NULL || payStatus==0?'未缴费':payStatus==1?'缴费中':'已缴费'", "userId", "userName", "mobileNo", "subjectName", "brand", "specification","hasInstrumentsId"};
+            String[] header = {"活动编号","分部", "合作单位编号", "合作单位","问卷标题", "缴费状态", "学员编号", "学员姓名", "联系电话", "声部", "品牌", "型号", "是否置换乐器","现金支付","余额支付"};
+            String[] body = {"replacementInstrumentCooperationId","organName", "cooperationOrganId", "cooperationOrganName","title","payStatus==NULL || payStatus==0?'未缴费':payStatus==1?'缴费中':'已缴费'", "userId", "userName", "mobileNo", "subjectName", "brand", "specification","hasInstrumentsId","actualAmount","balance"};
             workbook = POIUtil.exportExcel(header, body, pageList.getRows());
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=replacement-" + DateUtil.getDate(new Date()) + ".xls");

+ 11 - 11
mec-web/src/main/java/com/ym/mec/web/controller/SchoolController.java

@@ -79,17 +79,17 @@ public class SchoolController extends BaseController {
 		if (sysUser == null) {
 			return failed("用户信息获取失败");
 		}
-			Employee employee = employeeDao.get(sysUser.getId());
-			if (StringUtils.isEmpty(queryInfo.getOrganId())) {
-				queryInfo.setOrganId(employee.getOrganIdList());
-			}else if(StringUtils.isEmpty(employee.getOrganIdList())){
-				return failed("用户所在分部异常");
-			}else {
-				List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-				if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
-					return failed("非法请求");
-				}
-			}
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            return failed("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                return failed("非法请求");
+            }
+        }
         return succeed(schoolService.queryPageDetail(queryInfo));
     }
 

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -101,6 +101,9 @@ public class TaskController extends BaseController {
 	@Autowired
 	private CloudTeacherOrderService cloudTeacherOrderService;
 
+	@Autowired
+	private IndexErrDataRecordService indexErrDataRecordService;
+
 	@GetMapping(value = "/autoAffirmReceiveTask")
 	// 自动确认收货
 	public void affirmReceive(){
@@ -393,4 +396,10 @@ public class TaskController extends BaseController {
 	public void checkCloudOrderStart(){
 		cloudTeacherOrderService.checkCloudOrderStart();
 	}
+
+	//历史异常数据记录
+	@GetMapping("/indexErrDataRecordTask")
+	public void indexErrDataRecordTask(String date){
+		indexErrDataRecordService.indexErrDataRecordTask(date);
+	}
 }