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

Merge branch 'online1' into musicGroup_reg_feature_5_8

周箭河 4 éve
szülő
commit
4e02a3f538
25 módosított fájl, 505 hozzáadás és 200 törlés
  1. 17 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  2. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentInstrumentDao.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentApplyDetailDto.java
  5. 55 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java
  8. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeQueryInfo.java
  9. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  10. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  11. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  12. 0 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  13. 33 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  14. 10 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  15. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  16. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  17. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  18. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  19. 22 50
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  20. 74 14
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  21. 36 0
      mec-biz/src/main/resources/config/mybatis/StudentInstrumentMapper.xml
  22. 2 2
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  23. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  24. 107 90
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java
  25. 10 10
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

+ 17 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.Update;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
 
@@ -22,8 +23,6 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * 批量插入学生上课签到情况
      */
     int addStudentAttendances(List<StudentAttendance> studentAttendances);
-    
-    int batchUpdate(List<StudentAttendance> studentAttendances);
 
     /**
      * @describe
@@ -328,4 +327,20 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @return
      */
     int countErrorAttendance(Integer courseScheduleId);
+
+    /**
+     * 获取当月请假次数
+     * @param userId
+     * @param month
+     * @return
+     */
+    int getLeaveNum(@Param("userId") Integer userId, @Param("month") String month, @Param("attendanceId") Long attendanceId);
+
+    /**
+     * 获取学员当月请假次数
+     * @param userIds
+     * @param month
+     * @return
+     */
+    List<Map<Integer, Long>> queryLeaveNum(@Param("userIds") Set<Integer> userIds, @Param("month") String month);
 }

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentInstrumentDao.java

