浏览代码

Merge branch 'err_data_export'

Joburgess 4 年之前
父节点
当前提交
83ef66f083

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -204,4 +204,21 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      * @return java.util.List<com.ym.mec.biz.dal.entity.Student>
      */
     List<Student> getNoTeacherOrNoSubjectStudent();
+
+    /**
+     * @describe 从新学员中找出有VIP课的学员编号
+     * @author Joburgess
+     * @date 2021/6/3 0003
+     * @return java.util.List<java.lang.Integer>
+     */
+    List<Integer> getHasVipCourseStudentIdsFromNewStudents();
+
+    /**
+     * @describe 将指定学员更新为老学员
+     * @author Joburgess
+     * @date 2021/6/3 0003
+     * @param userIds:
+     * @return int
+     */
+    int updateNewStudentsToOld(@Param("userIds") List<Integer> userIds);
 }

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupActivityDao.java

@@ -15,7 +15,9 @@ public interface VipGroupActivityDao extends BaseDAO<Integer, VipGroupActivity>
 	 * @Date: 2019/10/2
 	 * 根据课程类型获取vip课 活动方案
 	 */
-	List<VipGroupActivity> findByCategory(@Param("categoryId") Long categoryId, @Param("organIds") String organIds);
+	List<VipGroupActivity> findByCategory(@Param("categoryId") Long categoryId,
+										  @Param("organIds") String organIds,
+										  @Param("applyToStudentType") Integer applyToStudentType);
 
 	/**
 	 * 根据活动方案编号列表获取名称

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

@@ -89,6 +89,17 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "每位学员最大使用次数")
 	private Integer studentMaxUsedTimes;
 
+	@ApiModelProperty(value = "适用学生类型:-1:所有;0:老用户;1:新用户")
+	private int  applyToStudentType = -1;
+
+	public int getApplyToStudentType() {
+		return applyToStudentType;
+	}
+
+	public void setApplyToStudentType(int applyToStudentType) {
+		this.applyToStudentType = applyToStudentType;
+	}
+
 	public Integer getMinCourseNum() {
 		return minCourseNum;
 	}

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

@@ -29,7 +29,7 @@ public interface VipGroupActivityService extends BaseService<Integer, VipGroupAc
      * @Date: 2019/10/2
      * 根据课程类型获取VIP课相关活动方案
      */
