Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 4 years ago
parent
commit
9d13fa872c
23 changed files with 440 additions and 270 deletions
  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. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java
  7. 23 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java
  8. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  9. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  10. 0 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  11. 77 82
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  12. 36 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  14. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  15. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  16. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 2 2
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  18. 27 52
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  19. 36 0
      mec-biz/src/main/resources/config/mybatis/StudentInstrumentMapper.xml
  20. 1 1
      mec-biz/src/main/resources/config/mybatis/VipGroupActivityMapper.xml
  21. 3 3
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  22. 107 90
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java
  23. 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;
+    }
 }

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

@@ -102,6 +102,17 @@ public class StudentManageListDto {
 
     private String cooperationOrganName;
 
+    @ApiModelProperty(value = "当月请假次数")
+    private Long leaveNum;
+
+    public Long getLeaveNum() {
+        return leaveNum;
+    }
+
+    public void setLeaveNum(Long leaveNum) {
+        this.leaveNum = leaveNum;
+    }
+
     public Integer getCooperationOrganId() {
         return cooperationOrganId;
     }

+ 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;
+	}
 }

+ 23 - 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;
 
@@ -92,6 +92,28 @@ public class StudentAttendance {
 
 	private int normalRemind;
 
+	@ApiModelProperty(value = "是否首次请假")
+	private YesOrNoEnum firstLeave = YesOrNoEnum.NO;
+
+	@ApiModelProperty(value = "当月请假次数")
+	private Long leaveNum;
+
+	public Long getLeaveNum() {
+		return leaveNum;
+	}
+
+	public void setLeaveNum(Long leaveNum) {
+		this.leaveNum = leaveNum;
+	}
+
+	public YesOrNoEnum getFirstLeave() {
+		return firstLeave;
+	}
+
+	public void setFirstLeave(YesOrNoEnum firstLeave) {
+		this.firstLeave = firstLeave;
+	}
+
 	public int getNormalRemind() {
 		return normalRemind;
 	}

+ 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/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());

+ 77 - 82
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;
@@ -20,6 +19,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -34,43 +34,6 @@ import com.alibaba.fastjson.TypeReference;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
-import com.ym.mec.biz.dal.dao.ChargeTypeDao;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
-import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
-import com.ym.mec.biz.dal.dao.CooperationOrganDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
-import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderStudentDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
-import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.SchoolDao;
-import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
-import com.ym.mec.biz.dal.dao.StudentPreRegistrationDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.StudentVisitDao;
-import com.ym.mec.biz.dal.dao.SubjectChangeDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
-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;
@@ -285,6 +248,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");
@@ -466,16 +432,16 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPreRegistration.setUserId(user.getId());
 
         Organization organization = organizationDao.get(musicGroup.getOrganId());
