瀏覽代碼

Merge branch 'master' into yonge

yonge 5 年之前
父節點
當前提交
44d97f17b4
共有 48 個文件被更改,包括 873 次插入261 次删除
  1. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  2. 41 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SchoolDao.java
  4. 8 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  5. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroupTeacherMapDto.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java
  7. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  8. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SporadicPayDto.java
  9. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SuperClassGroupDto.java
  10. 22 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/UpdateStudentFeeDto.java
  11. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupBuyParamsDto.java
  12. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupStudentFee.java
  13. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  14. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java
  15. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  16. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  17. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupStudentFeeService.java
  18. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SchoolService.java
  19. 14 5
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  20. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/UploadFileService.java
  21. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  22. 56 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  23. 47 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  24. 38 25
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  25. 68 50
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  26. 36 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupStudentFeeServiceImpl.java
  27. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  28. 26 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolServiceImpl.java
  29. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  30. 14 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  31. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  32. 9 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  33. 29 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  34. 16 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  35. 29 7
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  36. 55 38
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  37. 4 0
      mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml
  38. 7 2
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  39. 2 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  40. 10 2
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  41. 17 3
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  42. 10 3
      mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java
  43. 16 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  44. 24 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudentVipGroupController.java
  45. 25 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherSchoolController.java
  46. 6 6
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  47. 0 1
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java
  48. 44 2
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachTypeEnum;
@@ -81,4 +82,13 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @return
      */
     String queryTeachingNames(Long classGroupId);
+
+    /**
+     * @describe 根据班级编号获取教师班级关联记录
+     * @author Joburgess
+     * @date 2020/1/3
+     * @param classGroupIds: 班级编号列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper>
+     */
+    List<ClassGroupTeacherMapDto> findByClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds);
 }

+ 41 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.UpdateStudentFeeDto;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -32,7 +33,7 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @param musicGroupId
 	 * @return
 	 */
-	int deleteByMusicGroupId(String musicGroupId);
+	int deleteByMusicGroupId(@Param("musicGroupId") String musicGroupId,@Param("isLock") Integer isLock);
 
 	/**
 	 * @describe 根据学生编号和乐团编号更新旷课次数
@@ -128,4 +129,43 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @return
 	 */
 	List<Map<Integer, String>> findPaymentStatusMap(String musicGroupId);
+
+	/**
+	 * 修改单个学员缴费周期
+	 * @param fee
+	 */
+    void updateStudentFee(@Param("fee") UpdateStudentFeeDto fee);
+
+	/**
+	 * 根据乐团编号获取fee表
+	 * @param musicGroupId
+	 * @return
+	 */
+	List<MusicGroupStudentFee> queryByMusicGroupId(String musicGroupId);
+
+	/**
+	 * 修改学员缴费周期锁定状态
+	 * @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);
 
 
 }

+ 8 - 9
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> {
 
@@ -30,7 +29,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
     List<Goods> queryApplyGoodsList(@Param("musicGroupId") String musicGroupId, @Param("type") OrderDetailTypeEnum type);
 
 	List<StudentPaymentOrder> queryByCondition(@Param("groupType") GroupType groupType, @Param("musicGroupId") String musicGroupId,
-			@Param("userId") Integer userId, @Param("status") DealStatusEnum status);
+			@Param("userId") Integer userId, @Param("status") DealStatusEnum status, @Param("type") OrderTypeEnum type);
 
     /**
      * @Author: Joburgess
@@ -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);
 
     /**

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroupTeacherMapDto.java

@@ -0,0 +1,21 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/1/3
+ */
+public class ClassGroupTeacherMapDto extends ClassGroupTeacherMapper {
+    private String userName;
+
+    @Override
+    public String getUserName() {
+        return userName;
+    }
+
+    @Override
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+}

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

