Selaa lähdekoodia

修改老师端陪练课详情,绑定接口

Pq 3 vuotta sitten
vanhempi
commit
1f04cc40a3
20 muutettua tiedostoa jossa 667 lisäystä ja 30 poistoa
  1. 5 1
      BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.java
  2. 2 7
      BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java
  3. 4 4
      BaseLibrary/src/main/java/com/cooleshow/base/utils/GlideUtils.kt
  4. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_close_dialog.png
  5. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_close_dialog.png
  6. 16 0
      BaseLibrary/src/main/res/values/styles.xml
  7. 37 0
      teacher/src/main/java/com/cooleshow/teacher/api/APIService.java
  8. 47 0
      teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseCommentBean.java
  9. 3 3
      teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseListBean.java
  10. 18 0
      teacher/src/main/java/com/cooleshow/teacher/contract/SparringCourseDetailContract.java
  11. 128 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/course/SparringCourseDetailPresenter.java
  12. 144 7
      teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseDetailActivity.java
  13. 6 1
      teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseFragment.java
  14. 121 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/CourseSetCommentDialog.java
  15. 20 4
      teacher/src/main/res/layout/activity_sparring_course_detail_layout.xml
  16. 95 0
      teacher/src/main/res/layout/dialog_set_course_comment_layout.xml
  17. 1 0
      teacher/src/main/res/values/strings.xml
  18. 16 1
      usercenter/src/main/java/com/cooleshow/usercenter/helper/UserHelper.java
  19. 3 1
      usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/VerifyCodeInputActivity.java
  20. 1 1
      usercenter/src/main/res/values/strings.xml

+ 5 - 1
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.java

@@ -7,6 +7,7 @@ import android.widget.TextView;
 
 import com.cooleshow.base.R;
 import com.cooleshow.base.common.AppManager;
+import com.cooleshow.base.data.net.ApiException;
 import com.cooleshow.base.presenter.view.BaseView;
 import com.cooleshow.base.utils.ToastUtils;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
