Browse Source

Merge branch 'vip_price_827' into online1

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
#	mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
#	mec-teacher/src/main/java/com/ym/mec/teacher/controller/MusicGroupController.java
yonge 3 years ago
parent
commit
0cccaae0a3

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupQuitDao.java

@@ -5,6 +5,8 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 
 public interface MusicGroupQuitDao extends BaseDAO<Long, MusicGroupQuit> {
 public interface MusicGroupQuitDao extends BaseDAO<Long, MusicGroupQuit> {
 
 
@@ -40,4 +42,12 @@ public interface MusicGroupQuitDao extends BaseDAO<Long, MusicGroupQuit> {
      * @return
      * @return
      */
      */
     MusicGroupQuit queryByUserIdAndMusicGroupId(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
     MusicGroupQuit queryByUserIdAndMusicGroupId(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 学员是否有待审核的退团记录
+     * @param studentIds
+     * @param musicGroupId
+     * @return
+     */
+    List<Map<Integer, Long>> queryQuitMapByStudentId(@Param("studentIds") Set<Long> studentIds, @Param("musicGroupId") String musicGroupId);
 }
 }

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

@@ -50,6 +50,17 @@ public class StudentAttendanceViewDto {
 
 
     private Boolean beMerged;
     private Boolean beMerged;
 
 
+    @ApiModelProperty(value = "是否有待审核的退团申请",required = false)
+    private Integer quitFlag;
+
+    public Integer getQuitFlag() {
+        return quitFlag;
+    }
+
+    public void setQuitFlag(Integer quitFlag) {
+        this.quitFlag = quitFlag;
+    }
+
     public Integer getCurrentGradeNum() {
     public Integer getCurrentGradeNum() {
         return currentGradeNum;
         return currentGradeNum;
     }
     }

+ 84 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java

@@ -1,12 +1,14 @@
 package com.ym.mec.biz.dal.entity;
 package com.ym.mec.biz.dal.entity;
 
 
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 
 
-import java.math.BigDecimal;
-
 /**
 /**
  * 对应数据库表(music_group_quit):
  * 对应数据库表(music_group_quit):
  */
  */
@@ -37,9 +39,25 @@ public class MusicGroupQuit {
 
 
 	private ApprovalStatus status;
 	private ApprovalStatus status;
 	
 	
+	private Integer applyUserId;
+
+	private String applyUserName;
+	
+	private Boolean isVisit;
+	
+	private Date visitTime;
+	
+	private String feeJson;
+	
+	private BigDecimal returnTotalFee;
+	
+	private String currentApproveRole;
+	
 	private SysUser user = new SysUser();
 	private SysUser user = new SysUser();
 	
 	
 	private MusicGroup musicGroup = new MusicGroup();
 	private MusicGroup musicGroup = new MusicGroup();
+	
+	private MusicGroupReturnFeeDto returnFeeDto;
 
 
 	@ApiModelProperty(value = "是否有乐保",required = false)
 	@ApiModelProperty(value = "是否有乐保",required = false)
 	private Boolean hasMaintenance = false;
 	private Boolean hasMaintenance = false;
@@ -47,6 +65,14 @@ public class MusicGroupQuit {
 	@ApiModelProperty(value = "云教练金额",required = false)
 	@ApiModelProperty(value = "云教练金额",required = false)
 	private BigDecimal cloudTeacherAmount = BigDecimal.ZERO;
 	private BigDecimal cloudTeacherAmount = BigDecimal.ZERO;
 
 
+	public String getApplyUserName() {
+		return applyUserName;
+	}
+
+	public void setApplyUserName(String applyUserName) {
+		this.applyUserName = applyUserName;
+	}
+
 	public void setId(Long id) {
 	public void setId(Long id) {
 		this.id = id;
 		this.id = id;
 	}
 	}
@@ -135,6 +161,46 @@ public class MusicGroupQuit {
 		this.musicGroup = musicGroup;
 		this.musicGroup = musicGroup;
 	}
 	}
 
 
+	public Integer getApplyUserId() {
+		return applyUserId;
+	}
+
+	public void setApplyUserId(Integer applyUserId) {
+		this.applyUserId = applyUserId;
+	}
+
+	public Boolean getIsVisit() {
+		return isVisit;
+	}
+
+	public void setIsVisit(Boolean isVisit) {
+		this.isVisit = isVisit;
+	}
+
+	public Date getVisitTime() {
+		return visitTime;
+	}
+
+	public void setVisitTime(Date visitTime) {
+		this.visitTime = visitTime;
+	}
+
+	public String getFeeJson() {
+		return feeJson;
+	}
+
+	public void setFeeJson(String feeJson) {
+		this.feeJson = feeJson;
+	}
+
+	public String getCurrentApproveRole() {
+		return currentApproveRole;
+	}
+
+	public void setCurrentApproveRole(String currentApproveRole) {
+		this.currentApproveRole = currentApproveRole;
+	}
+
 	@Override
 	@Override
 	public String toString() {
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 		return ToStringBuilder.reflectionToString(this);
@@ -155,4 +221,20 @@ public class MusicGroupQuit {
 	public void setCloudTeacherAmount(BigDecimal cloudTeacherAmount) {
 	public void setCloudTeacherAmount(BigDecimal cloudTeacherAmount) {
 		this.cloudTeacherAmount = cloudTeacherAmount;
 		this.cloudTeacherAmount = cloudTeacherAmount;
 	}
 	}
+
+	public MusicGroupReturnFeeDto getReturnFeeDto() {
+		return returnFeeDto;
+	}
+
+	public void setReturnFeeDto(MusicGroupReturnFeeDto returnFeeDto) {
+		this.returnFeeDto = returnFeeDto;
+	}
+
+	public BigDecimal getReturnTotalFee() {
+		return returnTotalFee;
+	}
+
+	public void setReturnTotalFee(BigDecimal returnTotalFee) {
+		this.returnTotalFee = returnTotalFee;
+	}
 }
 }

+ 106 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupReturnFeeDto.java

@@ -0,0 +1,106 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.math.BigDecimal;
+
+public class MusicGroupReturnFeeDto {
+
+	private Boolean isReturnCourseFee;
+	
+	private BigDecimal courseFee;
+	
+	private Boolean isReturnMemberFee;
+	
+	private BigDecimal memberFee;
+	
+	private Boolean isReturnMusicalFee;
+	
+	private BigDecimal musicalFee;
+	
+	private Boolean isReturnAccessoriesFee;
+	
+	private BigDecimal accessoriesFee;
+	
+	private Boolean isReturnMaintenanceFee;
+	
+	private BigDecimal maintenanceFee;
+
+	public Boolean getIsReturnCourseFee() {
+		return isReturnCourseFee;
+	}
+
+	public void setIsReturnCourseFee(Boolean isReturnCourseFee) {
+		this.isReturnCourseFee = isReturnCourseFee;
+	}
+
+	public BigDecimal getCourseFee() {
+		return courseFee;
+	}
+
+	public void setCourseFee(BigDecimal courseFee) {
+		this.courseFee = courseFee;
+	}
+
+	public Boolean getIsReturnMemberFee() {
+		return isReturnMemberFee;
+	}
+
+	public void setIsReturnMemberFee(Boolean isReturnMemberFee) {
+		this.isReturnMemberFee = isReturnMemberFee;
+	}
+
+	public BigDecimal getMemberFee() {
+		return memberFee;
+	}
+
+	public void setMemberFee(BigDecimal memberFee) {
+		this.memberFee = memberFee;
+	}
+
+	public Boolean getIsReturnMusicalFee() {
+		return isReturnMusicalFee;
+	}
+
+	public void setIsReturnMusicalFee(Boolean isReturnMusicalFee) {
+		this.isReturnMusicalFee = isReturnMusicalFee;
+	}
+
+	public BigDecimal getMusicalFee() {
+		return musicalFee;
+	}
+
+	public void setMusicalFee(BigDecimal musicalFee) {
+		this.musicalFee = musicalFee;
+	}
+
+	public Boolean getIsReturnAccessoriesFee() {
+		return isReturnAccessoriesFee;
+	}
+
+	public void setIsReturnAccessoriesFee(Boolean isReturnAccessoriesFee) {
+		this.isReturnAccessoriesFee = isReturnAccessoriesFee;
+	}
+
+	public BigDecimal getAccessoriesFee() {
+		return accessoriesFee;
+	}
+
+	public void setAccessoriesFee(BigDecimal accessoriesFee) {
+		this.accessoriesFee = accessoriesFee;
+	}
+
+	public Boolean getIsReturnMaintenanceFee() {
+		return isReturnMaintenanceFee;
+	}
+
+	public void setIsReturnMaintenanceFee(Boolean isReturnMaintenanceFee) {
+		this.isReturnMaintenanceFee = isReturnMaintenanceFee;
+	}
+
+	public BigDecimal getMaintenanceFee() {
+		return maintenanceFee;
+	}
+
+	public void setMaintenanceFee(BigDecimal maintenanceFee) {
+		this.maintenanceFee = maintenanceFee;
+	}
+}

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

@@ -13,6 +13,8 @@ public class MusicGroupQuitQueryInfo extends QueryInfo {
     private ApprovalStatus status;
     private ApprovalStatus status;
 
 
     private Integer educationUserId;
     private Integer educationUserId;
+    
+    private String currentApproveRole;
 
 
     public Integer getEducationUserId() {
     public Integer getEducationUserId() {
         return educationUserId;
         return educationUserId;
@@ -53,4 +55,12 @@ public class MusicGroupQuitQueryInfo extends QueryInfo {
     public void setIds(String ids) {
     public void setIds(String ids) {
         this.ids = ids;
         this.ids = ids;
     }
     }
+
+	public String getCurrentApproveRole() {
+		return currentApproveRole;
+	}
+
+	public void setCurrentApproveRole(String currentApproveRole) {
+		this.currentApproveRole = currentApproveRole;
+	}
 }
 }

+ 8 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -138,13 +138,14 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 */
 	 */
 	boolean extensionPreApplyExpireDate(String musicGroupId, Date expireDate);
 	boolean extensionPreApplyExpireDate(String musicGroupId, Date expireDate);
 
 
-	/**
+		/**
 	 * 申请退团
 	 * 申请退团
-	 * @param musicGroupId 乐团编号
-	 * @param reason
+	 * @param reqMusicGroupQuit 
+	 * @param operatorId
 	 * @return
 	 * @return
 	 */
 	 */
-	boolean applyQuitMusicGroup(String musicGroupId, String reason,Integer studentId);
+	boolean applyQuitMusicGroup(List<Integer> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit, Integer operatorId);
+
 
 
 	/**
 	/**
 	 * 取消退团
 	 * 取消退团
@@ -157,18 +158,11 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 
 
 	/**
 	/**
 	 * 审批退团
 	 * 审批退团
-	 * @param id
-	 * @param status
-	 * @param reason
-	 * @param isRefundCourseFee 是否退还课程费用
-	 * @param isRefundInstrumentFee 是否退还乐器费用
-	 * @param isRefundTeachingAssistantsFee 是否退还教辅费用
-	 * @param maintenanceFee
-	 * @param cloudTeacherAmount
+	 * @param currentOperatorRoleIds
+	 * @param reqMusicGroupQuit
 	 * @return
 	 * @return
 	 */
 	 */
-	boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-								  boolean isRefundTeachingAssistantsFee,boolean isRefundMemberFee, BigDecimal maintenanceFee, BigDecimal cloudTeacherAmount);
+	boolean approveQuitMusicGroup(List<Integer> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit);
 
 
 	/**
 	/**
 	 * 一键退团
 	 * 一键退团

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java

@@ -60,6 +60,15 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
     List<StudentPaymentOrderDetail> queryFeeDetail(Integer studentId, String musicGroupId);
     List<StudentPaymentOrderDetail> queryFeeDetail(Integer studentId, String musicGroupId);
 
 
     /**
     /**
+     * 学生预计退团退费金额详情
+     *
+     * @param studentId
+     * @param musicGroupId
+     * @return
+     */
+    Map<String, BigDecimal> queryRefundsDetail(Integer studentId, String musicGroupId);
+
+    /**
      * 获取未分配的班级的学生
      * 获取未分配的班级的学生
      *
      *
      * @param musicGroupId    乐团id
      * @param musicGroupId    乐团id

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

@@ -152,6 +152,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     @Autowired
     @Autowired
     private EmployeeDao employeeDao;
     private EmployeeDao employeeDao;
     @Autowired
     @Autowired
+    private MusicGroupQuitDao musicGroupQuitDao;
+    @Autowired
     private MusicGroupSchoolTermStudentCourseDetailDao musicGroupSchoolTermStudentCourseDetailDao;
     private MusicGroupSchoolTermStudentCourseDetailDao musicGroupSchoolTermStudentCourseDetailDao;
     @Autowired
     @Autowired
     private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
     private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
@@ -1773,8 +1775,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             if (schedule.getGroupType() == MUSIC) {
             if (schedule.getGroupType() == MUSIC) {
                 Set<Long> collect = truantStudent.stream().map(e -> e.getStudentId()).collect(Collectors.toSet());
                 Set<Long> collect = truantStudent.stream().map(e -> e.getStudentId()).collect(Collectors.toSet());
                 Map<Integer, String> paymentStatusMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.queryUserCoursePaymentStatus(collect, schedule.getMusicGroupId()));
                 Map<Integer, String> paymentStatusMap = MapUtil.convertIntegerMap(musicGroupPaymentCalenderDao.queryUserCoursePaymentStatus(collect, schedule.getMusicGroupId()));
+
+                Map<Integer, Long> quitMap = MapUtil.convertIntegerMap(musicGroupQuitDao.queryQuitMapByStudentId(collect,schedule.getMusicGroupId()));
+                //学员是否有待审核的退团申请
                 truantStudent.forEach(studentAttendanceViewDto -> {
                 truantStudent.forEach(studentAttendanceViewDto -> {
                     studentAttendanceViewDto.setPaymentStatus(paymentStatusMap.get(studentAttendanceViewDto.getStudentId().intValue()));
                     studentAttendanceViewDto.setPaymentStatus(paymentStatusMap.get(studentAttendanceViewDto.getStudentId().intValue()));
+                    Long aLong = quitMap.get(studentAttendanceViewDto.getStudentId().intValue());
+                    studentAttendanceViewDto.setQuitFlag(aLong==null?0:aLong.intValue());
                 });
                 });
             }
             }
             List<StudentAttendanceViewDto> tempIds = truantStudent.stream()
             List<StudentAttendanceViewDto> tempIds = truantStudent.stream()

+ 196 - 56
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -109,6 +109,7 @@ import com.ym.mec.biz.dal.entity.MusicGroupQuit;
 import com.ym.mec.biz.dal.entity.MusicGroupSchoolTermCourseDetail;
 import com.ym.mec.biz.dal.entity.MusicGroupSchoolTermCourseDetail;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
+import com.ym.mec.biz.dal.entity.MusicGroupReturnFeeDto;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.MusicMemberDto;
 import com.ym.mec.biz.dal.entity.MusicMemberDto;
@@ -186,6 +187,7 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.http.HttpUtil;
+import com.ym.mec.util.json.JsonUtil;
 
 
 @Service
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
@@ -1900,11 +1902,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
 
     @Override
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public boolean applyQuitMusicGroup(String musicGroupId, String reason,Integer studentId) {
-        SysUser sysUser = sysUserFeignService.queryUserById(studentId);
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
+    public boolean applyQuitMusicGroup(List<Integer> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit, Integer operatorId) {
+    	
+    	Integer userId = reqMusicGroupQuit.getUserId();
+    	String musicGroupId = reqMusicGroupQuit.getMusicGroupId();
+    	String reason = reqMusicGroupQuit.getReason();
+    	
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup == null) {
         if (musicGroup == null) {
             throw new BizException("乐团不存在");
             throw new BizException("乐团不存在");
@@ -1913,7 +1916,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup.getStatus() == MusicGroupStatusEnum.CANCELED || musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE) {
         if (musicGroup.getStatus() == MusicGroupStatusEnum.CANCELED || musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE) {
             throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
             throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
         }
         }
-        Integer userId = sysUser.getId();
 
 
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
         if (studentRegistration == null) {
         if (studentRegistration == null) {
@@ -1931,27 +1933,84 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupQuit.setCreateTime(new Date());
         musicGroupQuit.setCreateTime(new Date());
         musicGroupQuit.setJoinDate(studentRegistration.getCreateTime());
         musicGroupQuit.setJoinDate(studentRegistration.getCreateTime());
         musicGroupQuit.setMusicGroupId(musicGroupId);
         musicGroupQuit.setMusicGroupId(musicGroupId);
-        musicGroupQuit.setUserId(sysUser.getId());
-        musicGroupQuit.setUserComment(reason);
+        musicGroupQuit.setUserId(userId);
+        musicGroupQuit.setUserComment(reqMusicGroupQuit.getUserComment());
+        musicGroupQuit.setApplyUserId(userId);
+        musicGroupQuit.setReason(reason);
+        
+        MusicGroupReturnFeeDto returnFeeDto = reqMusicGroupQuit.getReturnFeeDto();
+        if(returnFeeDto != null) {
+        	musicGroupQuit.setFeeJson(JsonUtil.toJSONString(returnFeeDto));
+        	musicGroupQuit.setReturnFeeDto(returnFeeDto);
+        }
+        musicGroupQuit.setIsVisit(reqMusicGroupQuit.getIsVisit());
+        musicGroupQuit.setVisitTime(reqMusicGroupQuit.getVisitTime());
         musicGroupQuit.setStatus(PROCESSING);
         musicGroupQuit.setStatus(PROCESSING);
-
+    	musicGroupQuit.setCurrentApproveRole(SysUserRole.EDUCATIONAL_TEACHER + "");
+        
+        if(currentOperatorRoleIds != null){
+        	if (!currentOperatorRoleIds.contains(SysUserRole.SECTION_MANAGER) && currentOperatorRoleIds.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
+        		
+    			if(musicGroupQuit.getStatus() == ApprovalStatus.APPROVED){
+    				throw new BizException("只能分部经理操作退团");
+    			}
+            	musicGroupQuit.setCurrentApproveRole(SysUserRole.SECTION_MANAGER + "");
+    		}
+        	if (currentOperatorRoleIds.contains(SysUserRole.SECTION_MANAGER) && !currentOperatorRoleIds.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
+        		
+        		throw new BizException("只能乐团主管操作退团申请");
+    		}
+        	
+        	BigDecimal returnTotalFee = BigDecimal.ZERO;
+        	
+        	if(returnFeeDto.getIsReturnAccessoriesFee()){
+        		returnTotalFee = returnTotalFee.add(returnFeeDto.getAccessoriesFee());
+        	}
+        	if(returnFeeDto.getIsReturnCourseFee()){
+        		returnTotalFee = returnTotalFee.add(returnFeeDto.getCourseFee());
+        	}
+        	if(returnFeeDto.getIsReturnMaintenanceFee()){
+        		returnTotalFee = returnTotalFee.add(returnFeeDto.getMaintenanceFee());
+        	}
+        	if(returnFeeDto.getIsReturnMemberFee()){
+        		returnTotalFee = returnTotalFee.add(returnFeeDto.getMemberFee());
+        	}
+        	if(returnFeeDto.getIsReturnMusicalFee()){
+        		returnTotalFee = returnTotalFee.add(returnFeeDto.getMusicalFee());
+        	}
+        	
+        	musicGroupQuit.setReturnTotalFee(returnTotalFee);
+        }
+        
         musicGroupQuitDao.insert(musicGroupQuit);
         musicGroupQuitDao.insert(musicGroupQuit);
-        Set<Integer> roleIds = new HashSet<>(1);
-        roleIds.add(SysUserRole.SECTION_MANAGER);
-        Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
-        integers.add(musicGroup.getEducationalTeacherId());
-        Map<String, Object> memo = new HashMap<>(2);
-        memo.put("Id", musicGroupQuit.getId());
-        memo.put("type", "MUSICGROUP");
+        
+		if (reqMusicGroupQuit.getStatus() == PROCESSING) {
+			Set<Integer> roleIds = new HashSet<>(1);
+			roleIds.add(SysUserRole.SECTION_MANAGER);
+			Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+			
+			if(currentOperatorRoleIds == null || currentOperatorRoleIds.size() == 0){
+				integers.add(musicGroup.getEducationalTeacherId());
+			}
+			
+			Map<String, Object> memo = new HashMap<>(2);
+			memo.put("Id", musicGroupQuit.getId());
+			memo.put("type", "MUSICGROUP");
 
 
-        sysMessageService.batchSeoMessage(integers,
-                MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_GROUP, JSONObject.toJSONString(memo), sysUser.getUsername());
-        Map<Integer, String> receivers = new HashMap<>(integers.size());
-        for (Integer integer : integers) {
-            receivers.put(integer, integer.toString());
-        }
-        sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.SYSTEM_PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY,
-                receivers, null, 0, null, "SYSTEM", musicGroup.getName(), sysUser.getUsername());
+			SysUser sysUser = sysUserFeignService.queryUserById(userId);
+
+			sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_GROUP, JSONObject.toJSONString(memo),
+					sysUser.getUsername());
+			Map<Integer, String> receivers = new HashMap<>(integers.size());
+			for (Integer integer : integers) {
+				receivers.put(integer, integer.toString());
+			}
+			sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.SYSTEM_PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY, receivers, null, 0, null,
+					"SYSTEM", musicGroup.getName(), sysUser.getUsername());
+		} else {
+			musicGroupQuit.setStatus(reqMusicGroupQuit.getStatus());
+			approveQuitMusicGroup(currentOperatorRoleIds, musicGroupQuit);
+		}
         return true;
         return true;
     }
     }
 
 
@@ -1986,14 +2045,37 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
 
     @Override
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
-                                         boolean isRefundTeachingAssistantsFee,boolean isRefundMemberFee, BigDecimal maintenanceFee, BigDecimal cloudTeacherAmount) {
-
+    public boolean approveQuitMusicGroup(List<Integer> currentOperatorRoleIds, MusicGroupQuit reqMusicGroupQuit) {
+    	
+    	Long id = reqMusicGroupQuit.getId();
+    	ApprovalStatus status = reqMusicGroupQuit.getStatus();
+    	String reason = reqMusicGroupQuit.getReason();
+    	Date visitDate = reqMusicGroupQuit.getVisitTime();
+    	MusicGroupReturnFeeDto returnFeeDto = reqMusicGroupQuit.getReturnFeeDto();
+    	
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(id);
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(id);
         if (musicGroupQuit == null) {
         if (musicGroupQuit == null) {
             throw new BizException("数据不存在");
             throw new BizException("数据不存在");
         }
         }
+    	
         Date date = new Date();
         Date date = new Date();
+    	
+    	if (!currentOperatorRoleIds.contains(SysUserRole.SECTION_MANAGER) && currentOperatorRoleIds.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
+    		
+    		if(!StringUtils.equals(musicGroupQuit.getCurrentApproveRole(), SysUserRole.EDUCATIONAL_TEACHER + "")){
+    			throw new BizException("只有分部经理才能审核");
+    		}
+    		
+			if(status == ApprovalStatus.APPROVED){
+				throw new BizException("只能分部经理操作退团");
+			}
+		}
+    	
+    	if(currentOperatorRoleIds.contains(SysUserRole.SECTION_MANAGER) && !currentOperatorRoleIds.contains(SysUserRole.EDUCATIONAL_TEACHER)){
+    		if(!StringUtils.equals(musicGroupQuit.getCurrentApproveRole(), SysUserRole.SECTION_MANAGER + "")){
+    			throw new BizException("先需乐团主管审核");
+    		}
+    	}
 
 
         String musicGroupId = musicGroupQuit.getMusicGroupId();
         String musicGroupId = musicGroupQuit.getMusicGroupId();
         Integer userId = musicGroupQuit.getUserId();
         Integer userId = musicGroupQuit.getUserId();
@@ -2029,10 +2111,45 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupQuit.setStatus(status);
         musicGroupQuit.setStatus(status);
         musicGroupQuit.setReason(reason);
         musicGroupQuit.setReason(reason);
         musicGroupQuit.setQuitDate(date);
         musicGroupQuit.setQuitDate(date);
+        musicGroupQuit.setFeeJson(JsonUtil.toJSONString(returnFeeDto));
+		if (visitDate != null) {
+			musicGroupQuit.setVisitTime(visitDate);
+			musicGroupQuit.setIsVisit(true);
+		} else {
+			musicGroupQuit.setIsVisit(false);
+		}
+		
+		if(StringUtils.isBlank(musicGroupQuit.getUserComment())){
+			musicGroupQuit.setUserComment(reqMusicGroupQuit.getUserComment());
+		}
+    	
+    	BigDecimal returnTotalFee = BigDecimal.ZERO;
+    	
+    	if(returnFeeDto.getIsReturnAccessoriesFee()){
+    		returnTotalFee = returnTotalFee.add(returnFeeDto.getAccessoriesFee());
+    	}
+    	if(returnFeeDto.getIsReturnCourseFee()){
+    		returnTotalFee = returnTotalFee.add(returnFeeDto.getCourseFee());
+    	}
+    	if(returnFeeDto.getIsReturnMaintenanceFee()){
+    		returnTotalFee = returnTotalFee.add(returnFeeDto.getMaintenanceFee());
+    	}
+    	if(returnFeeDto.getIsReturnMemberFee()){
+    		returnTotalFee = returnTotalFee.add(returnFeeDto.getMemberFee());
+    	}
+    	if(returnFeeDto.getIsReturnMusicalFee()){
+    		returnTotalFee = returnTotalFee.add(returnFeeDto.getMusicalFee());
+    	}
+    	
+    	musicGroupQuit.setReturnTotalFee(returnTotalFee);
+
+        if(status != ApprovalStatus.PROCESSING){
+        	courseScheduleStudentPaymentService.updateCourseActualPrice(Arrays.asList(musicGroupId), Arrays.asList(userId), GroupType.MUSIC);
+        }else {
+        	musicGroupQuit.setCurrentApproveRole(SysUserRole.SECTION_MANAGER + "");
+        }
         musicGroupQuitDao.update(musicGroupQuit);
         musicGroupQuitDao.update(musicGroupQuit);
 
 
-        courseScheduleStudentPaymentService.updateCourseActualPrice(Arrays.asList(musicGroupId), Arrays.asList(userId), GroupType.MUSIC);
-
         if (status == ApprovalStatus.APPROVED) {
         if (status == ApprovalStatus.APPROVED) {
 
 
             List<Integer> classGroupIdList = classGroupStudentMapperDao.queryClassGroupIdList(musicGroupId, userId, GroupType.MUSIC);
             List<Integer> classGroupIdList = classGroupStudentMapperDao.queryClassGroupIdList(musicGroupId, userId, GroupType.MUSIC);
@@ -2142,14 +2259,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
                 groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
 
 
             }
             }
-            if (isRefundMemberFee){
+            if (returnFeeDto.getIsReturnMemberFee()){
                 if(musicGroup.getCourseViewType() != CourseViewTypeEnum.MEMBER_FEE){
                 if(musicGroup.getCourseViewType() != CourseViewTypeEnum.MEMBER_FEE){
                     throw new BizException("非会员乐团不允许退云教练");
                     throw new BizException("非会员乐团不允许退云教练");
                 }
                 }
                 //删除乐团会员时长
                 //删除乐团会员时长
                 studentRegistrationDao.cleanMusicMember(userId,null);
                 studentRegistrationDao.cleanMusicMember(userId,null);
                 //退云教练费用
                 //退云教练费用
-                if (cloudTeacherAmount != null) {
+                if (returnFeeDto.getMemberFee() != null) {
                     Date nowDate = new Date();
                     Date nowDate = new Date();
                     List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrder(userId);
                     List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrder(userId);
                     BigDecimal orderAmount = BigDecimal.ZERO;
                     BigDecimal orderAmount = BigDecimal.ZERO;
@@ -2162,12 +2279,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                                 orderAmount = orderAmount.add(cloudTeacherOrder.getAmount());
                                 orderAmount = orderAmount.add(cloudTeacherOrder.getAmount());
                             }
                             }
                         }
                         }
-                        cloudTeacherOrderService.quitCloudTeacherOrders(quitCloudTeacherOrders, cloudTeacherAmount);
+                        cloudTeacherOrderService.quitCloudTeacherOrders(quitCloudTeacherOrders, returnFeeDto.getMemberFee());
                     }
                     }
-                    if (cloudTeacherAmount.compareTo(orderAmount) > 0) {
+                    if (returnFeeDto.getMemberFee().compareTo(orderAmount) > 0) {
                         throw new BizException("云教练退费金额不能大于原始订单金额");
                         throw new BizException("云教练退费金额不能大于原始订单金额");
                     }
                     }
-                    amount = amount.add(cloudTeacherAmount);
+                    amount = amount.add(returnFeeDto.getMemberFee());
                     //清除学员云教练
                     //清除学员云教练
                     studentService.cleanMember(userId);
                     studentService.cleanMember(userId);
                     //如果有试用会员,不清除
                     //如果有试用会员,不清除
@@ -2184,7 +2301,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 studentRegistrationDao.cleanMusicMember(userId,musicGroupId);
                 studentRegistrationDao.cleanMusicMember(userId,musicGroupId);
             }
             }
 
 
-            if (isRefundCourseFee) {
+            if (returnFeeDto.getIsReturnCourseFee()) {
                 // 退课程费用
                 // 退课程费用
                 amount = amount.add(surplusCourseFee);
                 amount = amount.add(surplusCourseFee);
             }
             }
@@ -2198,12 +2315,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
                 List<StudentPaymentOrderDetail> orderDetailList = studentPaymentOrderDetailDao.getWithIds(paymentOrderIdList);
 
 
                 SubjectChange studentLastChange = null;
                 SubjectChange studentLastChange = null;
-                if (isRefundInstrumentFee || isRefundTeachingAssistantsFee) {
+                if (returnFeeDto.getIsReturnMusicalFee() || returnFeeDto.getIsReturnAccessoriesFee()) {
                     studentLastChange = subjectChangeDao.getStudentLastChange(userId, musicGroupId);
                     studentLastChange = subjectChangeDao.getStudentLastChange(userId, musicGroupId);
                 }
                 }
                 
                 
     			if (studentLastChange != null && minPaymentOrderId <= studentLastChange.getOriginalOrderId()) {
     			if (studentLastChange != null && minPaymentOrderId <= studentLastChange.getOriginalOrderId()) {
-    				if (isRefundInstrumentFee) {
+    				if (returnFeeDto.getIsReturnMusicalFee()) {
     					amount = amount.add(studentLastChange.getChangeMusicalPrice());
     					amount = amount.add(studentLastChange.getChangeMusicalPrice());
     					
     					
     					StudentInstrument studentMaintenance = studentInstrumentDao.getByOrderId(studentLastChange.getOrderId().longValue());
     					StudentInstrument studentMaintenance = studentInstrumentDao.getByOrderId(studentLastChange.getOrderId().longValue());
@@ -2213,14 +2330,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     		            }
     		            }
     				}
     				}
 
 
-    				if (isRefundTeachingAssistantsFee) {
+    				if (returnFeeDto.getIsReturnAccessoriesFee()) {
     					amount = amount.add(studentLastChange.getChangeAccessoriesPrice());
     					amount = amount.add(studentLastChange.getChangeAccessoriesPrice());
     				}
     				}
     			} else {
     			} else {
     				for (StudentPaymentOrderDetail detail : orderDetailList) {
     				for (StudentPaymentOrderDetail detail : orderDetailList) {
 
 
     					// 退乐器费用
     					// 退乐器费用
-    					if (isRefundInstrumentFee && detail.getType() == OrderDetailTypeEnum.MUSICAL) {
+    					if (returnFeeDto.getIsReturnMusicalFee() && detail.getType() == OrderDetailTypeEnum.MUSICAL) {
     						amount = amount.add(detail.getPrice()).subtract(detail.getRemitFee());
     						amount = amount.add(detail.getPrice()).subtract(detail.getRemitFee());
     						
     						
     						StudentInstrument studentMaintenance = studentInstrumentDao.getStudentMaintenance(userId, musicGroupId);
     						StudentInstrument studentMaintenance = studentInstrumentDao.getStudentMaintenance(userId, musicGroupId);
@@ -2231,29 +2348,52 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     					}
     					}
 
 
     					// 退教辅费用
     					// 退教辅费用
-    					if (isRefundTeachingAssistantsFee
+    					if (returnFeeDto.getIsReturnAccessoriesFee()
     							&& (detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.TEACHING)) {
     							&& (detail.getType() == OrderDetailTypeEnum.ACCESSORIES || detail.getType() == OrderDetailTypeEnum.TEACHING)) {
     						amount = amount.add(detail.getPrice()).subtract(detail.getRemitFee());
     						amount = amount.add(detail.getPrice()).subtract(detail.getRemitFee());
     					}
     					}
     				}
     				}
     			}
     			}
-            }
 
 
-            //退乐保费用
-            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 (maintenanceFee.compareTo(BigDecimal.ZERO) > 0 && studentMaintenance != null) {
-                    studentMaintenance.setStatus(0);
-                    studentMaintenance.setStartTime(null);
-                    studentMaintenance.setEndTime(null);
-                    studentInstrumentDao.update(studentMaintenance);
-                }
+                //退乐保费用
+				if (returnFeeDto.getIsReturnMaintenanceFee()) {
+
+					Map<Long, StudentPaymentOrderDetail> maintenanceMap = orderDetailList.stream()
+							.filter(t -> (t.getType() == OrderDetailTypeEnum.MAINTENANCE))
+							.collect(Collectors.toMap(t -> t.getStudentInstrumentId(), StudentPaymentOrderDetail -> StudentPaymentOrderDetail));
+
+					List<Long> instrumentIdList = new ArrayList<Long>(maintenanceMap.keySet());
+					List<StudentInstrument> updateStudentInstrumentList = new ArrayList<StudentInstrument>();
+
+					if (instrumentIdList != null && instrumentIdList.size() > 0) {
+						List<StudentInstrument> studentInstrumentList = studentInstrumentDao.queryById(instrumentIdList);
+
+						for (StudentInstrument si : studentInstrumentList) {
+							if (si.getDelFlag() == 1) {
+								continue;
+							}
+
+							if ((si.getStatus() == 0 && si.getStartTime() == null) || si.getEndTime().after(date)) {
+								updateStudentInstrumentList.add(si);
+							}
+						}
+					}
+
+					/*if (updateStudentInstrumentList.size() == 0) {
+						throw new BizException("学生没有有效期内的乐保,不能退乐保费用");
+					}*/
+					
+					amount = amount.add(returnFeeDto.getMaintenanceFee());
+					
+					if (updateStudentInstrumentList.size() > 0) {
+						for (StudentInstrument studentMaintenance : updateStudentInstrumentList) {
+							studentMaintenance.setStatus(0);
+							studentMaintenance.setStartTime(null);
+							studentMaintenance.setEndTime(null);
+							studentInstrumentDao.update(studentMaintenance);
+						}
+					}
+				}
             }
             }
 
 
             if (amount.doubleValue() > 0) {
             if (amount.doubleValue() > 0) {

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

@@ -271,6 +271,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if (payingOrders == null) {
         if (payingOrders == null) {
             payingOrders = findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
             payingOrders = findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
         }
         }
+        
+        Date date = new Date();
+        
         if (payingOrders.size() == 0) {
         if (payingOrders.size() == 0) {
             return;
             return;
         }
         }
@@ -285,6 +288,10 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 orderNoList.add(payingOrder.getOrderNo());
                 orderNoList.add(payingOrder.getOrderNo());
                 continue;
                 continue;
             }
             }
+            //查询支付超过10分钟的
+            if(DateUtil.minutesBetween(payingOrder.getCreateTime(), date) < 10){
+            	continue;
+            }
             Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo());
             Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo());
             Map<String, String> rpMap = new HashMap<>();
             Map<String, String> rpMap = new HashMap<>();
             rpMap.put("merOrderNo", payingOrder.getOrderNo());
             rpMap.put("merOrderNo", payingOrder.getOrderNo());

+ 97 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -64,6 +64,7 @@ import com.ym.mec.biz.dal.dto.PageInfoReg;
 import com.ym.mec.biz.dal.dto.RegisterDto;
 import com.ym.mec.biz.dal.dto.RegisterDto;
 import com.ym.mec.biz.dal.dto.StudentAddDto;
 import com.ym.mec.biz.dal.dto.StudentAddDto;
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
+import com.ym.mec.biz.dal.dto.StudentApplyInstrumentDto;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.dto.StudentMusicDetailDto;
 import com.ym.mec.biz.dal.dto.StudentMusicDetailDto;
 import com.ym.mec.biz.dal.dto.StudentMusicGroupDto;
 import com.ym.mec.biz.dal.dto.StudentMusicGroupDto;
@@ -392,6 +393,102 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 	}
 	}
 
 
     @Override
     @Override