@@ -10,6 +10,16 @@ public class CourseScheduleEndDto extends CourseSchedule {
 
     private String groupName;
 
+    private String teacherName;
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
     public String getGroupName() {
         return groupName;
     }

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

@@ -48,6 +48,9 @@ public class MusicGroupStudentsDto{
 
     private Boolean isActive = false;
 
+    private Integer isLock;
+
+    private String paymentPeriodList;
 
     private String activeName;
 
@@ -55,6 +58,22 @@ public class MusicGroupStudentsDto{
 
     private String nextPaymentDateStr;
 
+    public String getPaymentPeriodList() {
+        return paymentPeriodList;
+    }
+
+    public void setPaymentPeriodList(String paymentPeriodList) {
+        this.paymentPeriodList = paymentPeriodList;
+    }
+
+    public Integer getIsLock() {
+        return isLock;
+    }
+
+    public void setIsLock(Integer isLock) {
+        this.isLock = isLock;
+    }
+
     public Boolean getIsActive() {
         return isActive;
     }

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

@@ -14,9 +14,19 @@ public class SporadicPayDto {
     @ApiModelProperty(value = "支付项编号",required = false)
     private Integer sporadicId;
 
+    private boolean isRepeatPay;
+
     @ApiModelProperty(value = "是否余额支付",required = false)
     Boolean isUseBalancePayment = false;
 
+    public boolean getIsRepeatPay() {
+        return isRepeatPay;
+    }
+
+    public void setIsRepeatPay(boolean repeatPay) {
+        isRepeatPay = repeatPay;
+    }
+
     public BigDecimal getAmount() {
         return amount;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SuperClassGroupDto.java

@@ -10,6 +10,26 @@ public class SuperClassGroupDto extends ClassGroup {
 
     private String groupName;
 
+    private String bishopTeacherNames;
+
+    private String teachingTeacherNames;
+
+    public String getBishopTeacherNames() {
+        return bishopTeacherNames;
+    }
+
+    public void setBishopTeacherNames(String bishopTeacherNames) {
+        this.bishopTeacherNames = bishopTeacherNames;
+    }
+
+    public String getTeachingTeacherNames() {
+        return teachingTeacherNames;
+    }
+
+    public void setTeachingTeacherNames(String teachingTeacherNames) {
+        this.teachingTeacherNames = teachingTeacherNames;
+    }
+
     public String getGroupName() {
         return groupName;
     }

+ 22 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/UpdateStudentFeeDto.java

@@ -1,16 +1,33 @@
 package com.ym.mec.biz.dal.dto;
 
+import io.swagger.annotations.ApiModelProperty;
+
 import java.math.BigDecimal;
 import java.util.List;
 
 public class UpdateStudentFeeDto {
+    @ApiModelProperty(value = "学员编号",required = false)
     private Integer studentId;
 
-    private List<Integer> month;
+    @ApiModelProperty(value = "乐团编号",required = false)
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "缴费月份",required = false)
+    private String month;
+
+    @ApiModelProperty(value = "是否锁定1是0否",required = false)
+    private Integer isLock = 0;
 
-    private Integer isLock;
+    @ApiModelProperty(value = "课程费用",required = false)
+    private BigDecimal amount = BigDecimal.ZERO;
 
-    private BigDecimal amount;
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
 
     public Integer getStudentId() {
         return studentId;
@@ -20,11 +37,11 @@ public class UpdateStudentFeeDto {
         this.studentId = studentId;
     }
 
-    public List<Integer> getMonth() {
+    public String getMonth() {
         return month;
     }
 
-    public void setMonth(List<Integer> month) {
+    public void setMonth(String month) {
         this.month = month;
     }
 

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

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupStudentFee.java

@@ -67,6 +67,12 @@ public class MusicGroupStudentFee {
 
 	private BigDecimal temporaryCourseFee;
 
+	//是否锁定1是,0否
+	private Integer isLock;
+
+	//缴费周期,用逗号分隔
+	private String paymentPeriodList;
+
 	/**  */
 	private java.util.Date createTime;
 
@@ -88,6 +94,22 @@ public class MusicGroupStudentFee {
 	public MusicGroupStudentFee() {
 	}
 
+	public Integer getIsLock() {
+		return isLock;
+	}
+
+	public void setIsLock(Integer isLock) {
+		this.isLock = isLock;
+	}
+
+	public String getPaymentPeriodList() {
+		return paymentPeriodList;
+	}
+
+	public void setPaymentPeriodList(String paymentPeriodList) {
+		this.paymentPeriodList = paymentPeriodList;
+	}
+
 	public Date getNextPaymentDate() {
 		return nextPaymentDate;
 	}

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

@@ -118,6 +118,17 @@ public class VipGroup {
 
 	private String courseSchedulesJson;
 
+	@ApiModelProperty(value = "指定学员列表")
+	private String studentIdList;
+
+	public String getStudentIdList() {
+		return studentIdList;
+	}
+
+	public void setStudentIdList(String studentIdList) {
+		this.studentIdList = studentIdList;
+	}
+
 	public String getCourseSchedulesJson() {
 		return courseSchedulesJson;
 	}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java

@@ -17,12 +17,23 @@ public class MusicGroupStudentQueryInfo extends QueryInfo {
   @ApiModelProperty(value = "是否激活")
   private Boolean isActive;
 
+  @ApiModelProperty(value = "是否锁定")
+  private Integer isLock;
+
   @ApiModelProperty(value = "学员状态 NORMAL(NORMAL, 在读), LEAVE(LEAVE, 请假), QUIT(QUIT, 退班)",required = false)
   private String studentStatus;
 
   @ApiModelProperty(value = "缴费状态  PAID_COMPLETED(完成缴费), NON_PAYMENT(未缴费), PROCESSING(缴费中)",required = false)
   private String paymentStatus;
 
+  public Integer getIsLock() {
+    return isLock;
+  }
+
+  public void setIsLock(Integer isLock) {
+    this.isLock = isLock;
+  }
+
   public Boolean getIsActive() {
     return isActive;
   }

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.Date;
@@ -20,5 +21,5 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	 * @param latestPaidDate
 	 * @return
 	 */
-	Date getNextPaymentDate(String musicGroupId, Date latestPaidDate);
+	Date getNextPaymentDate(String musicGroupId, Date latestPaidDate, MusicGroupStudentFee fee);
 }

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

@@ -269,5 +269,5 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * 补全musicGroupStudentFee表数据
 	 * @param musicGroupIds
 	 */
-	void musicGroupStudentFeePatch(List<String> musicGroupIds);
+//	void musicGroupStudentFeePatch(List<String> musicGroupIds);
 }

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

@@ -17,4 +17,18 @@ public interface MusicGroupStudentFeeService extends BaseService<Long, MusicGrou
 	 * @param studentFeeDto
 	 */
     void updateStudentFee(UpdateStudentFeeDto studentFeeDto);
+
+	/**
+	 * 获取学员费用
+	 * @param userId
+	 * @param musicGroupId
+	 * @return
+	 */
+	MusicGroupStudentFee findByUser(Integer userId,String musicGroupId);
+
+	/**
+	 * 修改学员缴费周期锁定状态
+	 * @param studentFeeDto
+	 */
+	void updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto);
 }

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

+ 14 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -9,9 +9,10 @@ import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.Goods;
 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.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
-import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
@@ -26,13 +27,23 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 	List<Goods> queryApplyGoodsList(String musicGroupId, OrderDetailTypeEnum type);
 
 	/**
-	 * 查询报名缴费订单
+	 * 查询订单列表
+	 * @param groupType
 	 * @param musicGroupId
+	 * @param userId
 	 * @param status
+	 * @param type
 	 * @return
 	 */
-	StudentPaymentOrder findMusicGroupApplyOrderByStatus(Integer userId,String musicGroupId, DealStatusEnum status);
+	List<StudentPaymentOrder> queryByCondition(GroupType groupType, String musicGroupId, Integer userId, DealStatusEnum status, OrderTypeEnum type);
 
+	/**
+	 * 查询报名缴费订单
+	 * @param musicGroupId
+	 * @param status
+	 * @return
+	 */
+	StudentPaymentOrder findMusicGroupApplyOrderByStatus(Integer userId, String musicGroupId, DealStatusEnum status);
 
 	/**
 	 * 根据orderNo查询订单
@@ -41,7 +52,6 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 	 */
 	StudentPaymentOrder findOrderByOrderNo(String orderNo);
 
-
 	/**
 	 * 查找支付成功和支付中订单
 	 * @return
@@ -56,7 +66,6 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 	 */
 	List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status, String paymentChannel);
 
-
 	/**
 	 * 查询支付中超时的订单
 	 * @param orderNoList

+ 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

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

@@ -1298,9 +1298,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //检测新排课冲突
         courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
         //老师结算表
-        courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        if(courseScheduleTeacherSalaryList.size() > 0) {
+            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        }
         //学生结算表
-        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        if(courseScheduleStudentPaymentList.size() > 0) {
+            courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        }
         return classGroup;
     }
 
@@ -1538,10 +1542,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         //老师结算表
-        courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        if(courseScheduleTeacherSalaryList.size() > 0) {
+            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        }
 
         //学生结算表
-        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        if(courseScheduleStudentPaymentList.size() > 0) {
+            courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        }
         return classGroup;
     }
 
@@ -1788,10 +1796,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         courseScheduleService.checkSnapCourseShchedules(courseScheduleList);
 
         //老师结算表
-        courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        if(courseScheduleTeacherSalaryList.size() > 0) {
+            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+        }
 
         //学生结算表
-        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        if(courseScheduleStudentPaymentList.size() > 0) {
+            courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
+        }
         return classGroup;
     }
 
@@ -1904,31 +1916,37 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 //            Map<Integer, String> classGroupNames = MapUtil.convertMybatisMap(classGroupDao.findNameById(mixClassGroupIdsStr));
 
             //主教老师
-            List<CourseScheduleTeacherSalary> bishopTeachers = courseScheduleTeacherSalaryDao.findByCourseScheduleIdsAndTeacherRole(couseScheduleIds, "BISHOP");
-            Map<Long, List<CourseScheduleTeacherSalary>> courseScheduleBishopTeacherMaps = bishopTeachers.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+            Map<Long, List<CourseScheduleTeacherSalary>> courseScheduleBishopTeacherMaps=new HashMap<>();
 
             //助教老师
-            List<CourseScheduleTeacherSalary> teachingTeachers = courseScheduleTeacherSalaryDao.findByCourseScheduleIdsAndTeacherRole(couseScheduleIds, "TEACHING");
-            Map<Long, List<CourseScheduleTeacherSalary>> courseScheduleTeachingTeacherMaps = teachingTeachers.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+            Map<Long, List<CourseScheduleTeacherSalary>> courseScheduleTeachingTeacherMaps=new HashMap<>();
+            if(!CollectionUtils.isEmpty(couseScheduleIds)){
+                List<CourseScheduleTeacherSalary> bishopTeachers = courseScheduleTeacherSalaryDao.findByCourseScheduleIdsAndTeacherRole(couseScheduleIds, "BISHOP");
+                courseScheduleBishopTeacherMaps = bishopTeachers.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+
+                //助教老师
+                List<CourseScheduleTeacherSalary> teachingTeachers = courseScheduleTeacherSalaryDao.findByCourseScheduleIdsAndTeacherRole(couseScheduleIds, "TEACHING");
+                courseScheduleTeachingTeacherMaps = teachingTeachers.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+            }
 
-            dataList.forEach(e -> {
+            for(int i=0;i<dataList.size();i++){
 //                e.setMixClassGroupName(classGroupNames.get(e.getMixClassGroupId()));
-                List<CourseScheduleTeacherSalary> currentBishopTeacher = courseScheduleBishopTeacherMaps.get(e.getCourseScheduleId().longValue());
+                List<CourseScheduleTeacherSalary> currentBishopTeacher = courseScheduleBishopTeacherMaps.get(dataList.get(i).getCourseScheduleId().longValue());
                 List<CourseScheduleTeacherSalary> TeachingTeachers = new ArrayList<>();
                 if (!Objects.isNull(currentBishopTeacher) && !CollectionUtils.isEmpty(currentBishopTeacher)) {
-                    e.setMasterTeacherId(currentBishopTeacher.get(0).getUserId());
-                    e.setMasterTeacherName(currentBishopTeacher.get(0).getUserName());
+                    dataList.get(i).setMasterTeacherId(currentBishopTeacher.get(0).getUserId());
+                    dataList.get(i).setMasterTeacherName(currentBishopTeacher.get(0).getUserName());
                 } else {
                     currentBishopTeacher = new ArrayList<>();
                 }
                 TeachingTeachers.addAll(currentBishopTeacher);
-                List<CourseScheduleTeacherSalary> currentCourseTeachingTeachers = courseScheduleTeachingTeacherMaps.get(e.getCourseScheduleId().longValue());
+                List<CourseScheduleTeacherSalary> currentCourseTeachingTeachers = courseScheduleTeachingTeacherMaps.get(dataList.get(i).getCourseScheduleId().longValue());
                 if (Objects.isNull(currentCourseTeachingTeachers) || CollectionUtils.isEmpty(currentCourseTeachingTeachers)) {
                     currentCourseTeachingTeachers = new ArrayList<>();
                 }
                 TeachingTeachers.addAll(currentCourseTeachingTeachers);
-                e.setTeachingTeachers(TeachingTeachers);
-                e.setTeacherNum(TeachingTeachers.size());
+                dataList.get(i).setTeachingTeachers(TeachingTeachers);
+                dataList.get(i).setTeacherNum(TeachingTeachers.size());
                 /*if (CollectionUtils.isEmpty(currentCourseTeachingTeachers) && !CollectionUtils.isEmpty(currentBishopTeacher)) {
                     currentCourseTeachingTeachers = new ArrayList<>();
                     if (currentBishopTeacher != null) {
@@ -1942,7 +1960,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     }
                     e.setTeachingTeachers(currentCourseTeachingTeachers);
                 }*/
-            });
+            }
         }
         if (count == 0) {
             dataList = new ArrayList<>();
@@ -2227,11 +2245,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             params.put("offset", pageInfo.getOffset());
             results = classGroupDao.superFindClassGroups(params);
             List<Group> groups=new ArrayList<>();
+            List<Integer> classGroupIds=new ArrayList<>();
             groups.add(null);
             for (SuperClassGroupDto result : results) {
                 Group group=new Group(result.getMusicGroupId(),result.getGroupType());
                 groups.add(group);
+                classGroupIds.add(result.getId());
             }
+            List<ClassGroupTeacherMapDto> classGroupTeacherMaps = classGroupTeacherMapperDao.findByClassGroupIds(classGroupIds);
+            Map<Integer, Map<TeachTypeEnum, List<ClassGroupTeacherMapDto>>> classTeacherTypeMaps = classGroupTeacherMaps.stream()
+                    .collect(Collectors.groupingBy(ClassGroupTeacherMapDto::getClassGroupId, Collectors.groupingBy(ClassGroupTeacherMapDto::getTeacherRole)));
             groups = groupDao.findByGroupIds(groups);
             Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));
             results.forEach(result -> {
@@ -2242,6 +2265,21 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         result.setGroupName(groupTemps.get(0).getGroupName());
                     }
                 }
+                Map<TeachTypeEnum, List<ClassGroupTeacherMapDto>> teachTypeEnumListMap = classTeacherTypeMaps.get(result.getId());
+                if(Objects.nonNull(teachTypeEnumListMap)){
+                    for (TeachTypeEnum teachType:teachTypeEnumListMap.keySet()){
+                        List<ClassGroupTeacherMapDto> classGroupTeachers=teachTypeEnumListMap.get(teachType);
+                        if(!CollectionUtils.isEmpty(classGroupTeachers)){
+                            List<String> userNames = classGroupTeachers.stream().map(ClassGroupTeacherMapDto::getUserName).collect(Collectors.toList());
+                            if(teachType.equals(TeachTypeEnum.BISHOP)){
+                                result.setBishopTeacherNames(StringUtils.join(userNames.toArray(),","));
+                            }
+                            if(teachType.equals(TeachTypeEnum.TEACHING)){
+                                result.setTeachingTeacherNames(StringUtils.join(userNames.toArray(),","));
+                            }
+                        }
+                    }
+                }
             });
         }
         pageInfo.setRows(results);