-        if(organization.getGradeType().equals(GradeTypeEnum.SIX_PLUS)){
+        if (organization.getGradeType().equals(GradeTypeEnum.SIX_PLUS)) {
             for (SixPlusGradeEnum value : SixPlusGradeEnum.values()) {
-                if(value.getCode().equals(studentPreRegistration.getCurrentGradeNum())){
+                if (value.getCode().equals(studentPreRegistration.getCurrentGradeNum())) {
                     studentPreRegistration.setCurrentGrade(value.getDesc());
                     break;
                 }
             }
-        }else {
+        } else {
             for (FivePlusGradeEnum value : FivePlusGradeEnum.values()) {
-                if(value.getCode().equals(studentPreRegistration.getCurrentGradeNum())){
+                if (value.getCode().equals(studentPreRegistration.getCurrentGradeNum())) {
                     studentPreRegistration.setCurrentGrade(value.getDesc());
                     break;
                 }
@@ -743,7 +709,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             }
         }
         //乐器保养
-        if(registerPayDto.getBuyMaintenance()){
+        if (registerPayDto.getBuyMaintenance()) {
             BigDecimal maintenancePrice = new BigDecimal(sysConfigDao.findConfigValue("maintenance_price"));
             orderAmount = orderAmount.add(maintenancePrice);
         }
@@ -759,7 +725,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         String channelType = "";
 
-        StudentPaymentOrder studentPaymentOrder = studentRegistrationService.addOrder(studentRegistration, amount, orderNo, channelType, courseFee, goodsGroups, remitFee, courseRemitFee, newCourses,registerPayDto.getBuyMaintenance());
+        StudentPaymentOrder studentPaymentOrder = studentRegistrationService.addOrder(studentRegistration, amount, orderNo, channelType, courseFee, goodsGroups, remitFee, courseRemitFee, newCourses, registerPayDto.getBuyMaintenance());
         studentPaymentOrder.setVersion(0);
 
         Date date = new Date();
@@ -894,7 +860,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             }
         }
 
-        if(registerPayDto.getBuyMaintenance()){
+        if (registerPayDto.getBuyMaintenance()) {
             BigDecimal maintenancePrice = new BigDecimal(sysConfigDao.findConfigValue("maintenance_price"));
             orderAmount = orderAmount.add(maintenancePrice);
         }
@@ -911,7 +877,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         String channelType = "";
 
-        StudentPaymentOrder studentPaymentOrder = studentRegistrationService.reAddOrder(userId, amount, orderNo, channelType, courseFee, goodsGroups, studentRegistration.getMusicGroupId(), ApplyOrder, remitFee, courseRemitFee, newCourses,registerPayDto.getBuyMaintenance());
+        StudentPaymentOrder studentPaymentOrder = studentRegistrationService.reAddOrder(userId, amount, orderNo, channelType, courseFee, goodsGroups, studentRegistration.getMusicGroupId(), ApplyOrder, remitFee, courseRemitFee, newCourses, registerPayDto.getBuyMaintenance());
         studentPaymentOrder.setVersion(0);
         Date date = new Date();
 
@@ -1712,7 +1678,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) {
@@ -1825,7 +1791,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
             }
 
-            if(MusicGroupStatusEnum.PROGRESS.equals(musicGroup.getStatus())){
+            if (MusicGroupStatusEnum.PROGRESS.equals(musicGroup.getStatus())) {
                 //统计变更学员数
                 groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
 
@@ -1878,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) {
                 // 增加交易流水
@@ -1891,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) {
@@ -1921,27 +1901,27 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         Date date = new Date();
-        
+
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
-		if (musicGroupQuit != null && musicGroupQuit.getStatus() == ApprovalStatus.PROCESSING) {
-			musicGroupQuit.setStatus(ApprovalStatus.APPROVED);
-			musicGroupQuit.setReason(reason);
-			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.setQuitDate(date);
-
-			musicGroupQuitDao.insert(musicGroupQuit);
-		}
+        if (musicGroupQuit != null && musicGroupQuit.getStatus() == ApprovalStatus.PROCESSING) {
+            musicGroupQuit.setStatus(ApprovalStatus.APPROVED);
+            musicGroupQuit.setReason(reason);
+            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.setQuitDate(date);
+
+            musicGroupQuitDao.insert(musicGroupQuit);
+        }
 
         List<Integer> classGroupIdList = classGroupStudentMapperDao.queryClassGroupIdList(musicGroupId, userId, GroupType.MUSIC);
         for (Integer classGroupId : classGroupIdList) {
@@ -2015,7 +1995,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
         }
 
-        if(MusicGroupStatusEnum.PROGRESS.equals(musicGroup.getStatus())){
+        if (MusicGroupStatusEnum.PROGRESS.equals(musicGroup.getStatus())) {
             //统计变更学员数
             groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
         }
@@ -2068,6 +2048,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) {
             // 增加交易流水
@@ -2395,27 +2389,27 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         List<Integer> roles = employeeDao.queryUserRole(sysUser.getId());
         PageInfo<MusicGroup> musicGroupPageInfo;
         //待创建缴费项目提醒
-        if("WAIT_CREATE_PAYMENT_CALENDER".equals(queryInfo.getSearchType())){
+        if ("WAIT_CREATE_PAYMENT_CALENDER".equals(queryInfo.getSearchType())) {
             Integer educationUserId = null;
             if (!sysUser.getIsSuperAdmin() && roles.size() == 1 && roles.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
                 educationUserId = sysUser.getId();
             }
             //获取关联的乐团列表
-            List<String> musicGroupIds = musicGroupDao.queryIdsByEduIdAndOrganIds(educationUserId,queryInfo.getOrganId());
+            List<String> musicGroupIds = musicGroupDao.queryIdsByEduIdAndOrganIds(educationUserId, queryInfo.getOrganId());
             String configValue1 = sysConfigDao.findConfigValue("push_create_payment_calender");
             Date date = new Date();
             String format = DateUtil.format(date, DateUtil.DEFAULT_PATTERN);
-            if(musicGroupIds.size() > 0){
-                List<Long> calenderIds = musicGroupPaymentCalenderDao.queryEndIds(configValue1, format,musicGroupIds);
-                if(calenderIds.size() > 0){
+            if (musicGroupIds.size() > 0) {
+                List<Long> calenderIds = musicGroupPaymentCalenderDao.queryEndIds(configValue1, format, musicGroupIds);
+                if (calenderIds.size() > 0) {
                     List<String> queryMusicGroupIds = musicGroupPaymentCalenderDao.queryMusicGroupIds(calenderIds);
-                    if(queryInfo.getMusicGroupIds() != null){
+                    if (queryInfo.getMusicGroupIds() != null) {
                         queryMusicGroupIds.addAll(queryInfo.getMusicGroupIds());
                     }
                     queryInfo.setMusicGroupIds(queryMusicGroupIds);
                 }
             }
-            if(queryInfo.getMusicGroupIds() == null || queryInfo.getMusicGroupIds().size() == 0){
+            if (queryInfo.getMusicGroupIds() == null || queryInfo.getMusicGroupIds().size() == 0) {
                 return new PageInfo<MusicGroup>();
             }
         }
@@ -2462,7 +2456,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Map<Integer, String> cooperationOrganNames = MapUtil.convertMybatisMap(cooperationOrganDao.queryNameByIds(StringUtils.join(musicGroupList.stream().map(MusicGroup::getCooperationOrganId).collect(Collectors.toSet()), ",")));
 
         Set<Integer> organIds = musicGroupList.stream().map(e -> e.getOrganId()).collect(Collectors.toSet());
-        Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds,",")));
+        Map<Integer, String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds, ",")));
 
         List<MusicGroupPurchaseList> musicGroupPurchaseListCount = musicGroupPurchaseListDao.getCount(musicGroupIds);
         Map<String, Integer> purchaseListMap = musicGroupPurchaseListCount.stream().collect(Collectors.toMap(MusicGroupPurchaseList::getMusicGroupId, MusicGroupPurchaseList::getPurchaseNum));
@@ -2478,8 +2472,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             e.setPayNum(payNumMap.get(e.getId()) == null ? 0 : payNumMap.get(e.getId()));
             e.setChargeTypeName(chargeTypeNameMap.get(e.getChargeTypeId()));
             e.setHasVerifyMusicalList(purchaseListMap.get(e.getId()) != null);
-            if(e.getStatus().equals(MusicGroupStatusEnum.PREPARE) || e.getStatus().equals(MusicGroupStatusEnum.PROGRESS)){
-                if(viewRegButtonMap.containsKey(e.getId())){
+            if (e.getStatus().equals(MusicGroupStatusEnum.PREPARE) || e.getStatus().equals(MusicGroupStatusEnum.PROGRESS)) {
+                if (viewRegButtonMap.containsKey(e.getId())) {
                     e.setIsRemedy(true);
                 }
             }
@@ -2751,7 +2745,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         Integer cooperationMusicGroupNum = musicGroupDao.getCooperationMusicGroupNum(musicGroup.getCooperationOrganId(), musicGroupId);
         Integer paymentStudentNum = studentRegistrationDao.getPaymentStudentNum(musicGroupId);
 
-        if((cooperationMusicGroupNum <= 0 && paymentStudentNum < 98) || (cooperationMusicGroupNum > 0 && paymentStudentNum < 58)){
+        if ((cooperationMusicGroupNum <= 0 && paymentStudentNum < 98) || (cooperationMusicGroupNum > 0 && paymentStudentNum < 58)) {
             checkStudentVisit(musicGroupId);
         }
 
@@ -2784,9 +2778,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     /**
      * 校验回访
+     *
      * @param musicGroupId
      */
-    private void checkStudentVisit(String musicGroupId){
+    private void checkStudentVisit(String musicGroupId) {
         boolean hasNoVisit = false;
         StringBuilder tipsMsg = new StringBuilder();
         List<StudentRegistration> noPaymentStudents = studentRegistrationDao.getNoPaymentStudent(musicGroupId);

+ 36 - 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;
@@ -163,6 +156,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         int remindNum = studentAttendanceDao.countNormalRemindNum(courseScheduleId);
         studentAttendanceDao.deleteStudentAttendancesByCourse(courseScheduleId);
         int classTimes = courseScheduleDao.countClassTimes(courseSchedule.getClassGroupId().longValue(), courseSchedule.getStartClassTime());
+        String month = DateUtil.format(courseSchedule.getClassDate(), DateUtil.ISO_YEAR_MONTH_FORMAT);
         studentAttendances.forEach(studentAttendance -> {
             studentAttendance.setTeacherId(sysUser.getId());
             studentAttendance.setCurrentClassTimes(classTimes + 1);
@@ -191,6 +185,12 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                             studentAttendanceInfo.getMusicGroupId(),
                             YesOrNoEnum.NO.getCode());
                 }
+                if (studentAttendanceInfo.getStatus() == StudentAttendanceStatusEnum.LEAVE) {
+                    int leaveNum = studentAttendanceDao.getLeaveNum(studentAttendanceInfo.getUserId(),month,null);
+                    if(leaveNum == 0){
+                        studentAttendanceInfo.setFirstLeave(YesOrNoEnum.YES);
+                    }
+                }
                 if (studentAttendanceInfo.getStatus() == StudentAttendanceStatusEnum.NORMAL) {
                     studentAttendanceInfo.setSignInTime(courseSchedule.getStartClassTime());
                     studentAttendanceInfo.setSignOutTime(courseSchedule.getEndClassTime());
@@ -313,9 +313,19 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
             throw new BizException("此课程已结算");
         }
 
+        String month = DateUtil.format(courseSchedule.getClassDate(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+
         List<Integer> userIds = studentAttendances.stream().map(StudentAttendance::getUserId).collect(Collectors.toList());
         studentAttendanceDao.deleteStudentAttendancesByCourseAndUsers(studentAttendanceInfo.getCourseScheduleId().longValue(), userIds);
+        //获取非请假的学员考勤
         for (StudentAttendance studentAttendance : studentAttendances) {
+            if(studentAttendance.getStatus() == StudentAttendanceStatusEnum.LEAVE){
+                //当前月是否是第一次请假
+                int leaveNum = studentAttendanceDao.getLeaveNum(studentAttendance.getUserId(),month,null);
+                if(leaveNum == 0){
+                    studentAttendance.setFirstLeave(YesOrNoEnum.YES);
+                }
+            }
             studentAttendance.setGroupType(courseSchedule.getGroupType());
             studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
             studentAttendance.setClassGroupId(courseSchedule.getClassGroupId());
@@ -414,7 +424,11 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         studentAttendance.setUserId(userId);
         studentAttendance.setGroupType(courseSchedule.getGroupType());
         studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
-
+        String month = DateUtil.format(courseSchedule.getClassDate(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+        int leaveNum = studentAttendanceDao.getLeaveNum(userId,month,studentAttendance.getId());
+        if(leaveNum == 0){
+            studentAttendance.setFirstLeave(YesOrNoEnum.YES);
+        }
         if (Objects.nonNull(studentAttendance.getId())) {
             studentAttendanceDao.update(studentAttendance);
         } else {
@@ -670,13 +684,19 @@ 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){
+                Set<Integer> userIds = dataList.stream().map(StudentAttendance::getUserId).collect(Collectors.toSet());
+                //获取学员当月请假次数
+                String month = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+                Map<Integer, Long> leaveNumMap = MapUtil.convertIntegerMap(studentAttendanceDao.queryLeaveNum(userIds,month));
+                for(StudentAttendance sa : dataList){
+                    sa.setLeaveNum(leaveNumMap.get(sa.getUserId()));
+                    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/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());

+ 16 - 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) {
@@ -138,6 +142,9 @@ public class StudentManageServiceImpl implements StudentManageService {
         }
 
         Set<Integer> userIds = dataList.stream().map(StudentManageListDto::getUserId).collect(Collectors.toSet());
+        //获取学员当月请假次数
+        String month = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
+        Map<Integer, Long> leaveNumMap = MapUtil.convertIntegerMap(studentAttendanceDao.queryLeaveNum(userIds,month));
 
         List<StudentListCourseDto> studentListCourseDtoList = studentManageDao.queryStudentRemianCourse(userIds);
         Map<Integer, StudentListCourseDto> StudentListCourseDtoMap = studentListCourseDtoList.stream().collect(Collectors.toMap(StudentListCourseDto::getUserId, studentListCourseDto -> studentListCourseDto));
@@ -185,6 +192,8 @@ public class StudentManageServiceImpl implements StudentManageService {
 //            }
             //年级
             dto.setCurrentGrade(studentService.getStudentGrade(dto.getGradeType(),dto.getCurrentGradeNum()));
+            //请假次数
+            dto.setLeaveNum(leaveNumMap.get(dto.getUserId()));
         }
 
         if (queryInfo.getIsExport()) {
@@ -500,12 +509,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);

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

@@ -2584,7 +2584,7 @@
         <if test="searchType == 'ERR_ATTENDANCE'">
             AND ta.teacher_id_ = cs.actual_teacher_id_
             AND cs.status_ = 'OVER'
-            AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
+            AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0 AND sa.first_leave_ = 0)))
             AND EXISTS (SELECT id_ FROM course_schedule_teacher_salary WHERE cs.id_=course_schedule_id_ AND settlement_time_ IS NULL)
             AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
             AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_) AND cssp.id_ IS NOT NULL

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

@@ -947,7 +947,7 @@
 		LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
 		WHERE ta.teacher_id_ = cs.actual_teacher_id_
 		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= '2021-02-01'
-		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
+		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0 AND sa.first_leave_ = 0)))
 		AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
 		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_) AND cssp.id_ IS NOT NULL
 		AND EXISTS (SELECT id_ FROM course_schedule_teacher_salary WHERE cs.id_=course_schedule_id_ AND settlement_time_ IS NULL)
@@ -976,7 +976,7 @@
 		LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
 		WHERE ta.teacher_id_ = cs.actual_teacher_id_
 		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= '2021-02-01'
-		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
+		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0 AND sa.first_leave_ = 0)))
 		AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
 		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_) AND cssp.id_ IS NOT NULL
 		AND EXISTS (SELECT id_ FROM course_schedule_teacher_salary WHERE cs.id_=course_schedule_id_ AND settlement_time_ IS NULL)

+ 27 - 52
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -58,15 +58,17 @@
             keyColumn="id" 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_)
+        update_time_,remark_,current_class_times_,sign_in_time_,sign_out_time_,current_schedule_id_,visit_flag_,normal_remind_,first_leave_)
         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},#{firstLeave,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
     </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_,first_leave_)
       VALUES
 	  <foreach collection="list" item="studentAttendance" separator=",">
           (#{studentAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -75,7 +77,7 @@
           #{studentAttendance.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{studentAttendance.updateTime},
           #{studentAttendance.remark},#{studentAttendance.currentClassTimes},
           #{studentAttendance.signInTime},#{studentAttendance.signOutTime},#{studentAttendance.currentScheduleId},#{studentAttendance.visitFlag,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-          #{studentAttendance.normalRemind})
+          #{studentAttendance.normalRemind},#{studentAttendance.firstLeave,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
       </foreach>
     </insert>
 
@@ -83,6 +85,9 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentAttendance">
         UPDATE student_attendance
         <set>
+            <if test="firstLeave != null">
+                first_leave_ = #{firstLeave,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
@@ -130,54 +135,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 +647,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>

+ 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>

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

@@ -185,7 +185,7 @@
 			vip_group_activity
 		WHERE
 			FIND_IN_SET( #{categoryId}, vip_group_category_id_list_ )
-			AND (NOW() &lt; end_time_ OR end_time_ IS NULL)
+			AND (end_time_ IS NULL OR NOW() BETWEEN start_time_ AND end_time_)
 			AND del_flag_=0
 			AND INTE_ARRAY(organ_id_,#{organIds})
 	</select>

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

@@ -719,10 +719,10 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
                     "家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)",
-                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议"}, new String[]{
+                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态","当月请假次数", "服务标签", "运营标签", "指导老师", "是否签订协议"}, new String[]{
                     "organName", "userId", "username", "gender.description", "parentsName", "parentsPhone",
                     "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName",
-                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'"}, rows);
+                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus","leaveNum", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();
@@ -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));
     }