+	public Map<String, BigDecimal> queryRefundsDetail(Integer studentId, String musicGroupId) {
+
+		List<StudentPaymentOrderDetail> detailList = queryFeeDetail(studentId, musicGroupId);
+
+		Map<OrderDetailTypeEnum, List<StudentPaymentOrderDetail>> detailMap = detailList.stream().collect(
+				Collectors.groupingBy(StudentPaymentOrderDetail::getType));
+
+		Map<String, BigDecimal> map = new HashMap<String, BigDecimal>();
+
+		if (detailMap.containsKey(OrderDetailTypeEnum.MUSICAL)) {
+			detailList = detailMap.get(OrderDetailTypeEnum.MUSICAL);
+			if (detailList == null) {
+				detailList = new ArrayList<StudentPaymentOrderDetail>();
+			}
+			map.put(OrderDetailTypeEnum.MUSICAL.getCode(), detailList.stream().map(StudentPaymentOrderDetail::getPrice)
+					.reduce(BigDecimal.ZERO, BigDecimal::add));
+		} else {
+			map.put(OrderDetailTypeEnum.MUSICAL.getCode(), BigDecimal.ZERO);
+		}
+		
+		if (detailMap.containsKey(OrderDetailTypeEnum.MAINTENANCE)) {
+
+			BigDecimal totalAmount = BigDecimal.ZERO;
+
+			Date date = new Date();
+
+			// 查询当前乐团报名订单中购买了乐保的订单
+			List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = studentPaymentOrderDetailDao.findUserApplyOrder(studentId, musicGroupId,
+					DealStatusEnum.SUCCESS);
+
+			if (studentPaymentOrderDetailList != null && studentPaymentOrderDetailList.size() > 0) {
+				
+				Map<Long, StudentPaymentOrderDetail> maintenanceMap = studentPaymentOrderDetailList.stream()
+						.filter(t -> (t.getType() == OrderDetailTypeEnum.MAINTENANCE))
+						.collect(Collectors.toMap(t -> t.getStudentInstrumentId(), StudentPaymentOrderDetail -> StudentPaymentOrderDetail));
+				
+				List<Long> instrumentIdList = new ArrayList<Long>(maintenanceMap.keySet());
+				if (instrumentIdList != null && instrumentIdList.size() > 0) {
+					List<StudentInstrument> studentInstrumentList = studentInstrumentDao.queryById(instrumentIdList);
+
+					for (StudentInstrument si : studentInstrumentList) {
+						if (si.getDelFlag() == 1) {
+							continue;
+						}
+
+						if ((si.getStatus() == 0 && si.getStartTime() == null) || si.getEndTime().after(date)) {
+							totalAmount = totalAmount.add(maintenanceMap.get(si.getId()).getPrice());
+						}
+					}
+				}
+			}
+			map.put(OrderDetailTypeEnum.MAINTENANCE.getCode(), totalAmount);
+		} else {
+			map.put(OrderDetailTypeEnum.MAINTENANCE.getCode(), BigDecimal.ZERO);
+		}
+
+		if (detailMap.containsKey(OrderDetailTypeEnum.ACCESSORIES)) {
+			detailList = detailMap.get(OrderDetailTypeEnum.ACCESSORIES);
+			if (detailList == null) {
+				detailList = new ArrayList<StudentPaymentOrderDetail>();
+			}
+			map.put(OrderDetailTypeEnum.ACCESSORIES.getCode(),
+					detailList.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+		} else {
+			map.put(OrderDetailTypeEnum.ACCESSORIES.getCode(), BigDecimal.ZERO);
+		}
+
+		StudentRegistration studentRegistration = studentRegistrationDao.getStudentRegister(musicGroupId, studentId);
+		if (studentRegistration == null) {
+			throw new BizException("学生报名信息查询失败");
+		}
+		map.put(OrderDetailTypeEnum.COURSE.getCode(), studentRegistration.getSurplusCourseFee());
+
+		// 查询云教练订单
+		BigDecimal cloudAmount = BigDecimal.ZERO;
+		List<Integer> studentIds = new ArrayList<Integer>();
+		studentIds.add(studentId);
+		List<CloudTeacherOrder> studentCloudTeacherOrders = cloudTeacherOrderService.getStudentCloudTeacherOrders(studentIds, musicGroupId);
+		if (studentCloudTeacherOrders != null && studentCloudTeacherOrders.size() > 0) {
+			Date nowDate = new Date();
+			for (CloudTeacherOrder cloudTeacherOrder : studentCloudTeacherOrders) {
+				if (cloudTeacherOrder.getEndTime() == null
+						|| DateUtil.stringToDate(DateUtil.format(cloudTeacherOrder.getEndTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT),
+								DateUtil.ISO_EXPANDED_DATE_FORMAT).compareTo(
+								DateUtil.stringToDate(DateUtil.format(nowDate, DateUtil.ISO_EXPANDED_DATE_FORMAT), DateUtil.ISO_EXPANDED_DATE_FORMAT)) >= 0) {
+					cloudAmount = cloudAmount.add(cloudTeacherOrder.getAmount());
+				}
+			}
+		}
+
+		map.put(OrderDetailTypeEnum.CLOUD_TEACHER.getCode(), cloudAmount);
+
+		return map;
+	}
+
+	@Override
     public List<Map<String, Object>> getNoClassStuBySubjectId(String musicGroupId, String actualSubjectId) {
     public List<Map<String, Object>> getNoClassStuBySubjectId(String musicGroupId, String actualSubjectId) {
         List<StudentRegistration> students = studentRegistrationDao.getNoClassStuBySubjectId(musicGroupId, actualSubjectId);
         List<StudentRegistration> students = studentRegistrationDao.getNoClassStuBySubjectId(musicGroupId, actualSubjectId);
         List<Map<String, Object>> mapArrayList = new ArrayList<>();
         List<Map<String, Object>> mapArrayList = new ArrayList<>();

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

@@ -264,6 +264,9 @@
             <if test="transactionTeacherId!=null">
             <if test="transactionTeacherId!=null">
                 AND transaction_teacher_id_ = #{transactionTeacherId}
                 AND transaction_teacher_id_ = #{transactionTeacherId}
             </if>
             </if>
+            <if test="educationalTeacherId!=null">
+                AND educational_teacher_id_ = #{educationalTeacherId}
+            </if>
             <if test="courseViewType != null">
             <if test="courseViewType != null">
                 AND course_view_type_ = #{courseViewType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
                 AND course_view_type_ = #{courseViewType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             </if>

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

@@ -13,6 +13,12 @@
         <result column="create_time_" property="createTime"/>
         <result column="create_time_" property="createTime"/>
         <result column="reason_" property="reason"/>
         <result column="reason_" property="reason"/>
         <result column="user_comment_" property="userComment"/>
         <result column="user_comment_" property="userComment"/>
+        <result column="is_visit_" property="isVisit"/>
+        <result column="visit_time_" property="visitTime"/>
+        <result column="return_total_fee_" property="returnTotalFee"/>
+        <result column="fee_json_" property="feeJson"/>
+        <result column="current_approve_role_" property="currentApproveRole"/>
+        <result column="apply_user_id_" property="applyUserId"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <association property="musicGroup" javaType="com.ym.mec.biz.dal.entity.MusicGroup">
         <association property="musicGroup" javaType="com.ym.mec.biz.dal.entity.MusicGroup">
             <result column="music_group_name_" property="name"/>
             <result column="music_group_name_" property="name"/>
@@ -41,9 +47,9 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
             useGeneratedKeys="true" keyColumn="id" keyProperty="id">
             useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO music_group_quit
         INSERT INTO music_group_quit
-        (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,user_comment_,status_)
+        (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,user_comment_,status_,apply_user_id_,is_visit_,visit_time_,fee_json_,current_approve_role_,return_total_fee_)
         VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{userComment},
         VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{userComment},
-        #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+        #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{applyUserId},#{isVisit},#{visitTime},#{feeJson},#{currentApproveRole},#{returnTotalFee})
     </insert>
     </insert>
 
 
     <!-- 根据主键查询一条记录 -->
     <!-- 根据主键查询一条记录 -->
@@ -53,9 +59,6 @@
             <if test="userId != null">
             <if test="userId != null">
                 user_id_ = #{userId},
                 user_id_ = #{userId},
             </if>
             </if>
-            <if test="id != null">
-                id_ = #{id},
-            </if>
             <if test="joinDate != null">
             <if test="joinDate != null">
                 join_date_ = #{joinDate},
                 join_date_ = #{joinDate},
             </if>
             </if>
@@ -71,8 +74,23 @@
             <if test="musicGroupId != null">
             <if test="musicGroupId != null">
                 music_group_id_ = #{musicGroupId},
                 music_group_id_ = #{musicGroupId},
             </if>
             </if>
-            <if test="createTime != null">
-                create_time_ = #{createTime},
+            <if test="applyUserId != null">
+                apply_user_id_ = #{applyUserId},
+            </if>
+            <if test="isVisit != null">
+                is_visit_ = #{isVisit},
+            </if>
+            <if test="visitTime != null">
+                visit_time_ = #{visitTime},
+            </if>
+            <if test="feeJson != null">
+                fee_json_ = #{feeJson},
+            </if>
+            <if test="returnTotalFee != null">
+                return_total_fee_ = #{returnTotalFee},
+            </if>
+            <if test="currentApproveRole != null">
+                current_approve_role_ = #{currentApproveRole},
             </if>
             </if>
             <if test="status != null">
             <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -96,7 +114,7 @@
         LEFT JOIN sys_user su ON su.id_ = mgq.user_id_
         LEFT JOIN sys_user su ON su.id_ = mgq.user_id_
         LEFT JOIN music_group mg ON mg.id_ = mgq.music_group_id_
         LEFT JOIN music_group mg ON mg.id_ = mgq.music_group_id_
         <include refid="queryPageSql"/>
         <include refid="queryPageSql"/>
-        ORDER BY id_
+        ORDER BY id_ desc
         <include refid="global.limit"/>
         <include refid="global.limit"/>
     </select>
     </select>
     <sql id="queryPageSql">
     <sql id="queryPageSql">
@@ -118,6 +136,9 @@
             <if test="educationUserId != null">
             <if test="educationUserId != null">
                 AND mg.educational_teacher_id_ = #{educationUserId}
                 AND mg.educational_teacher_id_ = #{educationUserId}
             </if>
             </if>
+            <if test="currentApproveRole != null">
+                AND mgq.current_approve_role_ = #{currentApproveRole}
+            </if>
             <if test="status != null">
             <if test="status != null">
                 AND mgq.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
                 AND mgq.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             </if>
@@ -163,4 +184,13 @@
     <select id="queryByUserIdAndMusicGroupId" resultMap="MusicGroupQuit">
     <select id="queryByUserIdAndMusicGroupId" resultMap="MusicGroupQuit">
         select * from music_group_quit where id_ in (select max(id_) from music_group_quit where music_group_id_ = #{musicGroupId} AND user_id_ = #{userId})
         select * from music_group_quit where id_ in (select max(id_) from music_group_quit where music_group_id_ = #{musicGroupId} AND user_id_ = #{userId})
     </select>
     </select>
+    <select id="queryQuitMapByStudentId" resultType="java.util.Map">
+        SELECT user_id_ 'key',COUNT(DISTINCT id_)'value' FROM music_group_quit
+        WHERE user_id_ IN
+        <foreach collection="studentIds" open="(" close=")" item="userId" separator=",">
+            #{userId}
+        </foreach>
+        AND music_group_id_ = #{musicGroupId} AND status_ = 'PROCESSING'
+        GROUP BY user_id_
+    </select>
 </mapper>
 </mapper>

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

@@ -29,11 +29,13 @@ import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
 import com.ym.mec.biz.dal.dao.StudentPreRegistrationDao;
 import com.ym.mec.biz.dal.dao.StudentPreRegistrationDao;
 import com.ym.mec.biz.dal.dto.RegisterPayDto;
 import com.ym.mec.biz.dal.dto.RegisterPayDto;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
@@ -292,10 +294,15 @@ public class MusicGroupController extends BaseController {
             @ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String")})
             @ApiImplicitParam(name = "reason", value = "原因", required = true, dataType = "String")})
     public HttpResponseResult quitMusicGroup(String musicGroupId, String reason) throws Exception {
     public HttpResponseResult quitMusicGroup(String musicGroupId, String reason) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            throw new BizException("用户信息获取失败");
-        }
-        return succeed(musicGroupService.applyQuitMusicGroup(musicGroupId, reason,sysUser.getId()));
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
+		musicGroupQuit.setUserId(sysUser.getId());
+		musicGroupQuit.setMusicGroupId(musicGroupId);
+		musicGroupQuit.setUserComment(reason);
+		musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
+        return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit, sysUser.getId()));
     }
     }
 
 
     @ApiOperation(value = "取消退团申请")
     @ApiOperation(value = "取消退团申请")

