Pārlūkot izejas kodu

Merge branch 'zx_saas_0810' of http://git.dayaedu.com/yonge/mec into saas

zouxuan 3 gadi atpakaļ
vecāks
revīzija
1ac701c00b
31 mainītis faili ar 753 papildinājumiem un 373 dzēšanām
  1. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  3. 11 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentOperatingVisitDao.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  5. 141 13
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleStudentDto.java
  6. 67 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportOperatingVisitDto.java
  7. 108 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupQuitDto.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java
  9. 43 7
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentVisit.java
  11. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java
  12. 72 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseDetailQueryInfo.java
  13. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  14. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  15. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  16. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  17. 81 159
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  18. 16 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  19. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentVisitServiceImpl.java
  20. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  21. 40 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  22. 10 8
      mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml
  23. 3 5
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  24. 36 4
      mec-biz/src/main/resources/config/mybatis/StudentOperatingVisitMapper.xml
  25. 4 1
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  26. 22 34
      mec-student/src/main/java/com/ym/mec/student/controller/CourseController.java
  27. 16 40
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  28. 9 26
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/EduRepairController.java
  29. 8 30
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java
  30. 5 2
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java
  31. 9 5
      mec-web/src/main/resources/exportColumnMapper.ini

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -5,9 +5,11 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.page.CourseDetailQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
@@ -1828,7 +1830,6 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     List<Map<Integer, Long>> countPreSubMinutesByClassGroupId(@Param("classGroupSet") List<Integer> classGroupSet, @Param("courseDetailId") Integer courseDetailId);
 
-
     /**
      * 获取班级预排课时长
      * @param classGroupSet
@@ -1935,4 +1936,13 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @date 2022/3/1 17:06
      */
     List<StudentStandardDto> queryStudyStandardWaitVisit(Map<String, Object> params);
+
+    /**
+    * @description: 根据课程组编号,获取课程列表
+     * @param courseDetailQueryInfo
+    * @return java.util.List<com.ym.mec.biz.dal.dto.CourseScheduleStudentDto>
+    * @author zx
+    * @date 2022/8/15 17:01
+    */
+    List<CourseScheduleStudentDto> queryDetailList(@Param("queryInfo") CourseDetailQueryInfo courseDetailQueryInfo);
 }

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

@@ -32,7 +32,7 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     int countStudents(Map<String, Object> params);
 
-    List<Student> queryByOperatingTempTag(Integer operatingTag);
+    List<Integer> queryByOperatingTag(@Param("operatingTag") Integer operatingTag);
 
     int batchUpdate(@Param("studentList") List<Student> studentList);
 

+ 11 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentOperatingVisitDao.java

@@ -4,9 +4,9 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.StudentOperatingVisit;
 import org.apache.ibatis.annotations.Param;
 