@@ -70,8 +70,25 @@ public interface StudentInstrumentDao extends BaseDAO<Long, StudentInstrument> {
 
     /**
      * 获取学生的乐团信息
+     *
      * @param userId
      * @return
      */
     StudentRegistration findStudentMusicGroup(@Param("userId") Integer userId);
+
+    /**
+     * 获取学生在有效期内的乐保数量
+     *
+     * @param studentIds
+     * @return
+     */
+    List<StudentInstrument> getStudentsMaintenanceNum(@Param("studentIds") List<Integer> studentIds, @Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取学生有效期内的乐保数量
+     *
+     * @param studentId
+     * @return
+     */
+    StudentInstrument getStudentMaintenance(@Param("studentId") Integer studentId, @Param("musicGroupId") String musicGroupId);
 }

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

@@ -97,6 +97,9 @@ public class MusicGroupStudentsDto{
     private Integer comeOnPackage;
     private String comeOnPackageStr;
 
+    @ApiModelProperty(value = "是否有乐保",required = false)
+    private Boolean hasMaintenance = false;
+
     public Integer getStudentRegistrationId() {
         return studentRegistrationId;
     }
@@ -383,4 +386,12 @@ public class MusicGroupStudentsDto{
     public void setSubjectChange(SubjectChange subjectChange) {
         this.subjectChange = subjectChange;
     }
+
+    public Boolean getHasMaintenance() {
+        return hasMaintenance;
+    }
+
+    public void setHasMaintenance(Boolean hasMaintenance) {
+        this.hasMaintenance = hasMaintenance;
+    }
 }

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

@@ -74,6 +74,9 @@ public class StudentApplyDetailDto{
     @ApiModelProperty(value = "回访次数",required = false)
     private Integer visitNum;
 
+    @ApiModelProperty(value = "是否有乐保",required = false)
+    private Boolean hasMaintenance = false;
+
     public KitGroupPurchaseTypeEnum getKitGroupPurchaseTypeEnum() {
         return kitGroupPurchaseTypeEnum;
     }
@@ -225,4 +228,12 @@ public class StudentApplyDetailDto{
     public void setVisitNum(Integer visitNum) {
         this.visitNum = visitNum;
     }
+
+    public Boolean getHasMaintenance() {
+        return hasMaintenance;
+    }
+
+    public void setHasMaintenance(Boolean hasMaintenance) {
+        this.hasMaintenance = hasMaintenance;
+    }
 }

+ 55 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java

@@ -36,6 +36,61 @@ public class TeacherServeDto {
     @ApiModelProperty(value = "工作性质(兼职 PART_JOB、全职FULL_JOB)", required = false)
     private JobNatureEnum jobNature;
 
+    /** 预期训练次数 */
+    private Integer expectExercisesNum;
+
+    /** 实际训练次数 */
+    private Integer actualExercisesNum;
+
+    /** 提交训练次数 */
+    private Integer exercisesReplyNum;
+
+    /** 训练评价次数 */
+    private Integer exercisesMessageNum;
+
+    /** 及时训练评价次数 */
+    private Integer exercisesMessageTimelyNum;
+
+    public Integer getExpectExercisesNum() {
+        return expectExercisesNum;
+    }
+
+    public void setExpectExercisesNum(Integer expectExercisesNum) {
+        this.expectExercisesNum = expectExercisesNum;
+    }
+
+    public Integer getActualExercisesNum() {
+        return actualExercisesNum;
+    }
+
+    public void setActualExercisesNum(Integer actualExercisesNum) {
+        this.actualExercisesNum = actualExercisesNum;
+    }
+
+    public Integer getExercisesReplyNum() {
+        return exercisesReplyNum;
+    }
+
+    public void setExercisesReplyNum(Integer exercisesReplyNum) {
+        this.exercisesReplyNum = exercisesReplyNum;
+    }
+
+    public Integer getExercisesMessageNum() {
+        return exercisesMessageNum;
+    }
+
+    public void setExercisesMessageNum(Integer exercisesMessageNum) {
+        this.exercisesMessageNum = exercisesMessageNum;
+    }
+
+    public Integer getExercisesMessageTimelyNum() {
+        return exercisesMessageTimelyNum;
+    }
+
+    public void setExercisesMessageTimelyNum(Integer exercisesMessageTimelyNum) {
+        this.exercisesMessageTimelyNum = exercisesMessageTimelyNum;
+    }
+
     public JobNatureEnum getJobNature() {
         return jobNature;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.ym.mec.auth.api.entity.SysUser;
@@ -38,6 +39,9 @@ public class MusicGroupQuit {
 	
 	private MusicGroup musicGroup = new MusicGroup();
 
+	@ApiModelProperty(value = "是否有乐保",required = false)
+	private Boolean hasMaintenance = false;
+
 	public void setId(Long id) {
 		this.id = id;
 	}
@@ -131,4 +135,11 @@ public class MusicGroupQuit {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public Boolean getHasMaintenance() {
+		return hasMaintenance;
+	}
+
+	public void setHasMaintenance(Boolean hasMaintenance) {
+		this.hasMaintenance = hasMaintenance;
+	}
 }

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

@@ -70,7 +70,7 @@ public class StudentAttendance {
 	private StudentAttendanceStatusEnum status;
 
 	@ApiModelProperty(value = "是否回访)",required = false)
-	private YesOrNoEnum visitFlag;
+	private YesOrNoEnum visitFlag = YesOrNoEnum.NO;
 
 	private Date signInTime;
 

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeQueryInfo.java

@@ -32,6 +32,18 @@ public class TeacherServeQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "工作性质(兼职 PART_JOB、全职FULL_JOB)", required = false)
     private JobNatureEnum jobNature;
 
+    @ApiModelProperty(value = "实际训练次数是否达到预期")
+    private Integer actualExercisesNumIsAchieve;
+
+    @ApiModelProperty(value = "提交训练次数是否达到预期")
+    private Integer exercisesReplyNumIsAchieve;
+
+    @ApiModelProperty(value = "训练评价次数是否达到预期")
+    private Integer exercisesMessageNumIsAchieve;
+
+    @ApiModelProperty(value = "及时训练评价次数是否达到预期")
+    private Integer exercisesMessageTimelyNumIsAchieve;
+
     public JobNatureEnum getJobNature() {
         return jobNature;
     }
@@ -103,4 +115,36 @@ public class TeacherServeQueryInfo extends QueryInfo {
     public void setSunday(String sunday) {
         this.sunday = sunday;
     }
+
+    public Integer getActualExercisesNumIsAchieve() {
+        return actualExercisesNumIsAchieve;
+    }
+
+    public void setActualExercisesNumIsAchieve(Integer actualExercisesNumIsAchieve) {
+        this.actualExercisesNumIsAchieve = actualExercisesNumIsAchieve;
+    }
+
+    public Integer getExercisesReplyNumIsAchieve() {
+        return exercisesReplyNumIsAchieve;
+    }
+
+    public void setExercisesReplyNumIsAchieve(Integer exercisesReplyNumIsAchieve) {
+        this.exercisesReplyNumIsAchieve = exercisesReplyNumIsAchieve;
+    }
+
+    public Integer getExercisesMessageNumIsAchieve() {
+        return exercisesMessageNumIsAchieve;
+    }
+
+    public void setExercisesMessageNumIsAchieve(Integer exercisesMessageNumIsAchieve) {
+        this.exercisesMessageNumIsAchieve = exercisesMessageNumIsAchieve;
+    }
+
+    public Integer getExercisesMessageTimelyNumIsAchieve() {
+        return exercisesMessageTimelyNumIsAchieve;
+    }
+
+    public void setExercisesMessageTimelyNumIsAchieve(Integer exercisesMessageTimelyNumIsAchieve) {
+        this.exercisesMessageTimelyNumIsAchieve = exercisesMessageTimelyNumIsAchieve;
+    }
 }

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

@@ -166,10 +166,11 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @param isRefundCourseFee 是否退还课程费用
 	 * @param isRefundInstrumentFee 是否退还乐器费用
 	 * @param isRefundTeachingAssistantsFee 是否退还教辅费用
+	 * @param maintenanceFee
 	 * @return
 	 */
 	boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-			boolean isRefundTeachingAssistantsFee);
+								  boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee);
 
 	/**
 	 * 一键退团
@@ -179,10 +180,11 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @param isRefundCourseFee 是否退还课程费用
 	 * @param isRefundInstrumentFee 是否退还乐器费用
 	 * @param isRefundTeachingAssistantsFee 是否退还教辅费用
+	 * @param maintenanceFee
 	 * @return
 	 */
 	boolean directQuitMusicGroup(String musicGroupId, Integer userId, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-			boolean isRefundTeachingAssistantsFee);
+								 boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee);
 
 	/**
 	 *  续费

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -1421,8 +1421,11 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findByCourseSchedules(Arrays.asList(courseScheduleId));
         Map<Integer, TeacherAttendance> idTeacherAttendanceMap = teacherAttendances.stream().collect(Collectors.toMap(TeacherAttendance::getTeacherId, t -> t, (t1, t2) -> t1));
         List<SimpleUserDto> usersSimpleInfo = new ArrayList<>();
+        Map<Integer, Teacher> idTeacherMap = new HashMap<>();
         if(!CollectionUtils.isEmpty(teacherIds)){
             usersSimpleInfo = teacherDao.getUsersSimpleInfo(new ArrayList<>(teacherIds));
+            List<Teacher> teachers = teacherDao.findByTeacherIds(new ArrayList<>(teacherIds));
+            idTeacherMap = teachers.stream().collect(Collectors.toMap(Teacher::getId, t->t, (t1, t2)->t1));
         }
         Map<Integer, SimpleUserDto> idUserMap = usersSimpleInfo.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, s -> s));
 
@@ -1444,10 +1447,15 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 t.setSignOutStatus(Objects.nonNull(teacherAttendance.getSignOutStatus())?(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())?SignOutStatusEnum.UNUSUAL:SignOutStatusEnum.NORMAL):SignOutStatusEnum.NO);
                 t.setSignInLongitudeLatitude(teacherAttendance.getSignInLongitudeLatitude());
                 t.setSignOutLongitudeLatitude(teacherAttendance.getSignOutLongitudeLatitude());
+                t.setComplaintsStatus(teacherAttendance.getComplaintsStatus());
             }
             if(Objects.nonNull(school)){
                 t.setSchoolLongitudeLatitude(school.getLongitudeLatitude());
             }
+            if(idTeacherMap.containsKey(courseScheduleTeacherSalary.getUserId())){
+                Teacher teacher = idTeacherMap.get(courseScheduleTeacherSalary.getUserId());
+                t.setJobNature(teacher.getJobNature());
+            }
             result.add(t);
         }
         return result;

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

@@ -254,6 +254,10 @@ public class ExportServiceImpl implements ExportService {
             if (row.getType().equals(OrderTypeEnum.OUTORDER) && row.getMusicGroupId() != null) {
                 if (cooperationOrganMap.containsKey(Integer.valueOf(row.getMusicGroupId()))) {
                     row.setCooperationOrganName(cooperationOrganMap.get(Integer.valueOf(row.getMusicGroupId())));
+                    CooperationOrgan cooperationOrganEduTeacher = musicGroupDao.findCooperationOrganEduTeacher(Integer.valueOf(row.getMusicGroupId()));
+                    if (cooperationOrganEduTeacher != null) {
+                        row.setEduTeacher(cooperationOrganEduTeacher.getLinkman());
+                    }
                 }
             }
             if (row.getMusicGroupId() != null && row.getMusicGroupId().equals("null")) {
@@ -502,6 +506,10 @@ public class ExportServiceImpl implements ExportService {
             if (row.getType().equals(OrderTypeEnum.OUTORDER) && row.getMusicGroupId() != null) {
                 if (cooperationOrganMap.containsKey(Integer.valueOf(row.getMusicGroupId()))) {
                     row.setCooperationOrganName(cooperationOrganMap.get(Integer.valueOf(row.getMusicGroupId())));
+                    CooperationOrgan cooperationOrganEduTeacher = musicGroupDao.findCooperationOrganEduTeacher(Integer.valueOf(row.getMusicGroupId()));
+                    if (cooperationOrganEduTeacher != null) {
+                        row.setEduTeacher(cooperationOrganEduTeacher.getLinkman());
+                    }
                 }
             }
             if (row.getMusicGroupId() != null && row.getMusicGroupId().equals("null")) {

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

@@ -57,12 +57,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
-	private SysMessageDao sysMessageDao;
-	@Autowired
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 	@Autowired
-	private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
-	@Autowired
 	private ClassGroupDao classGroupDao;
 
 	private static ThreadLocal<Set<Integer>> organIds = new ThreadLocal<Set<Integer>>(){
@@ -448,8 +444,6 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		if(StringUtils.isNotBlank(organIdsStr)){
 			organIds = Arrays.stream(organIdsStr.split(",")).map(Integer::new).collect(Collectors.toSet());
 		}
-		Date date = new Date();
-
 		List<IndexErrInfoDto> all = new ArrayList<>();
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());

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

@@ -3,7 +3,6 @@ package com.ym.mec.biz.service.impl;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.ING;
 import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-import static com.ym.mec.biz.dal.enums.IndexErrorType.WAIT_CREATE_PAYMENT_CALENDER;
 import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 
 import java.io.IOException;
@@ -234,6 +233,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private GroupEventSource groupEventSource;
 
+    @Autowired
+    private StudentInstrumentDao studentInstrumentDao;
+
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
     private SimpleDateFormat sdf_hms = new SimpleDateFormat("HH:mm:ss");
@@ -1675,7 +1677,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-                                         boolean isRefundTeachingAssistantsFee) {
+                                         boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee) {
 
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(id);
         if (musicGroupQuit == null) {
@@ -1842,6 +1844,20 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 }
             }
 
+            //退乐保费用
+            if (maintenanceFee != null) {
+                StudentInstrument studentMaintenance = studentInstrumentDao.getStudentMaintenance(userId, musicGroupId);
+                if (maintenanceFee.compareTo(BigDecimal.ZERO) > 0) {
+                    if (studentMaintenance == null) {
+                        throw new BizException("学生没有有效期内的乐保,不能退乐保费用");
+                    }
+                }
+                amount = amount.add(maintenanceFee);
+                if (studentMaintenance != null) {
+                    studentMaintenance.setDelFlag(1);
+                    studentInstrumentDao.update(studentMaintenance);
+                }
+            }
 
             if (amount.doubleValue() > 0) {
                 // 增加交易流水
@@ -1855,7 +1871,7 @@ 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 isRefundTeachingAssistantsFee, BigDecimal maintenanceFee) {
 
         SysUser sysUser = sysUserFeignService.queryUserById(userId);
         if (sysUser == null) {
@@ -2033,6 +2049,20 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             }
         }
 
+        //退乐保费用
+        if (maintenanceFee != null) {
+            StudentInstrument studentMaintenance = studentInstrumentDao.getStudentMaintenance(userId, musicGroupId);
+            if (maintenanceFee.compareTo(BigDecimal.ZERO) > 0) {
+                if (studentMaintenance == null) {
+                    throw new BizException("学生没有有效期内的乐保,不能退乐保费用");
+                }
+            }
+            amount = amount.add(maintenanceFee);
+            if (studentMaintenance != null) {
+                studentMaintenance.setDelFlag(1);
+                studentInstrumentDao.update(studentMaintenance);
+            }
+        }
 
         if (amount.doubleValue() > 0) {
             // 增加交易流水

+ 10 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -10,6 +10,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.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,14 +36,6 @@ import com.ym.mec.biz.dal.dao.StudentAttendanceDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
-import com.ym.mec.biz.dal.dto.CourseScheduleResponse;
-import com.ym.mec.biz.dal.dto.ExportStudentAttendanceDto;
-import com.ym.mec.biz.dal.dto.StudentAttendanceDto;
-import com.ym.mec.biz.dal.dto.StudentAttendanceResponse;
-import com.ym.mec.biz.dal.dto.StudentAttendanceStatisticsResponse;
-import com.ym.mec.biz.dal.dto.StudentAttendanceStatusCountDto;
-import com.ym.mec.biz.dal.dto.StudentPersonalAttendanceDto;
-import com.ym.mec.biz.dal.dto.StudentStatusCountUtilEntity;
 import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
@@ -315,6 +308,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 
         List<Integer> userIds = studentAttendances.stream().map(StudentAttendance::getUserId).collect(Collectors.toList());
         studentAttendanceDao.deleteStudentAttendancesByCourseAndUsers(studentAttendanceInfo.getCourseScheduleId().longValue(), userIds);
+        //获取非请假的学员考勤
         for (StudentAttendance studentAttendance : studentAttendances) {
             studentAttendance.setGroupType(courseSchedule.getGroupType());
             studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
@@ -414,7 +408,6 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         studentAttendance.setUserId(userId);
         studentAttendance.setGroupType(courseSchedule.getGroupType());
         studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
-
         if (Objects.nonNull(studentAttendance.getId())) {
             studentAttendanceDao.update(studentAttendance);
         } else {
@@ -670,13 +663,14 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
             if (dataList == null) {
                 dataList = new ArrayList<>();
             }
-            
-            for(StudentAttendance sa : dataList){
-            	if(sa.getGroupType() == GroupType.MUSIC){
-            		Set<Integer> userId = new HashSet<Integer>();
-            		userId.add(sa.getUserId());
-            		Map<Integer,String> paymentStatusMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.queryUserCoursePaymentStatus(userId,sa.getMusicGroupId()));
-            		sa.setPaymentStatus(paymentStatusMap.get(sa.getUserId()));
+            if(dataList.size() > 0){
+                for(StudentAttendance sa : dataList){
+                    if(sa.getGroupType() == GroupType.MUSIC){
+                        Set<Integer> userId = new HashSet<Integer>();
+                        userId.add(sa.getUserId());
+                        Map<Integer,String> paymentStatusMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.queryUserCoursePaymentStatus(userId,sa.getMusicGroupId()));
+                        sa.setPaymentStatus(paymentStatusMap.get(sa.getUserId()));
+                    }
                 }
             }
         }

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

@@ -363,7 +363,7 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			}
 			List<Integer> subjectIds = new ArrayList<>();
 			for (CourseSchedule courseSchedule : courseSchedules) {
-				if(idClassGroupMap.containsKey(courseSchedule.getClassGroupId())){
+				if(idClassGroupMap.containsKey(courseSchedule.getClassGroupId())&&StringUtils.isNotBlank(idClassGroupMap.get(courseSchedule.getClassGroupId()).getSubjectIdList())){
 					List<Integer> ids = Arrays.stream(idClassGroupMap.get(courseSchedule.getClassGroupId()).getSubjectIdList().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
 					subjectIds.addAll(ids);
 				}

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

@@ -366,7 +366,7 @@ public class StudentInstrumentServiceImpl extends BaseServiceImpl<Long, StudentI
             studentInstrument = new StudentInstrument();
             studentInstrument.setStudentId(subjectChange.getStudentId());
             studentInstrument.setOrganId(subjectChange.getOrganId());
-            studentInstrument.setOrderId(subjectChange.getOrderId().longValue());
+            studentInstrument.setOrderId(subjectChange.getOriginalOrderId().longValue());
             studentInstrument.setStatus(0);
         }
         studentInstrument.setChangeOrderId(subjectChange.getOrderId().longValue());

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

@@ -111,6 +111,10 @@ public class StudentManageServiceImpl implements StudentManageService {
     private WebFeignService webFeignService;
     @Autowired
     private StudentCourseHomeworkDao studentCourseHomeworkDao;
+    @Autowired
+    private StudentAttendanceDao studentAttendanceDao;
+    @Autowired
+    private StudentInstrumentDao studentInstrumentDao;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -500,12 +504,19 @@ public class StudentManageServiceImpl implements StudentManageService {
             List<Integer> hasCourseStudent = courseScheduleDao.findHasCourseStudent(collect,"VIP,PRACTICE");
             List<SubjectChange> waitPayChange = subjectChangeDao.getMusicGroupWaitPay(queryInfo.getMusicGroupId());
             Map<Integer, List<SubjectChange>> studentWaitPayChange = waitPayChange.stream().collect(Collectors.groupingBy(SubjectChange::getStudentId));
+            //查询是否有有效期内乐保
+            List<StudentInstrument> studentsMaintenanceNum = studentInstrumentDao.getStudentsMaintenanceNum(collect,queryInfo.getMusicGroupId());
+            Map<Integer, Integer> studentMaintenanceMap = studentsMaintenanceNum.stream().collect(Collectors.toMap(StudentInstrument::getStudentId, StudentInstrument::getGoodsId));
+
             dataList.forEach(e->{
                 e.setHasCourse(hasCourseStudent.contains(e.getUserId()));
                 e.setNoPaymentAmount(totalAmountMap.get(e.getUserId()));
                 if (studentWaitPayChange.containsKey(e.getUserId())) {
                     e.setSubjectChange(studentWaitPayChange.get(e.getUserId()).get(0));
                 }
+                if(studentMaintenanceMap.containsKey(e.getUserId())){
+                    e.setHasMaintenance(true);
+                }
             });
         }
         pageInfo.setRows(dataList);

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

@@ -147,6 +147,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     private ImGroupDao imGroupDao;
     @Autowired
     private EmployeeDao employeeDao;
+    @Autowired
+    private StudentInstrumentDao studentInstrumentDao;
 
     @Override
     public BaseDAO<Long, StudentRegistration> getDAO() {
@@ -168,10 +170,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         params.put("offset", pageInfo.getOffset());
         if (queryInfo.getPage() <= pageInfo.getTotalPage()) {
             dataList = studentRegistrationDao.queryStudentDetailPage(params);
-            Set<Integer> subjectIds = dataList.stream().map(e -> e.getActualSubjectId()).collect(Collectors.toSet());
+            Set<Integer> subjectIds = dataList.stream().map(StudentApplyDetailDto::getActualSubjectId).collect(Collectors.toSet());
+            List<Integer> studentIds = dataList.stream().map(StudentApplyDetailDto::getStudentId).collect(Collectors.toList());
             Map<Integer, String> subjectMap = MapUtil.convertIntegerMap(musicGroupSubjectPlanDao.findSubjectMap(subjectIds, queryInfo.getMusicGroupId()));
             List<SubjectChange> waitPayChange = subjectChangeDao.getMusicGroupWaitPay(queryInfo.getMusicGroupId());
             Map<Integer, List<SubjectChange>> studentWaitPayChange = waitPayChange.stream().collect(Collectors.groupingBy(SubjectChange::getStudentId));
+            //查询是否有有效期内乐保
+            List<StudentInstrument> studentsMaintenanceNum = studentInstrumentDao.getStudentsMaintenanceNum(studentIds,queryInfo.getMusicGroupId());
+            Map<Integer, Integer> studentMaintenanceMap = studentsMaintenanceNum.stream().collect(Collectors.toMap(StudentInstrument::getStudentId, StudentInstrument::getGoodsId));
             dataList.forEach(e -> {
                 if (StringUtils.isNotBlank(subjectMap.get(e.getActualSubjectId()))) {
                     e.setKitGroupPurchaseTypeEnum(KitGroupPurchaseTypeEnum.valueOf(subjectMap.get(e.getActualSubjectId())));
@@ -179,6 +185,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 if (studentWaitPayChange.containsKey(e.getStudentId())) {
                     e.setSubjectChange(studentWaitPayChange.get(e.getStudentId()).get(0));
                 }
+                if(studentMaintenanceMap.containsKey(e.getStudentId())){
+                    e.setHasMaintenance(true);
+                }
             });
         }
         pageInfo.setRows(dataList);

+ 22 - 50
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -61,12 +61,14 @@
         update_time_,remark_,current_class_times_,sign_in_time_,sign_out_time_,current_schedule_id_,visit_flag_,normal_remind_)
         VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{classGroupId},
         #{courseScheduleId},#{userId},#{teacherId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),now(),
-        #{remark},#{currentClassTimes},#{signInTime},#{signOutTime},#{currentScheduleId},#{visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{normalRemind})
+        #{remark},#{currentClassTimes},#{signInTime},#{signOutTime},#{currentScheduleId},#{visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        #{normalRemind})
     </insert>
 
     <insert id="addStudentAttendances" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
       INSERT INTO student_attendance (group_type_, music_group_id_, class_group_id_, course_schedule_id_,
-      user_id_, teacher_id_, status_, create_time_,update_time_, remark_ ,current_class_times_,sign_in_time_,sign_out_time_,current_schedule_id_,visit_flag_,normal_remind_)
+      user_id_, teacher_id_, status_, create_time_,update_time_, remark_ ,current_class_times_,sign_in_time_,
+                                      sign_out_time_,current_schedule_id_,visit_flag_,normal_remind_)
       VALUES
 	  <foreach collection="list" item="studentAttendance" separator=",">
           (#{studentAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -130,54 +132,6 @@
         WHERE id_ = #{id}
     </update>
     
-    <update id="batchUpdate"  parameterType="java.util.List">  
-    	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
-	        update student_attendance
-	        <set>
-	            <if test="item.visitFlag != null">
-	                visit_flag_ = #{item.visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-	            </if>
-	            <if test="item.status != null">
-	                status_ = #{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-	            </if>
-                <if test="item.signOutTime != null">
-                    sign_out_time_ = #{item.signOutTime},
-                </if>
-                <if test="item.signInTime != null">
-                    sign_in_time_ = #{item.signInTime},
-                </if>
-	            <if test="item.userId != null">
-	                user_id_ = #{item.userId},
-	            </if>
-	            <if test="item.remark != null">
-	                remark_ = #{item.remark},
-	            </if>
-	            <if test="item.classGroupId != null">
-	                class_group_id_ = #{item.classGroupId},
-	            </if>
-	            <if test="item.groupType != null">
-	                group_type_ = #{item.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-	            </if>
-	            <if test="item.teacherId != null">
-	                teacher_id_ = #{item.teacherId},
-	            </if>
-	            <if test="item.courseScheduleId != null">
-	                course_schedule_id_ = #{item.courseScheduleId},
-	            </if>
-	            <if test="item.musicGroupId != null">
-	                music_group_id_ = #{item.musicGroupId},
-	            </if>
-	            <if test="item.currentClassTimes != null">
-	                current_class_times_ = #{item.currentClassTimes},
-	            </if>
-                <if test="item.normalRemind != null">
-                    normal_remind_ = #{item.normalRemind},
-                </if>
-                update_time_=NOW()
-        	</set>
-	        where id_ = #{item.id}
-	    </foreach>      
-	</update>
     <update id="cleanCourseStudentSignOut">
         UPDATE student_attendance
         SET sign_out_time_= NULL
@@ -690,4 +644,22 @@
         LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
         WHERE (sa.status_ != 'NORMAL' OR sa.status_ IS NULL) AND cssp.course_schedule_id_ = #{courseScheduleId}
     </select>
+    <select id="getLeaveNum" resultType="java.lang.Integer">
+        SELECT COUNT(sa.id_) FROM student_attendance sa
+        LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
+        WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') = #{month} AND sa.user_id_ = #{userId} AND sa.status_ = 'LEAVE'
+        <if test="attendanceId != null">
+            AND sa.id_ != #{attendanceId}
+        </if>
+    </select>
+    <select id="queryLeaveNum" resultType="java.util.Map">
+        SELECT sa.user_id_ 'key',COUNT(sa.id_) 'value' FROM student_attendance sa
+        LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
+        WHERE sa.status_ = 'LEAVE' AND DATE_FORMAT(cs.class_date_,'%Y-%m') = #{month}
+        AND sa.user_id_ IN
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+        GROUP BY sa.user_id_
+    </select>
 </mapper>

+ 74 - 14
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -506,6 +506,11 @@
 		<result column="remind_time_" property="remindDate"/>
 		<result column="operator_name_" property="operatorName"/>
 		<result column="job_nature_" property="jobNature" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="expect_exercises_num_" property="expectExercisesNum" />
+		<result column="actual_exercises_num_" property="actualExercisesNum" />
+		<result column="exercises_reply_num_" property="exercisesReplyNum" />
+		<result column="exercises_message_num_" property="exercisesMessageNum" />
+		<result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum" />
 	</resultMap>
 
 	<sql id="queryTeacherServeInfoCondition">
@@ -548,6 +553,11 @@
 			sees.teacher_id_,
 			su.real_name_ teacher_name_,
 		    tea.job_nature_,
+			SUM(expect_exercises_num_) expect_exercises_num_,
+			SUM(actual_exercises_num_) actual_exercises_num_,
+			SUM(exercises_reply_num_) exercises_reply_num_,
+			SUM(exercises_message_num_) exercises_message_num_,
+			SUM(exercises_message_timely_num_) exercises_message_timely_num_,
 			SUM(CASE sees.serve_type_ WHEN 'HOMEWORK' THEN sees.expect_exercises_num_ ELSE 0 END) homework_num_,
 			SUM(CASE sees.serve_type_ WHEN 'EXERCISE' THEN 1 ELSE 0 END) exercise_num_,
 			SUM( sees.expect_exercises_num_-sees.not_over_course_num_ )> SUM( sees.actual_exercises_num_ ) un_done_
@@ -561,15 +571,40 @@
 			LEFT JOIN sys_user su ON tea.id_=su.id_
 		<include refid="queryTeacherServeInfoCondition" />
 		GROUP BY sees.monday_,sees.sunday_,sees.teacher_id_
-		<if test="unDone!=null">
-			HAVING
-			<if test="unDone==1">
-				SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_ )
+		<trim prefix="HAVING" prefixOverrides="AND">
+			<if test="unDone!=null">
+				<if test="unDone==1">
+					AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_ )
+				</if>
+				<if test="unDone==0">
+					AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM( sees.actual_exercises_num_ )
+				</if>
 			</if>
-			<if test="unDone==0">
-				SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM( sees.actual_exercises_num_ )
+			<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
+				AND SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_)
 			</if>
-		</if>
+			<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
+				AND SUM(actual_exercises_num_) &gt;= SUM(expect_exercises_num_)
+			</if>
+			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
+				AND SUM(exercises_reply_num_) &lt; SUM(actual_exercises_num_)
+			</if>
+			<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
+				AND SUM(exercises_reply_num_) &gt;= SUM(actual_exercises_num_)
+			</if>
+			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
+				AND SUM(exercises_message_num_) &lt; SUM(exercises_reply_num_)
+			</if>
+			<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
+				AND SUM(exercises_message_num_) &gt;= SUM(exercises_reply_num_)
+			</if>
+			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
+				AND SUM(exercises_message_timely_num_) &lt; SUM(exercises_message_num_)
+			</if>
+			<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
+				AND SUM(exercises_message_timely_num_) &gt;= SUM(exercises_message_num_)
+			</if>
+		</trim>
 		ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
 		<include refid="global.limit"></include>
 	</select>
@@ -586,15 +621,40 @@
 				</if>
 			<include refid="queryTeacherServeInfoCondition" />
 			GROUP BY sees.monday_,sees.sunday_,sees.teacher_id_
-			<if test="unDone!=null">
-				HAVING
-				<if test="unDone==1">
-					SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_ )
+			<trim prefix="HAVING" prefixOverrides="AND">
+				<if test="unDone!=null">
+					<if test="unDone==1">
+						AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &gt; SUM( sees.actual_exercises_num_ )
+					</if>
+					<if test="unDone==0">
+						AND SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM( sees.actual_exercises_num_ )
+					</if>
 				</if>
-				<if test="unDone==0">
-					SUM( sees.expect_exercises_num_-sees.not_over_course_num_ ) &lt;= SUM( sees.actual_exercises_num_ )
+				<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
+					AND SUM(actual_exercises_num_) &lt; SUM(expect_exercises_num_)
 				</if>
-			</if>
+				<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==1">
+					AND SUM(actual_exercises_num_) &gt;= SUM(expect_exercises_num_)
+				</if>
+				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
+					AND SUM(exercises_reply_num_) &lt; SUM(actual_exercises_num_)
+				</if>
+				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
+					AND SUM(exercises_reply_num_) &gt;= SUM(actual_exercises_num_)
+				</if>
+				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
+					AND SUM(exercises_message_num_) &lt; SUM(exercises_reply_num_)
+				</if>
+				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
+					AND SUM(exercises_message_num_) &gt;= SUM(exercises_reply_num_)
+				</if>
+				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
+					AND SUM(exercises_message_timely_num_) &lt; SUM(exercises_message_num_)
+				</if>
+				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
+					AND SUM(exercises_message_timely_num_) &gt;= SUM(exercises_message_num_)
+				</if>
+			</trim>
 			ORDER BY sees.monday_,sees.sunday_,sees.teacher_id_
 		) e
 	</select>

+ 36 - 0
mec-biz/src/main/resources/config/mybatis/StudentInstrumentMapper.xml

@@ -269,4 +269,40 @@
         LIMIT 1
     </select>
 
+    <select id="getStudentsMaintenanceNum" resultMap="StudentInstrument">
+        SELECT student_id_,COUNT(*) goods_id_
+        FROM student_instrument
+        WHERE order_id_ IN (
+        SELECT MAX(id_)
+        FROM student_payment_order
+        WHERE type_ = 'APPLY'
+        AND music_group_id_ = #{musicGroupId}
+        AND status_ = 'SUCCESS'
+        AND user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        GROUP BY user_id_
+        )
+        AND student_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        AND del_flag_ = 0 AND end_time_ > NOW()
+        GROUP BY student_id_
+    </select>
+
+    <select id="getStudentMaintenance" resultMap="StudentInstrument">
+        SELECT * FROM student_instrument
+        WHERE order_id_ = (
+        SELECT MAX(id_)
+        FROM student_payment_order
+        WHERE type_ = 'APPLY'
+        AND music_group_id_ = #{musicGroupId}
+        AND status_ = 'SUCCESS'
+        AND user_id_ = #{studentId}
+        )
+        AND student_id_ = #{studentId} AND del_flag_ = 0 AND end_time_ > NOW()
+    </select>
+
 </mapper>

+ 2 - 2
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -311,7 +311,7 @@ public class RoomServiceImpl implements RoomService {
             roomMember = saveRoomMember(roomId,userId);
         }
         String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
-        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(joinSuccessKey, roomId, 2l, TimeUnit.SECONDS);
+        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(joinSuccessKey, roomId, 1l, TimeUnit.SECONDS);
         if(!aBoolean){
             RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
             if(roleEnum == RoleTeacher && StringUtils.isNotEmpty(deviceNum)){
@@ -450,7 +450,7 @@ public class RoomServiceImpl implements RoomService {
         }
 
         String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
-        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey, roomId, 2, TimeUnit.SECONDS);
+        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey, roomId, 1l, TimeUnit.SECONDS);
         log.info("leaveRoomSuccess: roomId={}, userId={},deviceNum={},aBoolean={}", roomId,userId,deviceNum,aBoolean);
         if(!aBoolean){
             if (StringUtils.isNotEmpty(deviceNum)){

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

@@ -1147,7 +1147,7 @@ public class ExportController extends BaseController {
         managerDownload.setUpdateTime(nowDate);
         managerDownloadDao.insert(managerDownload);
         exportService.orderList(params, managerDownload);
-        return succeed(fileName+"导出申请已提交,请到【报中心-下载列表查看】");
+        return succeed(fileName+"导出申请已提交,请到【报中心-下载列表查看】");
     }
 
 

+ 107 - 90
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java

@@ -1,16 +1,17 @@
 package com.ym.mec.web.controller;
 
 import com.ym.mec.auth.api.entity.SysUserRole;
-import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.dao.StudentInstrumentDao;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.MusicGroupQuitQueryInfo;
 import com.ym.mec.biz.service.EmployeeService;
+import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -20,105 +21,121 @@ 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.entity.ApprovalStatus;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupQuit;
 import com.ym.mec.biz.service.MusicGroupQuitService;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.page.QueryInfo;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @RequestMapping("musicGroupQuit")
 @Api(tags = "退团服务")
 @RestController
 public class MusicGroupQuitController extends BaseController {
 
-	@Autowired
-	private MusicGroupService musicGroupService;
-
-	@Autowired
-	private MusicGroupQuitService musicGroupQuitService;
-
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private EmployeeService employeeService;
-
-	@ApiOperation(value = "分页查询")
-	@RequestMapping("/queryPage")
-	@PreAuthorize("@pcs.hasPermissions('musicGroupQuit/queryPage')")
-	public HttpResponseResult queryPage(MusicGroupQuitQueryInfo queryInfo) throws Exception {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed("用户信息获取失败");
-		}
-		Employee employee = employeeService.get(sysUser.getId());
-		if (StringUtils.isBlank(queryInfo.getOrganId())) {
-			queryInfo.setOrganId(employee.getOrganIdList());
-		}else if(StringUtils.isEmpty(employee.getOrganIdList())){
-			return failed("用户所在分部异常");
-		}else {
-			List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-			if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
-				return failed("非法请求");
-			}
-		}
-		List<Integer> userRole = employeeService.queryUserRole(sysUser.getId());
-		//如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
-		if (userRole.size() == 1 && userRole.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
-			queryInfo.setEducationUserId(sysUser.getId());
-		}
-		return succeed(musicGroupQuitService.queryPage(queryInfo));
-	}
-
-	@ApiOperation(value = "单查询")
-	@GetMapping("/query")
-	@PreAuthorize("@pcs.hasPermissions('musicGroupQuit/query')")
-	public HttpResponseResult query(Long id) throws Exception {
-		MusicGroupQuit musicGroupQuit = musicGroupQuitService.get(id);
-		if (musicGroupQuit == null) {
-			return failed("参数不正确");
-		}
-
-		SysUser user = sysUserFeignService.queryUserById(musicGroupQuit.getUserId());
-		musicGroupQuit.getUser().setUsername(user.getUsername());
-
-		MusicGroup musicGroup = musicGroupService.get(musicGroupQuit.getMusicGroupId());
-		musicGroupQuit.setMusicGroup(musicGroup);
-
-		return succeed(musicGroupQuit);
-	}
-
-	@ApiOperation(value = "退团")
-	@PostMapping("/quitMusicGroup")
-	@PreAuthorize("@pcs.hasPermissions('musicGroupQuit/quitMusicGroup')")
-	@ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "退团申请id", required = true, dataType = "Long"),
-			@ApiImplicitParam(name = "status", value = "审批状态(APPROVED, DENIED, PROCESSING)", required = true, dataType = "String"),
-			@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") })
-	public HttpResponseResult quitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-			boolean isRefundTeachingAssistantsFee) throws Exception {
-		return succeed(musicGroupService.approveQuitMusicGroup(id, status, reason, isRefundCourseFee, isRefundInstrumentFee, isRefundTeachingAssistantsFee));
-	}
-
-	@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") })
-	public HttpResponseResult directQuitMusicGroup(String musicGroupId, Integer userId, String reason, boolean isRefundCourseFee,
-			boolean isRefundInstrumentFee, boolean isRefundTeachingAssistantsFee) throws Exception {
-		return succeed(musicGroupService.directQuitMusicGroup(musicGroupId, userId, reason, isRefundCourseFee, isRefundInstrumentFee,
-				isRefundTeachingAssistantsFee));
-	}
+    @Autowired
+    private MusicGroupService musicGroupService;
+
+    @Autowired
+    private MusicGroupQuitService musicGroupQuitService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
+    @Autowired
+    private StudentInstrumentDao studentInstrumentDao;
+
+    @ApiOperation(value = "分页查询")
+    @RequestMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/queryPage')")
+    public HttpResponseResult queryPage(MusicGroupQuitQueryInfo queryInfo) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeService.get(sysUser.getId());
+        if (StringUtils.isBlank(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+            return failed("用户所在分部异常");
+        } else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+                return failed("非法请求");
+            }
+        }
+        List<Integer> userRole = employeeService.queryUserRole(sysUser.getId());
+        //如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
+        if (userRole.size() == 1 && userRole.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
+            queryInfo.setEducationUserId(sysUser.getId());
+        }
+        PageInfo<MusicGroupQuit> musicGroupQuitPageInfo = musicGroupQuitService.queryPage(queryInfo);
+
+        if (musicGroupQuitPageInfo.getRows() != null && musicGroupQuitPageInfo.getRows().size() > 0) {
+            //查询是否有有效期内乐保
+            for (MusicGroupQuit row : musicGroupQuitPageInfo.getRows()) {
+                StudentInstrument studentMaintenance = studentInstrumentDao.getStudentMaintenance(row.getUserId(), row.getMusicGroupId());
+                if (studentMaintenance != null) {
+                    row.setHasMaintenance(true);
+                }
+            }
+        }
+        return succeed(musicGroupQuitPageInfo);
+    }
+
+    @ApiOperation(value = "单查询")
+    @GetMapping("/query")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/query')")
+    public HttpResponseResult query(Long id) throws Exception {
+        MusicGroupQuit musicGroupQuit = musicGroupQuitService.get(id);
+        if (musicGroupQuit == null) {
+            return failed("参数不正确");
+        }
+
+        SysUser user = sysUserFeignService.queryUserById(musicGroupQuit.getUserId());
+        musicGroupQuit.getUser().setUsername(user.getUsername());
+
+        MusicGroup musicGroup = musicGroupService.get(musicGroupQuit.getMusicGroupId());
+        musicGroupQuit.setMusicGroup(musicGroup);
+
+        return succeed(musicGroupQuit);
+    }
+
+    @ApiOperation(value = "退团")
+    @PostMapping("/quitMusicGroup")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/quitMusicGroup')")
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "退团申请id", required = true, dataType = "Long"),
+            @ApiImplicitParam(name = "status", value = "审批状态(APPROVED, DENIED, PROCESSING)", required = true, dataType = "String"),
+            @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 quitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
+                                             boolean isRefundTeachingAssistantsFee, BigDecimal maintenanceFee) throws Exception {
+        return succeed(musicGroupService.approveQuitMusicGroup(id, status, reason, isRefundCourseFee, isRefundInstrumentFee, isRefundTeachingAssistantsFee, maintenanceFee));
+    }
+
+    @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, BigDecimal maintenanceFee) throws Exception {
+        return succeed(musicGroupService.directQuitMusicGroup(musicGroupId, userId, reason, isRefundCourseFee, isRefundInstrumentFee,
+                isRefundTeachingAssistantsFee, maintenanceFee));
+    }
 }

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

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