+ 47 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -94,6 +94,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private SysConfigService sysConfigService;
     @Autowired
     private GroupDao groupDao;
+    @Autowired
+    private TeacherDao teacherDao;
 
     private final Logger LOGGER = LoggerFactory
             .getLogger(this.getClass());
@@ -148,7 +150,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         Integer classGroupId = null;
         if (!CollectionUtils.isEmpty(courseScheduleIds)) {
             CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleIds.get(0));
-            classGroupId = courseSchedule.getClassGroupId();
+            if(Objects.nonNull(courseSchedule)){
+                classGroupId = courseSchedule.getClassGroupId();
+            }
         }
         List<Long> enableDeleteIds = courseScheduleDao.filterNotStartCourseIdsWithIds(courseScheduleIds);
         if (!CollectionUtils.isEmpty(enableDeleteIds)) {
@@ -1001,9 +1005,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         Map<String, Integer> holidayDays = new HashMap<>();
         Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
 
-        if (vipGroupCourseAdjustInfo.isHoliday()) {
-            holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
-            holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+        try {
+            if (vipGroupCourseAdjustInfo.isHoliday()) {
+                holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
+                holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+            }
+        } catch (DecodeException e) {
+            LOGGER.error("节假日解析错误");
+            vipGroupCourseAdjustInfo.setHoliday(false);
         }
 
         while (true) {
@@ -1101,20 +1110,32 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         int betweenDays = DateUtil.daysBetween(coursePostPoneInfo.getPauseDate(), coursePostPoneInfo.getRecoveryDate());
         List<CourseSchedule> classGroupCourseSchedulesWithDate = courseScheduleDao.findClassGroupCourseSchedulesWithDate(coursePostPoneInfo.getClassGroupIds(), coursePostPoneInfo.getPauseDate());
 
+        if(CollectionUtils.isEmpty(classGroupCourseSchedulesWithDate)){
+            throw new BizException("选择的班级上在指定日期之后不存在需要调整的课程");
+        }
+
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(coursePostPoneInfo.getRecoveryDate());
 
         Map<String, Integer> holidayDays = new HashMap<>();
         Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
 
+        classGroupCourseSchedulesWithDate.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+
         for (int i=0;i<classGroupCourseSchedulesWithDate.size();i++) {
             CourseSchedule courseSchedule=classGroupCourseSchedulesWithDate.get(i);
             calendar.setTime(courseSchedule.getClassDate());
             calendar.add(Calendar.DATE, betweenDays);
-            if (coursePostPoneInfo.isSkipHoliday() && !holiday.containsKey(calendar.get(Calendar.YEAR))) {
-                holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
-                holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+            try {
+                if (coursePostPoneInfo.isSkipHoliday() && !holiday.containsKey(calendar.get(Calendar.YEAR))) {
+                    holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
+                    holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+                }
+            } catch (Exception e) {
+                LOGGER.error("节假日解析错误");
+                coursePostPoneInfo.setSkipHoliday(false);
             }
+
             if (coursePostPoneInfo.isSkipHoliday() && holidayDays.containsKey(DateUtil.format(calendar.getTime(), "MMdd"))) {
                 betweenDays=betweenDays+7;
                 calendar.add(Calendar.DATE, betweenDays);
@@ -1123,6 +1144,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             }
             classGroupCourseSchedulesWithDate.get(i).setClassDate(calendar.getTime());
         }
+        checkNewCourseSchedules(classGroupCourseSchedulesWithDate,false);
         courseScheduleDao.batchUpdate(classGroupCourseSchedulesWithDate);
     }
 
@@ -1171,7 +1193,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
         Map<String, Integer> holidayDays = new HashMap<>();
         Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
-        ;
+
         try {
             if (vipGroupCourseAdjustInfo.isHoliday()) {
                 holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
@@ -1179,7 +1201,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             }
         } catch (DecodeException e) {
             LOGGER.error("节假日解析错误");
-        } finally {
             vipGroupCourseAdjustInfo.setHoliday(false);
         }
 
@@ -1264,19 +1285,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             if (Objects.nonNull(isSettlement) && isSettlement > 0) {
                 throw new BizException("调整的课程中存在已结算的课程");
             }
-            CourseSchedule oldCourseSchedule = null;
+            List<CourseSchedule> oldCourseSchedules = oldCourseScheduleMap.get(newCourseSchedule.getId());
+            oldCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime).reversed());
+            CourseSchedule oldCourseSchedule = oldCourseSchedules.get(0);
             if (Objects.isNull(newCourseSchedule.getActualTeacherId())) {
-                List<CourseSchedule> oldCourseSchedules = oldCourseScheduleMap.get(newCourseSchedule.getId());
-                oldCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime).reversed());
-                oldCourseSchedule = oldCourseSchedules.get(0);
                 newCourseSchedule.setActualTeacherId(oldCourseSchedule.getActualTeacherId());
             }
             if (Objects.isNull(newCourseSchedule.getSchoolId())) {
-                if (Objects.isNull(oldCourseSchedule)) {
-                    List<CourseSchedule> oldCourseSchedules = oldCourseScheduleMap.get(newCourseSchedule.getId());
-                    oldCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime).reversed());
-                    oldCourseSchedule = oldCourseSchedules.get(0);
-                }
                 newCourseSchedule.setSchoolId(oldCourseSchedule.getSchoolId());
             }
             if (oldCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.VIP)) {
@@ -2078,10 +2093,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
         Map<String, Integer> holidayDays = new HashMap<>();
         Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
-        ;
-        if (courseGenerateInfo.isSkipHoliday()) {
-            holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
-            holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+
+        try {
+            if (courseGenerateInfo.isSkipHoliday()) {
+                holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
+                holidayDays = holiday.get(calendar.get(Calendar.YEAR));
+            }
+        } catch (DecodeException e) {
+            LOGGER.error("节假日解析错误");
+            courseGenerateInfo.setSkipHoliday(false);
         }
 
         List<CourseSchedule> courseSchedules = new ArrayList<>();
@@ -2158,10 +2178,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             results = courseScheduleDao.endFindCourseSchedules(params);
             List<Group> groups=new ArrayList<>();
             groups.add(null);
+            List<Integer> teacherIds=new ArrayList<>();
             for (CourseScheduleEndDto courseScheduleEndDto : results) {
                 Group group=new Group(courseScheduleEndDto.getMusicGroupId(),courseScheduleEndDto.getGroupType());
                 groups.add(group);
+                teacherIds.add(courseScheduleEndDto.getActualTeacherId());
             }
+            List<Map<Integer, String>> nameIdMaps = teacherDao.queryUsernameByIds(teacherIds);
+            Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
             groups = groupDao.findByGroupIds(groups);
             Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));
             results.forEach(result -> {
@@ -2171,6 +2195,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     if(!CollectionUtils.isEmpty(groupTemps)){
                         result.setGroupName(groupTemps.get(0).getGroupName());
                     }
+                    result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
                 }
             });
         }