-    List<VipGroupActivity> findByVipGroupCategory(Long categoryId, String organIds, Integer teacherId);
+    List<VipGroupActivity> findByVipGroupCategory(Long categoryId, String organIds, Integer teacherId, Integer applyToStudentType);
 
     /**
      * 导出vip活动

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

@@ -2765,9 +2765,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     courseSchedules.get(courseStartDates.size() - 1).setEndClassTime(courseEndTime);
                     if (Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode())) {
                         if(courseSchedules.get(courseStartDates.size() - 1).getTeachMode().equals(TeachModeEnum.ONLINE)
-                            &&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)
-							&&Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId())){
-                            throw new BizException("请选择教学点");
+                            &&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)){
+                            throw new BizException("VIP课不支持从线上调整到线下");
                         }
                         courseSchedules.get(courseStartDates.size() - 1).setTeachMode(vipGroupCourseAdjustInfo.getTeachMode());
                         if (vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
@@ -3380,6 +3379,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 			}
 
+			if (VIP.equals(newCourseSchedule.getGroupType())){
+				if(TeachModeEnum.OFFLINE.equals(newCourseSchedule.getTeachMode())&&TeachModeEnum.ONLINE.equals(oldCourseSchedule.getTeachMode())){
+					throw new BizException("VIP课不支持从线上调整到线下");
+				}
+			}
+
             if(!CollectionUtils.isEmpty(newCourseSchedule.getTeachingTeacherIdList())){
                 if (newCourseSchedule.getTeachingTeacherIdList().contains(newCourseSchedule.getActualTeacherId())){
                     throw new BizException("主教和助教不可重复");

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

@@ -205,7 +205,14 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateStudentTeacherAndSubject() {
+        //更新新学员状态
+        List<Integer> newStudentIds = studentDao.getHasVipCourseStudentIdsFromNewStudents();
+        if(!CollectionUtils.isEmpty(newStudentIds)){
+            studentDao.updateNewStudentsToOld(newStudentIds);
+        }
+
         List<Student> noTeacherOrNoSubjectStudent = studentDao.getNoTeacherOrNoSubjectStudent();
         if (CollectionUtils.isEmpty(noTeacherOrNoSubjectStudent)) {
             return;
@@ -215,6 +222,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if (CollectionUtils.isEmpty(studentClassInfo)) {
             return;
         }
+        //更新学员指导老师和声部信息
         List<Student> needUpdateStudents = new ArrayList<>();
         Map<Integer, List<StudentClassInfoDto>> scm = studentClassInfo.stream().collect(Collectors.groupingBy(StudentClassInfoDto::getStudentId));
         for (Student student : noTeacherOrNoSubjectStudent) {

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

@@ -146,7 +146,7 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 	}
 
 	@Override
-	public List<VipGroupActivity> findByVipGroupCategory(Long categoryId, String organIds, Integer teacherId) {
+	public List<VipGroupActivity> findByVipGroupCategory(Long categoryId, String organIds, Integer teacherId, Integer applyToStudentType) {
 		if(Objects.isNull(categoryId)){
 			throw new BizException("请选择课程形态!");
 		}
@@ -163,7 +163,7 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 				organIds += "," + teacher.getFlowOrganRange();
 			}
 		}
-		return vipGroupActivityDao.findByCategory(categoryId,organIds);
+		return vipGroupActivityDao.findByCategory(categoryId,organIds, applyToStudentType);
 	}
 
 	@Override

+ 15 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -688,6 +688,13 @@
         SELECT * FROM student WHERE teacher_id_ IS NULL OR subject_id_list_ IS NULL OR cooperation_organ_id_ IS NULL;
     </select>
 
+    <select id="getHasVipCourseStudentIdsFromNewStudents" resultType="int">
+        SELECT DISTINCT s.user_id_
+        FROM student s
+        LEFT JOIN course_schedule_student_payment cssp ON s.user_id_=cssp.user_id_
+        WHERE s.is_new_user_=1 AND cssp.group_type_='VIP'
+    </select>
+
     <update id="updateGrade"><![CDATA[
         UPDATE student SET current_grade_num_=current_grade_num_+1
         WHERE current_grade_num_>=1
@@ -695,4 +702,12 @@
         ]]>
     </update>
 
+    <update id="updateNewStudentsToOld">
+        UPDATE student SET is_new_user_=0
+        WHERE user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </update>
+
 </mapper>

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

@@ -34,6 +34,7 @@
 		<result property="minCourseNum" column="min_course_num_"/>
 		<result property="maxCourseNum" column="max_course_num_"/>
 		<result property="studentMaxUsedTimes" column="student_max_used_times_"/>
+		<result property="applyToStudentType" column="apply_to_student_type_"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -56,10 +57,10 @@
 		INSERT INTO vip_group_activity (id_,name_,description_,vip_group_category_id_list_,start_time_,end_time_,organ_id_,courses_start_time_,courses_end_time_,type_,
 		                                attribute1_,attribute2_,attribute3_,salary_readonly_flag_,give_class_pay_salary_flag_,create_time_,update_time_,salary_settlement_json_,del_flag_,
 		                                payment_readonly_flag_,online_class_join_gradient_rewards_,offline_class_join_gradient_rewards_,min_course_num_,max_course_num_,
-										student_max_used_times_)
+										student_max_used_times_, apply_to_student_type_)
 		VALUES(#{id},#{name},#{description},#{vipGroupCategoryIdList},#{startTime},#{endTime},#{organId},#{coursesStartTime},#{coursesEndTime},#{type},#{attribute1},#{attribute2},#{attribute3},
 		       #{salaryReadonlyFlag},#{giveClassPaySalaryFlag},now(),now(),#{salarySettlementJson},#{delFlag},#{paymentReadonlyFlag},#{onlineClassJoinGradientRewards},
-		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum},#{studentMaxUsedTimes})
+		       #{offlineClassJoinGradientRewards},#{minCourseNum},#{maxCourseNum},#{studentMaxUsedTimes},#{applyToStudentType})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -138,6 +139,9 @@
 			<if test="studentMaxUsedTimes!=null">
 				student_max_used_times_=#{studentMaxUsedTimes},
 			</if>
+			<if test="applyToStudentType!=null">
+				apply_to_student_type_=#{applyToStudentType},
+			</if>
 			update_time_ = NOW(),
 		</set>WHERE id_ = #{id}
 	</update>
@@ -193,6 +197,9 @@
 			AND (end_time_ IS NULL OR NOW() BETWEEN start_time_ AND end_time_)
 			AND del_flag_=0
 			AND INTE_ARRAY(organ_id_,#{organIds})
+			<if test="applyToStudentType!=null">
+				AND apply_to_student_type_=#{applyToStudentType}
+			</if>
 	</select>
     <select id="queryNamesById" resultType="java.util.Map">
 		SELECT vga.id_ `key`,vga.name_ `value` FROM vip_group_activity vga WHERE FIND_IN_SET(vga.id_,#{activityIds}) AND vga.del_flag_=0

+ 27 - 9
mec-teacher/src/main/java/com/ym/mec/teacher/controller/VipGroupActivityController.java

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
+import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
@@ -15,6 +16,7 @@ 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.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
@@ -38,6 +40,8 @@ public class VipGroupActivityController extends BaseController {
     private SysConfigService sysConfigService;
     @Autowired
     private TeacherDao teacherDao;
+    @Autowired
+    private StudentDao studentDao;
 
     @ApiOperation(value = "新增vip课活动方案")
     @PostMapping("/addVipGroupActivity")
@@ -65,20 +69,34 @@ public class VipGroupActivityController extends BaseController {
 
     @ApiOperation(value = "根据课程类型获取对应课程活动方案")
     @GetMapping("/findByVipGroupCategory")
-    public Object findByVipGroupCategory(Long categoryId, Integer firstStudentId, boolean onlySpecialActivity){
+    public Object findByVipGroupCategory(Long categoryId, String studentIds, boolean onlySpecialActivity){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(sysUser == null){
             return failed("用户信息获取失败");
         }
-        String organIds = new String();
-        if(Objects.nonNull(firstStudentId)){
-            SysUser student = teacherDao.getUser(firstStudentId);
-            if(Objects.isNull(student)){
-                return failed("学员信息不存在");
-            }
-            organIds = student.getOrganId().toString();
+
+        if(StringUtils.isBlank(studentIds)){
+            return failed("请选择学员");
         }
-        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(categoryId, organIds, sysUser.getId());
+        List<Integer> userIds = Arrays.stream(studentIds.split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+        List<Student> students = studentDao.findByStudentIds(userIds);
+        if(CollectionUtils.isEmpty(students)||students.size()!=userIds.size()){
+            return failed("学员信息不存在");
+        }
+        long newStudentNum = students.stream().filter(s -> s.getIsNewUser()).count();
+
+        Integer applyToStudentType = null;
+        if(newStudentNum!=userIds.size()){
+            applyToStudentType = -1;
+        }
+
+        SysUser student = teacherDao.getUser(userIds.get(0));
+        if(Objects.isNull(student)){
+            return failed("学员信息不存在");
+        }
+        String organIds = student.getOrganId().toString();
+
+        List<VipGroupActivity> vipGroupActivities = vipGroupActivityService.findByVipGroupCategory(categoryId, organIds, sysUser.getId(),applyToStudentType);
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.VIP_SPECIAL_ACTIVITY_IDS);
         if(onlySpecialActivity){
             if(Objects.isNull(sysConfig)|| StringUtils.isBlank(sysConfig.getParanValue())){

+ 27 - 9
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupActivityController.java

@@ -3,9 +3,11 @@ 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.StudentDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
 import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.controller.BaseController;
@@ -17,11 +19,13 @@ 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.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -41,6 +45,8 @@ public class VipGroupActivityController extends BaseController {
 	private EmployeeDao employeeDao;
 	@Autowired
     private TeacherDao teacherDao;
+	@Autowired
+    private StudentDao studentDao;
 
     @ApiOperation(value = "新增vip课活动方案")
     @PostMapping("/addVipGroupActivity")
@@ -98,16 +104,28 @@ public class VipGroupActivityController extends BaseController {
     @ApiOperation(value = "根据课程类型获取对应课程活动方案")
     @GetMapping("/findByVipGroupCategory")
     @PreAuthorize("@pcs.hasPermissions('vipGroupActivity/findByVipGroupCategory')")
-    public Object findByVipGroupCategory(Long categoryId, Integer firstStudentId, Integer teacherId){
-        String organIds = new String();
-        if(Objects.nonNull(firstStudentId)){
-            SysUser student = teacherDao.getUser(firstStudentId);
-            if(Objects.isNull(student)){
-                return failed("学员信息不存在");
-            }
-            organIds = student.getOrganId().toString();
+    public Object findByVipGroupCategory(Long categoryId, String studentIds, Integer teacherId){
+        if(StringUtils.isBlank(studentIds)){
+            return failed("请选择学员");
+        }
+        List<Integer> userIds = Arrays.stream(studentIds.split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+        List<Student> students = studentDao.findByStudentIds(userIds);
+        if(CollectionUtils.isEmpty(students)||students.size()!=userIds.size()){
+            return failed("学员信息不存在");
+        }
+        long newStudentNum = students.stream().filter(s -> s.getIsNewUser()).count();
+
+        Integer applyToStudentType = null;
+        if(newStudentNum!=userIds.size()){
+            applyToStudentType = -1;
+        }
+
+        SysUser student = teacherDao.getUser(userIds.get(0));
+        if(Objects.isNull(student)){
+            return failed("学员信息不存在");
         }
-        return succeed(vipGroupActivityService.findByVipGroupCategory(categoryId, organIds, teacherId));
+        String organIds = student.getOrganId().toString();
+        return succeed(vipGroupActivityService.findByVipGroupCategory(categoryId, organIds, teacherId, applyToStudentType));
     }
 
 }