Browse Source

Merge branch 'zx_online_update_1218' into test

刘俊驰 7 months ago
parent
commit
f7cbf6d099

+ 26 - 9
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java

@@ -1,11 +1,14 @@
 package com.yonge.cooleshow.admin.controller;
 
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkAdminSearch;
+import com.yonge.cooleshow.biz.dal.entity.StudentCourseHomework;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.service.StudentCourseHomeworkService;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
+import com.yonge.cooleshow.biz.dal.wrapper.HomeworkWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
@@ -14,15 +17,10 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
@@ -32,12 +30,15 @@ import java.util.List;
 @Api(value = "课程作业表", tags = "课程作业表")
 public class CourseHomeworkController extends BaseController {
 
-    @Autowired
+    @Resource
     private CourseHomeworkService courseHomeworkService;
 
-	@Autowired
+	@Resource
 	private CourseScheduleService courseScheduleService;
 
+	@Resource
+	private StudentCourseHomeworkService studentCourseHomeworkService;
+
 	@ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
 	@PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
 	@PreAuthorize("@pcs.hasPermissions('homework/list')")
@@ -71,4 +72,20 @@ public class CourseHomeworkController extends BaseController {
 		courseScheduleService.sendTodayNotRepliedAndNotDecorateHomework();
 		return HttpResponseResult.succeed();
 	}
+
+	//课程组关联的作业列表
+	@ApiOperation(value = "课程组关联的作业列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+	@PostMapping(value = "/groupList", consumes = "application/json", produces = "application/json")
+	@PreAuthorize("@pcs.hasPermissions('homework/groupList')")
+	public HttpResponseResult<List<HomeworkWrapper.GroupHomework>> groupList(@RequestBody HomeworkWrapper.GroupHomeworkSearch query) {
+		return succeed(courseHomeworkService.groupList(query));
+	}
+
+	//根据作业编号,获取学员作业列表
+	@ApiOperation(value = "根据作业编号,获取学员作业列表")
+	@GetMapping(value = "/studentList")
+	@PreAuthorize("@pcs.hasPermissions('homework/studentList')")
+	public HttpResponseResult<List<StudentCourseHomework>> studentList(Long homeworkId) {
+		return succeed(studentCourseHomeworkService.lambdaQuery().eq(StudentCourseHomework::getId, homeworkId).list());
+	}
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseHomeworkDao.java

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseScheduleHomeworkVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeworkVo;
+import com.yonge.cooleshow.biz.dal.wrapper.HomeworkWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -120,4 +121,6 @@ public interface CourseHomeworkDao extends BaseMapper<CourseHomework> {
 	 * @return
 	 */
 	List<CourseHomeworkVo> selectAbsenteeism(@Param("practiceRecord") List<Long> practiceRecord, @Param("studentId") Long studentId);
+
+    List<HomeworkWrapper.GroupHomework> selectGroupHomeworkList(@Param("param") HomeworkWrapper.GroupHomeworkSearch query);
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseHomeworkService.java

@@ -12,6 +12,9 @@ import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseScheduleHomeworkVo;
+import com.yonge.cooleshow.biz.dal.wrapper.HomeworkWrapper;
+
+import java.util.List;
 
 /**
  * 课程作业表 服务类
@@ -82,4 +85,6 @@ public interface CourseHomeworkService extends IService<CourseHomework>  {
 	 * @return
 	 */
 	CourseScheduleHomeworkVo getCourseHomeworkDetailByCourseId(CourseScheduleHomeworkSearch query);
+
+    List<HomeworkWrapper.GroupHomework> groupList(HomeworkWrapper.GroupHomeworkSearch query);
 }

+ 0 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -1600,9 +1600,6 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                 .eq(CourseScheduleStudentPayment::getCourseGroupId, courseGroup.getId()));
         Set<Long> userIds = list.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toSet());
 
-        if (courseGroup.getPreStudentNum() < courseGroup.getMixStudentNum() || !courseGroup.getStatus().equals(CourseGroupEnum.APPLY.getCode())) {
-            return;
-        }
         //人数达标则修改课程组为进行中状态
         courseGroup.setStatus(CourseGroupEnum.ING.getCode());
         List<Long> noGroupJoinUserIds = Lists.newArrayList();

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java

