Просмотр исходного кода

Merge branch 'master' into feature-goods-river

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
周箭河 5 лет назад
Родитель
Сommit
541ab71063
25 измененных файлов с 296 добавлено и 167 удалено
  1. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SchoolDao.java
  3. 7 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  4. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java
  6. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SchoolService.java
  7. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/UploadFileService.java
  8. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  9. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  10. 7 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  11. 52 79
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  12. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupStudentFeeServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  14. 26 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolServiceImpl.java
  15. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  16. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  17. 21 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  18. 2 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  19. 26 39
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  20. 4 0
      mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml
  21. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  22. 1 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  23. 24 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java
  24. 25 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherSchoolController.java
  25. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java

@@ -148,4 +148,24 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @param fee
 	 */
 	void updateStudentFeeIsLock(@Param("fee") UpdateStudentFeeDto fee);
+
+	/**
+	 * 批量修改学员缴费周期
+	 * @param month
+	 * @param musicGroupId
+	 */
+	void batchUpdateCalender(@Param("month") String month, @Param("musicGroupId") String musicGroupId);
+
+	/**
+	 * 批量修改学员缴费周期
+	 * @param musicGroupId
+	 */
+    void batchUpdateCalenders(String musicGroupId);
+
+	/**
+	 * 修改个人缴费周期
+	 * @param userId
+	 * @param musicGroupId
+	 */
+	void updateCalender(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SchoolDao.java

@@ -41,6 +41,8 @@ public interface SchoolDao extends BaseDAO<Integer, School> {
     List<School> findVipSchoolByUserId(@Param("userId") Integer userId,
                                        @Param("organId") String organId,
                                        @Param("isDefault") Integer isDefault);
+    List<School> findVipSchoolByUserId2(@Param("userId") Integer userId,
+                                       @Param("organId") String organId);
 
 
 }

+ 7 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -1,12 +1,5 @@
 package com.ym.mec.biz.dal.dao;
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ibatis.annotations.Param;
-
 import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.dto.UserGoodsDto;
@@ -17,6 +10,12 @@ import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrder> {
 
@@ -57,7 +56,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @Date: 2019/10/3
      * 根据学生vip课获取非失败缴费订单
      */
-    StudentPaymentOrder findNotFailedOrderByStudentVipGroup(@Param("vipGroupId") Long vipGroupId,
+    List<StudentPaymentOrder> findNotFailedOrderByStudentVipGroup(@Param("vipGroupId") Long vipGroupId,
                                                             @Param("userId") Integer userId);
 
     /**

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

@@ -50,12 +50,22 @@ public class MusicGroupStudentsDto{
 
     private Integer isLock;
 
+    private String paymentPeriodList;
+
     private String activeName;
 
     private String isNewStudentStr;
 
     private String nextPaymentDateStr;
 
+    public String getPaymentPeriodList() {
+        return paymentPeriodList;
+    }
+
+    public void setPaymentPeriodList(String paymentPeriodList) {
+        this.paymentPeriodList = paymentPeriodList;
+    }
+
     public Integer getIsLock() {
         return isLock;
     }

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

@@ -20,6 +20,17 @@ public class VipGroupBuyParamsDto {
     @ApiModelProperty(value = "是否使用账户余额支付")
     private boolean isUseBalancePayment;
 
+    @ApiModelProperty(value = "是否重新支付")
+    private boolean isRepeatPay;
+
+    public boolean isRepeatPay() {
+        return isRepeatPay;
+    }
+
+    public void setRepeatPay(boolean repeatPay) {
+        isRepeatPay = repeatPay;
+    }
+
     public boolean isUseBalancePayment() {
         return isUseBalancePayment;
     }

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SchoolService.java

@@ -17,6 +17,16 @@ public interface SchoolService extends BaseService<Integer, School> {
     List<School> queryByOrganId(String organId);
 
     /**
+     * @describe 根据教师编号删除对应教学点
+     * @author Joburgess
+     * @date 2020/1/3
+     * @param schoolId: 教学点编号
+     * @param userId: 用户编号
+     * @return void
+     */
+    void deleteByTeacherAndId(Integer schoolId,Integer userId);
+
+    /**
      * @describe 获取教师vip课教学点
      * @author Joburgess
      * @date 2019/10/19
@@ -25,5 +35,14 @@ public interface SchoolService extends BaseService<Integer, School> {
      */
     List<School> findVipSchoolByTeacher(Integer teacherId,String organId,Integer isDefault);
 
+    /**
+     * @describe 获取教师vip课教学点
+     * @author Joburgess
+     * @date 2019/10/19
+     * @param teacherId:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.School>
+     */
+    List<School> findVipSchoolByTeacher(Integer teacherId,String organId);
+
     PageInfo<School> queryPageDetail(SchoolQueryInfo queryInfo);
 }

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

@@ -27,11 +27,11 @@ public class UploadFileService {
 	private StoragePlugin storagePlugin;
 
 	/** 最大上传大小,单位kb */
-	@Value("${common.upload.maxSize:10240}")
+	@Value("${common.upload.maxSize:51200}")
 	private int maxSize;
 
 	/** 支持的扩展名 */
-	@Value("${common.upload.supportExtensions:jpg,jpeg,gif,png,mp3,mid,midi,aac,m4a}")
+	@Value("${common.upload.supportExtensions:jpg,jpeg,gif,png,mp3,mid,midi,aac,m4a,mp4}")
 	private String supportExtensions;
 
 	/** 文件根目录 */
@@ -62,7 +62,7 @@ public class UploadFileService {
 		File file = uploadFile(in, filePath, fileName);
 		if (maxSize > 0 && maxSize < file.length() / 1024) {
 			FileUtils.deleteQuietly(file);
-			uploadReturn.setMessage("超出允许的大小限制");
+			uploadReturn.setMessage("超出允许的大小(50M)限制");
 			return uploadReturn;
 		}
 

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

@@ -186,7 +186,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @param vipGroupId:
      * @return void
      */
-    void enableBuyVipGroup(Integer vipGroupId);
+    void enableBuyVipGroup(Integer vipGroupId, Integer userId);
 
     /**
      * @Author: Joburgess

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

@@ -2272,10 +2272,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         if(!CollectionUtils.isEmpty(classGroupTeachers)){
                             List<String> userNames = classGroupTeachers.stream().map(ClassGroupTeacherMapDto::getUserName).collect(Collectors.toList());
                             if(teachType.equals(TeachTypeEnum.BISHOP)){
-                                result.setBishopTeacherNames(Arrays.toString(userNames.toArray()));
+                                result.setBishopTeacherNames(StringUtils.join(userNames.toArray(),","));
                             }
                             if(teachType.equals(TeachTypeEnum.TEACHING)){
-                                result.setTeachingTeacherNames(Arrays.toString(userNames.toArray()));
+                                result.setTeachingTeacherNames(StringUtils.join(userNames.toArray(),","));
                             }
                         }
                     }

+ 7 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -1,11 +1,11 @@
 package com.ym.mec.biz.service.impl;
 
-import java.io.Serializable;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
 import java.util.stream.Collectors;
 
-import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
-import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -47,8 +48,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			String paymentPeriodList = fee.getPaymentPeriodList();
 			if(StringUtils.isEmpty(paymentPeriodList)){
 				return null;
-			}else {
-				months = new ArrayList(Arrays.asList(paymentPeriodList.split(",")));
+			} else {
+				months = Arrays.asList(paymentPeriodList.split(",")).stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
 				Collections.sort(months);
 			}
 		}else {

+ 52 - 79
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -323,7 +323,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             if(userCashAccount == null){
                 throw new BizException("用户账户找不到");
             }
-            if(userCashAccount.getBalance().subtract(amount).doubleValue() > 0){
+            if(userCashAccount.getBalance().subtract(amount).doubleValue() >= 0){
                 // 更新订单信息
                 studentPaymentOrder.setActualAmount(new BigDecimal(0));
                 studentPaymentOrder.setBalancePaymentAmount(amount);
@@ -415,7 +415,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         BigDecimal instrumentFee = BigDecimal.ZERO;
         BigDecimal accessoriesFee = BigDecimal.ZERO;
         BigDecimal otherFee = BigDecimal.ZERO;
-        BigDecimal remitFee = BigDecimal.ZERO;
 
         //乐器及打包辅件
         List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
@@ -445,7 +444,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
                 orderAmount = orderAmount.add(orderDetail.getPrice());
             }
-        } else if (StringUtils.isNoneBlank(registerPayDto.getGoodsGroupIds())) {
+        } else if (studentRegistration.getTemporaryCourseFee() == null && StringUtils.isNoneBlank(registerPayDto.getGoodsGroupIds())) {
             goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(registerPayDto.getGoodsGroupIds());
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
@@ -468,42 +467,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     courseFee.subtract(goodsGroup.getRemissionCourseFee());
                 }
             }
-        } else if (registerPayDto.getGoodsGroups() != null && registerPayDto.getGoodsGroups().size() > 0) {
-            String goodsGroupIds = registerPayDto.getGoodsGroups().keySet().stream().map(key -> key.toString()).collect(Collectors.joining(","));
-            goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(goodsGroupIds);
-            for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
-                Map groupType = JSONObject.parseObject(goodsGroup.getKitGroupPurchaseTypeJson(), HashMap.class);
-                if (registerPayDto.getGoodsGroups().get(goodsGroup.getId()).equals("GROUP")) {
-                    if(!groupType.containsKey("GROUP")){
-                        throw new BizException("乐器提供方式不存在");
-                    }
-                    remitFee = new BigDecimal((String) groupType.get("GROUP"));
-                }
-                if (registerPayDto.getGoodsGroups().get(goodsGroup.getId()).equals("LEASE")) {
-                    if(!groupType.containsKey("LEASE")){
-                       throw new BizException("乐器提供方式不存在");
-                    }
-                    goodsGroup.setPrice(goodsGroup.getDepositFee());
-                    goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.LEASE);
-                    remitFee = new BigDecimal((String) groupType.get("LEASE"));
-                }
-                if (registerPayDto.getGoodsGroups().get(goodsGroup.getId()).equals("FREE")) {
-                    if(!groupType.containsKey("FREE")){
-                        throw new BizException("乐器提供方式不存在");
-                    }
-                    goodsGroup.setPrice(new BigDecimal(0));
-                    remitFee = new BigDecimal((String) groupType.get("FREE"));
-                }
-                if(goodsGroup.getType().equals(GoodsType.INSTRUMENT)){
-                    instrumentFee = instrumentFee.add(goodsGroup.getPrice());
-                }else if(goodsGroup.getType().equals(GoodsType.ACCESSORIES)) {
-                    accessoriesFee = accessoriesFee.add(goodsGroup.getPrice());
-                }else {
-                    otherFee = otherFee.add(goodsGroup.getPrice());
-                }
-                orderAmount = orderAmount.add(goodsGroup.getPrice());
-            }
-            orderAmount.subtract(remitFee);
         }
 
         //单独辅件
@@ -549,7 +512,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         		studentPaymentOrder.setBalancePaymentAmount(amount);
         		studentPaymentOrder.setOrganId(musicGroup.getOrganId());
                 studentPaymentOrder.setUpdateTime(date);
-        		sysUserCashAccountService.updateBalance(userId, amount.negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"乐团续费");
+        		sysUserCashAccountService.updateBalance(userId, amount.negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"乐团报名");
                 amount = BigDecimal.ZERO;
         	}else{
 				if (userCashAccount.getBalance().doubleValue() > 0) {
@@ -747,7 +710,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         		studentPaymentOrder.setBalancePaymentAmount(amount);
         		studentPaymentOrder.setOrganId(musicGroup.getOrganId());
                 studentPaymentOrder.setUpdateTime(date);
-        		sysUserCashAccountService.updateBalance(userId, amount.negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"乐团续费");
+        		sysUserCashAccountService.updateBalance(userId, amount.negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"乐团报名");
         		amount = BigDecimal.ZERO;
         	}else{
 				if (userCashAccount.getBalance().doubleValue() > 0) {
@@ -903,6 +866,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
             musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null,null),"PAID_COMPLETED");
         }
+        musicGroupStudentFeeDao.batchUpdateCalenders(musicGroupId);
         //记录操作日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"确认开团(筹备中 -> 进行中)",sysUser.getId(),""));
         musicGroup.setStatus(MusicGroupStatusEnum.PROGRESS);
@@ -1488,13 +1452,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		if (orderList == null || orderList.size() == 0) {
 			throw new BizException("请走报名缴费流程");
 		}*/
-
+        
         // 判断当前是否是续费状态
         if (musicGroupStudentFee.getPaymentStatus() != PaymentStatus.NON_PAYMENT) {
             throw new BizException("已缴费");
         }
 
-        BigDecimal amount = musicGroupStudentFee.getTemporaryCourseFee();
+        BigDecimal amount = musicGroupStudentFee.getCourseFee();
         if (amount == null || amount.doubleValue() == 0) {
             amount = musicGroupStudentFee.getCourseFee();
         }
@@ -1665,6 +1629,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             sysMessageService.batchSendMessage(MessageSender.YIMEI, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, yimei, null, 0, "1",
                     studentRegistration.getParentsName(),studentPaymentOrder.getActualAmount());
             return true;
+		} else {
+			if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().doubleValue() > 0) {
+				sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS,
+						"乐团续费失败");
+			}
         }
         if(studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED){
             String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
@@ -1805,46 +1774,50 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //如果已生成课表,那么修改未上课时教学点
             courseScheduleDao.updateCourseScheduleSchool("MUSIC",musicGroupId,musicGroup.getSchoolId());
         }
-
-        Date date = new Date();
         List<Integer> months = subFeeSettingDto.getMonths();
-
+        
         //判断缴费日历是否修改
-        boolean isModifiedOfCalender = false;
-
-        List<MusicGroupPaymentCalender> calenderList = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
-        if (months.size() == calenderList.size()) {
-            for (MusicGroupPaymentCalender cal : calenderList) {
-                if (!months.contains(cal.getPaymentMonth())) {
-                    isModifiedOfCalender = true;
-                    break;
-                }
-            }
-        } else {
-            isModifiedOfCalender = true;
-        }
-
-        if (isModifiedOfCalender) {
-
-            Integer num = musicGroupStudentFeeDao.countStudentNoPayNum(musicGroupId);
-            if (num > 0) {
-                throw new BizException("缴费周期更新失败,当前乐团有未缴费的学员");
-            }
+		boolean isModifiedOfCalender = false;
+
+		List<MusicGroupPaymentCalender> calenderList = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
+		if (months.size() == calenderList.size()) {
+			for (MusicGroupPaymentCalender cal : calenderList) {
+				if (!months.contains(cal.getPaymentMonth())) {
+					isModifiedOfCalender = true;
+					break;
+				}
+			}
+		} else {
+			isModifiedOfCalender = true;
+		}
 
-            // 删除乐团相关付费周期
-            musicGroupPaymentCalenderDao.delByGroupId(musicGroupId);
-            musicGroupStudentFeeDao.deleteByMusicGroupId(musicGroupId,0);
-            if (months != null && months.size() > 0) {
-                // 批量插入
-                musicGroupPaymentCalenderDao.batchAdd(months, musicGroupId);
-            }
-            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
-                //生成学员费用表
-                List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
-                if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
-                    musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null,null),"PAID_COMPLETED");
-                }
+		if (isModifiedOfCalender) {
+			Integer num = musicGroupStudentFeeDao.countStudentNoPayNum(musicGroupId);
+			if (num > 0) {
+				throw new BizException("缴费周期更新失败,当前乐团有未缴费的学员");
+			}
+			
+			// 删除乐团相关付费周期
+			musicGroupPaymentCalenderDao.delByGroupId(musicGroupId);
+			if (months != null && months.size() > 0) {
+				// 批量插入
+				musicGroupPaymentCalenderDao.batchAdd(months, musicGroupId);
+			}
+		}
+        if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
+            //修改未锁定学员缴费周期
+            String join = null;
+            if (months != null && months.size() > 0)  {
+                join = StringUtils.join(months,",");
             }