+ 24 - 4
mec-teacher/src/main/java/com/ym/mec/teacher/controller/MusicGroupController.java

@@ -1,22 +1,33 @@
 package com.ym.mec.teacher.controller;
 package com.ym.mec.teacher.controller;
 
 
-import com.ym.mec.biz.service.MusicGroupService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
+
+import javax.annotation.Resource;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 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.MusicGroupQuit;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+
 @RequestMapping("musicGroup")
 @RequestMapping("musicGroup")
 @Api(tags = "乐团服务")
 @Api(tags = "乐团服务")
 @RestController
 @RestController
 public class MusicGroupController extends BaseController {
 public class MusicGroupController extends BaseController {
 
 
+    @Resource
+    private SysUserFeignService sysUserFeignService;
     @Autowired
     @Autowired
     private MusicGroupService musicGroupService;
     private MusicGroupService musicGroupService;
 
 
@@ -25,6 +36,15 @@ public class MusicGroupController extends BaseController {
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
     @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
             @ApiImplicitParam(name = "studentId", value = "学员编号", required = true, dataType = "Integer")})
             @ApiImplicitParam(name = "studentId", value = "学员编号", required = true, dataType = "Integer")})
     public HttpResponseResult quitMusicGroup(String musicGroupId, Integer studentId){
     public HttpResponseResult quitMusicGroup(String musicGroupId, Integer studentId){
-        return succeed(musicGroupService.applyQuitMusicGroup(musicGroupId,null,studentId));
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
+		musicGroupQuit.setUserId(studentId);
+		musicGroupQuit.setMusicGroupId(musicGroupId);
+        musicGroupQuit.setApplyUserId(sysUser.getId());
+		musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
+        return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit, sysUser.getId()));
     }
     }
 }
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller;
 
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
 import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
 import com.ym.mec.biz.dal.dto.MusicGroupRegsDto;
 import com.ym.mec.biz.dal.dto.MusicGroupRegsDto;
