Browse Source

Merge branch 'zx_online_update_1218' of http://git.dayaedu.com/yonge/cooleshow into feature/1219_opt

zouxuan 7 months ago
parent
commit
f7410b5957

+ 0 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java

@@ -51,7 +51,6 @@ public class CourseRepliedController extends BaseController {
     @PostMapping(value = "/myReplied")
     public HttpResponseResult<PageInfo<MyRepliedVo>> myReplied(@RequestBody MyCourseSearch search) {
         search.setTeacherId(sysUserService.getUserId());
-        search.setCourseType(null);
         IPage<MyRepliedVo> pages = repliedService.myReplied(PageUtil.getPage(search), search);
         return succeed(PageUtil.pageInfo(pages));
     }

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveCourseGroupDto.java

@@ -76,9 +76,9 @@ public class LiveCourseGroupDto implements Serializable {
     @ApiModelProperty(value = "最少成课人数")
     private Integer mixStudentNum;
 
-    @NotNull(message = "最成课人数不能为空")
-    @Positive(message = "最成课人数必须大于0")
-    @ApiModelProperty(value = "最成课人数")
+    @NotNull(message = "最成课人数不能为空")
+    @Positive(message = "最成课人数必须大于0")
+    @ApiModelProperty(value = "最成课人数")
     private Integer maxStudentNum;
 
     @ApiModelProperty(value = "课程类型")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MyCourseSearch.java

@@ -48,7 +48,7 @@ public class MyCourseSearch extends QueryInfo {
     private String endDate;
 
     @ApiModelProperty(value = "课程类型")
-    private String courseType = "PRACTICE";
+    private String courseType;
 
     @ApiModelProperty(value = "考勤状态 , false:未考勤 true:已考勤")
     private Boolean attendanceStatus;

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -20,6 +20,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import org.apache.ibatis.annotations.Param;
 import org.redisson.api.RMap;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -270,6 +271,9 @@ public interface CourseGroupService extends IService<CourseGroup> {
      */
     CourseGroupInfoVo selectLiveGroupInfo(Long groupId);
 
+    @Transactional
+    void closeCourseGroup(CourseGroup courseGroup);
+
     /**
      * 课程组管理-琴房课
      *

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

@@ -35,6 +35,7 @@ import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.string.MessageFormatter;
 import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.payment.core.util.SpringBeansUtil;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
@@ -1526,59 +1527,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         }
         courseGroupList.forEach(courseGroup -> {
             try {
-                List<CourseScheduleStudentPayment> list = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
-                                           .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())) {
-                    //人数达标则修改课程组为进行中状态
-                    courseGroup.setStatus(CourseGroupEnum.ING.getCode());
-                    List<Long> noGroupJoinUserIds = Lists.newArrayList();
-                    //创建群聊 并添加人员到群中
-                    String imGroupId = imGroupService.autoCreate(courseGroup.getId(), courseGroup.getType(), noGroupJoinUserIds);
-
-                    // 排除未进群的学生
-                    if (CollectionUtils.isNotEmpty(noGroupJoinUserIds)) {
-                        noGroupJoinUserIds.forEach(userIds::remove);
-                    }
-                    // 更新已进群用户身份
-                    imGroupMemberService.initGroupMembers(imGroupId, userIds, ImGroupMemberRoleType.STUDENT);
-                    //添加老师进群
-                    imGroupMemberService.initGroupMembers(imGroupId, Collections.singleton(courseGroup.getTeacherId()), ImGroupMemberRoleType.TEACHER);
-                    courseGroup.setImGroupId(imGroupId);
-
-                    // 小组课成课推送
-                    if (courseGroup.getType().equals(CourseScheduleEnum.GROUP.getCode())) {
-                        // 极光-消息推送-老师端-通知老师小组课程组成课
-                        sendGroupSuccessMessage(courseGroup,true);
-                    }
-                } else {
-                    //人数未达标则修改课程组为取消状态
-                    courseGroup.setStatus(CourseGroupEnum.CANCEL.getCode());
-                    //更新课程组下课程状态为取消
-                    courseScheduleService.update(Wrappers.<CourseSchedule>lambdaUpdate()
-                            .eq(CourseSchedule::getCourseGroupId, courseGroup.getId())
-                            .set(CourseSchedule::getStatus, CourseScheduleEnum.CANCEL.getCode())
-                    );
-
-                    //退款
-                    this.refund(courseGroup);
-
-                    // 小组课成课推送
-                    if (courseGroup.getType().equals(CourseScheduleEnum.GROUP.getCode())) {
-
-                        // 极光-消息推送-老师端-通知老师小组课程组成课
-                        sendGroupSuccessMessage(courseGroup,false);
-                    } else {
-                        // 老师直播课成课失败发送消息
-                        this.sendMessage(courseGroup);
-
-                        // 学生直播课成课失败发送消息
-                        this.sendStudentMessage(userIds, courseGroup);
-                    }
-
-                }
-                courseGroup.setUpdatedTime(new Date());
-                this.updateById(courseGroup);
+                Objects.requireNonNull(SpringBeansUtil.getBean(CourseGroupService.class)).closeCourseGroup(courseGroup);
             } catch (Exception e) {
                 log.error("closeCourseGroup error >>> courseGroup: {} ", JSON.toJSONString(courseGroup));
                 log.error("closeCourseGroup error >>> ", e);
@@ -1586,6 +1535,70 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         });
     }
 
+    @Transactional
+    @Override
+    public void closeCourseGroup(CourseGroup courseGroup) {
+        try {
+            List<CourseScheduleStudentPayment> list = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                                       .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())) {
+                //人数达标则修改课程组为进行中状态
+                courseGroup.setStatus(CourseGroupEnum.ING.getCode());
+                List<Long> noGroupJoinUserIds = Lists.newArrayList();
+                //创建群聊 并添加人员到群中
+                String imGroupId = imGroupService.autoCreate(courseGroup.getId(), courseGroup.getType(), noGroupJoinUserIds);
+
+                // 排除未进群的学生
+                if (CollectionUtils.isNotEmpty(noGroupJoinUserIds)) {
+                    noGroupJoinUserIds.forEach(userIds::remove);
+                }
+                // 更新已进群用户身份
+                imGroupMemberService.initGroupMembers(imGroupId, userIds, ImGroupMemberRoleType.STUDENT);
+                //添加老师进群
+                imGroupMemberService.initGroupMembers(imGroupId, Collections.singleton(courseGroup.getTeacherId()), ImGroupMemberRoleType.TEACHER);
+                courseGroup.setImGroupId(imGroupId);
+
+                // 小组课成课推送
+                if (courseGroup.getType().equals(CourseScheduleEnum.GROUP.getCode())) {
+                    // 极光-消息推送-老师端-通知老师小组课程组成课
+                    sendGroupSuccessMessage(courseGroup,true);
+                }
+            } else {
+                //人数未达标则修改课程组为取消状态
+                courseGroup.setStatus(CourseGroupEnum.CANCEL.getCode());
+                //更新课程组下课程状态为取消
+                courseScheduleService.update(Wrappers.<CourseSchedule>lambdaUpdate()
+                        .eq(CourseSchedule::getCourseGroupId, courseGroup.getId())
+                        .set(CourseSchedule::getStatus, CourseScheduleEnum.CANCEL.getCode())
+                );
+
+                //退款
+                this.refund(courseGroup);
+
+                // 小组课成课推送
+                if (courseGroup.getType().equals(CourseScheduleEnum.GROUP.getCode())) {
+
+                    // 极光-消息推送-老师端-通知老师小组课程组成课
+                    sendGroupSuccessMessage(courseGroup,false);
+                } else {
+                    // 老师直播课成课失败发送消息
+                    this.sendMessage(courseGroup);
+
+                    // 学生直播课成课失败发送消息
+                    this.sendStudentMessage(userIds, courseGroup);
+                }
+
+            }
+            courseGroup.setUpdatedTime(new Date());
+            this.updateById(courseGroup);
+        } catch (Exception e) {
+            log.error("closeCourseGroup error >>> courseGroup: {} ", JSON.toJSONString(courseGroup));
+            log.error("closeCourseGroup error >>> ", e);
+            throw new BizException("课程状态更新失败");
+        }
+    }
+
     private void sendGroupSuccessMessage(CourseGroup courseGroup,boolean success) {
         // 老师
         SysUser sysUser = sysUserService.getByUserId(courseGroup.getTeacherId());

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

@@ -487,13 +487,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
      * @param courseScheduleId 课程id
      */
     private void checkCourseSchedule(Long courseScheduleId) {
-        // 1. 检查课程类型
         CourseSchedule courseSchedule = courseScheduleService.getById(courseScheduleId);
-        if (!CourseScheduleEnum.PRACTICE.getCode().equals(courseSchedule.getType())
-                && !CourseScheduleEnum.VIP.getCode().equals(courseSchedule.getType())
-                && !CourseScheduleEnum.PIANO_ROOM_CLASS.getCode().equals(courseSchedule.getType())) {
-            throw new BizException("不能布置课后作业");
-        }
         // 2. 检查课程结束
         if (!CourseScheduleEnum.COMPLETE.getCode().equals(courseSchedule.getStatus())) {
             throw  new BizException("课程未正常完成,不能布置课后作业");

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

@@ -2888,7 +2888,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         List<LiveCourseInfoVo.PlanVo> planVos = coursePlanService.queryCoursePlanByGroupId(courseGroup.getId());
         Map<Long, LiveCourseInfoVo.PlanVo> planMap = new HashMap<>();
         if(CollectionUtils.isNotEmpty(planVos)){
-            planMap = planVos.stream().collect(Collectors.toMap(LiveCourseInfoVo.PlanVo::getId, Function.identity()));
+            planMap = planVos.stream().collect(Collectors.toMap(LiveCourseInfoVo.PlanVo::getCourseId, Function.identity()));
         }
         for (CourseSchedule courseSchedule : courseSchedules) {
             CourseScheduleWrapper.MyCourseVo courseVo = new CourseScheduleWrapper.MyCourseVo();
@@ -2990,6 +2990,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> userMap = sysUserService.getMapByIds(teacherIds);
         List<CourseScheduleWrapper.StudentCourseList> courseVos = Lists.newArrayList();
         CourseGroup courseGroup = courseGroupService.lambdaQuery().eq(CourseGroup::getId, query.getCourseGroupId()).one();
+        List<LiveCourseInfoVo.PlanVo> planVos = coursePlanService.queryCoursePlanByGroupId(courseGroup.getId());
+        Map<Long, LiveCourseInfoVo.PlanVo> planMap = new HashMap<>();
+        if(CollectionUtils.isNotEmpty(planVos)){
+            planMap = planVos.stream().collect(Collectors.toMap(LiveCourseInfoVo.PlanVo::getCourseId, Function.identity()));
+        }
         Subject subject = subjectService.get(courseGroup.getSubjectId());
         for (CourseSchedule courseSchedule : courseSchedules) {
             CourseScheduleWrapper.StudentCourseList courseVo = new CourseScheduleWrapper.StudentCourseList();
@@ -3002,6 +3007,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             courseVo.setCourseGroupName(courseGroup.getName() + "-第" + courseSchedule.getClassNum() + "课");
             courseVo.setSubjectId(courseGroup.getSubjectId());
             courseVo.setSubjectName(subject.getName());
+            LiveCourseInfoVo.PlanVo planVo = planMap.get(courseSchedule.getId());
+            if(planVo != null){
+                courseVo.setCoursePlan(planVo.getPlan());
+            }
             if(query.getAttendanceStatus() == null){
                 courseVo.setAttendanceStatus(attendanceMap.getOrDefault(courseSchedule.getId(),false));
             }else {

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

@@ -439,9 +439,6 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         imGroup.setName(courseGroup.getName());
         imGroup.setType(ImGroupType.COURSE);
         imGroup.setImg(sysConfigService.findConfigValue(SysConfigConstant.ICON_COURSE_GROUP_DEFAULT));
-        if (courseGroup.getType().equals(CourseScheduleEnum.GROUP.name())) {
-            imGroup.setImg(sysConfigService.findConfigValue(SysConfigConstant.GOOD_LOGO_GROUP));
-        }
         imGroup.setCreateTime(now);
         imGroup.setUpdateTime(now);
 //        String imGroupId = UUID.randomUUID() + imGroup.getType().getCode();

+ 7 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -327,14 +327,14 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             }
             userOrderDetailVos.forEach(o -> {
                 if (StringUtils.isNotBlank(o.getDiscountJson())) {
-                    Map<String,BigDecimal> decimalMap = JSON.parseObject(o.getDiscountJson(), Map.class);
-                    BigDecimal bigDecimal = decimalMap.get(EDiscountType.DISCOUNT.name());
-                    if (bigDecimal != null) {
-                        userOrderVo.setCardDiscountPrice(userOrderVo.getCardDiscountPrice().add(bigDecimal));
+                    JSONObject decimalMap = JSON.parseObject(o.getDiscountJson(), JSONObject.class);
+                    Object bigDecimal = decimalMap.get(EDiscountType.DISCOUNT.name());
+                    if (bigDecimal !=null) {
+                        userOrderVo.setCardDiscountPrice(userOrderVo.getCardDiscountPrice().add(new BigDecimal(bigDecimal.toString())));
                     }
-                    BigDecimal couponDecimal = decimalMap.get(EDiscountType.COUPON.name());
-                    if (couponDecimal != null) {
-                        userOrderVo.setDiscountPrice(userOrderVo.getDiscountPrice().add(couponDecimal));
+                    Object couponDecimal = decimalMap.get(EDiscountType.COUPON.name());
+                    if (couponDecimal!=null) {
+                        userOrderVo.setDiscountPrice(userOrderVo.getDiscountPrice().add(new BigDecimal(couponDecimal.toString())));
                     }
                 }
             });

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/course/CourseScheduleWrapper.java

@@ -120,6 +120,9 @@ public class CourseScheduleWrapper {
 
         @ApiModelProperty(value = "IM聊天用户ID")
         private String imUserId;
+
+        @ApiModelProperty(value = "课程规划")
+        private String coursePlan;
     }
 
 

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

@@ -353,7 +353,7 @@
             <if test="param.status != null">
                 <choose>
                     <when test="param.status == @com.yonge.cooleshow.biz.dal.enums.StudentCourseEnum@TRUANT">
-                        and sa.id_ is null
+                        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
@@ -589,6 +589,9 @@
         <if test="param.startTime != null">
             AND cs.start_time_ &lt;= #{param.startTime}
         </if>
+        <if test="param.search != null and param.search != ''">
+            AND cs.id_ = #{param.search}
+        </if>
         <if test="param.endTime != null">
             AND cs.end_time_ &gt;= #{param.endTime}
         </if>

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -612,7 +612,7 @@
                     AND cs.status_ = 'NOT_START'
                 </if>
                 <if test="param.courseState == 'ING'">
-                    AND cs.status_ = 'ING'
+                    AND cs.status_ != 'NOT_START' AND g.status_ = 'ING'
                 </if>
             </if>
             <if test="param.search != null and param.search != ''">