+            musicGroupStudentFeeDao.batchUpdateCalender(join,musicGroupId);
+            List<MusicGroupStudentFee> fees = musicGroupStudentFeeDao.queryByMusicGroupId(musicGroupId);
+            Date date = new Date();
+            fees.forEach(e->{
+                e.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null,e));
+                e.setUpdateTime(date);
+            });
+            musicGroupStudentFeeDao.batchUpdate(fees);
         }
         musicGroupDao.update(musicGroup);
         //修改课程里面的教学点

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupStudentFeeServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.UpdateStudentFeeDto;
@@ -8,14 +9,17 @@ import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.biz.service.MusicGroupStudentFeeService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -36,6 +40,9 @@ public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, Music
 	@Autowired
 	private SysMessageService sysMessageService;
 
+	@Autowired
+	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
+
 	@Override
 	public BaseDAO<Long, MusicGroupStudentFee> getDAO() {
 		return musicGroupStudentFeeDao;
@@ -80,9 +87,16 @@ public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, Music
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void updateStudentFee(UpdateStudentFeeDto studentFeeDto) {
 		//修改学员缴费周期和是否锁定
 		musicGroupStudentFeeDao.updateStudentFee(studentFeeDto);
+		MusicGroupStudentFee fee = musicGroupStudentFeeDao.findByUser(studentFeeDto.getStudentId(), studentFeeDto.getMusicGroupId());
+		if(fee == null){
+			throw new BizException("学员缴费信息不存在");
+		}
+		fee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(studentFeeDto.getMusicGroupId(),null,fee));
+		musicGroupStudentFeeDao.update(fee);
 	}
 
 	@Override

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