@@ -20,10 +21,12 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.yonge.log.model.AuditLogAnnotation;
 import com.yonge.log.model.AuditLogAnnotation;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.HttpStatus;
@@ -120,6 +123,13 @@ public class MusicGroupController extends BaseController {
 				return failed("非法请求");
 				return failed("非法请求");
 			}
 			}
 		}
 		}
+		if (sysUser.getIsSuperAdmin() == false) {
+			List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+			// 如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
+			if (userRole != null && userRole.size() == 1 && userRole.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
+				queryInfo.setEducationalTeacherId(sysUser.getId());
+			}
+		}
 		return succeed(musicGroupService.queryMusicGroupPage(queryInfo));
 		return succeed(musicGroupService.queryMusicGroupPage(queryInfo));
 	}
 	}
 
 

+ 152 - 35
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java

@@ -1,38 +1,57 @@
 package com.ym.mec.web.controller;
 package com.ym.mec.web.controller;
 
 
-import com.ym.mec.auth.api.entity.SysUserRole;
-import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
-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 com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.entity.SysUserRole;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.StudentInstrumentDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.entity.MusicGroupReturnFeeDto;
+import com.ym.mec.biz.dal.entity.StudentInstrument;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.page.MusicGroupQuitQueryInfo;
+import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.biz.service.MusicGroupQuitService;
 import com.ym.mec.biz.service.MusicGroupQuitService;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
