소스 검색

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 년 전
부모
커밋
20e8153119
25개의 변경된 파일271개의 추가작업 그리고 47개의 파일을 삭제
  1. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  4. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java
  5. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseListDto.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroup.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysSuggestion.java
  9. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SporadicChargeTypeEnum.java
  10. 14 1
      mec-biz/src/main/java/com/ym/mec/biz/service/GroupClassService.java
  11. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  12. 61 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GroupClassServiceImpl.java
  13. 11 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  14. 7 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  15. 6 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  16. 8 2
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  17. 4 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  18. 3 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  19. 22 2
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  20. 4 0
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  21. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  22. 3 2
      mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  23. 20 12
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherManageController.java
  24. 2 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  25. 27 18
      mec-web/src/main/java/com/ym/mec/web/controller/PracticeGroupManageController.java

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -657,6 +657,17 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
                       @Param("groupType")GroupType groupType);
 
     /**
+     * @describe 根据团体删除班级-逻辑删除
+     * @author Joburgess
+     * @date 2020/3/4
+     * @param groupId:
+     * @param groupType:
+     * @return int
+     */
+    int deleteByGroupWithLogic(@Param("groupId") String groupId,
+                               @Param("groupType") GroupType groupType);
+
+    /**
      * 获取vip所有班级列表
      * @param vipGroupIds
      * @return

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java

@@ -71,6 +71,17 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
                       @Param("groupType") GroupType groupType);
 
     /**
+     * @describe 根据团体删除班上的学生-退学
+     * @author Joburgess
+     * @date 2020/2/17
+     * @param groupId:
+     * @param groupType:
+     * @return int
+     */
+    int deleteByGroupWithLogic(@Param("groupId") String groupId,
+                      @Param("groupType") GroupType groupType);
+
+    /**
      * @return int
      * @Author: Joburgess
      * @Date: 2019/10/17

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -227,6 +227,17 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                       @Param("groupType") GroupType groupType);
 
     /**
+     * @describe 获取团体下未开始的课程
+     * @author Joburgess
+     * @date 2020/3/4
+     * @param groupId:
+     * @param groupType:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+     */
+    List<CourseSchedule> findGroupNotStartCourses(@Param("groupId") String groupId,
+                                                  @Param("groupType") GroupType groupType);
+
+    /**
      * 逻辑删除乐团课程
      *
      * @param musicGroupID

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java

@@ -121,6 +121,10 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
      */
     List<PracticeCourseDto> findUserBuyPracticeGroups(@Param("userId") Integer userId);
 
+
+    List<PracticeCourseDto> findUserBuyPracticeGroupsWithDate(@Param("userId") Integer userId,
+                                                          @Param("date") Date date);
+
     /**
      * @describe 获取已经达到截至时间的陪练课程组
      * @author Joburgess

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -8,6 +8,7 @@ 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;
 import java.util.Set;
@@ -320,6 +321,10 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
      */
     List<VipGroup> queryNormalStatusList();
 
+    int countUserRepeatVipGroupInCourseStartEndTime(@Param("userId") Integer userId,
+                                                    @Param("courseStartDate")Date courseStartDate,
+                                                    @Param("courseEndDate") Date courseEndDate);
+
     VipGroup findVipGroupInfo(@Param("id") Integer id, @Param("classGroupId") Integer classGroupId);
 
     /**

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

@@ -77,6 +77,8 @@ public class CourseListDto {
 
     private String practiceRenewUrl;
 
+    private Date courseStartDate;
+
     private Date courseExpireDate;
 
     @ApiModelProperty(value = "是否有陪练报告")
@@ -85,6 +87,14 @@ public class CourseListDto {
     @ApiModelProperty(value = "陪练报告地址")
     private String studyReportUrl;
 
+    public Date getCourseStartDate() {
+        return courseStartDate;
+    }
+
+    public void setCourseStartDate(Date courseStartDate) {
+        this.courseStartDate = courseStartDate;
+    }
+
     public Date getCourseExpireDate() {
         return courseExpireDate;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroup.java

@@ -57,6 +57,16 @@ public class PracticeGroup {
 
 	private GroupStatusEnum groupStatus;
 
+	private Long beRenewGroupId;
+
+	public Long getBeRenewGroupId() {
+		return beRenewGroupId;
+	}
+
+	public void setBeRenewGroupId(Long beRenewGroupId) {
+		this.beRenewGroupId = beRenewGroupId;
+	}
+
 	public GroupStatusEnum getGroupStatus() {
 		return groupStatus;
 	}

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

@@ -27,6 +27,9 @@ public class SysSuggestion {
 	@ApiModelProperty(value = "用户编号",required = false)
 	private Long userId;
 	
+	@ApiModelProperty(value = "客户端类型",required = false)
+	private String clientType;
+	
 	/** 提交时间 */
 	private java.util.Date createTime;
 	