+ 38 - 25
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -1,15 +1,19 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 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;
@@ -38,37 +42,46 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	}
 
 	@Override
-	public Date getNextPaymentDate(String musicGroupId, Date latestPaidDate) {
-		List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
-		if (musicGroupPaymentCalenderList != null && musicGroupPaymentCalenderList.size() > 0) {
+	public Date getNextPaymentDate(String musicGroupId, Date latestPaidDate, MusicGroupStudentFee fee) {
+		List<Integer> months = null;
+		if(fee != null){
+			String paymentPeriodList = fee.getPaymentPeriodList();
+			if(StringUtils.isEmpty(paymentPeriodList)){
+				return null;
+			} else {
+				months = Arrays.asList(paymentPeriodList.split(",")).stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
+				Collections.sort(months);
+			}
+		}else {
+			List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
+			if (musicGroupPaymentCalenderList != null && musicGroupPaymentCalenderList.size() > 0) {
+				months = musicGroupPaymentCalenderList.stream().map(e -> e.getPaymentMonth()).sorted().collect(Collectors.toList());
+			}
+		}
+		if (months != null && months.size() > 0) {
 			Date date = latestPaidDate;
 			if (date == null) {
 				date = new Date();
 			}
-			List<Integer> months = musicGroupPaymentCalenderList.stream().map(e -> e.getPaymentMonth()).sorted().collect(Collectors.toList());
-
-			if (months.size() > 0) {
-
-				// 获取当前月份
-				int currentMonth = Integer.parseInt(DateUtil.getMonth(date));
-				int nextMonth = months.get(0);
-				for (int i = 0; i < months.size(); i++) {
-					if (currentMonth < months.get(i)) {
-						nextMonth = months.get(i);
-						break;
-					}
-				}
-				// 修改学员付费周期
-				Date nextPaymentDate = null;
-				if (nextMonth > currentMonth) {
-					nextPaymentDate = DateUtil.addMonths(date, nextMonth - currentMonth);
-				} else if (nextMonth < currentMonth) {
-					nextPaymentDate = DateUtil.addMonths(date, 12 - currentMonth + nextMonth);
-				} else {
-					nextPaymentDate = DateUtil.addMonths(date, 12);
+			// 获取当前月份
+			int currentMonth = Integer.parseInt(DateUtil.getMonth(date));
+			int nextMonth = months.get(0);
+			for (int i = 0; i < months.size(); i++) {
+				if (currentMonth < months.get(i)) {
+					nextMonth = months.get(i);
+					break;
 				}
-				return DateUtil.getFirstDayOfMonth(nextPaymentDate);
 			}
+			// 修改学员付费周期
+			Date nextPaymentDate = null;
+			if (nextMonth > currentMonth) {
+				nextPaymentDate = DateUtil.addMonths(date, nextMonth - currentMonth);
+			} else if (nextMonth < currentMonth) {
+				nextPaymentDate = DateUtil.addMonths(date, 12 - currentMonth + nextMonth);
+			} else {
+				nextPaymentDate = DateUtil.addMonths(date, 12);
+			}
+			return DateUtil.getFirstDayOfMonth(nextPaymentDate);
 		}
 		return null;
 	}

+ 68 - 50
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -270,11 +270,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 studentRegistrationDao.batchInsert(studentRegistrationList);
             }
             musicGroupDao.update(musicGroup);
-            List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
-            if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
-                Date nextPaymentDate = musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null);
-                musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,nextPaymentDate,"PAID_COMPLETED");
-            }
+//            List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
+//            if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
+//                Date nextPaymentDate = musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null,null);
+//                musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,nextPaymentDate,"PAID_COMPLETED");
+//            }
             musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "跨团调整", sysUser.getId(),""));
         }
 
@@ -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);
@@ -371,7 +371,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 orderNo,
                 baseApiUrl+"/api-student/studentOrder/notify",
-                baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
+                baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 chargeInfo.getTitle(),
                 chargeInfo.getTitle(),
                 userId,