@@ -82,7 +83,10 @@ public abstract class BaseActivity<V extends ViewBinding> extends RxAppCompatAct
 
     @Override
     public void onError(@NonNull Throwable throwable) {
-        ToastUtils.showShort("onError:+" + throwable.getMessage());
+        if (throwable instanceof ApiException) {
+            ApiException apiException = (ApiException) throwable;
+            ToastUtils.showShort("onError:" + apiException.getErrmsg());
+        }
     }
 
     public V getViewBinding() {

+ 2 - 7
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java

@@ -7,9 +7,9 @@ import androidx.viewbinding.ViewBinding;
 public abstract class BaseMVPActivity<V extends ViewBinding, P extends BasePresenter> extends BaseActivity<V> {
     protected P presenter;
 
-
     @Override
-    protected void initView() {
+    public void initData() {
+        super.initData();
         presenter = createPresenter();
         // presenter 绑定 view
         if (presenter != null) {
@@ -17,11 +17,6 @@ public abstract class BaseMVPActivity<V extends ViewBinding, P extends BasePrese
         }
     }
 
-    @Override
-    public void initData() {
-        super.initData();
-    }
-
     protected abstract P createPresenter();
 
     @Override

+ 4 - 4
BaseLibrary/src/main/java/com/cooleshow/base/utils/GlideUtils.kt

@@ -12,22 +12,22 @@ import com.cooleshow.base.R
     Glide工具类
  */
 object GlideUtils {
-    fun loadImage(context: Context, url: String, imageView: ImageView) {
+    fun loadImage(context: Context, url: String?, imageView: ImageView) {
         Glide.with(context).load(url).centerCrop().into(imageView)
     }
 
-    fun loadImage(context: Context, url: String, imageView: ImageView,defaultDrawable : Int) {
+    fun loadImage(context: Context, url: String?, imageView: ImageView,defaultDrawable : Int) {
         Glide.with(context).load(url).placeholder(defaultDrawable).into(imageView)
     }
 
-    fun loadImageFitCenter(context: Context, url: String, imageView: ImageView) {
+    fun loadImageFitCenter(context: Context, url: String?, imageView: ImageView) {
         Glide.with(context).load(url).fitCenter().into(imageView)
     }
 
     /*
         当fragment或者activity失去焦点或者destroyed的时候,Glide会自动停止加载相关资源,确保资源不会被浪费
      */
-    fun loadUrlImage(context: Context, url: String, imageView: ImageView){
+    fun loadUrlImage(context: Context, url: String?, imageView: ImageView){
 //        Glide.with(context).load(url).placeholder(R.drawable.icon_back).error(R.drawable.icon_back).centerCrop().into(
 //                object : SimpleTarget<GlideDrawable>() {
 //                    override fun onResourceReady(resource: GlideDrawable,

BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_close_dialog.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_close_dialog.png


+ 16 - 0
BaseLibrary/src/main/res/values/styles.xml

@@ -244,4 +244,20 @@
         <item name="android:windowEnterAnimation">@anim/top_enter_anim</item>
         <item name="android:windowExitAnimation">@anim/top_exit_anim</item>
     </style>
+
+    <style name="DialogStyle" parent="@android:style/Theme.Dialog">
+        <!-- 背景透明 -->
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <!-- 浮于Activity之上 -->
+        <item name="android:windowIsFloating">true</item>
+        <!-- 边框 -->
+        <item name="android:windowFrame">@null</item>
+        <!-- Dialog以外的区域模糊效果 -->
+        <item name="android:backgroundDimEnabled">true</item>
+        <!-- 无标题 -->
+        <item name="android:windowNoTitle">true</item>
+        <!-- 半透明 -->
+        <item name="android:windowIsTranslucent">true</item>
+    </style>
 </resources>

+ 37 - 0
teacher/src/main/java/com/cooleshow/teacher/api/APIService.java

@@ -3,6 +3,7 @@ package com.cooleshow.teacher.api;
 import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.teacher.bean.CourseTableDataBean;
 import com.cooleshow.teacher.bean.LiveCourseListBean;
+import com.cooleshow.teacher.bean.SparringCourseCommentBean;
 import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
 import com.cooleshow.teacher.bean.TeacherUserInfo;
@@ -63,6 +64,42 @@ public interface APIService {
     @GET(TEACHER_GROUP + "homework/detail/{courseId}")
     Observable<BaseResponse<SparringCourseHomeworkBean>> getSparringCourseHomework(@Path("courseId") String courseId);
 
+
+    /**
+     * 查询课程评价信息
+     *
+     * @param
+     * @return
+     */
+    @POST(TEACHER_GROUP + "courseReplied/selectReplied")
+    Observable<BaseResponse<SparringCourseCommentBean>> getSparringCourseComment(@Body RequestBody body);
+
+    /**
+     * 提交陪练课老师评价
+     *
+     * @param
+     * @return
+     */
+    @POST(TEACHER_GROUP + "courseReplied/replied")
+    Observable<BaseResponse<Object>> submitSparringCourseComment(@Body RequestBody body);
+
+    /**
+     * 提交陪练课老师布置作业
+     *
+     * @param
+     * @return
+     */
+    @POST(TEACHER_GROUP + "homework/decorate")
+    Observable<BaseResponse<Object>> submitSparringCourseHomework(@Body RequestBody body);
+
+    /**
+     * 提交陪练课老师作业点评
+     *
+     * @param
+     * @return
+     */
+    @POST(TEACHER_GROUP + "homework/review")
+    Observable<BaseResponse<Object>> submitSparringCourseHomeworkComment(@Body RequestBody body);
     /**
      * 查询直播课
      *

+ 47 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseCommentBean.java

@@ -0,0 +1,47 @@
+package com.cooleshow.teacher.bean;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+public class SparringCourseCommentBean {
+
+    /**
+     * status : COMPLETE
+     * userName : cy
+     * startTime : 2022-03-26 11:24:53
+     * endTime : 2022-03-26 12:24:57
+     * avatar : https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
+     * subjectId : 1
+     * subjectName : 西洋管乐
+     * classDate : 2022-03-26
+     * updateTime : 2022-04-20 16:49:58
+     * studentId : 44
+     * courseGroupId : 1
+     * courseGroupType : PRACTICE
+     * courseScheduleId : 1
+     * score : 4
+     * teacherReplied : Gaggagagagagagagagagagagagagagagagagagagaga
+     * createTime : 2022-04-14 11:40:25
+     * studentReplied : Gagagagagagagag
+     * id : 19
+     */
+
+    public String status;
+    public String userName;
+    public String startTime;
+    public String endTime;
+    public String avatar;
+    public int subjectId;
+    public String subjectName;
+    public String classDate;
+    public String updateTime;
+    public int studentId;
+    public String courseGroupId;
+    public String courseGroupType;
+    public int courseScheduleId;
+    public int score;
+    public String teacherReplied;
+    public String createTime;
+    public String studentReplied;
+    public int id;
+}

+ 3 - 3
teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseListBean.java

@@ -86,7 +86,7 @@ public class SparringCourseListBean {
 
         public String avatar;
         public String classDate;
-        public int courseGoupId;
+        public String courseGoupId;
         public String courseId;
         public String endTime;
         public int id;
@@ -95,7 +95,7 @@ public class SparringCourseListBean {
         public String status;
         public int subjectId;
         public String subjectName;
-        public int userId;
-        public String userName;
+        public String userId;//学生ID
+        public String userName;//学生名称
     }
 }

+ 18 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/SparringCourseDetailContract.java

@@ -1,6 +1,7 @@
 package com.cooleshow.teacher.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.SparringCourseCommentBean;
 import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
 
@@ -11,10 +12,27 @@ public interface SparringCourseDetailContract {
 
     interface SparringCourseDetailView extends BaseView {
         void getSparringCourseHomeworkSuccess(SparringCourseHomeworkBean homeworkBean);
+
         void getSparringCourseHomeworkError();
+
+        void getSparringCourseCommentSuccess(SparringCourseCommentBean commentBean);
+
+        void getSparringCourseCommentError();
+
+        void submitSparringCourseTeacherCommentSuccess();
+        void submitSparringCourseHomeworkSuccess();
+        void submitSparringCourseHomeworkCommentSuccess();
     }
 
     interface Presenter {
         void getSparringCourseHomework(String courseId);
+
+        void getSparringCourseComment(String courseScheduleId, String courseGroupId, String studentId);
+
+        void submitSparringCourseComment(String commentContent, String courseScheduleId, String courseGroupId, String studentId);
+
+        void submitSparringCourseHomework(String commentContent, String courseScheduleId);
+
+        void submitSparringCourseHomeworkComment(String commentContent, String courseScheduleId);
     }
 }

+ 128 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/course/SparringCourseDetailPresenter.java

@@ -4,6 +4,7 @@ import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
 import com.cooleshow.base.utils.RequestBodyUtil;
 import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.SparringCourseCommentBean;
 import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
 import com.cooleshow.teacher.contract.SparringCourseDetailContract;
@@ -38,4 +39,131 @@ public class SparringCourseDetailPresenter extends BasePresenter<SparringCourseD
             }
         });
     }
+
+    @Override
+    public void getSparringCourseComment(String courseScheduleId, String courseGroupId, String studentId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("courseGroupId", courseGroupId);
+            jsonObject.putOpt("studentId", studentId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).getSparringCourseComment(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<SparringCourseCommentBean>(getView()) {
+            @Override
+            protected void onSuccess(SparringCourseCommentBean data) {
+                if (getView() != null) {
+                    getView().getSparringCourseCommentSuccess(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+                    getView().getSparringCourseCommentError();
+                }
+            }
+        });
+    }
+
+    /**
+     * 提交陪练课老师评价
+     *
+     * @param commentContent
+     * @param courseScheduleId
+     * @param courseGroupId
+     * @param studentId
+     */
+    @Override
+    public void submitSparringCourseComment(String commentContent, String courseScheduleId, String courseGroupId, String studentId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("teacherReplied", commentContent);
+            jsonObject.putOpt("courseGroupId", courseGroupId);
+            jsonObject.putOpt("studentId", studentId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).submitSparringCourseComment(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<Object>(getView()) {
+            @Override
+            protected void onSuccess(Object o) {
+                if (getView() != null) {
+                    getView().submitSparringCourseTeacherCommentSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
+
+    @Override
+    public void submitSparringCourseHomework(String commentContent, String courseScheduleId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("content", commentContent);
+            jsonObject.putOpt("attachments", commentContent);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).submitSparringCourseHomework(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<Object>(getView()) {
+            @Override
+            protected void onSuccess(Object o) {
+                if (getView() != null) {
+                    getView().submitSparringCourseHomeworkSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
+
+    @Override
+    public void submitSparringCourseHomeworkComment(String commentContent, String courseScheduleId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("review", commentContent);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).submitSparringCourseHomeworkComment(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<Object>(getView()) {
+            @Override
+            protected void onSuccess(Object o) {
+                if (getView() != null) {
+                    getView().submitSparringCourseHomeworkCommentSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
 }

+ 144 - 7
teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseDetailActivity.java

@@ -11,13 +11,16 @@ import com.cooleshow.base.ui.activity.BaseMVPActivity;
 import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.base.utils.SizeUtils;
 import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.SparringCourseCommentBean;
 import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
 import com.cooleshow.teacher.constants.CourseConstants;
 import com.cooleshow.teacher.contract.SparringCourseContract;
 import com.cooleshow.teacher.contract.SparringCourseDetailContract;
 import com.cooleshow.teacher.databinding.ActivitySparringCourseDetailLayoutBinding;
 import com.cooleshow.teacher.presenter.course.SparringCourseDetailPresenter;
+import com.cooleshow.teacher.widgets.CourseSetCommentDialog;
 import com.cooleshow.teacher.widgets.HomeworkVideoThumbnailView;
+import com.cooleshow.usercenter.helper.UserHelper;
 
 import androidx.annotation.NonNull;
 import androidx.viewbinding.ViewBinding;
@@ -28,7 +31,12 @@ import androidx.viewbinding.ViewBinding;
 @Route(path = RouterPath.CourseCenter.SPARRING_COURSE_DETAIL)
 public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparringCourseDetailLayoutBinding, SparringCourseDetailPresenter> implements SparringCourseDetailContract.SparringCourseDetailView, View.OnClickListener {
     public static final String COURSE_ID = "course_id";
+    public static final String COURSE_GROUP_ID = "course_group_id";
+    public static final String STUDENT_ID = "studentId";
     private String mCourseId;
+    private String mCourseGroupId;
+    private String studentId;
+    private CourseSetCommentDialog mSetCommentDialog;
 
     @NonNull
     @Override
@@ -38,21 +46,32 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
 
     @Override
     protected void initView() {
-        super.initView();
         initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "课程详情");
         mCourseId = getIntent().getStringExtra(COURSE_ID);
-        if (TextUtils.isEmpty(mCourseId)) {
+        mCourseGroupId = getIntent().getStringExtra(COURSE_GROUP_ID);
+        studentId = getIntent().getStringExtra(STUDENT_ID);
+        if (TextUtils.isEmpty(mCourseId)
+                || TextUtils.isEmpty(mCourseGroupId)
+                || TextUtils.isEmpty(studentId)) {
             finish();
             return;
         }
         viewBinding.tvSetHomework.setOnClickListener(this);
         viewBinding.tvHomeworkSetComment.setOnClickListener(this);
+        viewBinding.tvSetTeacherComment.setOnClickListener(this);
     }
 
     @Override
     public void initData() {
         super.initData();
-        presenter.getSparringCourseHomework(mCourseId);
+        refresh();
+    }
+
+    private void refresh() {
+        if (presenter != null) {
+            presenter.getSparringCourseHomework(mCourseId);
+            presenter.getSparringCourseComment(mCourseId, mCourseGroupId, studentId);
+        }
     }
 
     @Override
@@ -76,13 +95,12 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
         //时间
         viewBinding.tvCourseTime.setText(infoBean.classDate);
         //学生头像
-        GlideUtils.INSTANCE.loadImage(this, infoBean.studentAvatar, viewBinding.ivAvatar,R.drawable.icon_teacher_default_head);
+        GlideUtils.INSTANCE.loadImage(this, infoBean.studentAvatar, viewBinding.ivAvatar, R.drawable.icon_teacher_default_head);
         //title
-        viewBinding.tvTitle.setText(infoBean.studentName);
+        viewBinding.tvTitle.setText(UserHelper.getStudentName(infoBean.studentName, studentId));
         //subjectName
         viewBinding.tvCourseName.setText(infoBean.subjectName);
 
-
         String status = infoBean.courseStatus;
         if (TextUtils.equals(CourseConstants.COURSE_STATUS_NOT_START, status)) {
             //课程未开始
@@ -199,20 +217,139 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
 
     }
 
+
     @Override
-    public void getSparringCourseHomeworkError() {
+    public void getSparringCourseCommentSuccess(SparringCourseCommentBean commentBean) {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        if (commentBean != null && !TextUtils.isEmpty(commentBean.teacherReplied)) {
+            //老师已评价 tv_set_teacher_comment
+            viewBinding.tvSetTeacherComment.setVisibility(View.GONE);
+            viewBinding.tvTeacherAppraisalEmptyText.setVisibility(View.GONE);
+            viewBinding.tvTeacherAppraisalContent.setVisibility(View.VISIBLE);
+            viewBinding.tvTeacherAppraisalContent.setText(commentBean.teacherReplied);
+        } else {
+            //老师未评价
+            viewBinding.tvSetTeacherComment.setVisibility(View.VISIBLE);
+            viewBinding.tvTeacherAppraisalEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.tvTeacherAppraisalContent.setVisibility(View.GONE);
+        }
+
+        if (commentBean != null && !TextUtils.isEmpty(commentBean.studentReplied)) {
+            //学生已评价 tv_stu_comment_content
+            //评分星级
+            viewBinding.ratingBarForStudent.setVisibility(View.VISIBLE);
+            viewBinding.ratingBarForStudent.setRating(commentBean.score);
 
+            viewBinding.tvStuCommentEmptyText.setVisibility(View.GONE);
+            viewBinding.tvStuCommentContent.setVisibility(View.VISIBLE);
+            viewBinding.tvStuCommentContent.setText(commentBean.studentReplied);
+        } else {
+            //学员未评价
+            viewBinding.ratingBarForStudent.setVisibility(View.GONE);
+            viewBinding.tvStuCommentEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.tvStuCommentContent.setVisibility(View.GONE);
+        }
     }
 
     @Override
     public void onClick(View v) {
         if (v.getId() == R.id.tv_set_homework) {
             //布置作业
+            showSetCommentDialog(CourseSetCommentDialog.TYPE_SET_HOMEWORK);
             return;
         }
         if (v.getId() == R.id.tv_homework_set_comment) {
             //点评作业
+            showSetCommentDialog(CourseSetCommentDialog.TYPE_SET_HOMEWORK_COMMENT);
+            return;
+        }
+
+        if (v.getId() == R.id.tv_set_teacher_comment) {
+            //提交老师评价
+            showSetCommentDialog(CourseSetCommentDialog.TYPE_SET_TEACHER_COMMENT);
+            return;
+        }
+    }
+
+    private void showSetCommentDialog(int typeSetTeacherComment) {
+        if (mSetCommentDialog == null) {
+            mSetCommentDialog = new CourseSetCommentDialog(this);
+            mSetCommentDialog.setOnSubmitClickListener(new CourseSetCommentDialog.OnSubmitClickListener() {
+                @Override
+                public void onSubmit(String content,int type) {
+                    //提交
+                    if (type == CourseSetCommentDialog.TYPE_SET_TEACHER_COMMENT) {
+                        //提交老师点评
+                        presenter.submitSparringCourseComment(content,mCourseId,mCourseGroupId,studentId);
+                    }
+                    if (type == CourseSetCommentDialog.TYPE_SET_HOMEWORK) {
+                        //提交布置作业
+                        presenter.submitSparringCourseHomework(content,mCourseId);
+                    }
+                    if (type == CourseSetCommentDialog.TYPE_SET_HOMEWORK_COMMENT) {
+                        //提交作业点评
+                        presenter.submitSparringCourseHomeworkComment(content,mCourseId);
+                    }
+                }
+            });
+        }
+        if (!mSetCommentDialog.isShowing()) {
+            mSetCommentDialog.show();
+        }
+        mSetCommentDialog.showMethod(typeSetTeacherComment);
+    }
+
+    @Override
+    public void getSparringCourseCommentError() {
+        //获取课程详情评价信息失败
+    }
+
+    /**
+     * 提交老师评价成功
+     */
+    @Override
+    public void submitSparringCourseTeacherCommentSuccess() {
+        if (isFinishing() || isDestroyed()) {
             return;
         }
+        refresh();
+    }
+
+    /**
+     * 提交布置作业成功
+     */
+    @Override
+    public void submitSparringCourseHomeworkSuccess() {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        refresh();
+    }
+
+    /**
+     * 提交作业评价成功
+     */
+    @Override
+    public void submitSparringCourseHomeworkCommentSuccess() {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        refresh();
+    }
+
+
+    @Override
+    public void getSparringCourseHomeworkError() {
+        //获取课程详情作业信息失败
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (mSetCommentDialog != null) {
+            mSetCommentDialog.unbind();
+        }
     }
 }

+ 6 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseFragment.java

@@ -120,7 +120,12 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
                 if (position < mAdapter.getData().size()) {
                     SparringCourseListBean.RowsBean rowsBean = mAdapter.getData().get(position);
                     if (rowsBean != null) {
-                        ARouter.getInstance().build(RouterPath.CourseCenter.SPARRING_COURSE_DETAIL).withString(SparringCourseDetailActivity.COURSE_ID, rowsBean.courseId).navigation();
+                        ARouter.getInstance()
+                                .build(RouterPath.CourseCenter.SPARRING_COURSE_DETAIL)
+                                .withString(SparringCourseDetailActivity.COURSE_ID, rowsBean.courseId)
+                                .withString(SparringCourseDetailActivity.COURSE_GROUP_ID, rowsBean.courseGoupId)
+                                .withString(SparringCourseDetailActivity.STUDENT_ID, rowsBean.userId)
+                                .navigation();
                     }
                 }
             }

+ 121 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/CourseSetCommentDialog.java

@@ -0,0 +1,121 @@
+package com.cooleshow.teacher.widgets;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+import com.cooleshow.base.utils.KeyboardUtils;
+import com.cooleshow.base.utils.ToastUtils;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.databinding.DialogSetCourseCommentLayoutBinding;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+public class CourseSetCommentDialog extends Dialog implements View.OnClickListener {
+    public static final int TYPE_SET_TEACHER_COMMENT = 0;//老师评价
+    public static final int TYPE_SET_HOMEWORK = 1;//布置作业
+    public static final int TYPE_SET_HOMEWORK_COMMENT = 2;//作业点评
+
+    private OnSubmitClickListener mListener;
+    private int showType = TYPE_SET_TEACHER_COMMENT;
+
+    private DialogSetCourseCommentLayoutBinding mViewBinding;
+
+    public CourseSetCommentDialog(@NonNull Context context) {
+        super(context, com.cooleshow.base.R.style.DialogStyle);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mViewBinding = DialogSetCourseCommentLayoutBinding.inflate(getLayoutInflater());
+        setContentView(mViewBinding.getRoot());
+        getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
+        mViewBinding.ivClose.setOnClickListener(this);
+        mViewBinding.tvSubmit.setOnClickListener(this);
+        mViewBinding.flContent.setOnClickListener(this);
+        setOnDismissListener(new OnDismissListener() {
+            @Override
+            public void onDismiss(DialogInterface dialog) {
+                if (mViewBinding != null) {
+                    if (mViewBinding.etContent != null) {
+                        mViewBinding.etContent.clearFocus();
+                        KeyboardUtils.hideSoftInput(mViewBinding.etContent);
+                    }
+                }
+            }
+        });
+    }
+
+
+    public void unbind() {
+        if (mViewBinding != null) {
+            mViewBinding = null;
+        }
+    }
+
+    public void showMethod(int method) {
+        showType = method;
+        mViewBinding.etContent.setText("");
+        if (method == TYPE_SET_TEACHER_COMMENT) {
+            //老师提交评价
+            mViewBinding.tvTitle.setText("评价学员");
+            mViewBinding.etContent.setHint("请输入您对本次课程学员表现的评价");
+        }
+        if (method == TYPE_SET_HOMEWORK) {
+            //老师布置作业
+            mViewBinding.tvTitle.setText("布置作业");
+            mViewBinding.etContent.setHint("请输入您输入本次课程需要布置的作业内容");
+        }
+        if (method == TYPE_SET_HOMEWORK_COMMENT) {
+            //老师提交作业评价
+            mViewBinding.tvTitle.setText("作业点评");
+            mViewBinding.etContent.setHint("请输入您对本次课程学员的作业点评");
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == R.id.iv_close) {
+            dismiss();
+            return;
+        }
+
+        if (v.getId() == R.id.fl_content) {
+            KeyboardUtils.showSoftInput(mViewBinding.etContent);
+            return;
+        }
+
+        if (v.getId() == R.id.tv_submit) {
+            //提交
+            String content = mViewBinding.etContent.getText().toString();
+            if (TextUtils.isEmpty(content)) {
+                ToastUtils.showShort("请输入需要提交的内容");
+                return;
+            }
+            if (mListener != null) {
+                mListener.onSubmit(content, showType);
+            }
+            dismiss();
+            return;
+        }
+    }
+
+    public void setOnSubmitClickListener(OnSubmitClickListener submitClickListener) {
+        this.mListener = submitClickListener;
+    }
+
+    public interface OnSubmitClickListener {
+        void onSubmit(String content, int type);
+    }
+}

+ 20 - 4
teacher/src/main/res/layout/activity_sparring_course_detail_layout.xml

@@ -166,6 +166,7 @@
                     app:layout_constraintTop_toTopOf="@+id/view_title_line" />
 
                 <TextView
+                    android:id="@+id/tv_set_teacher_comment"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:drawableLeft="@drawable/icon_edit_appraisal"
@@ -175,6 +176,7 @@
                     android:text="@string/appraisal_str"
                     android:textColor="@color/color_2dc7aa"
                     android:textSize="@dimen/sp_14"
+                    android:visibility="invisible"
                     app:layout_constraintBottom_toBottomOf="@+id/view_title_line"
                     app:layout_constraintRight_toRightOf="parent"
                     app:layout_constraintTop_toTopOf="@+id/view_title_line" />
@@ -245,6 +247,20 @@
                     app:layout_constraintLeft_toRightOf="@+id/view_title_line_stu_comment"
                     app:layout_constraintTop_toTopOf="@+id/view_title_line_stu_comment" />
 
+                <RatingBar
+                    android:visibility="gone"
+                    android:id="@+id/rating_bar_for_student"
+                    style="@style/HomeRatingBar"
+                    android:layout_width="wrap_content"
+                    android:layout_height="19dp"
+                    android:layout_marginStart="6dp"
+                    android:numStars="5"
+                    android:rating="3"
+                    android:stepSize="1"
+                    app:layout_constraintBottom_toBottomOf="@+id/tv_stu_comment_title"
+                    app:layout_constraintLeft_toRightOf="@+id/tv_stu_comment_title"
+                    app:layout_constraintTop_toTopOf="@+id/tv_stu_comment_title" />
+
                 <FrameLayout
                     android:id="@+id/view_stu_comment_content_bg"
                     android:layout_width="match_parent"
@@ -418,12 +434,12 @@
                         android:textSize="@dimen/sp_13" />
 
                     <LinearLayout
-                        android:weightSum="3"
-                        android:layout_gravity="center_vertical"
-                        android:orientation="horizontal"
                         android:id="@+id/ll_homework_video_content"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
+                        android:layout_gravity="center_vertical"
+                        android:orientation="horizontal"
+                        android:weightSum="3"
                         tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
                 </FrameLayout>
             </androidx.constraintlayout.widget.ConstraintLayout>
@@ -460,7 +476,6 @@
                     app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
 
                 <TextView
-                    android:visibility="invisible"
                     android:id="@+id/tv_homework_set_comment"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
@@ -471,6 +486,7 @@
                     android:text="@string/comment_str"
                     android:textColor="@color/color_2dc7aa"
                     android:textSize="@dimen/sp_14"
+                    android:visibility="invisible"
                     app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_comment"
                     app:layout_constraintRight_toRightOf="parent"
                     app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />

+ 95 - 0
teacher/src/main/res/layout/dialog_set_course_comment_layout.xml

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="32dp"
+        android:layout_marginEnd="32dp"
+        android:background="@drawable/bg_white_10dp">
+
+        <ImageView
+            android:id="@+id/iv_close"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="13dp"
+            android:src="@drawable/icon_close_dialog"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <View
+            android:id="@+id/view_title_tag"
+            android:layout_width="4dp"
+            android:layout_height="17dp"
+            android:layout_marginStart="19dp"
+            android:layout_marginTop="27dp"
+            android:background="@drawable/shape_course_title_tag_bg"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="4dp"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_333333"
+            android:textSize="@dimen/sp_18"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="@+id/view_title_tag"
+            app:layout_constraintLeft_toRightOf="@+id/view_title_tag"
+            app:layout_constraintTop_toTopOf="@+id/view_title_tag"
+            tools:text="评价学员" />
+
+        <FrameLayout
+            android:id="@+id/fl_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="18dp"
+            android:layout_marginTop="22dp"
+            android:layout_marginEnd="18dp"
+            android:background="@drawable/shape_bg_f7f8f9_4dp"
+            android:minHeight="112dp"
+            android:padding="11dp"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/view_title_tag">
+
+            <androidx.appcompat.widget.AppCompatEditText
+                android:id="@+id/et_content"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@null"
+                android:hint="请输入您对本次课程学员表现的评价"
+                android:maxHeight="200dp"
+                android:textColor="@color/color_333333"
+                android:textColorHint="@color/color_999999"
+                android:textSize="@dimen/sp_14" />
+
+        </FrameLayout>
+
+        <TextView
+            android:id="@+id/tv_submit"
+            android:layout_width="0dp"
+            android:layout_height="44dp"
+            android:layout_marginStart="26dp"
+            android:layout_marginTop="15dp"
+            android:layout_marginEnd="26dp"
+            android:layout_marginBottom="15dp"
+            android:background="@drawable/shape_login_bt_bg"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:text="@string/submit_action_str"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/fl_content" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</FrameLayout>

+ 1 - 0
teacher/src/main/res/values/strings.xml

@@ -13,4 +13,5 @@
     <string name="course_is_completed">已结束</string>
     <string name="set_homework_str">布置作业</string>
     <string name="comment_str">点评</string>
+    <string name="submit_action_str">提交</string>
 </resources>

+ 16 - 1
usercenter/src/main/java/com/cooleshow/usercenter/helper/UserHelper.java

@@ -89,6 +89,21 @@ public class UserHelper {
         if (!TextUtils.isEmpty(name)) {
             return name;
         }
-        return Utils.getApp().getString(R.string.teacher_nickname_fill_str, id);
+        return Utils.getApp().getString(R.string.nickname_fill_str, String.valueOf(id));
+    }
+
+    public static String getStudentName(String name, int id) {
+        if (!TextUtils.isEmpty(name)) {
+            return name;
+        }
+        return Utils.getApp().getString(R.string.nickname_fill_str, String.valueOf(id));
+    }
+
+
+    public static String getStudentName(String name, String id) {
+        if (!TextUtils.isEmpty(name)) {
+            return name;
+        }
+        return Utils.getApp().getString(R.string.nickname_fill_str, id);
     }
 }

+ 3 - 1
usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/VerifyCodeInputActivity.java

@@ -89,7 +89,9 @@ public class VerifyCodeInputActivity extends BaseMVPActivity<ActivityInputCodeLa
     private void login(String content) {
         KeyboardUtils.hideSoftInput(this);
         if (!TextUtils.isEmpty(mPhoneNum) && !TextUtils.isEmpty(content)) {
-            presenter.loginByVerifyCode(mPhoneNum, content);
+            if (presenter != null) {
+                presenter.loginByVerifyCode(mPhoneNum, content);
+            }
         }
     }
 

+ 1 - 1
usercenter/src/main/res/values/strings.xml

@@ -20,5 +20,5 @@
     <string name="input_support">1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM.~!?@#$%^*()_=|</string>
     <string name="login_privacy_tip">《用户注册协议》</string>
     <string name="login_privacy_tip2">《隐私政策》</string>
-    <string name="teacher_nickname_fill_str">游客%1$d</string>
+    <string name="nickname_fill_str">游客%1$s</string>
 </resources>