瀏覽代碼

Merge branch '20210318'

Joburgess 4 年之前
父節點
當前提交
f60cdf6883

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

@@ -1477,6 +1477,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
     CourseSchedule findFirstCourseWithGroup(@Param("groupId") String groupId,
                                             @Param("groupType") GroupType groupType);
+    CourseSchedule findLastCourseWithGroup(@Param("groupId") String groupId,
+                                            @Param("groupType") GroupType groupType);
 
     List<CourseSchedule> findClassGroupLastTeacher(@Param("classGroupIds") List<Integer> classGroupIds);
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java

@@ -21,6 +21,9 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
     @Select("SELECT COUNT(*) FROM student_course_homework WHERE course_homework_id_=#{courseHomeworkID} AND attachments_ IS NOT NULL")
     int countCompletedStudentNum(Long courseHomeworkID);
 
+    @Select("SELECT COUNT(user_id_) FROM student_course_homework WHERE course_schedule_id_=#{courseId}")
+    int countHomeworkStudentNumWithCourse(Long courseId);
+
     /**
      * @Author: Joburgess
      * @Date: 2019/9/18

+ 7 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -4959,8 +4959,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     	if(practiceGroup == null){
 			throw new BizException("课程组不存在");
 		}
-    	if(!GroupStatusEnum.NORMAL.equals(practiceGroup.getGroupStatus())){
-    		throw new BizException("非进行中课程组不可编辑");
+		if(!GroupStatusEnum.NORMAL.equals(practiceGroup.getGroupStatus())&&!GroupStatusEnum.FINISH.equals(practiceGroup.getGroupStatus())){
+			throw new BizException("非正常状态课程组不可编辑");
 		}
 		if(courseStartDate.after(coursesExpireDate)){
 			throw new BizException("课程组有效结束时间不能早于课程组有效开始时间");
@@ -4981,6 +4981,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 //				throw new BizException("课程结束时间不得早于,{}", DateUtil.dateToString(courseExpiredDateTemp, "yyyy年MM月dd日"));
 //			}
 //		}
+		Date now = new Date();
 		CoursesGroupModifyLog coursesGroupModifyLog = new CoursesGroupModifyLog();
 		coursesGroupModifyLog.setGroupId(practiceGroupId);
 		coursesGroupModifyLog.setGroupType(PRACTICE.getCode());
@@ -4988,7 +4989,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		coursesGroupModifyLog.setPreviousGroup(JSONObject.toJSONString(practiceGroup));
 		practiceGroup.setCoursesStartDate(courseStartDate);
 		practiceGroup.setCoursesExpireDate(DateUtil.addSeconds(DateUtil.addDays(coursesExpireDate, 1),-1));
-		practiceGroup.setUpdateTime(new Date());
+		if(practiceGroup.getCoursesExpireDate().compareTo(now)>=0||DateUtil.isSameDay(practiceGroup.getCoursesExpireDate(), now)){
+			practiceGroup.setGroupStatus(GroupStatusEnum.NORMAL);
+		}
+		practiceGroup.setUpdateTime(now);
 		practiceGroupDao.update(practiceGroup);
 		coursesGroupModifyLog.setCurrentGroup(JSONObject.toJSONString(practiceGroup));
 		coursesGroupModifyLogDao.insert(coursesGroupModifyLog);

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

@@ -109,6 +109,8 @@ public class StudentManageServiceImpl implements StudentManageService {
     private CourseScheduleDao courseScheduleDao;
     @Autowired
     private SysUserContractsDao sysUserContractsDao;
+    @Autowired
+    private StudentCourseHomeworkDao studentCourseHomeworkDao;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -709,6 +711,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             sum.put("truantNum", 0);
         }
         sum.put("homeworkNum", studentManageDao.countHomeworkNum(courseScheduleId));
+        sum.put("homeworkStudentNum", studentCourseHomeworkDao.countHomeworkStudentNumWithCourse(courseScheduleId.longValue()));
         sum.put("repliedNum", studentManageDao.countRepliedNum(courseScheduleId));
         return sum;
     }

+ 10 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -3196,15 +3196,20 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if (vipGroupList != null && vipGroupList.size() > 0) {
 			Date date = new Date();
 			for (VipGroup vipGroup : vipGroupList) {
+				if(Objects.nonNull(vipGroup.getCoursesExpireDate())&&vipGroup.getCoursesExpireDate().compareTo(date)<0&&!DateUtil.isSameDay(vipGroup.getCoursesExpireDate(), date)){
+					continue;
+				}
 				vipGroup.setStatus(VipGroupStatusEnum.FINISHED);
 				vipGroup.setUpdateTime(date);
 			}
 			vipGroupDao.batchUpdate(vipGroupList);
-			Set<Long> collect = vipGroupList.stream().map(e -> e.getId()).collect(Collectors.toSet());
-			Set<Integer> classGroupIds = classGroupDao.queryClassGroupIds(collect);
-			//解散群
-			for (Integer classGroupId : classGroupIds) {
-				imGroupService.cancel(classGroupId.longValue());
+			Set<Long> collect = vipGroupList.stream().filter(v->VipGroupStatusEnum.FINISHED.equals(v.getStatus())).map(e -> e.getId()).collect(Collectors.toSet());
+			if(!CollectionUtils.isEmpty(collect)){
+				Set<Integer> classGroupIds = classGroupDao.queryClassGroupIds(collect);
+				//解散群
+				for (Integer classGroupId : classGroupIds) {
+					imGroupService.cancel(classGroupId.longValue());
+				}
 			}
 		}
 		List<VipGroup> normalVipGroupList = vipGroupDao.queryNormalStatusList();

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

@@ -2954,10 +2954,38 @@
         FROM course_schedule cs
         WHERE cs.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
           AND cs.music_group_id_ = #{groupId}
+            AND cs.del_flag_ = 0
         ORDER BY CONCAT(cs.class_date_, ' ', cs.start_class_time_)
         LIMIT 1
     </select>
 
+    <select id="findLastCourseWithGroup" resultMap="CourseSchedule">
+        SELECT cs.id_,
+               cs.group_type_,
+               cs.music_group_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.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 cs.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+          AND cs.music_group_id_ = #{groupId}
+        ORDER BY CONCAT(cs.class_date_, ' ', cs.start_class_time_) DESC
+        LIMIT 1
+    </select>
+
     <select id="findClassGroupLastTeacher" resultMap="CourseSchedule">
         SELECT *
         FROM course_schedule

+ 5 - 5
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -289,7 +289,7 @@
     </select>
     <select id="countStudentCourseHomeworks" resultType="java.lang.Integer">
         SELECT COUNT(id_)
-        FROM course_schedule_student_payment
+        FROM student_course_homework
         WHERE course_schedule_id_ = #{search}
     </select>
     <resultMap id="StudentCourseHomeworkDtoMap" type="com.ym.mec.biz.dal.dto.StudentCourseHomeworkDto">
@@ -306,13 +306,13 @@
     <select id="findStudentCourseHomeworks" resultMap="StudentCourseHomeworkDtoMap">
         SELECT sch.id_ student_course_homework_id_,sch.attachments_,sch.is_replied_,sch.is_view_,
         sch.update_time_,cssp.user_id_,su.username_,su.phone_,s.name_ subject_name_
-        FROM course_schedule_student_payment cssp
-        LEFT JOIN student_course_homework sch ON sch.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ =
-        sch.user_id_ AND sch.status_ = 1
+        FROM student_course_homework sch
+        LEFT JOIN course_schedule_student_payment cssp ON sch.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ =
+        sch.user_id_
         LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
         LEFT JOIN student_registration sr ON cssp.music_group_id_ = sr.music_group_id_ AND cssp.user_id_ = sr.user_id_
         LEFT JOIN `subject` s ON s.id_ = sr.actual_subject_id_
-        WHERE cssp.course_schedule_id_ = #{search}
+        WHERE sch.course_schedule_id_ = #{search}
         ORDER BY sch.id_ DESC
         <include refid="global.limit"/>
     </select>

+ 49 - 12
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

@@ -2,17 +2,13 @@ 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.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.*;
 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.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupSalaryQueryInfo;
@@ -21,6 +17,7 @@ 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 com.ym.mec.util.date.DateUtil;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -56,6 +53,12 @@ public class VipGroupManageController extends BaseController {
     private EmployeeDao employeeDao;
     @Autowired
     private ClassGroupDao classGroupDao;
+    @Autowired
+    private ImGroupMemberService imGroupMemberService;
+    @Autowired
+    private ImUserFriendService imUserFriendService;
+    @Autowired
+    private ImGroupService imGroupService;
 
     @Autowired
     private StudentApplyRefundsService studentApplyRefundsService;
@@ -64,6 +67,12 @@ public class VipGroupManageController extends BaseController {
     private StudentPaymentOrderService studentPaymentOrderService;
     @Autowired
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
+    @Autowired
+    private ClassGroupStudentMapperDao classGroupStudentMapperDao;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
 
     @GetMapping("/teacherSalarySettlement")
     public Object teacherSalarySettlement(){
@@ -80,22 +89,50 @@ public class VipGroupManageController extends BaseController {
             if(Objects.isNull(oldVipGroup)){
                 throw new BizException("此课程组不存在");
             }
-            if(!VipGroupStatusEnum.PROGRESS.equals(oldVipGroup.getStatus())&&!VipGroupStatusEnum.PAUSE.equals(oldVipGroup.getStatus())){
+            if(!VipGroupStatusEnum.PROGRESS.equals(oldVipGroup.getStatus())&&!VipGroupStatusEnum.FINISHED.equals(oldVipGroup.getStatus())&&!VipGroupStatusEnum.PAUSE.equals(oldVipGroup.getStatus())){
                 throw new BizException("此课程组状态暂不支持修改");
             }
         }
+        ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(oldVipGroup.getId().toString(), ClassGroupTypeEnum.VIP.getCode());
+        if(Objects.isNull(classGroup)){
+            throw new BizException("课程信息错误");
+        }
         if(Objects.isNull(oldVipGroup.getVipGroupActivityId())){
-            if(VipGroupStatusEnum.PROGRESS.equals(vipGroup.getStatus())&&oldVipGroup.getStatus().getCode()>VipGroupStatusEnum.PROGRESS.getCode()){
+            if(VipGroupStatusEnum.PROGRESS.equals(vipGroup.getStatus())&&!VipGroupStatusEnum.FINISHED.equals(oldVipGroup.getStatus())&&oldVipGroup.getStatus().getCode()>VipGroupStatusEnum.PROGRESS.getCode()){
                 throw new BizException("此课程组状态暂不支持修改");
             }
-            ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(oldVipGroup.getId().toString(), ClassGroupTypeEnum.VIP.getCode());
-            if(Objects.isNull(classGroup)){
-                throw new BizException("课程信息错误");
-            }
             if(classGroup.getStudentNum()<3){
                 throw new BizException("班级人数未达到3人");
             }
         }
+        Date now = new Date();
+        if(VipGroupStatusEnum.FINISHED.equals(oldVipGroup.getStatus())&&(vipGroup.getCoursesExpireDate().compareTo(now)>=0|| DateUtil.isSameDay(vipGroup.getCoursesExpireDate(), now))){
+            vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
+
+            Map<Integer,String> userRoleMap = new HashMap<>();
+            if(Objects.nonNull(vipGroup.getEducationalTeacherId())){
+                userRoleMap.put(vipGroup.getEducationalTeacherId(),"乐团主管");
+            }
+
+            CourseSchedule lastCourse = courseScheduleDao.findLastCourseWithGroup(vipGroup.getId().toString(), GroupType.VIP);
+            if(Objects.isNull(lastCourse)){
+                userRoleMap.put(vipGroup.getUserId(),"指导老师");
+            }else{
+                userRoleMap.put(lastCourse.getActualTeacherId(),"指导老师");
+            }
+
+            List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
+            if(!CollectionUtils.isEmpty(classGroupStudents)){
+                //生成学生单课缴费信息
+                for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
+                    userRoleMap.put(classGroupStudent.getUserId(),null);
+                }
+            }
+
+            imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode());
+            imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
+            imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(),classGroup.getGroupType());
+        }
         vipGroupService.update(vipGroup);
         return succeed();
     }