-
-import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.json.JsonUtil;
 
 
 @RequestMapping("musicGroupQuit")
 @RequestMapping("musicGroupQuit")
 @Api(tags = "退团服务")
 @Api(tags = "退团服务")
@@ -44,6 +63,9 @@ public class MusicGroupQuitController extends BaseController {
 
 
     @Autowired
     @Autowired
     private MusicGroupQuitService musicGroupQuitService;
     private MusicGroupQuitService musicGroupQuitService;
+    
+    @Autowired
+    private StudentRegistrationService studentRegistrationService;
 
 
     @Autowired
     @Autowired
     private SysUserFeignService sysUserFeignService;
     private SysUserFeignService sysUserFeignService;
@@ -53,6 +75,11 @@ public class MusicGroupQuitController extends BaseController {
     private StudentInstrumentDao studentInstrumentDao;
     private StudentInstrumentDao studentInstrumentDao;
     @Autowired
     @Autowired
     private CloudTeacherOrderDao cloudTeacherOrderDao;
     private CloudTeacherOrderDao cloudTeacherOrderDao;
+    @Autowired
+    private TeacherDao teacherDao;
+    
+    @Autowired
+    private EmployeeDao employeeDao;
 
 
     @ApiOperation(value = "分页查询")
     @ApiOperation(value = "分页查询")
     @RequestMapping("/queryPage")
     @RequestMapping("/queryPage")
@@ -73,17 +100,28 @@ public class MusicGroupQuitController extends BaseController {
                 return failed("非法请求");
                 return failed("非法请求");
             }
             }
         }
         }
