浏览代码

Merge branch 'exits_music_group_5_6'

周箭河 4 年之前
父节点
当前提交
c7c8241660

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

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

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

+ 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);
 
 	/**
 	 *  续费

+ 71 - 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,17 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 }
             }
 
+            //退乐保费用
+            if (maintenanceFee != null) {
+                if (maintenanceFee.compareTo(BigDecimal.ZERO) > 0) {
+                    int maintenanceNum = studentInstrumentDao.getStudentMaintenanceNum(userId);
+                    if (maintenanceNum <= 0) {
+                        throw new BizException("学生没有有效期内的乐保,不能退乐保费用");
+                    }
+                }
+                amount = amount.add(maintenanceFee);
+                studentInstrumentDao.quitMaintenance(userId);
+            }
 
             if (amount.doubleValue() > 0) {
                 // 增加交易流水
@@ -1891,7 +1868,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 +1898,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 +1992,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 +2045,17 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             }
         }
 
+        //退乐保费用
+        if (maintenanceFee != null) {
+            if (maintenanceFee.compareTo(BigDecimal.ZERO) > 0) {
+                int maintenanceNum = studentInstrumentDao.getStudentMaintenanceNum(userId);
+                if (maintenanceNum <= 0) {
+                    throw new BizException("学生没有有效期内的乐保,不能退乐保费用");
+                }
+            }
+            amount = amount.add(maintenanceFee);
+            studentInstrumentDao.quitMaintenance(userId);
+        }
 
         if (amount.doubleValue() > 0) {
             // 增加交易流水
@@ -2395,27 +2383,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 +2450,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 +2466,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 +2739,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 +2772,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);

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

@@ -111,6 +111,8 @@ public class StudentManageServiceImpl implements StudentManageService {
     private WebFeignService webFeignService;
     @Autowired
     private StudentCourseHomeworkDao studentCourseHomeworkDao;
+    @Autowired
+    private StudentInstrumentDao studentInstrumentDao;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -500,12 +502,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);
+            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);
+            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);

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

@@ -269,4 +269,29 @@
         LIMIT 1
     </select>
 
+    <update id="quitMaintenance">
+        UPDATE student_instrument
+        SET del_flag_=1,
+            update_time=NOW()
+        WHERE student_id_ = #{studentId}
+          AND del_flag_ = 0
+    </update>
+
+    <select id="getStudentsMaintenanceNum" resultMap="StudentInstrument">
+        SELECT student_id_,COUNT(*) goods_id_ FROM student_instrument WHERE 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="getStudentMaintenanceNum" resultType="int">
+        SELECT student_id_, COUNT(*)
+        FROM student_instrument
+        WHERE student_id_ = #{studentId}
+          AND del_flag_ = 0
+          AND end_time_ > NOW()
+    </select>
+
 </mapper>

+ 109 - 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,123 @@ 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) {
+            //查询是否有有效期内乐保
+            List<Integer> studentIds = musicGroupQuitPageInfo.getRows().stream().map(MusicGroupQuit::getUserId).collect(Collectors.toList());
+            List<StudentInstrument> studentsMaintenanceNum = studentInstrumentDao.getStudentsMaintenanceNum(studentIds);
+            Map<Integer, Integer> studentMaintenanceMap = studentsMaintenanceNum.stream().collect(Collectors.toMap(StudentInstrument::getStudentId, StudentInstrument::getGoodsId));
+            for (MusicGroupQuit row : musicGroupQuitPageInfo.getRows()) {
+                if (studentMaintenanceMap.containsKey(row.getUserId())) {
+                    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));
+    }
 }