-public interface StudentOperatingVisitDao extends BaseDAO<Long, StudentOperatingVisit> {
-
+import java.util.List;
 
+public interface StudentOperatingVisitDao extends BaseDAO<Long, StudentOperatingVisit> {
     /**
     * @description: 更新本月回访标记
      * @param studentId
@@ -14,5 +14,13 @@ public interface StudentOperatingVisitDao extends BaseDAO<Long, StudentOperating
     * @author zx
     * @date 2022/8/12 16:26
     */
-    void updateVisit(@Param("studentId") Integer studentId);
+    void updateVisit(@Param("studentId") Integer studentId, @Param("month") String month);
+
+    void deleteByUserId(@Param("month") String month);
+
+    void batchAdd(@Param("userIds") List<Integer> userIds, @Param("month") String month);
+
+    List<Integer> queryUserIds(@Param("month") String month);
+
+    List<StudentOperatingVisit> sumVisit(@Param("month") String month);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -488,7 +488,7 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @param organId
      * @return
      */
-    List<TeacherBasicDto> findByFlowOrganRangeTeachers(@Param("organId") String organId);
+    List<TeacherBasicDto> findByFlowOrganRangeTeachers(@Param("organId") String organId,@Param("demissionFlag") Boolean demissionFlag);
 
     /**
      * 根据教师编号列表获取名称map

+ 141 - 13
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleStudentDto.java

@@ -1,25 +1,153 @@
 package com.ym.mec.biz.dal.dto;
 
-import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.util.List;
+public class CourseScheduleStudentDto{
 
-/**
- * @Author Joburgess
- * @Date 2019/9/17
- */
-public class CourseScheduleStudentDto extends CourseSchedule {
+    @ApiModelProperty(value = "课程编号")
+    private Long courseId;
 
-private List<Integer> studentIds;
+    @ApiModelProperty(value = "上课日期")
+    private String classDate;
 
-    public List<Integer> getStudentIds() {
-        return studentIds;
+    @ApiModelProperty(value = "上课开始时间")
+    private String startClassTime;
+
+    @ApiModelProperty(value = "上课结束时间")
+    private String endClassTime;
+
+    @ApiModelProperty(value = "考勤状态")
+    private StudentAttendanceStatusEnum attendanceStatus;
+
+    @ApiModelProperty(value = "课程状态")
+    private CourseStatusEnum courseStatus;
+
+    @ApiModelProperty(value = "课程组类型")
+    private GroupType groupType;
+
+    @ApiModelProperty(value = "上课模式")
+    private TeachModeEnum teachMode;
+
+    @ApiModelProperty(value = "课程名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "老师头像")
+    private String teacherAvatar;
+
+    @ApiModelProperty(value = "老师姓名")
+    private String teacherName;
+
+    @ApiModelProperty(value = "教学点")
+    private String schoolName;
+
+    @ApiModelProperty(value = "是否达标")
+    private Integer qualifiedFlag;
+
+    public Integer getQualifiedFlag() {
+        return qualifiedFlag;
+    }
+
+    public void setQualifiedFlag(Integer qualifiedFlag) {
+        this.qualifiedFlag = qualifiedFlag;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(String classDate) {
+        this.classDate = classDate;
+    }
+
+    public String getStartClassTime() {
+        return startClassTime;
+    }
+
+    public void setStartClassTime(String startClassTime) {
+        this.startClassTime = startClassTime;
+    }
+
+    public String getEndClassTime() {
+        return endClassTime;
+    }
+
+    public void setEndClassTime(String endClassTime) {
+        this.endClassTime = endClassTime;
+    }
+
+    public StudentAttendanceStatusEnum getAttendanceStatus() {
+        return attendanceStatus;
+    }
+
+    public void setAttendanceStatus(StudentAttendanceStatusEnum attendanceStatus) {
+        this.attendanceStatus = attendanceStatus;
+    }
+
+    public CourseStatusEnum getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(CourseStatusEnum courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public GroupType getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(GroupType groupType) {
+        this.groupType = groupType;
+    }
+
+    public TeachModeEnum getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(TeachModeEnum teachMode) {
+        this.teachMode = teachMode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getTeacherAvatar() {
+        return teacherAvatar;
+    }
+
+    public void setTeacherAvatar(String teacherAvatar) {
+        this.teacherAvatar = teacherAvatar;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getSchoolName() {
+        return schoolName;
     }
 
-    public void setStudentIds(List<Integer> studentIds) {
-        this.studentIds = studentIds;
+    public void setSchoolName(String schoolName) {
+        this.schoolName = schoolName;
     }
 }

+ 67 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportOperatingVisitDto.java

@@ -0,0 +1,67 @@
+package com.ym.mec.biz.dal.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Objects;
+
+public class ExportOperatingVisitDto {
+
+    @ApiModelProperty(value = "分部", required = true)
+    private String organName;
+
+    @ApiModelProperty(value = "预计回访人数", required = true)
+    private Integer expectVisitNum;
+
+    @ApiModelProperty(value = "回访人数", required = true)
+    private Integer visitNum;
+
+    @ApiModelProperty(value = "覆盖率", required = true)
+    private String coverRate;
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public Integer getExpectVisitNum() {
+        return expectVisitNum;
+    }
+
+    public void setExpectVisitNum(Integer expectVisitNum) {
+        this.expectVisitNum = expectVisitNum;
+        calcCoverRate(visitNum);
+    }
+
+    public Integer getVisitNum() {
+        return visitNum;
+    }
+
+    public void setVisitNum(Integer visitNum) {
+        this.visitNum = visitNum;
+        calcCoverRate(expectVisitNum);
+    }
+
+    public String getCoverRate() {
+        return coverRate;
+    }
+
+    public void setCoverRate(String coverRate) {
+        this.coverRate = coverRate;
+    }
+
+    private void calcCoverRate(Integer param){
+        if(Objects.nonNull(param)){
+            if(visitNum.equals(0) || expectVisitNum.equals(0)){
+                this.coverRate = "0%";
+            }else {
+                this.coverRate = new BigDecimal(visitNum).divide(new BigDecimal(expectVisitNum),BigDecimal.ROUND_HALF_UP,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).setScale(BigDecimal.ROUND_CEILING) + "%";
+            }
+        }
+    }
+}

+ 108 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupQuitDto.java

@@ -0,0 +1,108 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class MusicGroupQuitDto {
+
+    @ApiModelProperty(value = "乐团编号",required = false)
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "用户编号",required = false)
+    private Integer userId;
+
+    @ApiModelProperty(value = "描述",required = false)
+    private String reason;
+
+    @ApiModelProperty(value = "是否退还课程费用",required = false)
+    private boolean isRefundCourseFee;
+
+    @ApiModelProperty(value = "是否退还乐器费用(租金)",required = false)
+    private boolean isRefundInstrumentFee;
+
+    @ApiModelProperty(value = "是否退还教辅费用",required = false)
+    private boolean isRefundTeachingAssistantsFee;
+
+    @ApiModelProperty(value = "退会员费用",required = false)
+    private boolean isRefundMemberFee;
+
+    @ApiModelProperty(value = "退乐保费用",required = false)
+    private BigDecimal maintenanceFee;
+
+    @ApiModelProperty(value = "原因",required = false)
+    private MusicGroupQuit.ReasonEnum reasonEnum;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public boolean getIsRefundCourseFee() {
+        return isRefundCourseFee;
+    }
+
+    public void setIsRefundCourseFee(boolean refundCourseFee) {
+        isRefundCourseFee = refundCourseFee;
+    }
+
+    public boolean getIsRefundInstrumentFee() {
+        return isRefundInstrumentFee;
+    }
+
+    public void setIsRefundInstrumentFee(boolean refundInstrumentFee) {
+        isRefundInstrumentFee = refundInstrumentFee;
+    }
+
+    public boolean getIsRefundTeachingAssistantsFee() {
+        return isRefundTeachingAssistantsFee;
+    }
+
+    public void setIsRefundTeachingAssistantsFee(boolean refundTeachingAssistantsFee) {
+        isRefundTeachingAssistantsFee = refundTeachingAssistantsFee;
+    }
+
+    public boolean getIsRefundMemberFee() {
+        return isRefundMemberFee;
+    }
+
+    public void setIsRefundMemberFee(boolean refundMemberFee) {
+        isRefundMemberFee = refundMemberFee;
+    }
+
+    public BigDecimal getMaintenanceFee() {
+        return maintenanceFee;
+    }
+
+    public void setMaintenanceFee(BigDecimal maintenanceFee) {
+        this.maintenanceFee = maintenanceFee;
+    }
+
+    public MusicGroupQuit.ReasonEnum getReasonEnum() {
+        return reasonEnum;
+    }
+
+    public void setReasonEnum(MusicGroupQuit.ReasonEnum reasonEnum) {
+        this.reasonEnum = reasonEnum;
+    }
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentPaymentOrderExportDto.java

@@ -13,6 +13,9 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     @ApiModelProperty(value = "分部",required = true)
     private String organName;
 
+    @ApiModelProperty(value = "业务分部",required = true)
+    private String userOrganName;
+
     @ApiModelProperty(value = "零星费用",required = true)
     private BigDecimal sporadicAmount;
 
@@ -225,6 +228,14 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     @ApiModelProperty(value = "教学点",required = true)
     private String schoolName;
 
+    public String getUserOrganName() {
+        return userOrganName;
+    }
+
+    public void setUserOrganName(String userOrganName) {
+        this.userOrganName = userOrganName;
+    }
+
     public BigDecimal getCourseSchoolBuyAmount() {
         return courseSchoolBuyAmount;
     }

+ 43 - 7
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java

@@ -1,15 +1,14 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.common.entity.BaseEntity;
+import com.ym.mec.common.enums.BaseEnum;
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
 import java.util.Date;
 
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.common.entity.BaseEntity;
-
 /**
  * 对应数据库表(music_group_quit):
  */
@@ -35,7 +34,9 @@ public class MusicGroupQuit extends BaseEntity {
 	
 	private String userComment;
 
-	/** 原因 */
+	private ReasonEnum reasonEnum;
+
+	/** 退团原因 */
 	private String reason;
 
 	private ApprovalStatus status;
@@ -44,7 +45,7 @@ public class MusicGroupQuit extends BaseEntity {
 
 	private String applyUserName;
 	
-	private Boolean isVisit;
+	private Boolean isVisit = false;
 	
 	private Date visitTime;
 	
@@ -66,6 +67,41 @@ public class MusicGroupQuit extends BaseEntity {
 	@ApiModelProperty(value = "云教练金额",required = false)
 	private BigDecimal cloudTeacherAmount = BigDecimal.ZERO;
 
+	//毕业、不感兴趣、时间冲突、身体不适、其他(必选)
+	public enum ReasonEnum implements BaseEnum<String, MusicGroupQuit.ReasonEnum> {
+		GRADUATE("GRADUATE", "毕业"),
+		NOT_INTERESTED("NOT_INTERESTED", "不感兴趣"),
+		TIME_CONFLICT("TIME_CONFLICT", "时间冲突"),
+		FEELING_UNWELL("FEELING_UNWELL", "身体不适"),
+		OTHER("OTHER", "其他");
+
+		private String code;
+
+		private String msg;
+
+		ReasonEnum(String code, String msg) {
+			this.code = code;
+			this.msg = msg;
+		}
+
+		@Override
+		public String getCode() {
+			return code;
+		}
+
+		public String getMsg() {
+			return msg;
+		}
+	}
+
+	public ReasonEnum getReasonEnum() {
+		return reasonEnum;
+	}
+
+	public void setReasonEnum(ReasonEnum reasonEnum) {
+		this.reasonEnum = reasonEnum;
+	}
+
 	public String getApplyUserName() {
 		return applyUserName;
 	}

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

@@ -45,7 +45,7 @@ public class StudentVisit extends BaseEntity {
 
     public enum FeedbackTypeEnum implements BaseEnum<String,FeedbackTypeEnum> {
         THINKING("THINKING", "考虑中"), PENDING_PAYMENT("PENDING_PAYMENT", "确认缴费待缴费"),
-        LOST("LOST", "流失"), PAUSE("PAUSE", "暂停"),
+        LOST("LOST", "流失"), PAUSE("PAUSE", "暂停"),NORMAL("NORMAL", "在读"),
         OTHER("OTHER", "其他");
 
         private String code;

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java

@@ -77,6 +77,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     EXPORT_STUDENT_SUBCOURSE("EXPORT_STUDENT_SUBCOURSE", "活动资格导出"),
     EXPORT_STUDENT_SERVE_INFO("EXPORT_STUDENT_SERVE_INFO", "乐团学生服务指标导出"),
     EXPORT_TRAINING_STATISTICS("EXPORT_TRAINING_STATISTICS", "训练统计导出"),
+    EXPORT_OPERATING_VISIT_STATISTICS("EXPORT_OPERATING_VISIT_STATISTICS", "回访统计导出"),
     ;
 
     private String code;

+ 72 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseDetailQueryInfo.java

@@ -0,0 +1,72 @@
+package com.ym.mec.biz.dal.page;
+
+import io.swagger.annotations.ApiModelProperty;
+
+public class CourseDetailQueryInfo{
+
+    @ApiModelProperty(value = "课程状态")
+    private String courseStatus;
+
+    @ApiModelProperty(value = "上课模式")
+    private String teachMode;
+
+    @ApiModelProperty(value = "考勤状态")
+    private String attendanceStatus;
+
+    @ApiModelProperty(value = "学员编号")
+    private Integer userId;
+
+    @ApiModelProperty(value = "课程组类型")
+    private String groupType;
+
+    @ApiModelProperty(value = "课程组编号")
+    private String groupId;
+
+    public String getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(String groupType) {
+        this.groupType = groupType;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(String courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public String getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(String teachMode) {
+        this.teachMode = teachMode;
+    }
+
+    public String getAttendanceStatus() {
+        return attendanceStatus;
+    }
+
+    public void setAttendanceStatus(String attendanceStatus) {
+        this.attendanceStatus = attendanceStatus;
+    }
+}

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -206,8 +206,7 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
      * @param maintenanceFee
      * @return
      */
-    boolean directQuitMusicGroup(String musicGroupId, Integer userId, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-                                 boolean isRefundTeachingAssistantsFee, boolean isRefundMemberFee, BigDecimal maintenanceFee);
+    boolean directQuitMusicGroup(MusicGroupQuitDto musicGroupQuitDto);
 
     /**
      * 处理oa审批退团逻辑

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

@@ -101,7 +101,7 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      * @param organId
      * @return
      */
-    List<TeacherBasicDto> findTeachers(String organId);
+    List<TeacherBasicDto> findTeachers(String organId,Boolean demissionFlag);
 
     /**
      * @param subjectId: 科目编号

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

@@ -5305,11 +5305,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		List<CourseScheduleReview> courseReviews = courseScheduleReviewDao.findByCourseSchedules(courseScheduleIds);
 		Map<Integer, List<CourseScheduleReview>> reviews = courseReviews.stream().collect(Collectors.groupingBy(CourseScheduleReview::getCourseScheduleId));
 		List<CourseSchedule> courseScheduleList = courseScheduleDao.findByCourseScheduleIds(courseScheduleIds);
-		Map<Long, List<CourseSchedule>> courseMap = courseScheduleList.stream().collect(Collectors.groupingBy(e -> e.getId()));
+		Map<Long, CourseSchedule> courseMap = courseScheduleList.stream().collect(Collectors.groupingBy(e -> e.getId(),Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
 		MusicGroupTrainPlanSaveDto schoolTerm = null;
 		List<MusicGroupTrainPlan> planList = null;
 		for (CourseScheduleRateDto scheduleRateDto : courseScheduleRateDtos) {
-			CourseSchedule course = courseMap.get(scheduleRateDto.getCourseScheduleId()).get(0);
+			CourseSchedule course = courseMap.get(scheduleRateDto.getCourseScheduleId());
 			if(schoolTerm == null){
 				schoolTerm = musicGroupTrainPlanService.getSchoolTerm(course);
 				planList = musicGroupTrainPlanService.queryPlan(schoolTerm);
@@ -5322,7 +5322,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				schoolTerm = schoolTerm1;
 			}
 			int courseNumNo = courseScheduleDao.getCourseNumNo(schoolTerm);
-			if(planList.size() >= courseNumNo){
+			if(planList.size() > courseNumNo){
 				scheduleRateDto.setCoursePlan(planList.get(courseNumNo - 1).getPlan());
 			}
 			//获取课程规划

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -181,6 +181,8 @@ public class ExportServiceImpl implements ExportService {
     private ActivityUserMapperService activityUserMapperService;
     @Autowired
     private SysMusicCompareRecordDao sysMusicCompareRecordDao;
+    @Autowired
+    private StudentOperatingVisitDao studentOperatingVisitDao;
 
     private static final ExecutorService exportExecutorService = Executors.newFixedThreadPool(10);
     @Autowired
@@ -345,6 +347,7 @@ public class ExportServiceImpl implements ExportService {
         exportFuncMap.put(ExportEnum.EXERCISES_SITUATION, info -> studentExtracurricularExercisesSituationService.queryTeacherPerformanceIndicator(getQueryInfo(info, TeacherServeQueryInfo.class, false)));
         exportFuncMap.put(ExportEnum.STUDENT_INSTRUMENT, info -> exportStudentInstrument(info));
         exportFuncMap.put(ExportEnum.EXPORT_BILL, info -> exportBill(info));
+        exportFuncMap.put(ExportEnum.EXPORT_OPERATING_VISIT_STATISTICS, info -> exportOperatorVisit(info));
 
 
         //导出到报表中心
@@ -367,6 +370,16 @@ public class ExportServiceImpl implements ExportService {
     }
 
 
+    //导出回访统计
+    private List<StudentOperatingVisit> exportOperatorVisit(Map<String, Object> info){
+        String month = getParam(info, "month", String.class);
+        if(StringUtils.isEmpty(month)){
+            throw new BizException("请选择导出时间");
+        }
+        return studentOperatingVisitDao.sumVisit(month);
+    }
+
+
     //导出对账单
     @Override
     public List exportBill(Map<String, Object> info) {
@@ -1478,6 +1491,7 @@ public class ExportServiceImpl implements ExportService {
         }
     }
 
+
     //导出训练统计
     private HttpResponseResult exportCompareRecord(Map<String, Object> info){
         ExportCompareQueryInfo queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info), ExportCompareQueryInfo.class);
@@ -2370,6 +2384,8 @@ public class ExportServiceImpl implements ExportService {
         Map<Integer, String> userLastMusicNameMap = new HashMap<>();
         Map<Integer, String> studentNameMap = new HashMap<>();
         Map<Integer, String> userFirstPracticeMap = new HashMap<>();
+        List<Integer> organIds = studentPaymentOrderExportDtos.stream().map(e -> e.getOrganId()).distinct().collect(Collectors.toList());
+        Map<Integer, String> userOrganNameMap = organizationService.getMap("organization","id_","name_",organIds,tenantId,Integer.class,String.class);
         if (studentPaymentOrderExportDtos.stream().anyMatch(e -> e.getUserId() != null)) {
             List<Integer> studentIds = studentPaymentOrderExportDtos.stream().filter(e -> e.getUserId() != null).map(e -> e.getUserId()).distinct().collect(Collectors.toList());
             //获取学员第一个网管课课程组编号
@@ -2397,6 +2413,7 @@ public class ExportServiceImpl implements ExportService {
         }
         for (StudentPaymentOrderExportDto basicOrder : studentPaymentOrderExportDtos) {
             basicOrder.getUser().setUsername(studentNameMap.get(basicOrder.getUserId()));
+            basicOrder.setUserOrganName(userOrganNameMap.get(basicOrder.getOrganId()));
             //填充业务数据
             //计算手续费
             this.calcPlatformFee(basicOrder, serviceChargeMap, orderCountMap, tenantConfig, feeFlagMap);

+ 81 - 159
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -27,6 +27,7 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dto.*;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -82,20 +83,6 @@ import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountLogDao;
 import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dto.BasicUserDto;
-import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
-import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
-import com.ym.mec.biz.dal.dto.HighClassGroupDto;
-import com.ym.mec.biz.dal.dto.MusicCardDto;
-import com.ym.mec.biz.dal.dto.MusicGroupApplyGoodsDto;
-import com.ym.mec.biz.dal.dto.MusicGroupBasicDto;
-import com.ym.mec.biz.dal.dto.RegisterPayDto;
-import com.ym.mec.biz.dal.dto.SporadicPayDto;
-import com.ym.mec.biz.dal.dto.StudentApplyInstrumentDto;
-import com.ym.mec.biz.dal.dto.StudentImportDto;
-import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
-import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
-import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
 import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.ChargeType;
 import com.ym.mec.biz.dal.entity.ClassGroup;
@@ -363,19 +350,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(rollbackFor = Exception.class)
 	public boolean importStudentToMusicGroup(String musicGroupId, Map<String, List<Map<String, Object>>> excelData) {
-    	
+
     	MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
-    	
+
     	if(musicGroup == null){
     		throw new BizException("乐团[{}]信息查询失败", musicGroupId);
     	}
-    	
+
     	if(musicGroup.getStatus() != MusicGroupStatusEnum.PAY){
     		throw new BizException("只有[缴费中]状态的乐团才能导入数据");
     	}
-    	
+
     	Integer tenantId = musicGroup.getTenantId();
-    	
+
     	List<StudentImportDto> studentBasicList = new ArrayList<StudentImportDto>();
     	List<Map<String, Object>> sheet = null;
     	StudentImportDto dto = null;
@@ -390,12 +377,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         		if(!CommonValidator.isUserName(dto.getName())){
         			throw new BizException("学生姓名[{}]填写错误", dto.getName());
         		}
-        		
+
         		if(row.get("性别") == null || StringUtils.isBlank(row.get("性别").toString())){
         			throw new BizException("性别不能为空");
         		}
     			dto.setSex(row.get("性别").toString());
-    			
+
         		if(row.get("手机号码") == null || StringUtils.isBlank(row.get("手机号码").toString())){
         			throw new BizException("手机号码不能为空");
         		}
@@ -403,51 +390,51 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         		if(!CommonValidator.isMobileNo(dto.getMobileNo())){
         			throw new BizException("手机号码[{}]填写错误", dto.getMobileNo());
         		}
-        		
+
         		if(row.get("学习声部") == null || StringUtils.isBlank(row.get("学习声部").toString())){
         			throw new BizException("学习声部不能为空");
         		}
     			dto.setSubjectName(row.get("学习声部").toString());
-    			
+
         		if(row.get("所在年级") == null || StringUtils.isBlank(row.get("所在年级").toString())){
         			throw new BizException("所在年级不能为空");
         		}
     			dto.setGradeName(row.get("所在年级").toString());
-    			
+
     			studentBasicList.add(dto);
     		}
     	}
-    	
+
     	Date nowDate = new Date();
-    	
+
     	//查询导入的声部是否正确
     	List<String> subjectNameList = studentBasicList.stream().distinct().map(t->t.getSubjectName()).collect(Collectors.toList());
-    	
+
     	List<MusicGroupSubjectPlan> musicGroupSubjectPlanList = musicGroupSubjectPlanDao.getMusicSubjectClassPlan(musicGroupId);
-    	
+
     	Map<String,Integer> subjectMap = musicGroupSubjectPlanList.stream().collect(Collectors.toMap(MusicGroupSubjectPlan :: getSubName, MusicGroupSubjectPlan :: getSubjectId));
-    	
+
     	List<String> allSubjectNameList = musicGroupSubjectPlanList.stream().map(t -> t.getSubName()).collect(Collectors.toList());
-    	
+
     	for(String subName : subjectNameList){
     		if(!allSubjectNameList.contains(subName)){
     			throw new BizException("当前乐团不支持[{}]声部", subName);
     		}
     	}
-    	
+
     	//查询课程费用是否是0
     	MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId);
     	if(musicGroupPaymentCalender == null){
     		throw new BizException("请先创建乐团报名缴费");
     	}
-    	
+
     	List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettingsList = musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettings(musicGroupPaymentCalender.getId());
     	double d = musicGroupPaymentCalenderCourseSettingsList.stream().mapToDouble(t -> t.getCourseCurrentPrice().doubleValue()).sum();
-    	
+
     	if(d > 0){
     		throw new BizException("缴费项目中的课程费用为[{}]元,不能导入", d);
     	}
-    	
+
     	//检查用户是否已入团或在其他机构已注册
     	for(StudentImportDto si : studentBasicList){
     		SysUser sysUser = studentRegistrationDao.getSysUserByPhone(si.getMobileNo());
@@ -455,7 +442,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             	throw new BizException("该手机号[{}]已注册", si.getMobileNo());
             }
     	}
-    	
+
     	SysUser sysUser = null;
     	Integer userId = null;
     	Student student = null;
@@ -474,15 +461,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			sysUser.setUpdateTime(nowDate);
 			teacherDao.addSysUser(sysUser);
 			userId = sysUser.getId();
-			
+
 			si.setUserId(userId);
-			
+
 			student = new Student(userId, subjectMap.get(si.getSubjectName()) + "");
 	        student.setCurrentGradeNum(SixPlusGradeEnum.get(si.getGradeName()).getCode());
 			studentDao.insert(student);
 			// 添加用户现金账户
 			sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
-			
+
 			studentRegistration = new StudentRegistration();
 	        String studentGrade = studentService.getStudentGrade(organization.getGradeType(), student.getCurrentGradeNum());
 	        studentRegistration.setCurrentGrade(studentGrade);
@@ -501,10 +488,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 	        studentRegistration.setMusicGroupId(musicGroupId);
 	        studentRegistration.setCreateTime(nowDate);
 	        studentRegistration.setUpdateTime(nowDate);
-	        
+
 	        insertList.add(studentRegistration);
 		}
-        
+
 		if (insertList.size() > 0) {
 			studentRegistrationService.batchInsert(insertList);
 
@@ -596,9 +583,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			}
 			if (insertMusicGroupPaymentCalenderDetailList.size() > 0) {
 				musicGroupPaymentCalenderDetailDao.batchInsert(insertMusicGroupPaymentCalenderDetailList);
-				
+
 				Map<Integer,Long> musicGroupPaymentCalenderDetailIdMap =  insertMusicGroupPaymentCalenderDetailList.stream().collect(Collectors.toMap(MusicGroupPaymentCalenderDetail :: getUserId, MusicGroupPaymentCalenderDetail :: getId));
-				
+
 				if (musicGroupPaymentStudentCourseDetails.size() > 0) {
 					for(MusicGroupPaymentStudentCourseDetail cd : musicGroupPaymentStudentCourseDetails){
 						cd.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetailIdMap.get(cd.getUserId()));
@@ -607,7 +594,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 				}
 			}
 		}
-    	
+
 		return true;
 	}
 
@@ -1096,16 +1083,16 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     }
 
     private MusicGroupApplyGoodsDto getCalenderTotalAmount(RegisterPayDto registerPayDto, MusicGroupPaymentCalender calender) {
-    	
+
     	String musicGroupId = calender.getMusicGroupId();
     	MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
-    	
+
     	if(musicGroup == null){
     		throw new BizException("乐团[{}]信息查询失败", musicGroupId);
     	}
-    	
+
     	boolean isGiveAccessories = musicGroup.getIsGiveAccessories();
-    	
+
         MusicGroupApplyGoodsDto goodsDto = new MusicGroupApplyGoodsDto();
         //乐器及打包辅件价格
         List<MusicGroupSubjectGoodsGroup> goodsGroups;
@@ -1116,7 +1103,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 Map<String, BigDecimal> groupType = JSONObject.parseObject(goodsGroup.getKitGroupPurchaseTypeJson(), new TypeReference<Map<String, BigDecimal>>() {
                 });
-                
+
                 if(isGiveAccessories && registerPayDto.getBuyCloudTeacher()){
                 	if (goodsGroup.getType().equals(GoodsType.ACCESSORIES)) {
                 		continue;
@@ -1381,17 +1368,17 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Integer userId = studentRegistration.getUserId();
 
         List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
-        
+
         StudentPaymentOrder applyOrder = null;
-        
+
         if(applyOrderList != null && applyOrderList.size() > 0){
         	applyOrder = applyOrderList.get(0);
         }
-        
+
         if (applyOrder == null) {
             throw new BizException("没有支付中订单,请在我的订单中查看订单状态");
         }
-        
+
         // 查询订单状态
         PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
         if(payStatus != PayStatus.FAILED){
@@ -1406,7 +1393,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if(musicGroupRegCalender == null){
         	throw new BizException("缴费信息不存在");
         }
-        
+
         //手动关闭订单
         applyOrder.setStatus(DealStatusEnum.FAILED);
         applyOrder.setMemo("用户手动关闭");
@@ -1453,14 +1440,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 remitFee = groupType.get(kitGroupPurchaseType) == null ? BigDecimal.ZERO : groupType.get(kitGroupPurchaseType);
             }
             goodsGroup.setGoodsList(goodsService.findGoodsByIds(goodsGroup.getGoodsIdList()));
-            
+
             if(goodsGroup.getType().equals(GoodsType.ACCESSORIES)){
             	if((registerPayDto.getBuyCloudTeacher() || registerPayDto.getBuyCloudTeacherPlus()) && musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE){
             		goodsGroup.setPrice(BigDecimal.ZERO);
             		continue;
             	}
             }
-            
+
             if(musicGroup.getOrganId() == 55 && (registerPayDto.getNewCourse() == null || registerPayDto.getNewCourse().size() == 0) && !(registerPayDto.getBuyCloudTeacher() || registerPayDto.getBuyCloudTeacherPlus())){
             	//取商品零售价
                 if (StringUtils.isNotBlank(goodsGroup.getGoodsIdList())) {
@@ -1505,7 +1492,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         //云教练/云教练+
         if (registerPayDto.getBuyCloudTeacher() || registerPayDto.getBuyCloudTeacherPlus()) {
-        	
+
             BigDecimal cloudTeacherPrice = BigDecimal.ZERO;
 			if (musicGroupRegCalender.getMemberRankSettingId() != null) {
 				cloudTeacherPrice = musicGroupRegCalender.getMemberPaymentAmount();
@@ -1515,17 +1502,17 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 					cloudTeacherPrice = musicGroup.getCloudTeacherType() == 0 ? cloudTeacher.getPrice() : cloudTeacher.getPlusPrice();
 				}
 			}
-            
+
             orderAmount = orderAmount.add(cloudTeacherPrice);
             studentRegistration.setHasCloudTeacher(0);
-            
+
 
             //创建订单
             cloudTeacherOrder = new CloudTeacherOrder();
 
     		cloudTeacherOrder.setType(PeriodEnum.MONTH);//月
 			cloudTeacherOrder.setTime(musicGroupRegCalender.getMemberValidDate() == null ? 6 : musicGroupRegCalender.getMemberValidDate());
-    		
+
     		cloudTeacherOrder.setOrganId(musicGroup.getOrganId());
     		cloudTeacherOrder.setStudentId(studentRegistration.getUserId());
     		cloudTeacherOrder.setLevel(musicGroupRegCalender.getMemberRankSettingId() == null ? 1 : musicGroupRegCalender.getMemberRankSettingId());
@@ -1561,14 +1548,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("价格异常");
         }
         boolean canPay = studentPaymentOrder.getClassGroupId() != null && studentPaymentOrder.getClassGroupId().equals(206);
-        
+
         if(cloudTeacherOrder != null){
     		cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
     		cloudTeacherOrder.setCreateTime(date);
     		cloudTeacherOrder.setUpdateTime(date);
     		cloudTeacherOrderService.insert(cloudTeacherOrder);
         }
-        
+
         BigDecimal balance = BigDecimal.ZERO;
         if (registerPayDto.getUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
             SysUserCashAccount userCashAccount = sysUserCashAccountService.get(userId);
@@ -2312,7 +2299,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     }
 
     @Override
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    @Transactional(rollbackFor = Exception.class)
     public boolean applyQuitMusicGroup(List<SysUserRoleEnum> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit, Integer operatorId) {
 
         Integer userId = reqMusicGroupQuit.getUserId();
@@ -2348,6 +2335,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupQuit.setUserComment(reqMusicGroupQuit.getUserComment());
         musicGroupQuit.setApplyUserId(userId);
         musicGroupQuit.setReason(reason);
+		musicGroupQuit.setReasonEnum(reqMusicGroupQuit.getReasonEnum());
 
         MusicGroupReturnFeeDto returnFeeDto = reqMusicGroupQuit.getReturnFeeDto();
         if (returnFeeDto != null) {
@@ -2454,7 +2442,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     }
 
     @Override
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    @Transactional(rollbackFor = Exception.class)
     public boolean approveQuitMusicGroup(List<SysUserRoleEnum> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit) {
         Long id = reqMusicGroupQuit.getId();
         ApprovalStatus status = reqMusicGroupQuit.getStatus();
@@ -2521,8 +2509,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupQuit.setStatus(status);
         musicGroupQuit.setReason(reason);
         musicGroupQuit.setQuitDate(date);
+		musicGroupQuit.setReasonEnum(reqMusicGroupQuit.getReasonEnum());
+		musicGroupQuit.setIsVisit(reqMusicGroupQuit.getIsVisit());
+		musicGroupQuit.setVisitTime(reqMusicGroupQuit.getVisitTime());
+		musicGroupQuit.setUserComment(reqMusicGroupQuit.getUserComment());
 
-        if (visitDate != null) {
+
+/*        if (visitDate != null) {
             musicGroupQuit.setVisitTime(visitDate);
             musicGroupQuit.setIsVisit(true);
         } else {
@@ -2531,7 +2524,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         if (StringUtils.isBlank(musicGroupQuit.getUserComment())) {
             musicGroupQuit.setUserComment(reqMusicGroupQuit.getUserComment());
-        }
+        }*/
 
         BigDecimal returnTotalFee = BigDecimal.ZERO;
 
@@ -2761,11 +2754,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     }
 
     @Override
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public boolean directQuitMusicGroup(String musicGroupId, Integer userId, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-                                        boolean isRefundTeachingAssistantsFee, boolean isRefundMemberFee, BigDecimal maintenanceFee) {
-
-        SysUser sysUser = sysUserFeignService.queryUserById(userId);
+    @Transactional(rollbackFor = Exception.class)
+    public boolean directQuitMusicGroup(MusicGroupQuitDto musicGroupQuitDto) {
+		Integer userId = musicGroupQuitDto.getUserId();
+		String musicGroupId = musicGroupQuitDto.getMusicGroupId();
+		SysUser sysUser = sysUserFeignService.queryUserById(userId);
         if (sysUser == null) {
             throw new BizException("获取用户信息失败");
         }
@@ -2815,21 +2808,20 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
         if (musicGroupQuit != null && musicGroupQuit.getStatus() == PROCESSING) {
             musicGroupQuit.setStatus(ApprovalStatus.APPROVED);
-            musicGroupQuit.setReason(reason);
+            musicGroupQuit.setReason(musicGroupQuitDto.getReason());
+			musicGroupQuit.setReasonEnum(musicGroupQuitDto.getReasonEnum());
             musicGroupQuit.setQuitDate(date);
-
             musicGroupQuitDao.update(musicGroupQuit);
         } else {
-
             musicGroupQuit = new MusicGroupQuit();
             musicGroupQuit.setCreateTime(date);
             musicGroupQuit.setJoinDate(studentRegistration.getCreateTime());
             musicGroupQuit.setMusicGroupId(musicGroupId);
             musicGroupQuit.setUserId(sysUser.getId());
             musicGroupQuit.setStatus(ApprovalStatus.APPROVED);
-            musicGroupQuit.setReason(reason);
+			musicGroupQuit.setReason(musicGroupQuitDto.getReason());
+			musicGroupQuit.setReasonEnum(musicGroupQuitDto.getReasonEnum());
             musicGroupQuit.setQuitDate(date);
-
             musicGroupQuitDao.insert(musicGroupQuit);
         }
 
@@ -2854,20 +2846,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentRegistration.setUpdateTime(date);
         studentRegistrationDao.update(studentRegistration);
 
-        //更新服务指标、运营指标
-        /*int remainCourseNum = courseScheduleStudentPaymentDao.countStudentNotStartCourseNumWithCourseType(userId, null);
-        if (remainCourseNum == 0) {
-            Student student = studentDao.get(userId);
-            if (student == null) {
-                throw new BizException("学生信息查询失败");
-            }
-            student.setServiceTag(0);
-            student.setOperatingTag(0);
-            student.setOperatingTempTag(0);
-            student.setUpdateTime(date);
-            studentDao.update(student);
-        }*/
-
         //删除进行中加学生,且在审批中或拒绝的缴费
         List<Long> paymentCalenderIdList = musicGroupPaymentCalenderDao.findStudentNoPaymentCalender(userId, musicGroupId);
         if (paymentCalenderIdList != null && paymentCalenderIdList.size() > 0) {
@@ -2935,64 +2913,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //统计变更学员数
             groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
         }
-/*
-        if (isRefundMemberFee){
-            if(musicGroup.getCourseViewType() != CourseViewTypeEnum.MEMBER_FEE){
-                throw new BizException("非会员乐团不允许退云教练");
-            }
-            //删除乐团会员时长
-            studentRegistrationDao.cleanMusicMember(userId,musicGroupId);
-            //退云教练费用
-            if (cloudTeacherAmount != null) {
-                Date nowDate = new Date();
-                List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrder(userId,musicGroupId);
-                BigDecimal orderAmount = BigDecimal.ZERO;
-                Student student = studentDao.get(userId);
-                if(cloudTeacherOrders.size() > 0){
-                    Integer subMemberDay = 0;
-                    List<CloudTeacherOrder> quitCloudTeacherOrders = new ArrayList<>();
-                    for (CloudTeacherOrder cloudTeacherOrder : cloudTeacherOrders) {
-                        if (cloudTeacherOrder.getEndTime() == null || DateUtil.stringToDate(DateUtil.format(cloudTeacherOrder.getEndTime(),DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
-                                DateUtil.stringToDate(DateUtil.format(nowDate,DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT)) >= 0) {
-                            quitCloudTeacherOrders.add(cloudTeacherOrder);
-                            orderAmount = orderAmount.add(cloudTeacherOrder.getAmount());
-                            subMemberDay =  subMemberDay + DateUtil.daysBetween(cloudTeacherOrder.getStartTime(), cloudTeacherOrder.getEndTime());
-                        }
-                    }
-                    cloudTeacherOrderService.quitCloudTeacherOrders(quitCloudTeacherOrders, cloudTeacherAmount);
-                    Date memberEndTime = DateUtil.addDays(studentRegistration.getMembershipEndTime(), subMemberDay);
-                    if(memberEndTime.compareTo(nowDate) < 0){
-                        //清除学员云教练
-                        studentService.cleanMember(userId);
-                        //如果有试用会员,不清除
-                        if(student.getExperienceMemberRankSettingId() != null){
-                            student.setMemberRankSettingId(student.getExperienceMemberRankSettingId());
-                            student.setMembershipStartTime(student.getExperienceMembershipStartTime());
-                            student.setMembershipEndTime(student.getExperienceMembershipEndTime());
-                            studentDao.update(student);
-                        }
-                    }else {
-                        if(student.getExperienceMemberRankSettingId() != null){
-                            if(memberEndTime.compareTo(student.getExperienceMembershipEndTime()) > 0){
-                                student.setMembershipEndTime(memberEndTime);
-                            }else {
-                                student.setMembershipEndTime(student.getExperienceMembershipEndTime());
-                            }
-                            studentDao.update(student);
-                        }
-                    }
-                }
-                if (cloudTeacherAmount.compareTo(orderAmount) > 0) {
-                    throw new BizException("云教练退费金额不能大于原始订单金额");
-                }
-                amount = amount.add(cloudTeacherAmount);
-            }
-        }else {
-            //删除乐团会员时长
-            studentRegistrationDao.cleanMusicMember(userId,musicGroupId);
-        }*/
-
-        if (isRefundCourseFee) {
+        if (musicGroupQuitDto.getIsRefundCourseFee()) {
             // 退课程费用
             amount = amount.add(surplusCourseFee);
         }
@@ -3006,12 +2927,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
 
             SubjectChange studentLastChange = null;
-            if (isRefundInstrumentFee || isRefundTeachingAssistantsFee) {
+            if (musicGroupQuitDto.getIsRefundInstrumentFee() || musicGroupQuitDto.getIsRefundTeachingAssistantsFee()) {
                 studentLastChange = subjectChangeDao.getStudentLastChange(userId, musicGroupId);
             }
 
             if (studentLastChange != null && minPaymentOrderId <= studentLastChange.getOriginalOrderId()) {
-                if (isRefundInstrumentFee) {
+                if (musicGroupQuitDto.getIsRefundInstrumentFee()) {
                     amount = amount.add(studentLastChange.getChangeMusicalPrice());
 
                     StudentInstrument studentMaintenance = studentInstrumentDao.getByOrderId(studentLastChange.getOrderId().longValue());
@@ -3021,14 +2942,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     }
                 }
 
-                if (isRefundTeachingAssistantsFee) {
+                if (musicGroupQuitDto.getIsRefundTeachingAssistantsFee()) {
                     amount = amount.add(studentLastChange.getChangeAccessoriesPrice());
                 }
             } else {
                 for (StudentPaymentOrderDetail detail : orderDetailList) {
 
                     // 退乐器费用
-                    if (isRefundInstrumentFee && detail.getType() == MUSICAL) {
+                    if (musicGroupQuitDto.getIsRefundInstrumentFee() && detail.getType() == MUSICAL) {
                         amount = amount.add(detail.getPrice()).subtract(detail.getRemitFee());
 
                         StudentInstrument studentMaintenance = studentInstrumentDao.getStudentMaintenance(userId, musicGroupId);
@@ -3039,7 +2960,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     }
 
                     // 退教辅费用
-                    if (isRefundTeachingAssistantsFee
+                    if (musicGroupQuitDto.getIsRefundTeachingAssistantsFee()
                             && (detail.getType() == ACCESSORIES || detail.getType() == TEACHING)) {
                         amount = amount.add(detail.getPrice()).subtract(detail.getRemitFee());
                     }
@@ -3049,15 +2970,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         //退乐保费用
-        if (maintenanceFee != null) {
+        if (musicGroupQuitDto.getMaintenanceFee() != null) {
             StudentInstrument studentMaintenance = studentInstrumentDao.getStudentMaintenance(userId, musicGroupId);
-            if (maintenanceFee.compareTo(BigDecimal.ZERO) > 0) {
+            if (musicGroupQuitDto.getMaintenanceFee().compareTo(BigDecimal.ZERO) > 0) {
                 if (studentMaintenance == null) {
                     throw new BizException("学生没有有效期内的乐保,不能退乐保费用");
                 }
             }
-            amount = amount.add(maintenanceFee);
-            if (maintenanceFee.compareTo(BigDecimal.ZERO) > 0 && studentMaintenance != null) {
+            amount = amount.add(musicGroupQuitDto.getMaintenanceFee());
+            if (musicGroupQuitDto.getMaintenanceFee().compareTo(BigDecimal.ZERO) > 0 && studentMaintenance != null) {
                 studentMaintenance.setStatus(0);
                 studentMaintenance.setStartTime(null);
                 studentMaintenance.setEndTime(null);
@@ -4199,7 +4120,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (sysUser == null) {
             throw new BizException("请登录");
         }
-        Map<String, Object> resultMap = new HashMap<>(7);
+        Map<String, Object> resultMap = new HashMap<>(8);
         String username = sysUser.getUsername();
         resultMap.put("username", StringUtils.isEmpty(username) ? sysUser.getRealName() : username);
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
@@ -4211,8 +4132,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         resultMap.put("days", daysBetween);
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.queryByUserIdAndMusicGroupId(sysUser.getId(), musicGroupId);
         if (musicGroupQuit != null && musicGroupQuit.getStatus() == PROCESSING) {
-            resultMap.put("memo", musicGroupQuit.getUserComment());
-            resultMap.put("quitTime", musicGroupQuit.getCreateTime());
+			resultMap.put("reasonEnum",musicGroupQuit.getReasonEnum());
+			resultMap.put("memo", musicGroupQuit.getUserComment());
+			resultMap.put("quitTime", musicGroupQuit.getCreateTime());
         }
         if (musicGroup.getEducationalTeacherId() != null) {
             SysUser user = sysUserFeignService.queryUserById(musicGroup.getEducationalTeacherId());

+ 16 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -22,6 +22,7 @@ import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
 
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.*;
@@ -35,22 +36,6 @@ import org.springframework.util.CollectionUtils;
 
 import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.CloudTeacherDao;
-import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
-import com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao;
-import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.PracticeGroupDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.StudentStatisticsDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
@@ -117,6 +102,8 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     private SysUserCashAccountDao sysUserCashAccountDao;
     @Autowired
     private ImFeignService imFeignService;
+    @Autowired
+    private StudentOperatingVisitDao studentOperatingVisitDao;
 
     @Override
     public BaseDAO<Integer, Student> getDAO() {
@@ -237,8 +224,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean updateOperatingTempTag() {
-        List<StudentCourseTimesDto> studentCourseTimesDtoList = courseScheduleStudentPaymentDao.queryStudentNotStartCourseTimesOfOnline();
+        /*List<StudentCourseTimesDto> studentCourseTimesDtoList = courseScheduleStudentPaymentDao.queryStudentNotStartCourseTimesOfOnline();
         Map<Integer, StudentCourseTimesDto> map = studentCourseTimesDtoList.stream().collect(Collectors.toMap(StudentCourseTimesDto::getUserId, s -> s));
         //查询服务指标为0的用户
         List<Student> unlabeledStudentList = studentDao.queryByOperatingTempTag(0);
@@ -267,12 +255,18 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
                 s.setOperatingTag(0);
                 updateStudentList.add(s);
             }
+        }*/
+        String month = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+        studentOperatingVisitDao.deleteByUserId(month);
+        List<Integer> operatingUserIds = studentDao.queryByOperatingTag(1);
+        if (!CollectionUtils.isEmpty(operatingUserIds)) {
+            List<Integer> userIds = studentOperatingVisitDao.queryUserIds(month);
+            operatingUserIds.removeAll(userIds);
+            if(!CollectionUtils.isEmpty(operatingUserIds)){
+                //需要新增的用户
+                studentOperatingVisitDao.batchAdd(operatingUserIds,month);
+            }
         }
-
-        if (updateStudentList.size() > 0) {
-            studentDao.batchUpdate(updateStudentList);
-        }
-
         return true;
     }
 

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

@@ -88,8 +88,8 @@ public class StudentVisitServiceImpl extends BaseServiceImpl<Integer, StudentVis
             }
         }
         studentVisitDao.insert(studentVisit);
-        //更新学员回访数据
-//        studentOperatingVisitDao.updateVisit(studentVisit.getStudentId());
+        //更新学员回访统计数据
+        studentOperatingVisitDao.updateVisit(studentVisit.getStudentId(),DateUtil.format(studentVisit.getVisitTime(),DateUtil.ISO_YEAR_MONTH_FORMAT));
         return studentVisit;
     }
 

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

@@ -439,8 +439,8 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher> implem
     }
 
     @Override
-    public List<TeacherBasicDto> findTeachers(String organId) {
-        return teacherDao.findByFlowOrganRangeTeachers(organId);
+    public List<TeacherBasicDto> findTeachers(String organId,Boolean demissionFlag) {
+        return teacherDao.findByFlowOrganRangeTeachers(organId,demissionFlag);
     }
 
     @Override

+ 40 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4034,4 +4034,44 @@
         ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC
         <include refid="global.limit"/>
     </select>
+    <resultMap id="CourseScheduleStudentDto" type="com.ym.mec.biz.dal.dto.CourseScheduleStudentDto">
+        <result property="courseId" column="course_schedule_id_"/>
+        <result property="classDate" column="class_date_"/>
+        <result property="startClassTime" column="start_class_time_"/>
+        <result property="endClassTime" column="end_class_time_"/>
+        <result property="attendanceStatus" column="attendanceStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="courseStatus" column="courseStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="groupType" column="group_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="teachMode" column="teach_mode_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="courseName" column="courseName"/>
+        <result property="teacherAvatar" column="avatar_"/>
+        <result property="teacherName" column="real_name_"/>
+        <result property="schoolName" column="schoolName"/>
+        <result property="qualifiedFlag" column="qualified_flag_"/>
+    </resultMap>
+    <select id="queryDetailList" resultMap="CourseScheduleStudentDto">
+        select cssp.course_schedule_id_,cs.class_date_,CONCAT(cs.class_date_," ",cs.start_class_time_) start_class_time_,CONCAT(cs.class_date_," ",cs.end_class_time_) end_class_time_,
+               CASE WHEN sa.status_ IS NULL OR sa.status_ = '' THEN 'TRUANT' ELSE sa.status_ END attendanceStatus,cs.status_ courseStatus,
+               cs.group_type_,cs.teach_mode_,cs.name_ courseName,su.avatar_,su.real_name_,co.name_ schoolName,sa.qualified_flag_
+        from course_schedule_student_payment cssp
+        left join course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        left join sys_user su on cs.actual_teacher_id_ = su.id_
+        left join school co ON co.id_ = cs.schoole_id_
+        left join student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.user_id_ = cssp.user_id_
+        where cssp.music_group_id_ = #{queryInfo.groupId} AND cssp.user_id_ = #{queryInfo.userId} AND cssp.group_type_ = #{queryInfo.groupType}
+        <if test="queryInfo.courseStatus != null and queryInfo.courseStatus != ''">
+            AND cs.status_ = #{queryInfo.courseStatus}
+        </if>
+        <if test="queryInfo.teachMode != null and queryInfo.teachMode != ''">
+            AND cs.teach_mode_ = #{queryInfo.teachMode}
+        </if>
+        <if test="queryInfo.attendanceStatus != null and queryInfo.attendanceStatus != ''">
+            <if test="queryInfo.attendanceStatus == 'TRUANT'">
+                AND (sa.status_ IS NULL OR sa.status_ = '' OR sa.status_ = 'TRUANT') AND cs.status_ = 'OVER'
+            </if>
+            <if test="queryInfo.attendanceStatus != 'TRUANT'">
+                AND sa.status_ = #{queryInfo.attendanceStatus}
+            </if>
+        </if>
+    </select>
 </mapper>

+ 10 - 8
mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml

@@ -13,6 +13,7 @@
         <result column="quit_date_" property="quitDate"/>
         <result column="create_time_" property="createTime"/>
         <result column="reason_" property="reason"/>
+        <result column="reason_enum_" property="reasonEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="user_comment_" property="userComment"/>
         <result column="is_visit_" property="isVisit"/>
         <result column="visit_time_" property="visitTime"/>
@@ -49,15 +50,20 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
             useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO music_group_quit
-        (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,user_comment_,status_,apply_user_id_,is_visit_,visit_time_,fee_json_,current_approve_role_,return_total_fee_,tenant_id_)
+        (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,user_comment_,status_,
+         apply_user_id_,is_visit_,visit_time_,fee_json_,current_approve_role_,return_total_fee_,tenant_id_,reason_enum_)
         VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{userComment},
-        #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{applyUserId},#{isVisit},#{visitTime},#{feeJson},#{currentApproveRole},#{returnTotalFee},#{tenantId})
+        #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{applyUserId},#{isVisit},#{visitTime},
+               #{feeJson},#{currentApproveRole},#{returnTotalFee},#{tenantId},#{reasonEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit">
         UPDATE music_group_quit
         <set>
+            <if test="reasonEnum != null">
+                reason_enum_ = #{reasonEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="userId != null">
                 user_id_ = #{userId},
             </if>
@@ -79,12 +85,8 @@
             <if test="applyUserId != null">
                 apply_user_id_ = #{applyUserId},
             </if>
-            <if test="isVisit != null">
-                is_visit_ = #{isVisit},
-            </if>
-            <if test="visitTime != null">
-                visit_time_ = #{visitTime},
-            </if>
+            is_visit_ = #{isVisit},
+            visit_time_ = #{visitTime},
             <if test="feeJson != null">
                 fee_json_ = #{feeJson},
             </if>

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

@@ -235,11 +235,6 @@
         </where>
     </sql>
 
-    <select id="queryByOperatingTempTag" resultMap="Student">
-        SELECT *
-        FROM student
-        WHERE operating_temp_tag_ = #{operatingTempTag}
-    </select>
 
     <update id="batchUpdate" parameterType="java.util.List">
         <foreach collection="studentList" item="item" index="index" open="" close="" separator=";">
@@ -1465,6 +1460,9 @@
         WHERE s.teacher_id_ = #{userId} AND s.subject_id_list_ IS NOT NULL AND s.subject_id_list_ != ''
         GROUP BY sb.id_
     </select>
+    <select id="queryByOperatingTag" resultType="java.lang.Integer">
+        SELECT user_id_ FROM student WHERE operating_tag_ = #{operatingTag}
+    </select>
     <sql id="queryStudentBasicInfoSql">
         <where>
             AND su.lock_flag_ = 0 AND su.del_flag_ = 0

+ 36 - 4
mec-biz/src/main/resources/config/mybatis/StudentOperatingVisitMapper.xml

@@ -28,7 +28,18 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentOperatingVisit" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO student_operating_visit (user_id_,month_,visit_flag_,organ_id_) VALUES(#{userId},#{month},#{visitFlag},#{organId})
 	</insert>
-	
+	<insert id="batchAdd">
+		INSERT INTO student_operating_visit (user_id_,month_,visit_flag_,organ_id_)
+		select su.id_,#{month},CASE WHEN sv.student_id_ IS NULL THEN 0 ELSE 1 END visit_flag_,su.organ_id_
+		from sys_user su
+		left join student_visit sv ON sv.student_id_ = su.id_ AND DATE_FORMAT(sv.visit_time_,'%Y-%m') = #{month}
+		where su.id_ IN
+		<foreach collection="userIds" item="studentId" open="(" separator="," close=")">
+			#{studentId}
+		</foreach>
+		group by su.id_
+	</insert>
+
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentOperatingVisit">
 		UPDATE student_operating_visit <set>
@@ -48,14 +59,20 @@ month_ = #{month},
 	</update>
     <update id="updateVisit">
 		update student_operating_visit set visit_flag_ = 1
-		where user_id_ = #{studentId} and visit_flag_ = 0 and month_ = DATE_FORMAT(NOW(),'%Y-%m-%d');
+		where user_id_ = #{studentId} and visit_flag_ = 0 and month_ = #{month}
 	</update>
 
-    <!-- 根据主键删除一条记录 -->
+	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM student_operating_visit WHERE id_ = #{id} 
 	</delete>
-	
+	<delete id="deleteByUserId">
+		delete from student_operating_visit where id_ IN (
+		SELECT a.id_ FROM (select sov.id_ from student_operating_visit sov
+		left join student s ON s.user_id_ = sov.user_id_
+		where s.operating_tag_ = 0 AND sov.month_ = #{month})a)
+	</delete>
+
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="StudentOperatingVisit" parameterType="map">
 		SELECT * FROM student_operating_visit ORDER BY id_ <include refid="global.limit"/>
@@ -65,4 +82,19 @@ month_ = #{month},
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM student_operating_visit
 	</select>
+	<select id="queryUserIds" resultType="java.lang.Integer">
+		SELECT DISTINCT user_id_ FROM student_operating_visit WHERE month_ = #{month}
+	</select>
+	<resultMap id="ExportOperatingVisitDto" type="com.ym.mec.biz.dal.dto.ExportOperatingVisitDto">
+		<result property="organName" column="organ_name_" />
+		<result property="expectVisitNum" column="expect_visit_num_" />
+		<result property="visitNum" column="visit_num_" />
+	</resultMap>
+	<select id="sumVisit" resultMap="ExportOperatingVisitDto">
+		SELECT o.name_ organ_name_,count(sov.user_id_) expect_visit_num_,COUNT(CASE WHEN sov.visit_flag_ = 1 THEN 1 ELSE NULL END) visit_num_
+		FROM student_operating_visit sov
+		left join organization o on sov.organ_id_ = o.id_
+		WHERE sov.month_ = #{month}
+		group by sov.organ_id_
+	</select>
 </mapper>

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

@@ -915,8 +915,11 @@
     <select id="findByFlowOrganRangeTeachers" resultMap="TeacherBasicDto">
         SELECT su.id_,su.username_,su.real_name_,t.organ_id_ FROM teacher t
         LEFT JOIN sys_user su ON t.id_ = su.id_
-        WHERE su.del_flag_ = 0 AND su.lock_flag_ = 0 AND t.demission_date_ is null
+        WHERE su.del_flag_ = 0 AND su.lock_flag_ = 0
             AND (INTE_ARRAY(#{organId},t.flow_organ_range_) OR FIND_IN_SET(t.organ_id_,#{organId}))
+        <if test="demissionFlag != null and demissionFlag == false">
+            AND t.demission_date_ IS NULL
+        </if>
     </select>
 
     <select id="findByTeacherIds" resultMap="Teacher">

+ 22 - 34
mec-student/src/main/java/com/ym/mec/student/controller/CourseController.java

@@ -1,26 +1,23 @@
 package com.ym.mec.student.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-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.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dto.CourseScheduleStudentDto;
 import com.ym.mec.biz.dal.dto.StudentCourseInfoDto;
 import com.ym.mec.biz.dal.dto.UserMusicGroupQueryInfo;
+import com.ym.mec.biz.dal.page.CourseDetailQueryInfo;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.ImGroupNoticeService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 @RequestMapping("course")
 @Api(tags = "课程服务")
@@ -30,7 +27,7 @@ public class CourseController extends BaseController {
     @Autowired
     private ClassGroupService classGroupService;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
     @Autowired
     private ImGroupNoticeService imGroupNoticeService;
     
@@ -40,21 +37,13 @@ public class CourseController extends BaseController {
     @ApiOperation("获取学生所购买课程列表")
     @GetMapping(value = "/queryUserMusicGroups")
     public Object queryCoursePage(UserMusicGroupQueryInfo queryInfo){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("获取用户信息失败");
-        }
-        return succeed(classGroupService.queryCoursePage(queryInfo,sysUser.getId()));
+        return succeed(classGroupService.queryCoursePage(queryInfo,sysUserService.getUserId()));
     }
 
     @ApiOperation("获取学生所购买课程列表")
     @GetMapping(value = "/queryRemainCourseNum")
     public Object queryRemainCourseNum(){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("获取用户信息失败");
-        }
-        List<StudentCourseInfoDto> list = courseScheduleDao.findUserSurplusCourseInfoByGroup(null, null, sysUser.getId());
+        List<StudentCourseInfoDto> list = courseScheduleDao.findUserSurplusCourseInfoByGroup(null, null, sysUserService.getUserId());
         if(list == null){
         	return succeed(0);
         }
@@ -64,11 +53,7 @@ public class CourseController extends BaseController {
     @ApiOperation("获取学员所有聊天群组")
     @GetMapping(value = "/queryUserGroups")
     public Object queryUserGroups(String search){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("获取用户信息失败");
-        }
-        return succeed(classGroupService.queryUserGroups(sysUser.getId(),search));
+        return succeed(classGroupService.queryUserGroups(sysUserService.getUserId(),search));
     }
 
     @ApiOperation(value = "获取最新一条群公告")
@@ -95,11 +80,14 @@ public class CourseController extends BaseController {
     @ApiOperation(value = "分页获取学员购买记录")
     @PostMapping("/queryStudentPayLog")
     public Object queryStudentPayLog(StudentPayLogQueryInfo studentPayLogQueryInfo){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null || sysUser.getId() == null){
-            return failed("获取用户失败");
-        }
-        studentPayLogQueryInfo.setUserId(sysUser.getId());
+        studentPayLogQueryInfo.setUserId(sysUserService.getUserId());
         return succeed(classGroupService.queryStudentPayLog(studentPayLogQueryInfo));
     }
+
+    @ApiOperation(value = "根据课程组编号,获取课程列表")
+    @PostMapping("/queryDetailList")
+    public HttpResponseResult<List<CourseScheduleStudentDto>> queryDetailList(@RequestBody CourseDetailQueryInfo courseDetailQueryInfo){
+        courseDetailQueryInfo.setUserId(sysUserService.getUserId());
+        return succeed(courseScheduleDao.queryDetailList(courseDetailQueryInfo));
+    }
 }

+ 16 - 40
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -39,6 +39,8 @@ import java.util.stream.Collectors;
 public class MusicGroupController extends BaseController {
 
     @Resource
+    private SysUserService sysUserService;
+    @Resource
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private MusicGroupService musicGroupService;
@@ -68,51 +70,31 @@ public class MusicGroupController extends BaseController {
     @ApiOperation("预报名信息查询")
     @GetMapping(value = "/queryPreRegister")
     public Object queryPreRegister(String musicGroupId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return succeed(studentPreRegistrationDao.queryByMusicGroupIdAndUserId(sysUser.getId(), musicGroupId));
+        return succeed(studentPreRegistrationDao.queryByMusicGroupIdAndUserId(sysUserService.getUserId(), musicGroupId));
     }
 
     @ApiOperation("获取学生所在乐团列表")
     @GetMapping(value = "/queryUserMusicGroups")
     public Object queryUserMusicGroups() {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return succeed(musicGroupService.queryUserMusicGroups(sysUser.getId()));
+        return succeed(musicGroupService.queryUserMusicGroups(sysUserService.getUserId()));
     }
 
     @ApiOperation("获取学生所在乐团列表")
     @GetMapping(value = "/queryStudentMusicGroupInfo")
     public Object queryStudentMusicGroupInfo(String musicGroupId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return succeed(studentRegistrationService.queryStudentMusicGroupInfo(sysUser.getId(),musicGroupId));
+        return succeed(studentRegistrationService.queryStudentMusicGroupInfo(sysUserService.getUserId(),musicGroupId));
     }
 
     @ApiOperation("获取学生个人中心乐团信息")
     @GetMapping(value = "/queryPersonalMusicGroups")
     public Object queryPersonalMusicGroups() {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return succeed(musicGroupService.queryPersonalMusicGroups(sysUser.getId()));
+        return succeed(musicGroupService.queryPersonalMusicGroups(sysUserService.getUserId()));
     }
 
     @ApiOperation(value = "根据学员编号,获取有关联的老师列表,获取学员通讯录列表")
     @GetMapping("/findTeachersByStuId")
     public Object findTeachersByStuId(String search) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return succeed(musicGroupService.findTeachersByStuId(sysUser.getId(), search));
+        return succeed(musicGroupService.findTeachersByStuId(sysUserService.getUserId(), search));
     }
 
 
@@ -222,18 +204,17 @@ public class MusicGroupController extends BaseController {
     @ApiOperation(value = "申请退团")
     @PostMapping("/quitMusicGroup")
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String")})
-    public HttpResponseResult quitMusicGroup(String musicGroupId, String reason) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+            @ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "reasonEnum", value = "原因", required = true, dataType = "String")})
+    public HttpResponseResult quitMusicGroup(String musicGroupId, String reason,MusicGroupQuit.ReasonEnum reasonEnum) throws Exception {
+        Integer userId = sysUserService.getUserId();
 		MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
-		musicGroupQuit.setUserId(sysUser.getId());
+		musicGroupQuit.setUserId(userId);
 		musicGroupQuit.setMusicGroupId(musicGroupId);
 		musicGroupQuit.setUserComment(reason);
+        musicGroupQuit.setReasonEnum(reasonEnum);
 		musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
-        return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit, sysUser.getId()));
+        return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit, userId));
     }
 
     @ApiOperation(value = "取消退团申请")
@@ -241,17 +222,13 @@ public class MusicGroupController extends BaseController {
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
             @ApiImplicitParam(name = "reason", value = "取消原因", required = true, dataType = "String")})
     public HttpResponseResult cancelQuitMusicGroup(String musicGroupId, String reason) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        Integer userId = sysUser.getId();
-
-        return succeed(musicGroupService.cancelQuitMusicGroup(userId, musicGroupId, reason));
+        return succeed(musicGroupService.cancelQuitMusicGroup(sysUserService.getUserId(), musicGroupId, reason));
     }
 
     @ApiOperation(value = "查询是否有待支付的报名订单")
     @GetMapping("/checkWaitPayApplyOrder")
     @ApiImplicitParams({@ApiImplicitParam(name = "registerId", value = "注册id", required = true, dataType = "int")})
     public HttpResponseResult<StudentPaymentOrder> checkWaitPayApplyOrder(Long registerId) throws Exception {
-
         StudentRegistration studentRegistration = studentRegistrationService.get(registerId);
         if (studentRegistration == null) {
             return failed("报名信息有误,请核查");
@@ -270,8 +247,7 @@ public class MusicGroupController extends BaseController {
     @ApiOperation(value = "续费")
     @PostMapping("/renew")
     public HttpResponseResult renew(@RequestBody RegisterPayDto renewParamDto) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        Integer userId = sysUser.getId();
+        Integer userId = sysUserService.getUserId();
         Long calenderId = renewParamDto.getCalenderId();
         if(calenderId == null){
             throw new BizException("参数校验失败");

+ 9 - 26
mec-teacher/src/main/java/com/ym/mec/teacher/controller/EduRepairController.java

@@ -1,7 +1,5 @@
 package com.ym.mec.teacher.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.entity.StudentGoodsSell;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -15,7 +13,6 @@ import com.ym.mec.biz.dal.page.GoodsSellQueryInfo;
 import com.ym.mec.biz.service.*;
 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.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -35,7 +32,7 @@ import java.util.Objects;
 public class EduRepairController extends BaseController {
 
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
     @Autowired
     private TeacherService teacherService;
     @Autowired
@@ -63,10 +60,6 @@ public class EduRepairController extends BaseController {
     @ApiOperation("添加商品销售订单")
     @PostMapping(value = "/addGoodsSellOrder")
     public HttpResponseResult addGoodsSellOrder(@RequestBody StudentGoodsSell studentGoodsSell) throws Exception {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("请登录");
-        }
         if (studentGoodsSell.getIsRepeatPay() == false) {
             List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(GroupType.GOODS_SELL, null, studentGoodsSell.getUserId(), DealStatusEnum.ING,
                     OrderTypeEnum.RENEW);
@@ -74,8 +67,9 @@ public class EduRepairController extends BaseController {
                 return failed(HttpStatus.CONTINUE, "该学员有待支付的订单");
             }
         }
-        studentGoodsSell.setTeacherId(sysUser.getId());
-        studentGoodsSell.setAuthorUser(sysUser.getId());
+        Integer userId = sysUserService.getUserId();
+        studentGoodsSell.setTeacherId(userId);
+        studentGoodsSell.setAuthorUser(userId);
         Map map = studentRepairService.addGoodsSellOrder(studentGoodsSell);
         if (map.containsKey("tradeState")) {
             return failed(HttpStatus.CREATED, map, "恭喜您,购买成功!");
@@ -86,10 +80,6 @@ public class EduRepairController extends BaseController {
     @ApiOperation("获取学生信息")
     @GetMapping(value = "/getStudentInfo")
     public HttpResponseResult getStudentInfo(Integer studentId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
         return succeed(studentRepairService.getStudentInfo(studentId));
     }
 
@@ -97,19 +87,16 @@ public class EduRepairController extends BaseController {
     @GetMapping("/queryGoodsPage")
     public Object queryPage(GoodsQueryInfo queryInfo) {
         queryInfo.setOrganId(null);
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
+        Teacher teacher = teacherService.get(sysUserService.getUserId());
+        if (Objects.isNull(teacher.getTeacherOrganId())) {
+            return failed("用户所在分部异常");
         }
-        Teacher teacher = teacherService.get(sysUser.getId());
         if (queryInfo.getStudentShowOrganId() == null &&
                 queryInfo.getEducationShowOrganId() == null &&
                 queryInfo.getCourseFeeShowOrganId() == null &&
                 queryInfo.getMemberFeeShowOrganId() == null &&
                 queryInfo.getReplacementShowOrganId() == null) {
-            queryInfo.setEducationShowOrganId(teacher.getOrganId().toString());
-        } else if (Objects.isNull(teacher.getOrganId())) {
-            return failed("用户所在分部异常");
+            queryInfo.setEducationShowOrganId(teacher.getTeacherOrganId().toString());
         }
         return succeed(goodsService.queryPage(queryInfo));
     }
@@ -123,11 +110,7 @@ public class EduRepairController extends BaseController {
     @ApiOperation(value = "分页查询教务老师关联的学员商品订单")
     @GetMapping("/queryStudentGoodsOrders")
     public Object queryStudentGoodsOrders(GoodsSellQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        queryInfo.setTeacherId(sysUser.getId());
+        queryInfo.setTeacherId(sysUserService.getUserId());
         return succeed(studentGoodsSellService.queryStudentGoodsOrders(queryInfo));
     }
 

+ 8 - 30
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java

@@ -1,10 +1,10 @@
 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.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.StudentInstrumentDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.MusicGroupQuitDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
@@ -23,7 +23,6 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
@@ -43,7 +42,7 @@ public class MusicGroupQuitController extends BaseController {
     @Autowired
     private StudentRegistrationService studentRegistrationService;
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
     @Autowired
     private StudentInstrumentDao studentInstrumentDao;
     @Autowired
@@ -106,8 +105,7 @@ public class MusicGroupQuitController extends BaseController {
         if (musicGroupQuit == null) {
             return failed("参数不正确");
         }
-
-        SysUser user = sysUserFeignService.queryUserById(musicGroupQuit.getUserId());
+        SysUser user = sysUserService.queryUserById(musicGroupQuit.getUserId());
         musicGroupQuit.getUser().setUsername(user.getUsername());
 
         MusicGroup musicGroup = musicGroupService.get(musicGroupQuit.getMusicGroupId());
@@ -168,10 +166,7 @@ public class MusicGroupQuitController extends BaseController {
     @PostMapping("/apply")
     @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/apply')")
     public HttpResponseResult applyQuitMusicGroup(@RequestBody MusicGroupQuit musicGroupQuit){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
         List<SysUserRoleEnum> roleIds = employeePositionService.queryAllRole(sysUser.getId(),sysUser.getIsSuperAdmin());
         return succeed(musicGroupService.applyQuitMusicGroup(roleIds, musicGroupQuit, sysUser.getId()));
     }
@@ -180,10 +175,7 @@ public class MusicGroupQuitController extends BaseController {
     @PostMapping("/quitMusicGroup")
     @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/quitMusicGroup')")
     public HttpResponseResult quitMusicGroup(@RequestBody MusicGroupQuit musicGroupQuit){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null || sysUser.getId() == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
         List<SysUserRoleEnum> roleIds = employeePositionService.queryAllRole(sysUser.getId(),sysUser.getIsSuperAdmin());
 		if (!(roleIds.contains(SysUserRoleEnum.ORGAN_MANAGER) || roleIds.contains(SysUserRoleEnum.EDUCATION))) {
 			return failed("未经授权,不能操作");
@@ -195,10 +187,7 @@ public class MusicGroupQuitController extends BaseController {
     @PostMapping("/batchQuitMusicGroup")
     @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/batchQuitMusicGroup')")
     public HttpResponseResult batchQuitMusicGroup(@RequestBody List<MusicGroupQuit> musicGroupQuits) throws Exception {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
         List<SysUserRoleEnum> roleIds = employeePositionService.queryAllRole(sysUser.getId(),sysUser.getIsSuperAdmin());
 		if (!(roleIds.contains(SysUserRoleEnum.ORGAN_MANAGER) || roleIds.contains(SysUserRoleEnum.EDUCATION))) {
 			throw new BizException("未经授权,不能操作");
@@ -212,18 +201,7 @@ public class MusicGroupQuitController extends BaseController {
     @ApiOperation(value = "一键退团")
     @PostMapping("/directQuitMusicGroup")
     @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/directQuitMusicGroup')")
-    @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "userId", value = "用户编号", required = true, dataType = "Integer"),
-            @ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "isRefundCourseFee", value = "是否退还课程费用", required = true, dataType = "Boolean"),
-            @ApiImplicitParam(name = "isRefundInstrumentFee", value = "是否退还乐器费用(租金)", required = true, dataType = "Boolean"),
-            @ApiImplicitParam(name = "isRefundTeachingAssistantsFee", value = "是否退还教辅费用", required = true, dataType = "Boolean"),
-            @ApiImplicitParam(name = "maintenanceFee", value = "退乐保费用", required = true, dataType = "num"),
-    })
-    public HttpResponseResult directQuitMusicGroup(String musicGroupId, Integer userId, String reason, boolean isRefundCourseFee,
-                                                   boolean isRefundInstrumentFee, boolean isRefundTeachingAssistantsFee,boolean isRefundMemberFee,
-                                                   BigDecimal maintenanceFee) throws Exception {
-        return succeed(musicGroupService.directQuitMusicGroup(musicGroupId, userId, reason, isRefundCourseFee, isRefundInstrumentFee,
-                isRefundTeachingAssistantsFee,isRefundMemberFee, maintenanceFee));
+    public HttpResponseResult directQuitMusicGroup(@RequestBody MusicGroupQuitDto musicGroupQuitDto) throws Exception {
+        return succeed(musicGroupService.directQuitMusicGroup(musicGroupQuitDto));
     }
 }

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

@@ -84,9 +84,12 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "获取分部所有老师")
     @GetMapping("/findTeachers")
     @PreAuthorize("@pcs.hasPermissions('teacher/findTeachers','system')")
-    public HttpResponseResult findTeachers(String organId) {
+    public HttpResponseResult findTeachers(String organId,Boolean demissionFlag) {
         organId = organizationService.getEmployeeOrgan(organId);
-        return succeed(teacherService.findTeachers(organId));
+        if (demissionFlag == null){
+            demissionFlag = false;
+        }
+        return succeed(teacherService.findTeachers(organId,demissionFlag));
     }
 
     @ApiOperation(value = "根据科目获取部门下的教师")

+ 9 - 5
mec-web/src/main/resources/exportColumnMapper.ini

@@ -171,12 +171,12 @@ headColumns = ["分部", "单位编号", "单位名称", "是否启用","乐团
 fieldColumns = ["organization.name", "id", "name", "isEnable == true ? '是':'否'", "realName", "isEnable == true ? '开启' : '未开启'"]
 
 [财务管理导出1]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
-fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
+headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [财务管理导出2]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
-fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount" , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
+headColumns = ["序号", "业务分部", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount" , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee",     "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [老师默认课酬导出]
 headColumns = ["老师编号", "姓名", "分部", "工作类型", "在职状态", "老师状态", "1v1", "1v2", "1v3", "1v4", "1v5", "1v6", "1v7","网管课", "单技课2.0(主教)", "合奏课2.0(主教)", "综合课2.0(主教)", "集训单技课2.0(主教)", "集训合奏课2.0(主教)","基础技能课2.0(主教)", "课堂课(主教)", "单技课3.0(主教)", "合奏课3.0(主教)", "综合课3.0(主教)", "集训单技课3.0(主教)", "集训合奏课3.0(主教)","基础技能课3.0(主教)", "单技课2.0(助教)", "合奏课2.0(助教)", "综合课2.0(助教)", "集训单技课2.0(助教)", "集训合奏课2.0(助教)","基础技能课2.0(助教)", "课堂课(助教)", "单技课3.0(助教)", "合奏课3.0(助教)", "综合课3.0(助教)", "集训单技课3.0(助教)", "集训合奏课3.0(助教)","基础技能课3.0(助教)", "网络基础训练课1v3", "网络基础训练课1v4", "网络基础训练课1v5", "乐团网管课1v1"]
@@ -292,4 +292,8 @@ fieldColumns = ["userId","username","musicGroupName","organName","servePeriod",
 
 [训练统计导出]
 headColumns = ["分部", "学员编号", "学员姓名", "手机号", "训练时长(分)", "训练次数", "训练天数", "评测次数"]
-fieldColumns = ["organName", "userId", "username","phone", "playTime", "playNum", "playDays","heardNum"]
+fieldColumns = ["organName", "userId", "username","phone", "playTime", "playNum", "playDays","heardNum"]
+
+[回访统计导出]
+headColumns = ["分部", "预计回访人数", "实际回访人数", "覆盖率"]
+fieldColumns = ["organName","expectVisitNum","visitNum","coverRate"]