-        List<Integer> userRole = employeeService.queryUserRole(sysUser.getId());
-        //如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
-        if (userRole.size() == 1 && userRole.contains(SysUserRole.EDUCATIONAL_TEACHER)) {
-            queryInfo.setEducationUserId(sysUser.getId());
-        }
+		if (sysUser.getIsSuperAdmin() == false) {
+			List<Integer> userRole = employeeService.queryUserRole(sysUser.getId());
+			// 如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
+			if (userRole.contains(SysUserRole.EDUCATIONAL_TEACHER) && !userRole.contains(SysUserRole.SECTION_MANAGER)) {
+				queryInfo.setEducationUserId(sysUser.getId());
+			}
+		}
         PageInfo<MusicGroupQuit> musicGroupQuitPageInfo = musicGroupQuitService.queryPage(queryInfo);
         PageInfo<MusicGroupQuit> musicGroupQuitPageInfo = musicGroupQuitService.queryPage(queryInfo);
-
-        if (musicGroupQuitPageInfo.getRows() != null && musicGroupQuitPageInfo.getRows().size() > 0) {
+        List<MusicGroupQuit> rows = musicGroupQuitPageInfo.getRows();
+        if (rows != null && rows.size() > 0) {
+            List<Integer> applyUserIds = rows.stream().map(e -> e.getApplyUserId()).collect(Collectors.toList());
+            applyUserIds.removeAll(Collections.singleton(null));
+            Map<Integer, String> nameByIdList = new HashMap<>(applyUserIds.size());
+            if(applyUserIds.size() > 0){
+                nameByIdList = MapUtil.convertMybatisMap(teacherDao.queryNameByIdList(applyUserIds));
+            }
             //查询是否有有效期内乐保
             //查询是否有有效期内乐保
             Date nowDate = new Date();
             Date nowDate = new Date();
-            for (MusicGroupQuit row : musicGroupQuitPageInfo.getRows()) {
+            for (MusicGroupQuit row : rows) {
+                if(row.getApplyUserId() != null){
+                    row.setApplyUserName(nameByIdList.get(row.getApplyUserId()));
+                }
                 if (!row.getStatus().equals(ApprovalStatus.PROCESSING)) {
                 if (!row.getStatus().equals(ApprovalStatus.PROCESSING)) {
                     continue;
                     continue;
                 }
                 }
@@ -121,26 +159,105 @@ public class MusicGroupQuitController extends BaseController {
 
 
         MusicGroup musicGroup = musicGroupService.get(musicGroupQuit.getMusicGroupId());
         MusicGroup musicGroup = musicGroupService.get(musicGroupQuit.getMusicGroupId());
         musicGroupQuit.setMusicGroup(musicGroup);
         musicGroupQuit.setMusicGroup(musicGroup);
+        
+        if(StringUtils.isBlank(musicGroupQuit.getFeeJson())){
+        	//从数据库中查询费用
+        	Map<String,BigDecimal> map = studentRegistrationService.queryRefundsDetail(musicGroupQuit.getUserId(), musicGroupQuit.getMusicGroupId());
+        	MusicGroupReturnFeeDto dto = new MusicGroupReturnFeeDto();
+        	dto.setIsReturnAccessoriesFee(false);
+        	dto.setAccessoriesFee(map.get(OrderDetailTypeEnum.ACCESSORIES.getCode()));
+        	
+        	dto.setIsReturnCourseFee(false);
+        	dto.setCourseFee(map.get(OrderDetailTypeEnum.COURSE.getCode()));
+        	
+        	dto.setIsReturnMaintenanceFee(false);
+        	dto.setMaintenanceFee(map.get(OrderDetailTypeEnum.MAINTENANCE.getCode()));
+        	
+        	dto.setIsReturnMemberFee(false);
+        	dto.setMemberFee(map.get(OrderDetailTypeEnum.CLOUD_TEACHER.getCode()));
+        	
+        	dto.setIsReturnMusicalFee(false);
+        	dto.setMusicalFee(map.get(OrderDetailTypeEnum.MUSICAL.getCode()));
+        	
+        	musicGroupQuit.setReturnFeeDto(dto);
+        } else {
+        	musicGroupQuit.setReturnFeeDto(JsonUtil.parseObject(musicGroupQuit.getFeeJson(), MusicGroupReturnFeeDto.class));
+        }
 
 
         return succeed(musicGroupQuit);
         return succeed(musicGroupQuit);
     }
     }
+    
+    @ApiOperation(value = "查询退费明细")
+    @GetMapping("/queryRefundsDetail")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/queryRefundsDetail')")
+	public HttpResponseResult queryRefundsDetail(Integer userId, String musicGroupId) throws Exception {
+		Map<String, BigDecimal> map = studentRegistrationService.queryRefundsDetail(userId, musicGroupId);
+		MusicGroupReturnFeeDto dto = new MusicGroupReturnFeeDto();
+		dto.setIsReturnAccessoriesFee(false);
+		dto.setAccessoriesFee(map.get(OrderDetailTypeEnum.ACCESSORIES.getCode()));
+
+		dto.setIsReturnCourseFee(false);
+		dto.setCourseFee(map.get(OrderDetailTypeEnum.COURSE.getCode()));
+
+		dto.setIsReturnMaintenanceFee(false);
+		dto.setMaintenanceFee(map.get(OrderDetailTypeEnum.MAINTENANCE.getCode()));
+
+		dto.setIsReturnMemberFee(false);
+		dto.setMemberFee(map.get(OrderDetailTypeEnum.CLOUD_TEACHER.getCode()));
+
+		dto.setIsReturnMusicalFee(false);
+		dto.setMusicalFee(map.get(OrderDetailTypeEnum.MUSICAL.getCode()));
+
+		return succeed(dto);
+	}
+
+    @ApiOperation(value = "申请退团")
+    @PostMapping("/apply")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/apply')")
+    public HttpResponseResult applyQuitMusicGroup(@RequestBody MusicGroupQuit musicGroupQuit) throws Exception {
+    	
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		List<Integer> roleIds = new ArrayList<Integer>();
+		
+		if(sysUser.getIsSuperAdmin() == true) {
+			roleIds.add(SysUserRole.SECTION_MANAGER);
+			roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
+		} else {
+			roleIds = employeeDao.queryUserRole(sysUser.getId());
+		}
+		
+        return succeed(musicGroupService.applyQuitMusicGroup(roleIds, musicGroupQuit, sysUser.getId()));
+    }
 
 
     @ApiOperation(value = "退团")
     @ApiOperation(value = "退团")
     @PostMapping("/quitMusicGroup")
     @PostMapping("/quitMusicGroup")
     @PreAuthorize("@pcs.hasPermissions('musicGroupQuit/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 = "isRefundMemberFee", value = "是否退还云教练费用", required = true, dataType = "Boolean"),
-            @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,boolean isRefundMemberFee, BigDecimal maintenanceFee,BigDecimal cloudTeacherAmount) throws Exception {
-        return succeed(musicGroupService.approveQuitMusicGroup(id, status, reason, isRefundCourseFee, isRefundInstrumentFee, isRefundTeachingAssistantsFee
-                ,isRefundMemberFee, maintenanceFee, cloudTeacherAmount));
+    public HttpResponseResult quitMusicGroup(@RequestBody MusicGroupQuit musicGroupQuit) throws Exception {
+    	
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		List<Integer> roleIds = new ArrayList<Integer>();
+		
+		if(sysUser.getIsSuperAdmin() == true) {
+			roleIds.add(SysUserRole.SECTION_MANAGER);
+			roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
+		} else {
+			roleIds = employeeDao.queryUserRole(sysUser.getId());
+		}
+
+
+		if (!(roleIds.contains(SysUserRole.SECTION_MANAGER) || roleIds.contains(SysUserRole.EDUCATIONAL_TEACHER))) {
+			throw new BizException("未经授权,不能操作");
+		}
+    	
+        return succeed(musicGroupService.approveQuitMusicGroup(roleIds, musicGroupQuit));
     }
     }
 
 
     @ApiOperation(value = "一键退团")
     @ApiOperation(value = "一键退团")