@@ -70,6 +73,14 @@ public class SysSuggestion {
 		return this.userId;
 	}
 			
+	public String getClientType() {
+		return clientType;
+	}
+
+	public void setClientType(String clientType) {
+		this.clientType = clientType;
+	}
+
 	public void setCreateTime(java.util.Date createTime){
 		this.createTime = createTime;
 	}

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SporadicChargeTypeEnum.java

@@ -10,7 +10,8 @@ public enum SporadicChargeTypeEnum implements BaseEnum<Integer, SporadicChargeTy
     SERVICE_FEE(5,"维修费"),
     LUCKY_BAG_ACTIVE(6,"福袋活动"),
     VISITING_FEE(7,"上门费"),
-    VIP_BUY(8,"VIP课购买");
+    VIP_BUY(8,"VIP课购买"),
+    RECHARGE(9,"VIP课购买");
 
     private Integer code;
 

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

@@ -2,6 +2,8 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.enums.GroupType;
 
+import java.math.BigDecimal;
+
 /**
  * @Author Joburgess
  * @Date 2020/2/17
@@ -29,7 +31,7 @@ public interface GroupClassService {
     boolean deleteGroupOtherInfo(String groupId, GroupType groupType);
 
     /**
-     * @describe 清理团相关信息
+     * @describe 清理团相关信息
      * @author Joburgess
      * @date 2020/2/17
      * @param groupId: 团体编号
@@ -38,4 +40,15 @@ public interface GroupClassService {
      */
     boolean cleanGroupInfo(String groupId, GroupType groupType);
 
+    /**
+     * @describe 关闭课程组
+     * @author Joburgess
+     * @date 2020/3/4
+     * @param groupId: 课程组编号
+     * @param groupType: 课程组类型
+     * @param refundAmount: 退款金额
+     * @return void
+     */
+    void cancelGroup(Long groupId, GroupType groupType, BigDecimal refundAmount);
+
 }

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

@@ -195,7 +195,7 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	 * @param userId:
 	 * @return java.util.List<com.ym.mec.biz.dal.dto.PracticeCourseDto>
 	 */
-	List<PracticeCourseDto> findUserHistoryBuyPracticeGroups(Integer userId);
+	List<PracticeCourseDto> findUserHistoryBuyPracticeGroups(Integer userId, Long groupId);
 
 	/**
 	 * @describe 查询订单信息
@@ -252,4 +252,5 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	 * @return void
 	 */
 	void pushStudyReport(Date expiredDate,String pushType);
+
 }

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

@@ -1,11 +1,25 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.PracticeGroup;
+import com.ym.mec.biz.dal.enums.GroupStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
 import com.ym.mec.biz.service.GroupClassService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.common.exception.BizException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -34,6 +48,10 @@ public class GroupClassServiceImpl implements GroupClassService {
     private TeacherAttendanceDao teacherAttendanceDao;
     @Autowired
     private StudentAttendanceDao studentAttendanceDao;
+    @Autowired
+    private PracticeGroupDao practiceGroupDao;
+    @Autowired
+    private SysUserCashAccountService sysUserCashAccountService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -67,8 +85,50 @@ public class GroupClassServiceImpl implements GroupClassService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean cleanGroupInfo(String groupId, GroupType groupType) {
+        classGroupDao.deleteByGroupWithLogic(groupId,groupType);
+        classGroupStudentMapperDao.deleteByGroupWithLogic(groupId,groupType);
+        List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(groupId, groupType);
+        if(CollectionUtils.isEmpty(groupNotStartCourses)){
+            return true;
+        }
+        List<Long> courseIds = groupNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+        courseScheduleDao.batchDeleteCourseSchedules(courseIds);
+        courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseIds);
+        courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseIds);
+        teacherAttendanceDao.batchDeleteByCourseSchedules(courseIds);
+        studentAttendanceDao.deleteByCourseSchedules(courseIds);
+        return true;
+    }
 