@@ -97,7 +97,7 @@ public class PayServiceImpl implements PayService {
         String company = "daya";
         if (userId != null) {
             MusicGroup musicGroup = musicGroupDao.findUserMusicGroup(userId);
-            if (musicGroup != null && musicGroup.getOwnershipType().equals(CooperationOrgan.OwnershipType.COOPERATION)) {
+            if (musicGroup != null && musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType().equals(CooperationOrgan.OwnershipType.COOPERATION)) {
                 company = "yadie";
             }
         }

+ 26 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolServiceImpl.java

@@ -1,23 +1,24 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.SchoolDao;
 import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.page.SchoolQueryInfo;
 import com.ym.mec.biz.service.SchoolService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
 public class SchoolServiceImpl extends BaseServiceImpl<Integer, School>  implements SchoolService {
@@ -38,11 +39,27 @@ public class SchoolServiceImpl extends BaseServiceImpl<Integer, School>  impleme
 	}
 
 	@Override
+	public void deleteByTeacherAndId(Integer schoolId, Integer userId) {
+		School school = schoolDao.get(schoolId);
+		if(Objects.isNull(school)){
+			throw new BizException("此教学点不存在");
+		}
+		if(Objects.nonNull(school.getUserId())&&school.getUserId().equals(userId)){
+			schoolDao.delete(schoolId);
+		}
+	}
+
+	@Override
 	public List<School> findVipSchoolByTeacher(Integer teacherId,String organId,Integer isDefault) {
 		return schoolDao.findVipSchoolByUserId(teacherId,organId,isDefault);
 	}
 
 	@Override
+	public List<School> findVipSchoolByTeacher(Integer teacherId,String organId) {
+		return schoolDao.findVipSchoolByUserId2(teacherId,organId);
+	}
+
+	@Override
 	public PageInfo<School> queryPageDetail(SchoolQueryInfo queryInfo) {
 		PageInfo<School> schoolPageInfo = queryPage(queryInfo);
 		List<School> rows = schoolPageInfo.getRows();

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

@@ -43,6 +43,8 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
 	private OrganizationDao organizationDao;
 	@Autowired
 	private TeacherDao teacherDao;
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
 
 	@Override
 	public BaseDAO<Integer, SporadicChargeInfo> getDAO() {
@@ -71,6 +73,10 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
 			return true;
 		}
 		if(studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED){
+			if(studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) >0 ){
+				sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(),PlatformCashAccountDetailTypeEnum.REFUNDS,info.getTitle()+"支付失败");
+			}
+
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_SPORADIC_PAYMENT_FAILED, map, null, 0,"",
 					studentPaymentOrder.getActualAmount(),info.getTitle());
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SMS_SPORADIC_PAYMENT_FAILED, yimei, null, 0, "",

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

@@ -439,6 +439,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         //关闭老订单
         oldOrder.setStatus(DealStatusEnum.CLOSE);
         studentPaymentOrderService.update(oldOrder);
+        if(oldOrder.getBalancePaymentAmount() != null && oldOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) >0 ){
+            sysUserCashAccountService.updateBalance(oldOrder.getUserId(), oldOrder.getBalancePaymentAmount(),PlatformCashAccountDetailTypeEnum.REFUNDS,"关闭订单");
+        }
         Date date = new Date();
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(userId);
@@ -652,6 +655,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             musicGroupStudentFeeDao.insert(new MusicGroupStudentFee(musicGroupId,
                     userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
                     nextPaymentDate, studentAddDto.getTemporaryCourseFee(),paymentStatus));