@@ -25,6 +25,7 @@ import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseScheduleHomeworkVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeworkVo;
 import com.yonge.cooleshow.biz.dal.wordfilter.WordFilter;
+import com.yonge.cooleshow.biz.dal.wrapper.HomeworkWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
@@ -481,6 +482,11 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
 
     }
 
+    @Override
+    public List<HomeworkWrapper.GroupHomework> groupList(HomeworkWrapper.GroupHomeworkSearch query) {
+        return baseMapper.selectGroupHomeworkList(query);
+    }
+
     /**
      * 检查课程能否布置作业
      *

+ 22 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -1161,6 +1161,18 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
+     * 批量检查学生课时在数据库是否重复
+     *
+     * @param studentIds 老师id
+     * @param timeList  时间集合
+     */
+    private <T> void batchCheckStudentCourseTime(List<Long> studentIds, List<T> timeList, Function<T, Date> startTimeFun, Function<T, Date> endTimeFun) {
+        for (Long studentId : studentIds) {
+            batchCheckStudentCourseTime(studentId, timeList, startTimeFun, endTimeFun);
+        }
+    }
+
+    /**
      * @Description: 趣纠课购买记录
      * @Author: cy
      * @Date: 2022/5/16
@@ -1466,9 +1478,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         }
 
         //查询是否有人购买
-        CourseScheduleStudentPayment studentPayment = paymentDao.selectOne(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
-                .eq(CourseScheduleStudentPayment::getCourseId, courseId));
-        if (ObjectUtil.isEmpty(studentPayment)) {
+        List<CourseScheduleStudentPayment> studentPayments = paymentDao.queryByCourseId(courseId.longValue());
+        if (CollectionUtils.isEmpty(studentPayments)) {
             throw new BizException("课程无人购买");
         }
 
@@ -1494,21 +1505,21 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //校验老师课程是否冲突
         this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getFreeEndTime);
         //校验学生课程是否冲突
-        this.batchCheckStudentCourseTime(studentPayment.getUserId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
-
+        List<Long> studentIds = studentPayments.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
+        this.batchCheckStudentCourseTime(studentIds, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
         baseMapper.courseAdjust(adjustVo);
-
         // 课程调整后给学生发消息
-        sendCourseAdjustMessage(teacherId,studentPayment.getUserId(),adjustVo.getCourseId(),adjustVo.getStartTime(),oldStartTime);
+        sendCourseAdjustMessage(teacherId,studentIds,adjustVo.getCourseId(),adjustVo.getStartTime(),oldStartTime);
     }
 
+
     //{老师昵称}已将{课程类型趣纠课、琴房课}{课程名称}课调整到{上课时间yyyy-MM-dd HH:mm:ss},请注意查看
-    private void sendCourseAdjustMessage(Long teacherId,Long studentId,Integer courseScheduleId,Date date,Date oldStartTime) {
+    private void sendCourseAdjustMessage(Long teacherId,List<Long> studentIds,Integer courseScheduleId,Date date,Date oldStartTime) {
         //  趣纠课调整模板
         try {
             //  发送消息
             SysUser teacher = sysUserService.getByUserId(teacherId);
-            SysUser student = sysUserService.getByUserId(studentId);
+            List<com.yonge.cooleshow.biz.dal.entity.SysUser> sysUsers = sysUserService.getDao().selectBatchIds(studentIds);
 
             CourseSchedule courseSchedule = this.getById(courseScheduleId);
             CourseGroup courseGroup = courseGroupService.getById(courseSchedule.getCourseGroupId());
@@ -1524,8 +1535,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             }else if(CourseTypeEnum.valueOf(courseGroup.getType()) == CourseTypeEnum.GROUP){
                 messageType = MessageTypeEnum.GROUP_ADJUST;
             }
-            Map<Long, String> receivers = new HashMap<>();
-            receivers.put(studentId, student.getPhone());
+            Map<Long, String> receivers = sysUsers.stream()
+                    .collect(Collectors.toMap(com.yonge.cooleshow.biz.dal.entity.SysUser::getId, com.yonge.cooleshow.biz.dal.entity.SysUser::getPhone));
 //            String url = sysMessageService.selectConfigUrl(MessageTypeEnum.PRACTICE_ADJUST.getCode(),courseSchedule.getId());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
                     messageType,

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java

@@ -640,7 +640,10 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 
             saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
         }
-        courseGroupService.groupSuccess(courseGroupService.getById(courseGroup.getId()));
+        CourseGroup group = courseGroupService.getById(courseGroup.getId());
+        if (group.getType().equals(CourseScheduleEnum.GROUP.name()) && Objects.equals(group.getMaxStudentNum(), group.getPreStudentNum()) &&group.getStatus().equals(CourseGroupEnum.APPLY.getCode())) {
+            courseGroupService.groupSuccess(group);
+        }
         log.info("buyLiveCourseSuccess ok");
         //课程购买成功后进行消息推送
 

+ 64 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/HomeworkWrapper.java

@@ -0,0 +1,64 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.yonge.cooleshow.biz.dal.entity.SysUser;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+public class HomeworkWrapper {
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("课程组作业")
+    public static class GroupHomework implements Serializable {
+        @ApiModelProperty("作业编号")
+        private Long homeworkId;
+
+        @ApiModelProperty("课程编号")
+        private Long courseId;
+
+        @ApiModelProperty("课次")
+        private Integer classNum;
+
+        @ApiModelProperty("作业内容")
+        private String content;
+
+        @ApiModelProperty("总人数")
+        private Integer studentNum;
+
+        @ApiModelProperty("提交人数")
+        private Integer completedNum;
+
+        @ApiModelProperty("点评数")
+        private Integer repliedNum;
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("课程组作业")
+    public static class GroupHomeworkSearch implements Serializable {
+
+        @ApiModelProperty("作业内容/课程编号")
+        private String search;
+
+        @ApiModelProperty("课程组编号")
+        private Long courseGroupId;
+    }
+}

+ 4 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -343,10 +343,10 @@
         cssp.order_no_ as orderNo,
         sa.id_ as studentAttendanceId
         from course_schedule cs
-        left join course_schedule_student_payment cssp on cs.id_ = cssp.course_id_
-        left join student_attendance sa on cssp.course_id_ = sa.course_schedule_id_
+        left join course_schedule_student_payment cssp on cs.id_ = cssp.course_id_ and #{param.studentId} = cssp.user_id_
+        left join student_attendance sa on cs.id_ = sa.course_schedule_id_ and #{param.studentId} = sa.student_id_
         <where>
-            cs.status_ !=  '${@ com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum@CANCEL}'
+            cs.status_ !=  '${@com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum@CANCEL}'
             <if test="param.studentId != null">
                 and cssp.user_id_ = #{param.studentId}
             </if>
@@ -356,8 +356,7 @@
                         and sa.id_ is null AND cs.status_ IN ('ING','COMPLETE')
                     </when>
                     <when test="param.status == @com.yonge.cooleshow.biz.dal.enums.StudentCourseEnum@ATTENDCLASS">
-                        and sa.id_ is not null
-                        and #{param.studentId} = sa.student_id_
+                        and sa.id_ is not null and #{param.studentId} = sa.student_id_
                     </when>
                     <when test="param.status == @com.yonge.cooleshow.biz.dal.enums.StudentCourseEnum@NOTSTART">
                         and cs.status_ = '${@ com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum@NOT_START}'

+ 15 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml

@@ -396,4 +396,19 @@
             </if>
         </where>
     </select>
+    <select id="selectGroupHomeworkList"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.HomeworkWrapper$GroupHomework">
+        select ch.id_ homeworkId,ch.course_schedule_id_ courseId,cs.class_num_ classNum,ch.content_ content,
+               ch.completed_num_ completedNum,cg.pre_student_num_ studentNum,
+               COUNT(CASE WHEN sch.id_ IS NULL OR sch.teacher_replied_ IS NULL THEN NULL ELSE 1 END) repliedNum
+        from course_homework ch
+                 left join course_schedule cs ON cs.id_ = ch.course_schedule_id_
+                 left join student_course_homework sch ON sch.course_homework_id_ = ch.id_
+                 left join course_group cg ON cg.id_ = ch.course_group_id_
+        WHERE ch.course_group_id_ = #{param.courseGroupId}
+        <if test="param.search != null and param.search != ''">
+            AND (ch.course_schedule_id_ = #{param.search} OR ch.content_ LIKE CONCAT('%',#{param.search},'%'))
+        </if>
+        GROUP BY ch.id_ ORDER BY cs.class_num_
+    </select>
 </mapper>