-        return false;
+    @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public void cancelGroup(Long groupId, GroupType groupType, BigDecimal refundAmount) {
+        if(Objects.isNull(groupId)){
+            throw new BizException("请指定课程组");
+        }
+        if(Objects.isNull(groupType)){
+            throw new BizException("请指定课程组类型");
+        }
+        if(groupType.equals(GroupType.PRACTICE)){
+            PracticeGroup practiceGroup = practiceGroupDao.get(groupId);
+            if(Objects.isNull(practiceGroup)){
+                throw new BizException("指定的课程组不存在");
+            }
+            Date now=new Date();
+            if(!practiceGroup.getGroupStatus().equals(GroupStatusEnum.NORMAL)||practiceGroup.getCoursesExpireDate().before(now)){
+                throw new BizException("当前课程组不可关闭");
+            }
+            if(Objects.isNull(refundAmount)){
+                throw new BizException("请指定退款金额");
+            }
+            sysUserCashAccountService.updateBalance(practiceGroup.getStudentId(), refundAmount, PlatformCashAccountDetailTypeEnum.REFUNDS, "后团关闭网管课");
+            cleanGroupInfo(groupId.toString(), GroupType.PRACTICE);
+            practiceGroup.setMemo("后台关闭网管课");
+            practiceGroup.setGroupStatus(GroupStatusEnum.CANCEL);
+            practiceGroup.setUpdateTime(now);
+            practiceGroupDao.update(practiceGroup);
+        }
     }
 }

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

@@ -2676,6 +2676,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 if(Objects.nonNull(lastExpiredDay)&&lastExpiredDay.compareTo(courseStartDay)>=0){
                     courseStartDay=lastExpiredDay;
                 }
+                practiceGroupBuyParams.setBeRenewGroupId(practiceGroupBuyParams.getGroupId());
             }else{
                 return BaseController.failed(HttpStatus.EXPECTATION_FAILED, "需要续费的课程组不存在");
             }
@@ -3126,8 +3127,16 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     }
 
     @Override