+            musicGroupStudentFeeDao.updateCalender(userId,musicGroupId);
             studentPaymentOrder.setExpectAmount(reduce);
             //当前学员是否以前存在过当前乐团
             if(phoneAndMusicGroupId != null){
@@ -883,6 +887,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     throw new BizException("减去缴费人数失败");
                 }
             }
+            if(studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) >0 ){
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(),PlatformCashAccountDetailTypeEnum.REFUNDS,"报名缴费失败");
+            }
+
             //发送缴费成功通知(短信 + push)
             String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL) + studentRegistration.getMusicGroupId();
 

+ 21 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -24,6 +24,7 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -894,11 +895,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     }
 
 	@Override
-	public void enableBuyVipGroup(Integer vipGroupId) {
+	public void enableBuyVipGroup(Integer vipGroupId, Integer userId) {
 		if (Objects.isNull(vipGroupId)){
 			throw new BizException("请指定VIP课");
 		}
 		VipGroup vipGroup = get(vipGroupId.longValue());
+		if(Objects.nonNull(vipGroup.getStudentIdList())){
+			Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
+			if(!userIds.contains(userId)){
+				throw new BizException("您无法购买此课程");
+			}
+		}
 		List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class);
 		courseScheduleService.checkNewCourseSchedules(courseSchedules,false);
 	}