@@ -507,12 +507,12 @@ 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.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) {
@@ -564,7 +564,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 orderNo,
                 baseApiUrl+"/api-student/studentOrder/notify",
-                baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
+                baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "乐团报名缴费",
                 "乐团报名缴费",
                 userId,
@@ -705,12 +705,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         		throw new BizException("用户账户找不到");
         	}
             studentPaymentOrder.setPaymentChannel("BALANCE");
-        	if(userCashAccount.getBalance().subtract(amount).doubleValue() > 0){
+        	if(userCashAccount.getBalance().subtract(amount).doubleValue() >= 0){
         		// 更新订单信息
         		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) {
@@ -761,7 +761,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 orderNo,
                 baseApiUrl+"/api-student/studentOrder/notify",
-                baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
+                baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "乐团报名缴费",
                 "乐团报名缴费",
                 userId,
@@ -806,13 +806,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //删除原有的声部商品组合
             musicGroupSubjectGoodsGroupDao.delByMusicGroupId(subFeeSettingDto.getMusicGroupId());
             //如果是进行中,补充缴费信息
-            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
-                List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
-                if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
-                    Date nextPaymentDate = musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null);
-                    musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,nextPaymentDate,"PAID_COMPLETED");
-                }
-            }
+//            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
+//                List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
+//                if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
+//                    Date nextPaymentDate = musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null,null);
+//                    musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,nextPaymentDate,"PAID_COMPLETED");
+//                }
+//            }
             List<MusicGroupSubjectPlan> musicGroupSubjectPlans = subFeeSettingDto.getMusicGroupSubjectPlans();
             if (musicGroupSubjectPlans != null && musicGroupSubjectPlans.size() > 0) {
                 musicGroupSubjectPlans.forEach(e->{
@@ -864,8 +864,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //生成学员费用表
         List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
         if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
-            musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null),"PAID_COMPLETED");
+            musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null,null),"PAID_COMPLETED");
         }
+        musicGroupStudentFeeDao.batchUpdateCalenders(musicGroupId);
         //记录操作日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"确认开团(筹备中 -> 进行中)",sysUser.getId(),""));
         musicGroup.setStatus(MusicGroupStatusEnum.PROGRESS);
@@ -972,18 +973,18 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
     }
 
-    @Override
-    public void musicGroupStudentFeePatch(List<String> musicGroupIds) {
-        if(musicGroupIds != null && musicGroupIds.size() > 0){
-            List<MusicGroupStudentFee> musicGroupStudentFees = null;
-            for (String musicGroupId: musicGroupIds) {
-                musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
-                if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
-                    musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null),"PAID_COMPLETED");
-                }
-            }
-        }
-    }
+//    @Override
+//    public void musicGroupStudentFeePatch(List<String> musicGroupIds) {
+//        if(musicGroupIds != null && musicGroupIds.size() > 0){
+//            List<MusicGroupStudentFee> musicGroupStudentFees = null;
+//            for (String musicGroupId: musicGroupIds) {
+//                musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
+//                if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
+//                    musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null,null),"PAID_COMPLETED");
+//                }
+//            }
+//        }
+//    }
 
     @Override
     public List<MusicCardDto> queryUserMusicGroups(Integer userId) {
@@ -1046,7 +1047,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         //删除续费记录
-        musicGroupStudentFeeDao.deleteByMusicGroupId(musicGroupId);
+        musicGroupStudentFeeDao.deleteByMusicGroupId(musicGroupId,null);
 
 		// 删除课表
 		courseScheduleDao.deleteCourseSchedulesByMusicGroupID(musicGroupId, GroupType.MUSIC);
@@ -1138,7 +1139,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupDao.update(musicGroup);
 
         // 重新设置下次缴费时间
-        musicGroupStudentFeeDao.updateNextPaymentDate(musicGroupId, musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null));
+        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);
+//        musicGroupStudentFeeDao.updateNextPaymentDate(musicGroupId, musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null));
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"恢复乐团",sysUser.getId(),""));
 
         //恢复课表