-    public List<PracticeCourseDto> findUserHistoryBuyPracticeGroups(Integer userId) {
-        List<PracticeCourseDto> userPracticeGroups = practiceGroupDao.findUserBuyPracticeGroups(userId);
+    public List<PracticeCourseDto> findUserHistoryBuyPracticeGroups(Integer userId, Long groupId) {
+        List<PracticeCourseDto> userPracticeGroups;
+        if(Objects.nonNull(groupId)){
+            PracticeGroup practiceGroup = practiceGroupDao.get(groupId);
+            Date date = DateUtil.addSeconds(practiceGroup.getCoursesExpireDate(), 1);
+            userPracticeGroups=practiceGroupDao.findUserBuyPracticeGroupsWithDate(userId,date);
+        }else{
+            userPracticeGroups = practiceGroupDao.findUserBuyPracticeGroups(userId);
+        }
+
         if(CollectionUtils.isEmpty(userPracticeGroups)){
             return new ArrayList<>();
         }

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

@@ -74,11 +74,16 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
         Map<Integer, String> yimei = new HashMap();
         map.put(userId, userId.toString());
         if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
-            //活动,增加课程余额
-            if (info.getChargeType().getCode() == 6 || info.getChargeType().getCode() == 8) {
+            //福袋活动,增加课程余额
+            if (info.getChargeType().getCode() == 6) {
                 sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getActualAmount(), "活动");
             }
 
+            //零星收费账户充值
+            if (info.getChargeType().getCode() == 9) {
+                sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(),PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费账户充值");
+            }
+
             //插入交易明细
             BigDecimal amount = studentPaymentOrder.getActualAmount();
             Date nowDate = new Date();

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

@@ -129,7 +129,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		return vipGroupDao;
 	}
 
-	@Transactional(rollbackFor = Exception.class)
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	@Override
 	public String createVipGroup(VipGroupApplyDto vipGroup) {
 
@@ -225,6 +225,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 		}
 
+		int repeatVipGroups = vipGroupDao.countUserRepeatVipGroupInCourseStartEndTime(vipGroupApplyBaseInfoDto.getUserId(), firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
+		if(repeatVipGroups>0){
+			throw new BizException("请勿重复提交");
+		}
+
 		//生成vip课信息
 		List<String> bySubIds = subjectDao.findBySubIds(vipGroupApplyBaseInfoDto.getSubjectIdList());
 		StringBuffer className=new StringBuffer(StringUtils.join(bySubIds,","));

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

@@ -83,6 +83,10 @@
         DELETE FROM class_group WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </delete>
 
+    <update id="deleteByGroupWithLogic">
+        UPDATE class_group SET del_flag_=1,update_time_=NOW() WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+    </update>
+
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="ClassGroup">
         SELECT * FROM class_group WHERE id_ = #{id}
@@ -447,7 +451,7 @@
         <result column="online_classes_num_" property="onlineClassesNum"/>
         <result column="offline_classes_num_" property="offLineClassesNum"/>
         <result property="type" column="type_"/>
-        <result property="courseStartDate" column="courses_start_date"/>
+        <result property="courseStartDate" column="courses_start_date_"/>
         <result property="classMode" column="class_mode_"/>
     </resultMap>
 
@@ -485,6 +489,7 @@
             cg.name_ class_group_name_,
             cg.type_,
             cg.subject_id_list_,
+            pg.courses_start_date_,
             pg.courses_expire_date_,
             pg.single_class_minutes_,
             cg.total_class_times_ online_classes_num_,
@@ -737,6 +742,7 @@
         <result column="teacher_school_id_" property="teacherSchoolId"/>
         <result column="class_mode_" property="classMode"/>
         <result column="practice_type_" property="practiceType"/>
+        <result column="courses_start_date_" property="courseStartDate"/>
         <result column="courses_expire_date_" property="courseExpireDate"/>
         <result column="payment_status_" property="paymentStatus"
                 typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
@@ -768,7 +774,7 @@
     <select id="queryStudentPracticeCourses" resultMap="CourseListDto">
         SELECT cg.id_ class_group_id_,pg.name_ music_group_name_,su.real_name_,
         cg.current_class_times_,cg.total_class_times_,pg.single_class_minutes_,
-        pg.id_ practice_id_,cg.type_,1 class_mode_,
+        pg.id_ practice_id_,cg.type_,1 class_mode_,pg.courses_start_date_,
         pg.courses_expire_date_,
         IF(pg.buy_months_ IS NULL,0,1) practice_type_
         FROM practice_group pg

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

@@ -67,6 +67,10 @@
         DELETE FROM class_group_student_mapper WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </delete>
 
+    <update id="deleteByGroupWithLogic">
+        UPDATE class_group_student_mapper SET status_='QUIT',update_time_=NOW() WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+    </update>
+
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="ClassGroupStudentMapper" parameterType="map">
         SELECT * FROM class_group_student_mapper ORDER BY id_

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

@@ -2588,4 +2588,7 @@
         GROUP BY class_group_id_
         )
     </select>
+    <select id="findGroupNotStartCourses" resultMap="CourseSchedule">
+        SELECT * FROM course_schedule WHERE group_type_=#{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} AND music_group_id_ = #{groupId} AND CONCAT(class_date_, ' ', start_class_time_)>NOW()
+    </select>
 </mapper>

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

@@ -23,6 +23,7 @@
 		<result column="drill_times_on_week_" property="drillTimesOnWeek" />
 		<result column="drill_times_json_" property="drillTimesJson" />
 		<result column="group_status_" property="groupStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="be_renew_group_id_" property="beRenewGroupId"/>
 	</resultMap>
 
 	<resultMap id="PracticeCourseDto" type="com.ym.mec.biz.dal.dto.PracticeCourseDto" extends="PracticeGroup">
@@ -54,6 +55,9 @@
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.PracticeGroup">
 		UPDATE practice_group
 		<set>
+			<if test="memo!=null">
+				memo_=#{memo},
+			</if>
 			<if test="groupStatus!=null">
 				group_status_=#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
@@ -93,8 +97,8 @@
 		</selectKey>
 		-->
 		INSERT INTO practice_group
-		(id_,name_,subject_id_,user_id_,student_id_,single_class_minutes_,organ_id_,courses_start_date_,courses_expire_date_,create_time_,update_time_,memo_,buy_months_,drill_times_on_week_,drill_times_json_,group_status_)
-		VALUES(#{id},#{name},#{subjectId},#{userId},#{studentId},#{singleClassMinutes},#{organId},#{coursesStartDate},#{coursesExpireDate},NOW(),NOW(),#{memo},#{buyMonths},#{drillTimesOnWeek},#{drillTimesJson},#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+		(id_,name_,subject_id_,user_id_,student_id_,single_class_minutes_,organ_id_,courses_start_date_,courses_expire_date_,create_time_,update_time_,memo_,buy_months_,drill_times_on_week_,drill_times_json_,group_status_,be_renew_group_id_)
+		VALUES(#{id},#{name},#{subjectId},#{userId},#{studentId},#{singleClassMinutes},#{organId},#{coursesStartDate},#{coursesExpireDate},NOW(),NOW(),#{memo},#{buyMonths},#{drillTimesOnWeek},#{drillTimesJson},#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{beRenewGroupId})
 	</insert>
 	
 	<select id="getUserFreePracticeGroup" resultMap="PracticeGroup">
@@ -153,6 +157,22 @@
 			AND (pg.group_status_='NORMAL' OR pg.group_status_='LOCK')
 			AND pg.buy_months_ IS NOT NULL
 	</select>
+
+	<select id="findUserBuyPracticeGroupsWithDate" resultMap="PracticeCourseDto">
+		SELECT
+			pg.*,
+			su.real_name_,
+			su.avatar_,
+			s.name_ subject_name_
+		FROM
+			practice_group pg
+			LEFT JOIN sys_user su ON pg.user_id_ = su.id_
+			LEFT JOIN `subject` s ON pg.subject_id_ = s.id_
+		WHERE
+			student_id_=#{userId}
+			AND courses_start_date_=#{date} AND group_status_='LOCK'
+			AND pg.buy_months_ IS NOT NULL
+	</select>
 	<select id="findUserPracticeGroup" resultMap="PracticeGroup">
 		SELECT * FROM practice_group WHERE student_id_=#{userId} AND id_=#{groupId};
 	</select>

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

@@ -926,4 +926,8 @@
 		WHERE cs.group_type_ = 'VIP' and cs.teach_mode_ = 'ONLINE'
 		GROUP BY cssp.music_group_id_
     </select>
+
+    <select id="countUserRepeatVipGroupInCourseStartEndTime" resultType="int">
+        SELECT COUNT(id_) FROM vip_group WHERE user_id_=#{userId} AND courses_start_date=#{courseStartDate} AND courses_expire_date_=#{courseEndDate}
+    </select>
 </mapper>

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -185,12 +185,12 @@ public class PracticeGroupController extends BaseController {
 
     @ApiOperation("获取用户历史购买的陪练课")
     @GetMapping(value = "/findUserHistoryBuyPracticeGroups")
-    public HttpResponseResult findUserHistoryBuyPracticeGroups(){
+    public HttpResponseResult findUserHistoryBuyPracticeGroups(Long groupId){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(practiceGroupService.findUserHistoryBuyPracticeGroups(sysUser.getId()));
+        return succeed(practiceGroupService.findUserHistoryBuyPracticeGroups(sysUser.getId(), groupId));
     }
 
     @ApiOperation("查询订单信息")

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

@@ -67,8 +67,9 @@ public class StudentManageController extends BaseController {
 
     @ApiOperation(value = "新增建议")
     @PostMapping("suggestion/add")
-    public Object add(SysSuggestion SysSuggestion) {
-        suggestionService.insert(SysSuggestion);
+    public Object add(SysSuggestion sysSuggestion) {
+    	sysSuggestion.setClientType("STUDENT");
+        suggestionService.insert(sysSuggestion);
         return succeed();
     }
 

+ 20 - 12
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherManageController.java

@@ -1,18 +1,9 @@
 package com.ym.mec.teacher.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.CashAccountDetail;
-import com.ym.mec.biz.dal.entity.SysSuggestion;
-import com.ym.mec.biz.dal.entity.SysUserBankCard;
-import com.ym.mec.biz.dal.entity.VipGroup;
-import com.ym.mec.biz.service.*;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.UploadReturnBean;
-import com.ym.mec.util.upload.UploadUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -23,6 +14,22 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.CashAccountDetail;
+import com.ym.mec.biz.dal.entity.SysSuggestion;
+import com.ym.mec.biz.dal.entity.SysUserBankCard;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.SysSuggestionService;
+import com.ym.mec.biz.service.SysUserBankCardService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.biz.service.UploadFileService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.UploadReturnBean;
+import com.ym.mec.util.upload.UploadUtil;
+
 @Api(tags = "教师管理")
 @RestController
 public class TeacherManageController extends BaseController {
@@ -65,8 +72,9 @@ public class TeacherManageController extends BaseController {
 
     @ApiOperation(value = "新增建议")
     @PostMapping("suggestion/add")
-    public Object add(SysSuggestion SysSuggestion) {
-        suggestionService.insert(SysSuggestion);
+    public Object add(SysSuggestion sysSuggestion) {
+    	sysSuggestion.setClientType("TEACHER");
+        suggestionService.insert(sysSuggestion);
         return succeed();
     }
 

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

@@ -513,6 +513,8 @@ public class ExportController extends BaseController {
                         row.setSporadicType("福袋活动");
                     }else if (row.getChargeType().equals(7)) {
                         row.setSporadicType("上门费");
+                    }else if (row.getChargeType().equals(9)) {
+                        row.setSporadicType("账户余额充值");
                     }
                 }
                 School userSchool = musicGroupDao.findUserSchool(row.getUserId());

+ 27 - 18
mec-web/src/main/java/com/ym/mec/web/controller/PracticeGroupManageController.java

@@ -3,27 +3,26 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dto.ClassDateAdjustDto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyBaseInfoDto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.entity.StudentApplyRefunds.StudentApplyRefundsStatus;
-import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-import com.ym.mec.biz.dal.page.*;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.page.PracticeGroupQueryInfo;
+import com.ym.mec.biz.service.GroupClassService;
+import com.ym.mec.biz.service.PracticeGroupService;
 import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * @Author Joburgess
@@ -40,6 +39,8 @@ public class PracticeGroupManageController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private EmployeeDao employeeDao;
+    @Autowired
+    private GroupClassService groupService;
 
     @ApiOperation(value = "全查询")
     @GetMapping("/queryAll")
@@ -49,15 +50,15 @@ public class PracticeGroupManageController extends BaseController {
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-        if(!sysUser.getIsSuperAdmin()){
+        if (!sysUser.getIsSuperAdmin()) {
             Employee employee = employeeDao.get(sysUser.getId());
             if (StringUtils.isEmpty(queryInfo.getOrganId())) {
                 queryInfo.setOrganId(employee.getOrganIdList());
-            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
                 return failed("用户所在分部异常");
-            }else {
+            } else {
                 List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
                     return failed("非法请求");
                 }
             }
@@ -68,7 +69,15 @@ public class PracticeGroupManageController extends BaseController {
     @ApiOperation(value = "获取陪练课课程计划")
     @GetMapping(value = "/findPracticeGroupCourseSchedules")
     @PreAuthorize("@pcs.hasPermissions('practiceGroupManage/findPracticeGroupCourseSchedules')")
-    public Object findPracticeGroupCourseSchedules(PracticeGroupQueryInfo queryInfo){
+    public Object findPracticeGroupCourseSchedules(PracticeGroupQueryInfo queryInfo) {
         return succeed(practiceGroupService.findPracticeGroupCourseSchedules(queryInfo));
     }
+
+    @ApiOperation(value = "关闭课程组")
+    @PostMapping(value = "/cancelGroup")
+    @PreAuthorize("@pcs.hasPermissions('practiceGroupManage/cancelGroup')")
+    public HttpResponseResult cancelGroup(Long groupId, GroupType groupType, BigDecimal refundAmount) {
+        groupService.cancelGroup(groupId, groupType, refundAmount);
+        return succeed();
+    }
 }