@@ -982,7 +989,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Transactional(rollbackFor = Exception.class)
 	@Override
-	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception {
+	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if(user == null){
 			throw new BizException("用户信息获取失败");
@@ -1009,20 +1016,16 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 		}
 
-		StudentPaymentOrder oldOrder = studentPaymentOrderDao.findNotFailedOrderByStudentVipGroup(vipGroupBuyParams.getVipGroupId(),
+		List<StudentPaymentOrder> oldOrders = studentPaymentOrderDao.findNotFailedOrderByStudentVipGroup(vipGroupBuyParams.getVipGroupId(),
 				user.getId());
+		Map<DealStatusEnum, Long> statusCountMap = oldOrders.stream().collect(Collectors.groupingBy(StudentPaymentOrder::getStatus, Collectors.counting()));
 
-		if(Objects.nonNull(oldOrder)&&oldOrder.getStatus().equals(DealStatusEnum.SUCCESS)){
+		if(Objects.nonNull(statusCountMap.get(DealStatusEnum.SUCCESS))&&statusCountMap.get(DealStatusEnum.SUCCESS)>0){
 			if("36".equals(user.getOrganId())){
 				throw new BizException("您已预约过此课程");
 			}
 			throw new BizException("您已购买过此课程");
-		}else if(Objects.nonNull(oldOrder)&&oldOrder.getStatus().equals(DealStatusEnum.ING)){
-			if("36".equals(user.getOrganId())){
-				throw new BizException("您已预约过此课程,请等待处理结果");
-			}
-			throw new BizException("您有处理中的订单,请等待处理结果");
-		}else{
+		}else if(CollectionUtils.isEmpty(oldOrders)||Objects.isNull(statusCountMap.get(DealStatusEnum.ING))){
 			if(classGroup.getStudentNum()>=classGroup.getExpectStudentNum()){
 				throw new BizException("该课程人数已达上限");
 			}
@@ -1090,7 +1093,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				return result;
 			}else{
 				if (userCashAccount.getBalance().doubleValue() > 0) {
-					sysUserCashAccountService.updateBalance(user.getId(), userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "乐团续费");
+					sysUserCashAccountService.updateBalance(user.getId(), userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "VIP课购买");
 					amount = amount.subtract(userCashAccount.getBalance());
 					studentPaymentOrder.setActualAmount(amount);
 					studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
@@ -1166,11 +1169,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(!isOk){
 			updateVipGroupStudentNumAndStatus(vipGroupId,classGroup,-1,false);
 			classGroupStudentMapperDao.deleteStudentByMusicGroupId(vipGroupId.toString(),userId);
+			if (studentPaymentOrder.getBalancePaymentAmount().doubleValue() > 0) {
+				sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS,
+						"VIP课购买失败");
+			}
 			return;
 		}
 
 		try {
-			updateVipGroupStudentNumAndStatus(vipGroupId, classGroup,0,true);
+			if(classGroup.getDelFlag()==1){
+				updateVipGroupStudentNumAndStatus(vipGroupId, classGroup,0,true);
+			}
 		} catch (Exception e) {
 			LOGGER.error("小课[{}]开课失败:{}",vipGroupId,e.getCause());
 		}

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

@@ -1272,7 +1272,7 @@
         SELECT DISTINCT cgsm.music_group_id_ FROM class_group_student_mapper cgsm
         LEFT JOIN music_group mg ON mg.id_ = cgsm.music_group_id_ AND cgsm.group_type_ = 'MUSIC'
         LEFT JOIN vip_group vg ON vg.id_ = cgsm.music_group_id_ AND cgsm.group_type_ = 'VIP'
-        WHERE cgsm.user_id_ = #{userId} AND cgsm.status_ != 'QUIT' AND (mg.status_ = 'PROGRESS' OR vg.status_ = 2 OR vg.status_=5)
+        WHERE cgsm.user_id_ = #{userId} AND cgsm.status_ != 'QUIT' AND (mg.status_ = 'PROGRESS' OR vg.status_ = 2 OR vg.status_=5 OR vg.status_=1)
         ORDER BY cgsm.music_group_id_
         <include refid="global.limit"/>
     </select>
@@ -1288,7 +1288,7 @@
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_
         WHERE spo.type_ != 'OTHER' AND spo.music_group_id_ IS NOT NULL
         AND spo.user_id_ = #{userId} AND spo.status_='SUCCESS' AND cgsm.status_ != 'QUIT'
-        AND IF(spo.group_type_ = 'VIP', (vg.status_ = 4 OR vg.status_ = 3),0)=0 AND cg.del_flag_ = 0
+        AND IF(spo.group_type_ = 'VIP', (vg.status_ = 4 OR vg.status_ = 3 ),0)=0 AND cg.del_flag_ = 0
         <include refid="global.limit"/>
     </select>
 

+ 26 - 39
mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml

@@ -36,8 +36,8 @@
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentFee" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
-		INSERT INTO music_group_student_fee_ (id_,music_group_id_,user_id_,course_fee_,create_time_,update_time_,next_payment_date_,latest_paid_time_,continuous_absenteeism_times_,subject_id_,payment_status_,temporary_course_fee_,is_lock_,payment_period_list_)
-		VALUES(#{id},#{musicGroupId},#{userId},#{courseFee},now(),now(),#{nextPaymentDate},#{latestPaidTime},#{continuousAbsenteeismTimes},#{subjectId},#{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{temporaryCourseFee},#{isLock},#{paymentPeriodList})
+		INSERT INTO music_group_student_fee_ (id_,music_group_id_,user_id_,course_fee_,create_time_,update_time_,next_payment_date_,latest_paid_time_,continuous_absenteeism_times_,subject_id_,payment_status_,temporary_course_fee_,payment_period_list_)
+		VALUES(#{id},#{musicGroupId},#{userId},#{courseFee},now(),now(),#{nextPaymentDate},#{latestPaidTime},#{continuousAbsenteeismTimes},#{subjectId},#{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{temporaryCourseFee},#{paymentPeriodList})
 	</insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentFee">
@@ -165,6 +165,7 @@
     <select id="countStudentNoPayNum" resultType="java.lang.Integer">
         SELECT COUNT(DISTINCT sr.id_) FROM student_registration sr LEFT JOIN music_group_student_fee_ sf ON sr.user_id_ = sf.user_id_
         WHERE sr.music_group_id_ = #{musicGroupId} AND sr.music_group_status_ != 'QUIT' AND sf.payment_status_ != 'PAID_COMPLETED'
+        AND sr.music_group_id_ = sf.music_group_id_
     </select>
 
     <select id="findContinuousAbsenteeismTimesByUsersAndMusicGroup" resultType="map">
@@ -196,41 +197,12 @@
     <update id="batchUpdate" parameterType="java.util.List">
     	<foreach collection="list" item="item" index="index" open="" close="" separator=";">
         UPDATE music_group_student_fee_
-        <set>
-            <if test="item.userId != null">
-                user_id_ = #{item.userId},
-            </if>
-            <if test="item.subjectId != null">
-                subject_id_ = #{item.subjectId},
-            </if>
-            <if test="item.updateTime != null">
-                update_time_ = #{item.updateTime},
-            </if>
-            <if test="item.courseFee != null">
-                course_fee_ = #{item.courseFee},
-            </if>
-            <if test="item.musicGroupId != null">
-                music_group_id_ = #{item.musicGroupId},
-            </if>
-            <if test="item.nextPaymentDate != null">
-                next_payment_date_ = #{item.nextPaymentDate},
-            </if>
-            <if test="item.latestPaidTime != null">
-                latest_paid_time_ = #{item.latestPaidTime},
-            </if>
-            <if test="item.continuousAbsenteeismTimes != null">
-                continuous_absenteeism_times_ = #{item.continuousAbsenteeismTimes},
-            </if>
-            <if test="item.paymentStatus != null">
-                payment_status_ = #{item.paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            </if>
-            <if test="item.temporaryCourseFee != null">
-                temporary_course_fee_ = #{item.temporaryCourseFee},
-            </if>
-            <if test="item.paymentPeriodList != null">
-                payment_period_list_ = #{item.paymentPeriodList},
-            </if>
-        </set>
+        SET update_time_ = NOW(),payment_period_list_ = #{item.paymentPeriodList},
+            next_payment_date_ = #{item.nextPaymentDate},subject_id_ = #{item.subjectId},
+            course_fee_ = #{item.courseFee},latest_paid_time_ = #{item.latestPaidTime},
+            continuous_absenteeism_times_ = #{item.continuousAbsenteeismTimes},
+            payment_status_ = #{item.paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            temporary_course_fee_ = #{item.temporaryCourseFee}
         WHERE id_ = #{item.id}
         </foreach>
     </update>
@@ -240,12 +212,27 @@
     </update>
     <update id="updateStudentFee">
         UPDATE music_group_student_fee_
-        SET course_fee_ = #{fee.amount},payment_period_list_ = #{fee.month}
+        SET course_fee_ = #{fee.amount},payment_period_list_ = #{fee.month},update_time_ = NOW()
         WHERE music_group_id_ = #{fee.musicGroupId} AND user_id_ = #{fee.studentId}
     </update>
     <update id="updateStudentFeeIsLock">
         UPDATE music_group_student_fee_
-        SET is_lock_ = #{fee.isLock}
+        SET is_lock_ = #{fee.isLock},update_time_ = NOW()
         WHERE music_group_id_ = #{fee.musicGroupId} AND user_id_ = #{fee.studentId}
     </update>
+    <update id="batchUpdateCalender">
+        UPDATE music_group_student_fee_
+        SET payment_period_list_ = #{month},update_time_ = NOW()
+        WHERE music_group_id_ = #{musicGroupId} AND is_lock_ = 0
+    </update>
+    <update id="batchUpdateCalenders">
+        UPDATE music_group_student_fee_ mgsf SET mgsf.payment_period_list_ = (
+        SELECT GROUP_CONCAT(mgpc.payment_month_) FROM music_group_payment_calender mgpc WHERE mgpc.music_group_id_ = mgsf.music_group_id_)
+        WHERE mgsf.music_group_id_ = #{musicGroupId}
+    </update>
+    <update id="updateCalender">
+        UPDATE music_group_student_fee_ mgsf SET mgsf.payment_period_list_ = (
+        SELECT GROUP_CONCAT(mgpc.payment_month_) FROM music_group_payment_calender mgpc WHERE mgpc.music_group_id_ = mgsf.music_group_id_)
+        WHERE mgsf.music_group_id_ = #{musicGroupId} AND mgsf.user_id_ = #{userId}
+    </update>
 </mapper>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml

@@ -141,4 +141,8 @@
         AND ((FIND_IN_SET(organ_id_,#{organId}) and user_id_ is NULL) or user_id_ = #{userId})
         </if>
     </select>
+    <select id="findVipSchoolByUserId2" resultMap="School">
+        SELECT * FROM school WHERE del_flag_ != 1
+            AND FIND_IN_SET(organ_id_,#{organId}) AND user_id_ = #{userId}
+    </select>
 </mapper>

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

@@ -410,10 +410,11 @@
         <result property="nextPaymentDate" column="next_payment_date_"/>
         <result property="isActive" column="isActive_"/>
         <result property="isLock" column="is_lock_"/>
+        <result property="paymentPeriodList" column="payment_period_list_"/>
     </resultMap>
     <select id="queryMusicGroupStudent" resultMap="MusicGroupStudentsDto">
         SELECT sr.user_id_,su.username_ real_name_,su.gender_,su.phone_ parents_phone_,sr.current_grade_,mgsf.payment_status_,
-        sr.current_class_,sr.music_group_status_,mgsf.next_payment_date_,mgsf.course_fee_,
+        sr.current_class_,sr.music_group_status_,mgsf.next_payment_date_,mgsf.course_fee_,mgsf.payment_period_list_,
         s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,mgsf.is_lock_,
         IF(DATE_FORMAT(sr.create_time_,'%Y-%m-%d') > DATE_FORMAT(mg.payment_expire_date_,'%Y-%m-%d'),1,0) is_new_student_
         FROM student_registration sr

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

@@ -373,6 +373,7 @@
         FROM student_payment_order
         WHERE group_type_ = #{groupType}
           AND music_group_id_ = #{musicGroupId}
+          AND status_='SUCCESS'
     </select>
     <select id="findStudentPaymentOrder" resultMap="StudentPaymentOrder">
         SELECT *

+ 24 - 1
mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java

@@ -5,7 +5,12 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.ConditionDto;
 import com.ym.mec.biz.dal.dto.QueryConditionDto;
 import com.ym.mec.biz.dal.dto.VipGroupBuyParamsDto;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.biz.service.VipGroupCategoryService;
 import com.ym.mec.biz.service.VipGroupService;
@@ -39,6 +44,8 @@ public class StudentVipGroupController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private VipGroupCategoryService vipGroupCategoryService;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
 
     @ApiOperation(value = "获取vip课列表筛选条件")
     @GetMapping(value = "/findQueryCondition")
@@ -81,13 +88,29 @@ public class StudentVipGroupController extends BaseController {
         if (null == sysUser) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        vipGroupService.enableBuyVipGroup(vipGroupId);
+        vipGroupService.enableBuyVipGroup(vipGroupId,sysUser.getId());
         return succeed();
     }
 
     @ApiOperation(value = "vip课购买")
     @PostMapping("/buyVipGroup")
     public Object buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (null == sysUser) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if(!vipGroupBuyParams.isRepeatPay()){
+            // 判断是否存在支付中的记录
+            List<StudentPaymentOrder> list = studentPaymentOrderService
+                    .queryByCondition(GroupType.VIP,
+                            vipGroupBuyParams.getVipGroupId().toString(),
+                            sysUser.getId(),
+                            DealStatusEnum.ING,
+                            OrderTypeEnum.SMALL_CLASS_TO_BUY);
+            if (list.size() > 0) {
+                return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+            }
+        }
         return succeed(vipGroupService.buyVipGroup(vipGroupBuyParams));
     }
 

+ 25 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherSchoolController.java

@@ -56,7 +56,11 @@ public class TeacherSchoolController extends BaseController {
     @ApiOperation(value = "删除学校")
     @PostMapping("/del")
     public Object del(@ApiParam(value = "学校编号", required = true) Integer id){
-        schoolService.delete(id);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        schoolService.deleteByTeacherAndId(id,sysUser.getId());
         return succeed();
     }
 
@@ -79,10 +83,30 @@ public class TeacherSchoolController extends BaseController {
         if(teacher == null){
         	return failed("非法访问");
 		}
+
 		String organIdList = teacher.getOrganId();
 		if (StringUtils.isNoneBlank(teacher.getFlowOrganRange())) {
 			organIdList = organIdList + "," + teacher.getFlowOrganRange();
 		}
+        return succeed(schoolService.findVipSchoolByTeacher(sysUser.getId(),organIdList));
+    }
+
+    @ApiOperation(value = "获取教师vip课教学点")
+    @GetMapping("/findVipSchoolByTeacher2")
+    public Object findVipSchoolByTeacher2(Integer isDefault){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        Teacher teacher = teacherDao.get(sysUser.getId());
+        if(teacher == null){
+            return failed("非法访问");
+        }
+
+        String organIdList = teacher.getOrganId();
+        if (StringUtils.isNoneBlank(teacher.getFlowOrganRange())) {
+            organIdList = organIdList + "," + teacher.getFlowOrganRange();
+        }
         return succeed(schoolService.findVipSchoolByTeacher(sysUser.getId(),organIdList,isDefault));
     }
 }

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

@@ -190,7 +190,7 @@ public class StudentManageController extends BaseController {
      * 修改学员缴费金额和缴费周期
      * @return
      */
-    @GetMapping(value = "/updateStudentFee")
+    @PostMapping(value = "/updateStudentFee")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFee')")
     public Object updateStudentFee(UpdateStudentFeeDto studentFeeDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -206,7 +206,7 @@ public class StudentManageController extends BaseController {
      * 修改学员缴费周期锁定状态
      * @return
      */
-    @GetMapping(value = "/updateStudentFeeIsLock")
+    @PostMapping(value = "/updateStudentFeeIsLock")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFeeIsLock')")
     public Object updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();