@@ -1437,7 +1445,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
 
         if (musicGroupStudentFee == null) {
-            throw new BizException("个人信息不存在");
+            throw new BizException("个人续费信息错误");
         }
         //判断是否是续费
 		/*List<StudentPaymentOrder> orderList = studentPaymentOrderDao.queryByCondition(GroupType.MUSIC, musicGroupId, userId, DealStatusEnum.SUCCESS);
@@ -1450,7 +1458,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("已缴费");
         }
 
-        BigDecimal amount = musicGroupStudentFee.getTemporaryCourseFee();
+        BigDecimal amount = musicGroupStudentFee.getCourseFee();
         if (amount == null || amount.doubleValue() == 0) {
             amount = musicGroupStudentFee.getCourseFee();
         }
@@ -1502,7 +1510,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupStudentFee.setLatestPaidTime(date);
                 musicGroupStudentFee.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
                 musicGroupStudentFee.setTemporaryCourseFee(new BigDecimal(0));
-                musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, musicGroupStudentFee.getNextPaymentDate()));
+                musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, musicGroupStudentFee.getNextPaymentDate(),musicGroupStudentFee));
                 musicGroupStudentFeeDao.update(musicGroupStudentFee);
         		return null;
         	}else{
@@ -1528,7 +1536,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
             Map<String, Object> payMap = payService.getPayMap(amount, studentPaymentOrder.getOrderNo(),
                     baseApiUrl+"/api-student/studentOrder/notify",
-                    baseApiUrl+"/#/paymentresult?orderNo=" + studentPaymentOrder.getOrderNo(),
+                    baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(),
                     "续费",
                     "乐团续费",
                     userId,
@@ -1577,7 +1585,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupStudentFee.setLatestPaidTime(date);
             musicGroupStudentFee.setPaymentStatus(PaymentStatus.PAID_COMPLETED);
             musicGroupStudentFee.setTemporaryCourseFee(new BigDecimal(0));
-            musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, musicGroupStudentFee.getNextPaymentDate()));
+            musicGroupStudentFee.setNextPaymentDate(musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, musicGroupStudentFee.getNextPaymentDate(),musicGroupStudentFee));
             musicGroupStudentFeeDao.update(musicGroupStudentFee);
 
             //插入交易明细
@@ -1621,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);
@@ -1761,8 +1774,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //如果已生成课表,那么修改未上课时教学点
             courseScheduleDao.updateCourseScheduleSchool("MUSIC",musicGroupId,musicGroup.getSchoolId());
         }
-
-        Date date = new Date();
         List<Integer> months = subFeeSettingDto.getMonths();
         
         //判断缴费日历是否修改
@@ -1781,7 +1792,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 		}
 
 		if (isModifiedOfCalender) {
-			
 			Integer num = musicGroupStudentFeeDao.countStudentNoPayNum(musicGroupId);
 			if (num > 0) {
 				throw new BizException("缴费周期更新失败,当前乐团有未缴费的学员");
@@ -1789,18 +1799,26 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 			
 			// 删除乐团相关付费周期
 			musicGroupPaymentCalenderDao.delByGroupId(musicGroupId);
-			musicGroupStudentFeeDao.deleteByMusicGroupId(musicGroupId);
 			if (months != null && months.size() > 0) {
 				// 批量插入
 				musicGroupPaymentCalenderDao.batchAdd(months, musicGroupId);
 			}
-			
-			//生成学员费用表
-	        List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
-	        if(musicGroupStudentFees != null && musicGroupStudentFees.size() > 0){
-	            musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees,musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null),"PAID_COMPLETED");
-	        }
 		}
+        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);
         //修改课程里面的教学点
         if(!musicGroup.getSchoolId().equals(musicGroup.getSchoolId())){

+ 36 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupStudentFeeServiceImpl.java

@@ -1,28 +1,29 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.ym.mec.biz.dal.dto.UpdateStudentFeeDto;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 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;
 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.*;
+import java.util.stream.Collectors;
 
 @Service
 public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, MusicGroupStudentFee> implements MusicGroupStudentFeeService {
@@ -39,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;
@@ -54,9 +58,10 @@ public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, Music
 		List<MusicGroupStudentFee> updateList = new ArrayList<MusicGroupStudentFee>();
 
 		List<MusicGroupStudentFee> musicGroupStudentFeeList = musicGroupStudentFeeDao.queryWillRenewList(days);
-
 		for (MusicGroupStudentFee musicGroupStudentFee : musicGroupStudentFeeList) {
-			if (musicGroupStudentFee.getPaymentStatus() == PaymentStatus.PAID_COMPLETED && (musicGroupStudentFee.getCourseFee() != null && musicGroupStudentFee.getCourseFee().doubleValue() > 0)) {
+			//课程费用为空,或者课程费用为0,只更新下次缴费时间
+			if (musicGroupStudentFee.getPaymentStatus() == PaymentStatus.PAID_COMPLETED &&
+					(musicGroupStudentFee.getCourseFee() != null && musicGroupStudentFee.getCourseFee().doubleValue() > 0)) {
 				musicGroupStudentFee.setPaymentStatus(PaymentStatus.NON_PAYMENT);
 				musicGroupStudentFee.setUpdateTime(date);
 				updateList.add(musicGroupStudentFee);
@@ -66,7 +71,7 @@ public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, Music
 		if (updateList.size() > 0) {
 			musicGroupStudentFeeDao.batchUpdate(updateList);
 			MusicGroup musicGroup = musicGroupDao.get(updateList.get(0).getMusicGroupId());
-			Map<Integer, String> push = new HashMap<Integer, String>();
+			Map<Integer, String> push = new HashMap<>();
 			for (MusicGroupStudentFee sf : updateList) {
 				push.put(sf.getUserId(), sf.getUserId() + "");
 			}
@@ -82,8 +87,26 @@ 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
+	public MusicGroupStudentFee findByUser(Integer userId, String musicGroupId) {
+		return musicGroupStudentFeeDao.findByUser(userId,musicGroupId);
+	}
+
+	@Override
+	public void updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto) {
+		musicGroupStudentFeeDao.updateStudentFeeIsLock(studentFeeDto);
 	}
 
 }

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

+ 14 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -162,18 +162,20 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 
 		//是否在范围内
 		boolean isInScore = true;
-		if(StringUtils.isBlank(school.getLongitudeLatitude())){
-			if(studentAttendanceInfos.getUpdate().equals(YesOrNoEnum.YES.getCode())){
-				school.setLongitudeLatitude(studentAttendanceInfos.getSignInLongitudeLatitude());
-				schoolDao.update(school);
-			}
-		}else{
-			SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
-			double attendanceRange = Double.valueOf(sysConfig.getParanValue());
-			double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
-					school.getLongitudeLatitude());
-			if(distance>attendanceRange){
-				isInScore=false;
+		if(Objects.nonNull(school)){
+			if(StringUtils.isBlank(school.getLongitudeLatitude())){
+				if(studentAttendanceInfos.getUpdate().equals(YesOrNoEnum.YES.getCode())){
+					school.setLongitudeLatitude(studentAttendanceInfos.getSignInLongitudeLatitude());
+					schoolDao.update(school);
+				}
+			}else{
+				SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
+				double attendanceRange = Double.valueOf(sysConfig.getParanValue());
+				double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
+						school.getLongitudeLatitude());
+				if(distance>attendanceRange){
+					isInScore=false;
+				}
 			}
 		}
 

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

@@ -21,6 +21,7 @@ import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.Goods;
 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.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
@@ -66,6 +67,11 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
+	public List<StudentPaymentOrder> queryByCondition(GroupType groupType, String musicGroupId, Integer userId, DealStatusEnum status, OrderTypeEnum type) {
+		return studentPaymentOrderDao.queryByCondition(groupType, musicGroupId, userId, status, type);
+	}
+
+	@Override
     public StudentPaymentOrder findMusicGroupApplyOrderByStatus(Integer userId, String musicGroupId, DealStatusEnum status) {
         return studentPaymentOrderDao.findMusicGroupApplyOrderByStatus(userId, musicGroupId, status);
     }

+ 9 - 5
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);
@@ -570,10 +573,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
                 //添加用户电子签章账户
 //                contractService.register(userId, sysUser.getRealName(), sysUser.getIdCardNo(), sysUser.getPhone());
-                //注册到融云
-//                if (StringUtils.isEmpty(sysUser.getAvatar())) {
-//                    sysUser.setAvatar(sysConfigDao.findConfigValue(SysConfigService.USER_DEFAULT_HEAD_URL));
-//                }
                 ImResult register = imFeignService.register(new ImUserModel(userId.toString(), sysUser.getUsername(), null));
                 sysUser.setImToken(register.getToken());
                 teacherDao.updateUser(sysUser);
@@ -608,7 +607,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
                 studentAddDto.setCourseFee(musicOneSubjectClassPlan.getFee());
             }
-            Date nextPaymentDate = musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null);
+            Date nextPaymentDate = musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId, null,null);
 
             StudentPaymentOrder waitPayOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.WAIT_PAY);
 
@@ -654,6 +653,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){
@@ -885,6 +885,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();
 

+ 29 - 14
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;
@@ -461,7 +462,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		List dataList = null;
 		int count = vipGroupDao.countVipGorups(params);
 		if (count > 0) {
-
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = vipGroupDao.findVipGroups(params);
@@ -895,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);
 	}
@@ -983,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("用户信息获取失败");
@@ -1003,20 +1009,23 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("该课程已结束报名!");
 		}
 
-		StudentPaymentOrder oldOrder = studentPaymentOrderDao.findNotFailedOrderByStudentVipGroup(vipGroupBuyParams.getVipGroupId(),
+		if(Objects.nonNull(vipGroup.getStudentIdList())){
+			Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
+			if(!userIds.contains(user.getId())){
+				throw new BizException("您无法购买此课程");
+			}
+		}
+
+		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("该课程人数已达上限");
 			}
@@ -1084,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());
@@ -1113,7 +1122,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					amount,
 					orderNo,
 					baseApiUrl+"/api-student/studentOrder/notify",
-					baseApiUrl+"/#/paymentresult?orderNo=" + orderNo,
+					baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
 					"vip课购买",
 					vipGroup.getName(),
 					user.getId(),
@@ -1160,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());
 		}

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml

@@ -17,6 +17,10 @@
         <result column="update_time_" property="updateTime"/>
     </resultMap>
 
+    <resultMap id="ClassGroupTeacherMapDto" type="com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto" extends="ClassGroupTeacherMapper">
+        <result column="username_" property="userName"/>
+    </resultMap>
+
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="ClassGroupTeacherMapper">
         SELECT *
@@ -153,6 +157,18 @@
     <select id="findByClassGroup" resultMap="ClassGroupTeacherMapper">
         SELECT * FROM class_group_teacher_mapper WHERE class_group_id_=#{classGroupId}
     </select>
+    <select id="findByClassGroupIds" resultMap="ClassGroupTeacherMapDto">
+        SELECT
+            cgtm.*,
+            su.real_name_ username_
+        FROM
+            class_group_teacher_mapper cgtm
+            LEFT JOIN sys_user su ON cgtm.user_id_ = su.id_
+        WHERE cgtm.class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+            #{classGroupId}
+        </foreach>
+    </select>
 
     <!-- 删除对应班级老师关联关系 -->
     <delete id="delClassGroupTeacherMapper">

+ 29 - 7
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>
 
@@ -1894,7 +1894,8 @@
             cs.actual_teacher_id_,
             cs.teach_mode_,
             cs.type_,
-            cs.schoole_id_
+            cs.schoole_id_,
+            cg.name_ class_group_name_
         FROM
           course_schedule cs
           LEFT JOIN class_group cg ON cg.id_=cs.class_group_id_
@@ -1927,9 +1928,30 @@
         WHERE real_name_ LIKE CONCAT('%',#{search},'%') OR su.id_=#{search}
     </select>
     <select id="findClassGroupCourseSchedulesWithDate" resultMap="CourseSchedule">
-        SELECT * FROM course_schedule
-        WHERE FIND_IN_SET(class_group_id_,#{classGroupIds})
-        AND CONCAT(class_date_,' ',start_class_time_)&gt;NOW()
-        AND class_date_&gt;=DATE_FORMAT(#{fromDate},"%Y-%m-%d")
+        SELECT
+            cs.id_,
+            cs.class_group_id_,
+            cs.status_,
+            cs.subsidy_,
+            cs.class_date_,
+            CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
+            CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
+            cs.start_class_time_ start_class_time_str_,
+            cs.end_class_time_ end_class_time_str_,
+            cs.teacher_id_,
+            cs.actual_teacher_id_,
+            cs.create_time_,
+            cs.update_time_,
+            cs.teach_mode_,
+            cs.type_,
+            cs.name_,
+            cs.student_num_,
+            cs.leave_student_num_,
+            cs.schoole_id_
+        FROM course_schedule cs
+        WHERE FIND_IN_SET(cs.class_group_id_,#{classGroupIds})
+        AND CONCAT(cs.class_date_,' ',cs.start_class_time_)&gt;NOW()
+        AND cs.class_date_&gt;=DATE_FORMAT(#{fromDate},"%Y-%m-%d")
+        AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
     </select>
 </mapper>

+ 55 - 38
mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml

@@ -19,6 +19,8 @@
         <result column="update_time_" property="updateTime"/>
         <result column="payment_status_" property="paymentStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="temporary_course_fee_" property="temporaryCourseFee"/>
+        <result column="is_lock_" property="isLock"/>
+        <result column="payment_period_list_" property="paymentPeriodList"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -34,15 +36,15 @@
     <!-- 向数据库增加一条记录 -->
     <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_)
-		VALUES(#{id},#{musicGroupId},#{userId},#{courseFee},now(),now(),#{nextPaymentDate},#{latestPaidTime},#{continuousAbsenteeismTimes},#{subjectId},#{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{temporaryCourseFee})
+		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">
-        INSERT INTO music_group_student_fee_ (music_group_id_,user_id_,create_time_,update_time_,next_payment_date_,subject_id_,payment_status_,course_fee_)
+        INSERT INTO music_group_student_fee_ (music_group_id_,user_id_,create_time_,update_time_,next_payment_date_,subject_id_,payment_status_,course_fee_,payment_period_list_)
 		VALUES
 		<foreach collection="musicGroupStudentFees" item="item" separator=",">
-            (#{item.musicGroupId},#{item.userId},NOW(),NOW(),#{nextPaymentDate},#{item.subjectId},#{paymentStatus},#{item.courseFee})
+            (#{item.musicGroupId},#{item.userId},NOW(),NOW(),#{nextPaymentDate},#{item.subjectId},#{paymentStatus},#{item.courseFee},#{item.paymentPeriodList})
         </foreach>
     </insert>
 
@@ -80,6 +82,12 @@
             <if test="temporaryCourseFee != null">
                 temporary_course_fee_ = #{temporaryCourseFee},
             </if>
+            <if test="isLock != null">
+                is_lock_ = #{isLock},
+            </if>
+            <if test="paymentPeriodList != null">
+                payment_period_list_ = #{paymentPeriodList},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>
@@ -106,6 +114,9 @@
 	
     <delete id="deleteByMusicGroupId" parameterType="map">
 		DELETE FROM music_group_student_fee_ WHERE music_group_id_ = #{musicGroupId}
+		<if test="isLock != null">
+            AND is_lock_ = #{isLock}
+        </if>
 	</delete>
 
     <!-- 分页查询 -->
@@ -128,7 +139,9 @@
     </update>
 
     <select id="queryWillRenewList" resultMap="MusicGroupStudentFee">
-        SELECT * FROM music_group_student_fee_ WHERE next_payment_date_ IS NOT NULL AND payment_status_ = 'PAID_COMPLETED' and date_add(now(), interval #{days} day) >= next_payment_date_
+        SELECT * FROM music_group_student_fee_
+        WHERE next_payment_date_ IS NOT NULL AND payment_status_ = 'PAID_COMPLETED'
+        and date_add(now(), interval #{days} day) >= next_payment_date_
     </select>
 
     <select id="countContinuosAbsenteeismStudentNum" resultType="java.util.Map">
@@ -152,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">
@@ -176,46 +190,49 @@
     <select id="findPaymentStatusMap" resultType="java.util.Map">
         SELECT user_id_ 'key',payment_status_ 'value' FROM music_group_student_fee_ WHERE music_group_id_ = #{musicGroupId}
     </select>
+    <select id="queryByMusicGroupId" resultMap="MusicGroupStudentFee">
+        SELECT * FROM music_group_student_fee_ WHERE music_group_id_ = #{musicGroupId}
+    </select>
 
     <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>
-        </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>
     <update id="updateCourseFee">
-        UPDATE music_group_student_fee_ SET course_fee_ = #{courseFee} WHERE music_group_id_ = #{musicGroupId} AND subject_id_ = #{subjectId}
+        UPDATE music_group_student_fee_ SET course_fee_ = #{courseFee}
+        WHERE music_group_id_ = #{musicGroupId} AND subject_id_ = #{subjectId} AND is_lock_ = 0
+    </update>
+    <update id="updateStudentFee">
+        UPDATE music_group_student_fee_
+        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},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>

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

@@ -380,6 +380,9 @@
             <if test="paymentStatus != null">
                 AND mgsf.payment_status_ = #{paymentStatus}
             </if>
+            <if test="isLock != null">
+                AND mgsf.is_lock_ = #{isLock}
+            </if>
             <if test="musicGroupId != null and musicGroupId != ''">
                 AND sr.music_group_id_ = #{musicGroupId}
             </if>
@@ -406,11 +409,13 @@
         <result property="courseFee" column="course_fee_"/>
         <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_,
-        s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,
+        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
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_

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

@@ -247,6 +247,7 @@
         AND spo.music_group_id_=#{musicGroupId}
         AND spo.status_=#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         AND spo.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        and spo.type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </select>
     <select id="findByStudentVipGroup" resultMap="StudentPaymentOrder">
         SELECT
@@ -372,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 *

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

@@ -37,6 +37,7 @@
         <result column="stop_reason_" property="stopReason"/>
         <result column="courses_start_date" property="courseStartDate"/>
         <result column="course_schedules_json_" property="courseSchedulesJson"/>
+        <result column="student_id_list_" property="studentIdList"/>
 
         <result column="organ_name_" property="organName" />
         <result column="school_name_" property="schoolName" />
@@ -206,8 +207,8 @@
         </selectKey>
         -->
         INSERT INTO vip_group
-        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_,audit_status_,courses_start_date,course_schedules_json_)
-        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseStartDate},#{courseSchedulesJson})
+        (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,name_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_,vip_group_category_id_,organ_id_,stop_reason_,audit_status_,courses_start_date,course_schedules_json_,student_id_list_)
+        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{name},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode},#{vipGroupCategoryId},#{organId},#{stopReason},#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{courseStartDate},#{courseSchedulesJson},#{studentIdList})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -280,6 +281,9 @@
             <if test="courseSchedulesJson!=null">
                 course_schedules_json_=#{courseSchedulesJson},
             </if>
+            <if test="studentIdList!=null">
+                student_id_list_=#{studentIdList},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>
@@ -312,6 +316,7 @@
             AND vg.courses_start_date &gt; NOW()
             AND (select count(1) as num from student_payment_order where vg.id_ = music_group_id_ AND user_id_=#{userId} AND status_='SUCCESS') = 0
             AND vg.organ_id_ = #{organId}
+            AND (vg.student_id_list_ IS NULL or FIND_IN_SET(#{userId}, vg.student_id_list_))
             <if test="subjectId!=null">
                AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
             </if>
@@ -878,6 +883,9 @@
 	            <if test="item.courseSchedulesJson!=null">
 	                course_schedules_json_=#{item.courseSchedulesJson},
 	            </if>
+	            <if test="item.studentIdList!=null">
+                    student_id_list_=#{item.studentIdList},
+	            </if>
 	        </set>
 	        WHERE id_ = #{item.id}
         </foreach>

+ 17 - 3
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -7,21 +7,27 @@ import com.ym.mec.biz.dal.dto.RegisterPayDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 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.enums.PaymentStatusEnum;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
+
 import javax.annotation.Resource;
+
 import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.List;
@@ -171,13 +177,21 @@ public class MusicGroupController extends BaseController {
 	@GetMapping("/renew")
 	@ApiImplicitParams({ @ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
 			@ApiImplicitParam(name = "isUseBalancePayment", value = "是否使用余额付款", required = true, dataType = "Boolean") })
-	public HttpResponseResult renew(String musicGroupId, Boolean isUseBalancePayment) throws Exception {
+	public HttpResponseResult renew(String musicGroupId, Boolean isUseBalancePayment, boolean isRepeatPay) throws Exception {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		Integer userId = sysUser.getId();
-		
+
 		if (isUseBalancePayment == null) {
 			isUseBalancePayment = false;
 		}
+		if (isRepeatPay == false) {
+            // 判断是否存在支付中的记录
+            List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(GroupType.MUSIC, musicGroupId, userId, DealStatusEnum.ING,
+                    OrderTypeEnum.RENEW);
+			if (list.size() > 0) {
+				return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+			}
+		}
 		return succeed(musicGroupService.renew(musicGroupId, userId, isUseBalancePayment));
 	}
 
@@ -240,7 +254,7 @@ public class MusicGroupController extends BaseController {
             return failed(HttpStatus.CREATED, "恭喜您,报名成功!");
         }
 
-        return succeed(musicGroupService.rePay(registerPayDto));
+        return succeed(payMap);
     }
 
     @ApiOperation(value = "订单状态查询")

+ 10 - 3
mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java

@@ -6,8 +6,11 @@ import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dto.SporadicPayDto;
 import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 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.service.MusicGroupService;
 import com.ym.mec.biz.service.SporadicChargeInfoService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
@@ -19,6 +22,8 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 import java.util.Map;
 
 @RequestMapping("sporadicChargeInfo")
@@ -76,9 +81,11 @@ public class SporadicChargeInfoController extends BaseController {
 			}
 			sporadicPayDto.setUserId(sysUser.getId());
 		}
-		Integer ingOrder = studentPaymentOrderService.findOrderByGroupType(sporadicPayDto.getUserId(),sporadicPayDto.getSporadicId(),"SPORADIC", DealStatusEnum.ING);
-		if (ingOrder != null && ingOrder > 0){
-			return failed("您有支付中的订单");
+		if (sporadicPayDto.getIsRepeatPay() == false) {
+			Integer ingOrder = studentPaymentOrderService.findOrderByGroupType(sporadicPayDto.getUserId(),sporadicPayDto.getSporadicId(),"SPORADIC", DealStatusEnum.ING);
+			if (ingOrder != null && ingOrder > 0) {
+				return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+			}
 		}
 		Map payMap = musicGroupService.sporadicPay(sporadicPayDto);
 		if(payMap.containsKey("tradeState")){

+ 16 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,10 +1,12 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.Arrays;
@@ -51,6 +53,8 @@ import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
 import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.http.HttpUtil;
 
+import javax.servlet.http.HttpServletResponse;
+
 @RequestMapping("studentOrder")
 @Api(tags = "订单回调")
 @RestController
@@ -71,6 +75,8 @@ public class StudentOrderController extends BaseController {
     private YqPayFeignService yqPayFeignService;
     @Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     @PostMapping("/notify")
     public Msg notify(@ModelAttribute Msg msg) throws Exception {
@@ -273,4 +279,14 @@ public class StudentOrderController extends BaseController {
         }
         return succeed("订单不存在");
     }
+
+    @RequestMapping("paymentResult")
+    public void paymentResult(HttpServletResponse response, String orderNo) {
+        try {
+            String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+            response.sendRedirect(baseApiUrl+"/#/paymentresult?orderNo=" + orderNo);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
 }

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

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

@@ -63,12 +63,12 @@ public class MusicGroupController extends BaseController {
 		return succeed(musicGroupService.findMusicGroupSubjectInfo(musicGroupId));
 	}
 
-	@ApiOperation(value = "用户费用表,数据补全")
-	@PostMapping("/musicGroupStudentFeePatch")
-	public Object musicGroupStudentFeePatch(@RequestBody List<String> musicGroupIds){
-		musicGroupService.musicGroupStudentFeePatch(musicGroupIds);
-		return succeed();
-	}
+//	@ApiOperation(value = "用户费用表,数据补全")
+//	@PostMapping("/musicGroupStudentFeePatch")
+//	public Object musicGroupStudentFeePatch(@RequestBody List<String> musicGroupIds){
+//		musicGroupService.musicGroupStudentFeePatch(musicGroupIds);
+//		return succeed();
+//	}
 
 	@ApiOperation(value = "修改乐团声部信息")
 	@PostMapping("/updateSubjectInfo")

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

@@ -68,5 +68,4 @@ public class MusicGroupPaymentCalenderController extends BaseController {
     public Object queryPage(QueryInfo queryInfo) {
         return succeed(musicGroupPaymentCalenderService.queryPage(queryInfo));
     }
-
 }

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

@@ -10,8 +10,11 @@ import com.ym.mec.biz.service.MusicGroupStudentFeeService;
 import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -35,6 +38,7 @@ public class StudentManageController extends BaseController {
     private MusicGroupStudentFeeService musicGroupStudentFeeService;
     @Autowired
     private EmployeeDao employeeDao;
+    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
 
     @ApiOperation(value = "获取学生列表")
     @GetMapping("/queryStudentList")
@@ -186,10 +190,48 @@ public class StudentManageController extends BaseController {
      * 修改学员缴费金额和缴费周期
      * @return
      */
-    @GetMapping(value = "/updateStudentFee")
+    @PostMapping(value = "/updateStudentFee")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFee')")
-    public Object updateStudentFee(@RequestBody UpdateStudentFeeDto studentFeeDto) {
+    public Object updateStudentFee(UpdateStudentFeeDto studentFeeDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("用户信息获取失败");
+        }
+        LOGGER.info("修改学员缴费金额和缴费周期,user:{},参数:{}",sysUser.getId(),studentFeeDto);
         musicGroupStudentFeeService.updateStudentFee(studentFeeDto);
         return succeed();
     }
+
+    /**
+     * 修改学员缴费周期锁定状态
+     * @return
+     */
+    @PostMapping(value = "/updateStudentFeeIsLock")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFeeIsLock')")
+    public Object updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("用户信息获取失败");
+        }
+        LOGGER.info("修改学员缴费周期锁定状态,user:{},参数:{}",sysUser.getId(),studentFeeDto);
+        musicGroupStudentFeeService.updateStudentFeeIsLock(studentFeeDto);
+        return succeed();
+    }
+
+    /**
+     * 获取学员缴费日历信息
+     * @return
+     */
+    @GetMapping(value = "/findMusicGroupStudentFee")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/findMusicGroupStudentFee')")
+    public Object findMusicGroupStudentFee(Integer studentId,String musicGroupId) {
+        if(studentId == null || StringUtils.isEmpty(musicGroupId)){
+            throw new BizException("参数校验异常");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("用户信息获取失败");
+        }
+        return succeed(musicGroupStudentFeeService.findByUser(studentId,musicGroupId));
+    }
 }