Browse Source

更新登录逻辑,添加登录接口,课表页面添加部分接口

Pq 3 years ago
parent
commit
b085eedacc
51 changed files with 718 additions and 318 deletions
  1. 10 1
      BaseLibrary/build.gradle
  2. 1 0
      BaseLibrary/src/main/AndroidManifest.xml
  3. 16 0
      BaseLibrary/src/main/java/com/cooleshow/base/common/BaseConstant.java
  4. 0 17
      BaseLibrary/src/main/java/com/cooleshow/base/common/BaseConstant.kt
  5. 11 0
      BaseLibrary/src/main/java/com/cooleshow/base/constanst/Constanst.java
  6. 33 0
      BaseLibrary/src/main/java/com/cooleshow/base/data/net/CommonInterceptor.java
  7. 91 0
      BaseLibrary/src/main/java/com/cooleshow/base/data/net/CommonParamsHelper.java
  8. 15 16
      BaseLibrary/src/main/java/com/cooleshow/base/data/net/RetrofitFactory.kt
  9. 111 0
      BaseLibrary/src/main/java/com/cooleshow/base/data/net/UploadRequestBody.java
  10. 0 9
      BaseLibrary/src/main/java/com/cooleshow/base/data/protocol/BaseResp.kt
  11. 0 17
      BaseLibrary/src/main/java/com/cooleshow/base/ext/CommonExt.kt
  12. 1 1
      BaseLibrary/src/main/java/com/cooleshow/base/presenter/view/BaseView.kt
  13. 0 31
      BaseLibrary/src/main/java/com/cooleshow/base/rx/BaseFunc.kt
  14. 0 31
      BaseLibrary/src/main/java/com/cooleshow/base/rx/BaseFuncBoolean.kt
  15. 3 0
      BaseLibrary/src/main/java/com/cooleshow/base/rx/BaseObserver.java
  16. 1 1
      BaseLibrary/src/main/java/com/cooleshow/base/rx/BaseSubscriber.kt
  17. 3 4
      BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.kt
  18. 1 0
      BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java
  19. 4 3
      BaseLibrary/src/main/java/com/cooleshow/base/ui/fragment/BaseFragment.java
  20. 75 0
      BaseLibrary/src/main/java/com/cooleshow/base/utils/RequestBodyUtil.java
  21. 3 3
      BaseLibrary/src/main/res/values/colors.xml
  22. 0 25
      Provider/src/main/java/com/cooleshow/provider/common/CommonUtils.kt
  23. 5 1
      app/build.gradle
  24. 0 0
      app/gradle.properties
  25. 3 0
      gradle.properties
  26. 7 0
      teacher/build.gradle
  27. 2 0
      teacher/gradle.properties
  28. 1 0
      teacher/src/main/AndroidManifest.xml
  29. 12 0
      teacher/src/main/java/com/cooleshow/teacher/App.kt
  30. 37 0
      teacher/src/main/java/com/cooleshow/teacher/api/APIService.java
  31. 21 0
      teacher/src/main/java/com/cooleshow/teacher/contract/CourseTableContract.java
  32. 0 1
      teacher/src/main/java/com/cooleshow/teacher/contract/HomeContract.java
  33. 54 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/main/CourseTablePresenter.java
  34. 39 18
      teacher/src/main/java/com/cooleshow/teacher/ui/main/CourseTableFragment.kt
  35. 18 0
      teacher/src/main/java/com/cooleshow/teacher/ui/splash/SplashActivity.kt
  36. 10 0
      teacher/src/main/res/xml/network_security_config.xml
  37. 31 0
      usercenter/src/main/java/com/cooleshow/usercenter/bean/UserInfo.java
  38. 0 19
      usercenter/src/main/java/com/cooleshow/usercenter/data/api/UploadApi.kt
  39. 8 6
      usercenter/src/main/java/com/cooleshow/usercenter/data/api/UserApi.kt
  40. 0 11
      usercenter/src/main/java/com/cooleshow/usercenter/data/protocol/UserInfo.kt
  41. 0 21
      usercenter/src/main/java/com/cooleshow/usercenter/data/respository/UploadRepository.kt
  42. 6 6
      usercenter/src/main/java/com/cooleshow/usercenter/data/respository/UserRepository.kt
  43. 30 0
      usercenter/src/main/java/com/cooleshow/usercenter/helper/UserHelper.java
  44. 20 1
      usercenter/src/main/java/com/cooleshow/usercenter/presenter/LoginPresenter.kt
  45. 1 1
      usercenter/src/main/java/com/cooleshow/usercenter/presenter/contract/LoginContract.java
  46. 1 1
      usercenter/src/main/java/com/cooleshow/usercenter/presenter/contract/VerifyLoginContract.java
  47. 1 1
      usercenter/src/main/java/com/cooleshow/usercenter/service/UserService.kt
  48. 0 52
      usercenter/src/main/java/com/cooleshow/usercenter/service/impl/UserServiceImpl.kt
  49. 29 17
      usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/LoginActivity.kt
  50. 1 3
      usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/VerifyCodeLoginActivity.java
  51. 2 0
      usercenter/src/main/res/layout/activity_login.xml

+ 10 - 1
BaseLibrary/build.gradle

@@ -24,6 +24,13 @@ android {
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            buildConfigField "String", "BASE_SERVER_URL", RELEASE_BASE_URL
+        }
+
+        debug {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            buildConfigField "String", "BASE_SERVER_URL", TEST_BASE_URL
         }
     }
     compileOptions {
@@ -33,7 +40,7 @@ android {
     kotlinOptions {
         jvmTarget = '1.8'
     }
-    buildFeatures{
+    buildFeatures {
         viewBinding = true
     }
 }
@@ -102,6 +109,8 @@ dependencies {
     api "com.squareup.retrofit2:retrofit:${retrofit_version}"
     api "com.squareup.retrofit2:converter-gson:${retrofit_version}"
     api "com.squareup.retrofit2:adapter-rxjava:${retrofit_version}"
+    api "com.squareup.retrofit2:adapter-rxjava3:2.9.0"
+
     //MulitStateView
     api "com.github.Kennyc1012:MultiStateView:$multi_state_view_version"
     api "com.alibaba:arouter-api:$arouter_api_version"

+ 1 - 0
BaseLibrary/src/main/AndroidManifest.xml

@@ -2,6 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.cooleshow.base">
 
+    <uses-permission android:name="android.permission.INTERNET" />
     <application />
 
 </manifest>

+ 16 - 0
BaseLibrary/src/main/java/com/cooleshow/base/common/BaseConstant.java

@@ -0,0 +1,16 @@
+package com.cooleshow.base.common;
+
+import com.cooleshow.base.BuildConfig;
+
+/**
+ * Author by pq, Date on 2022/4/21.
+ */
+public class BaseConstant {
+    public final static String SERVER_ADDRESS= BuildConfig.BASE_SERVER_URL;
+    public final static String TEACHER_GROUP = "api-teacher/";
+
+
+
+    public final static String TABLE_PREFS = "Kotlin_mall";
+    public final static String KEY_SP_TOKEN = "token";
+}

+ 0 - 17
BaseLibrary/src/main/java/com/cooleshow/base/common/BaseConstant.kt

@@ -1,17 +0,0 @@
-package com.cooleshow.base.common
-
-/*
-    基础常量
- */
-class BaseConstant{
-    companion object {
-        //七牛服务地址
-        const val IMAGE_SERVER_ADDRESS = "http://osea2fxp7.bkt.clouddn.com/"
-        //本地服务器地址
-        const val SERVER_ADDRESS = "http://10.28.14.168:8080"
-        //SP表名
-        const val TABLE_PREFS = "Kotlin_mall"
-        //Token Key
-        const val KEY_SP_TOKEN = "token"
-    }
-}

+ 11 - 0
BaseLibrary/src/main/java/com/cooleshow/base/constanst/Constanst.java

@@ -0,0 +1,11 @@
+package com.cooleshow.base.constanst;
+
+import com.cooleshow.base.BuildConfig;
+import com.cooleshow.base.utils.AppUtils;
+
+/**
+ * Author by pq, Date on 2022/4/22.
+ */
+public class Constanst {
+    public static final String CLIENT = AppUtils.getAppPackageName().equals("com.daya.cooleshow") ? "student" : "teacher";
+}

+ 33 - 0
BaseLibrary/src/main/java/com/cooleshow/base/data/net/CommonInterceptor.java

@@ -0,0 +1,33 @@
+package com.cooleshow.base.data.net;
+
+import java.io.IOException;
+
+import okhttp3.Headers;
+import okhttp3.HttpUrl;
+import okhttp3.Interceptor;
+import okhttp3.Request;
+import okhttp3.Response;
+
+/**
+ * Author by pq, Date on 2022/4/21.
+ */
+public class CommonInterceptor implements Interceptor {
+    @Override
+    public Response intercept(Chain chain) throws IOException {
+        Request oldRequest = chain.request();
+        // 添加新的公共参数
+        HttpUrl.Builder authorizedUrlBuilder = oldRequest.url()
+                .newBuilder()
+                .scheme(oldRequest.url().scheme())
+                .host(oldRequest.url().host());
+        CommonParamsHelper.getInstance().insertCommonUrlParams(authorizedUrlBuilder);
+
+        // 新的请求,添加公共header参数
+        Request.Builder builder = oldRequest.newBuilder()
+                .method(oldRequest.method(), oldRequest.body())
+                .url(authorizedUrlBuilder.build());
+        CommonParamsHelper.getInstance().insertCommonHeaderParams(builder);
+        Request newRequest = builder.build();
+        return chain.proceed(newRequest);
+    }
+}

+ 91 - 0
BaseLibrary/src/main/java/com/cooleshow/base/data/net/CommonParamsHelper.java

@@ -0,0 +1,91 @@
+package com.cooleshow.base.data.net;
+
+import android.text.TextUtils;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import okhttp3.HttpUrl;
+import okhttp3.Request;
+
+/**
+ * Author by pq, Date on 2022/4/22.
+ */
+public class CommonParamsHelper {
+    public static final String USER_TOKEN="Authorization";
+    private volatile static CommonParamsHelper mInstance;
+    private final Map<String, String> commonParams = new HashMap();
+    private Map<String, String> commonHeaderParams = new HashMap();
+
+    private CommonParamsHelper() {
+    }
+
+    public static CommonParamsHelper getInstance() {
+        if (mInstance == null) {
+            synchronized (CommonParamsHelper.class) {
+                if (mInstance == null) {
+                    mInstance = new CommonParamsHelper();
+                }
+            }
+        }
+        return mInstance;
+    }
+
+    public void addCommonParams(String key, String value) {
+        if (TextUtils.isEmpty(key)) {
+            return;
+        }
+        commonParams.put(key, value);
+    }
+
+    public synchronized void removeCommonParams(String key) {
+        commonParams.remove(key);
+    }
+
+    public void addCommonHeaderParams(String key, String value) {
+        if (TextUtils.isEmpty(key)) {
+            return;
+        }
+        commonHeaderParams.put(key, value);
+    }
+
+    public synchronized void removeCommonHeaderParams(String key) {
+        commonHeaderParams.remove(key);
+    }
+
+    public void clear() {
+        if (commonHeaderParams != null) {
+            commonHeaderParams.clear();
+        }
+        if (commonParams != null) {
+            commonParams.clear();
+        }
+    }
+
+    public Request.Builder insertCommonHeaderParams(Request.Builder builder) {
+        if (commonHeaderParams != null && commonHeaderParams.size() > 0) {
+            Set<Map.Entry<String, String>> entries = commonHeaderParams.entrySet();
+            for (Map.Entry<String, String> entry : entries) {
+                String key = entry.getKey();
+                String value = entry.getValue();
+                builder.header(key, value);
+            }
+        }
+        return builder;
+    }
+
+    public HttpUrl.Builder insertCommonUrlParams(HttpUrl.Builder builder) {
+        if (commonParams != null && commonParams.size() > 0) {
+            Set<Map.Entry<String, String>> entries = commonParams.entrySet();
+            for (Map.Entry<String, String> entry : entries) {
+                String key = entry.getKey();
+                String value = entry.getValue();
+                builder.addQueryParameter(key, value);
+            }
+        }
+        return builder;
+    }
+
+}

+ 15 - 16
BaseLibrary/src/main/java/com/cooleshow/base/data/net/RetrofitFactory.kt

@@ -1,12 +1,11 @@
 package com.cooleshow.base.data.net
 
-import com.alibaba.android.arouter.facade.annotation.Interceptor
 import com.cooleshow.base.common.BaseConstant
-import com.cooleshow.base.utils.AppPrefsUtils
 import okhttp3.OkHttpClient
 import okhttp3.logging.HttpLoggingInterceptor
 import retrofit2.Retrofit
 import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory
+import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
 import retrofit2.converter.gson.GsonConverterFactory
 
 import java.util.concurrent.TimeUnit
@@ -14,16 +13,16 @@ import java.util.concurrent.TimeUnit
 /*
     Retrofit工厂,单例
  */
-class RetrofitFactory private constructor(){
+class RetrofitFactory private constructor() {
 
     /*
         单例实现
      */
     companion object {
-        val instance:RetrofitFactory by lazy { RetrofitFactory() }
+        val instance: RetrofitFactory by lazy { RetrofitFactory() }
     }
 
-//    private val interceptor: Interceptor
+    //    private val interceptor: Interceptor
     private val retrofit: Retrofit
 
     //初始化
@@ -42,11 +41,11 @@ class RetrofitFactory private constructor(){
 
         //Retrofit实例化
         retrofit = Retrofit.Builder()
-                .baseUrl(BaseConstant.SERVER_ADDRESS)
-                .addConverterFactory(GsonConverterFactory.create())
-                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
-                .client(initClient())
-                .build()
+            .baseUrl(BaseConstant.SERVER_ADDRESS)
+            .addConverterFactory(GsonConverterFactory.create())
+            .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
+            .client(initClient())
+            .build()
     }
 
     /*
@@ -54,11 +53,11 @@ class RetrofitFactory private constructor(){
      */
     private fun initClient(): OkHttpClient {
         return OkHttpClient.Builder()
-                .addInterceptor(initLogInterceptor())
-//                .addInterceptor(interceptor)
-                .connectTimeout(10,TimeUnit.SECONDS)
-                .readTimeout(10,TimeUnit.SECONDS)
-                .build()
+            .addInterceptor(initLogInterceptor())
+            .addInterceptor(CommonInterceptor())
+            .connectTimeout(10, TimeUnit.SECONDS)
+            .readTimeout(10, TimeUnit.SECONDS)
+            .build()
     }
 
     /*
@@ -73,7 +72,7 @@ class RetrofitFactory private constructor(){
     /*
         具体服务实例化
      */
-    fun <T> create(service:Class<T>):T{
+    fun <T> create(service: Class<T>): T {
         return retrofit.create(service)
     }
 }

+ 111 - 0
BaseLibrary/src/main/java/com/cooleshow/base/data/net/UploadRequestBody.java

@@ -0,0 +1,111 @@
+package com.cooleshow.base.data.net;
+
+import com.cooleshow.base.rx.BaseObserver;
+
+import java.io.IOException;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+import okio.Buffer;
+import okio.BufferedSink;
+import okio.ForwardingSink;
+import okio.Okio;
+import okio.Sink;
+
+public class UploadRequestBody extends RequestBody {
+    /**
+     * 实际请求体
+     */
+    private RequestBody  requestBody;
+    /**
+     * 上传回调接口
+     */
+    private BaseObserver callback;
+    /**
+     * 包装完成的BufferedSink
+     */
+    private BufferedSink bufferedSink;
+    //用于第二次实际写入的数据判断 显示progressListener
+
+    public UploadRequestBody(RequestBody requestBody, BaseObserver callback) {
+        this.requestBody = requestBody;
+        this.callback = callback;
+    }
+
+    @Override
+    public long contentLength() throws IOException {
+        return requestBody.contentLength();
+    }
+
+    @Override
+    public MediaType contentType() {
+        return requestBody.contentType();
+    }
+
+    @Override
+    public void writeTo(BufferedSink sink) throws IOException {
+        if (bufferedSink == null) {
+            //包装
+            bufferedSink = Okio.buffer(sink(sink));
+        }
+        //写入
+        requestBody.writeTo(bufferedSink);
+        //必须调用flush,否则最后一部分数据可能不会被写入
+        bufferedSink.flush();
+    }
+
+    /**
+     * 写入,回调进度接口
+     * @param sink
+     *         Sink
+     * @return Sink
+     */
+    private Sink sink(Sink sink) {
+        return new ForwardingSink(sink) {
+            //当前写入字节数
+            long bytesWritten = 0L;
+            //总字节长度,避免多次调用contentLength()方法
+            long contentLength = 0L;
+
+            @Override
+            public void write(Buffer source, long byteCount) throws IOException {
+                super.write(source, byteCount);
+                if (contentLength == 0) {
+                    //获得contentLength的值,后续不再调用
+                    contentLength = contentLength();
+                }
+                //增加当前写入的字节数
+                bytesWritten += byteCount;
+                //回调
+                Observable.just(bytesWritten).observeOn(AndroidSchedulers.mainThread())
+                        .subscribe(new Observer<Long>() {
+                            @Override
+                            public void onSubscribe(Disposable d) {
+
+                            }
+
+                            @Override
+                            public void onNext(Long aLong) {
+                                callback.onProgress(contentLength, aLong);
+                            }
+
+                            @Override
+                            public void onError(Throwable e) {
+
+                            }
+
+                            @Override
+                            public void onComplete() {
+
+                            }
+                        });
+            }
+
+
+        };
+    }
+}

+ 0 - 9
BaseLibrary/src/main/java/com/cooleshow/base/data/protocol/BaseResp.kt

@@ -1,9 +0,0 @@
-package com.cooleshow.base.data.protocol
-
-/*
-    能用响应对象
-    @status:响应状态码
-    @message:响应文字消息
-    @data:具体响应业务对象
- */
-data class BaseResp<out T>(val status:Int, val message:String, val data:T)

+ 0 - 17
BaseLibrary/src/main/java/com/cooleshow/base/ext/CommonExt.kt

@@ -8,16 +8,11 @@ import android.widget.ImageView
 import android.widget.Toast
 import androidx.fragment.app.Fragment
 
-import com.cooleshow.base.data.protocol.BaseResp
-import com.cooleshow.base.rx.BaseFunc
-import com.cooleshow.base.rx.BaseFuncBoolean
 import com.cooleshow.base.rx.BaseSubscriber
 import com.cooleshow.base.utils.GlideUtils
 import com.cooleshow.base.widgets.DefaultTextWatcher
-import com.kennyc.view.MultiStateView
 import com.trello.rxlifecycle4.LifecycleProvider
 import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
-import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers.mainThread
 import io.reactivex.rxjava3.core.Observable
 import io.reactivex.rxjava3.schedulers.Schedulers
 
@@ -37,19 +32,7 @@ fun <T> Observable<T>.excute(subscriber: BaseSubscriber<T>, lifecycleProvider: L
             .subscribe(subscriber)
 }
 
-/*
-    扩展数据转换
- */
-fun <T> Observable<BaseResp<T>>.convert():Observable<T>{
-    return this.flatMap(BaseFunc())
-}
 
-/*
-    扩展Boolean类型数据转换
- */
-fun <T> Observable<BaseResp<T>>.convertBoolean():Observable<Boolean>{
-    return this.flatMap(BaseFuncBoolean())
-}
 
 /*
     扩展点击事件

+ 1 - 1
BaseLibrary/src/main/java/com/cooleshow/base/presenter/view/BaseView.kt

@@ -6,5 +6,5 @@ package com.cooleshow.base.presenter.view
 interface BaseView {
     fun showLoading()
     fun hideLoading()
-    fun onError(text:String)
+    fun onError(throwable: Throwable)
 }

+ 0 - 31
BaseLibrary/src/main/java/com/cooleshow/base/rx/BaseFunc.kt

@@ -1,31 +0,0 @@
-package com.cooleshow.base.rx
-
-import com.cooleshow.base.common.ResultCode
-import com.cooleshow.base.data.protocol.BaseResp
-import io.reactivex.rxjava3.core.Observable
-import io.reactivex.rxjava3.functions.Function
-import rx.functions.Func1
-
-/*
-    通用数据类型转换封装
- */
-//class BaseFunc<T>: Func1<BaseResp<T>, Observable<T>> {
-//    override fun call(t: BaseResp<T>): Observable<T> {
-//        if (t.status != ResultCode.SUCCESS){
-//            return Observable.error(BaseException(t.status,t.message))
-//        }
-//
-//        return Observable.just(t.data)
-//    }
-//}
-
-class BaseFunc<T>: Function<BaseResp<T>, Observable<T>> {
-    override fun apply(t: BaseResp<T>): Observable<T> {
-        if (t.status != ResultCode.SUCCESS){
-            return Observable.error(BaseException(t.status,t.message))
-        }
-
-        return Observable.just(t.data)
-    }
-
-}

+ 0 - 31
BaseLibrary/src/main/java/com/cooleshow/base/rx/BaseFuncBoolean.kt

@@ -1,31 +0,0 @@
-package com.cooleshow.base.rx
-
-import com.cooleshow.base.rx.BaseException
-import com.cooleshow.base.common.ResultCode
-import com.cooleshow.base.data.protocol.BaseResp
-import io.reactivex.rxjava3.core.Observable
-import io.reactivex.rxjava3.functions.Function
-import rx.functions.Func1
-
-/*
-    Boolean类型转换封装
- */
-//class BaseFuncBoolean<T>: Func1<BaseResp<T>, Observable<Boolean>> {
-//    override fun call(t: BaseResp<T>): Observable<Boolean> {
-//        if (t.status != ResultCode.SUCCESS){
-//            return Observable.error(BaseException(t.status, t.message))
-//        }
-//
-//        return Observable.just(true)
-//    }
-//}
-
-class BaseFuncBoolean<T>: Function<BaseResp<T>, Observable<Boolean>> {
-    override fun apply(t: BaseResp<T>): Observable<Boolean> {
-        if (t.status != ResultCode.SUCCESS){
-            return Observable.error(BaseException(t.status, t.message))
-        }
-
-        return Observable.just(true)
-    }
-}

+ 3 - 0
BaseLibrary/src/main/java/com/cooleshow/base/rx/BaseObserver.java

@@ -58,6 +58,9 @@ public abstract class BaseObserver<T> extends DisposableObserver<BaseResponse<T>
     @Override
     public void onError(Throwable e) {
         if (baseView != null) {
+            baseView.onError(e);
+        }
+        if (baseView != null) {
             baseView.hideLoading();
         }
     }

+ 1 - 1
BaseLibrary/src/main/java/com/cooleshow/base/rx/BaseSubscriber.kt

@@ -34,7 +34,7 @@ open class BaseSubscriber<T>(val baseView:BaseView): Observer<T> {
     override fun onError(e: Throwable?) {
         baseView.hideLoading()
         if (e is BaseException){
-            baseView.onError(e.msg)
+            baseView.onError(e)
         }
     }
 

+ 3 - 4
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.kt

@@ -13,7 +13,7 @@ import com.trello.rxlifecycle4.components.support.RxAppCompatActivity
     Activity基类,业务无关
  */
 abstract class BaseActivity<V : ViewBinding> : RxAppCompatActivity(), BaseView {
-    var mLoading: ProgressLoading? = null;
+    lateinit var mLoading: ProgressLoading;
     lateinit var viewBinding: V;
 
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -32,7 +32,6 @@ abstract class BaseActivity<V : ViewBinding> : RxAppCompatActivity(), BaseView {
 
     open fun initData() {
         mLoading = ProgressLoading.create(this);
-
     }
 
     override fun showLoading() {
@@ -43,8 +42,8 @@ abstract class BaseActivity<V : ViewBinding> : RxAppCompatActivity(), BaseView {
         mLoading?.hideLoading()
     }
 
-    override fun onError(text: String) {
-        ToastUtils.showShort("onError:$text")
+    override fun onError(throwable: Throwable) {
+        ToastUtils.showShort("onError:${throwable.message}")
     }
 
     override fun onDestroy() {

+ 1 - 0
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java

@@ -9,6 +9,7 @@ public abstract class BaseMVPActivity<V extends ViewBinding, P extends BasePrese
 
     @Override
     public void initData() {
+        super.initData();
         presenter = createPresenter();
         // presenter 绑定 view
         if (presenter != null) {

+ 4 - 3
BaseLibrary/src/main/java/com/cooleshow/base/ui/fragment/BaseFragment.java

@@ -99,9 +99,10 @@ public abstract class BaseFragment<V extends ViewBinding> extends Fragment imple
         }
     }
 
+
     @Override
-    public void onError(@NonNull String text) {
-        LogUtils.e("onError:" + text);
-        ToastUtils.showShort("onError:" + text);
+    public void onError(@NonNull Throwable throwable) {
+        LogUtils.e("onError:" + throwable.getMessage());
+        ToastUtils.showShort("onError:" + throwable.getMessage());
     }
 }

+ 75 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/RequestBodyUtil.java

@@ -0,0 +1,75 @@
+package com.cooleshow.base.utils;
+
+import com.cooleshow.base.data.net.UploadRequestBody;
+import com.cooleshow.base.rx.BaseObserver;
+
+import java.io.File;
+import java.util.List;
+
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+public class RequestBodyUtil {
+    /**
+     * 将文件路径数组封装为{@link List < MultipartBody.Part>}
+     *
+     * @param key 对应请求正文中name的值。目前服务器给出的接口中,所有图片文件使用<br>
+     *            同一个name值,实际情况中有可能需要多个
+     */
+
+    public static MultipartBody.Part filesToMultipartBodyParts(File files, String key) {
+
+        RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg"), files);
+        MultipartBody.Part part = MultipartBody.Part.createFormData(key, files.getName(), requestBody);
+
+        return part;
+    }
+
+    public static MultipartBody.Part filesToMultipartBodyParts(File files, String key, String mediaType) {
+        RequestBody requestBody = RequestBody.create(MediaType.parse(mediaType), files);
+        MultipartBody.Part part = MultipartBody.Part.createFormData(key, files.getName(), requestBody);
+
+        return part;
+    }
+
+    public static MultipartBody.Part filesToMultipartBodyParts(File files, String key, String mediaType, BaseObserver observer) {
+        RequestBody request = RequestBody.create(MediaType.parse(mediaType), files);
+        UploadRequestBody requestBody = new UploadRequestBody(request, observer);
+        MultipartBody.Part part = MultipartBody.Part.createFormData(key, files.getName(), requestBody);
+        return part;
+    }
+
+    /**
+     * 将参数封装成requestBody形式上传参数
+     *
+     * @param param 参数
+     * @return RequestBody
+     */
+    public static RequestBody convertToRequestBody(String param) {
+        RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), param);
+        return requestBody;
+    }
+
+    /**
+     * 将参数封装成requestBody Json形式上传参数
+     *
+     * @param param 参数
+     * @return RequestBody
+     */
+    public static RequestBody convertToRequestBodyJson(String param) {
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), param);
+        return requestBody;
+    }
+
+    /**
+     * 将文件进行转换
+     *
+     * @param param 为文件类型
+     * @return
+     */
+    public static RequestBody convertToRequestBodyMap(File param) {
+        RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), param);
+        return requestBody;
+    }
+}

+ 3 - 3
BaseLibrary/src/main/res/values/colors.xml

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <color name="colorAccent">#3d3d3d</color>
-    <color name="colorPrimary">#03a9f4</color>
-    <color name="colorPrimaryDark">#03a9f4</color>
+    <color name="colorAccent">#2DC7AA</color>
+    <color name="colorPrimary">#2DC7AA</color>
+    <color name="colorPrimaryDark">#2DC7AA</color>
     <color name="common_bg">#f5f5f5</color>
     <color name="common_black">#000000</color>
     <color name="common_blue">#03a9f4</color>

+ 0 - 25
Provider/src/main/java/com/cooleshow/provider/common/CommonUtils.kt

@@ -1,25 +0,0 @@
-package com.cooleshow.provider.common
-
-import com.alibaba.android.arouter.launcher.ARouter
-import com.cooleshow.base.common.BaseConstant
-import com.cooleshow.base.utils.AppPrefsUtils
-import com.cooleshow.provider.router.RouterPath
-
-/*
-    顶级函数,判断是否登录
- */
-fun isLogined(): Boolean {
-    return AppPrefsUtils.getString(BaseConstant.KEY_SP_TOKEN)!!.isNotEmpty()
-}
-
-/*
-    如果已经登录,进行传入的方法处理
-    如果没有登录,进入登录界面
- */
-fun afterLogin(method: () -> Unit) {
-    if (isLogined()) {
-        method()
-    } else {
-        ARouter.getInstance().build(RouterPath.UserCenter.PATH_LOGIN).navigation()
-    }
-}

+ 5 - 1
app/build.gradle

@@ -16,7 +16,7 @@ android {
     compileSdk 31
 
     defaultConfig {
-        applicationId "com.example.cooleshow"
+        applicationId "com.daya.cooleshow"
         minSdk 21
         targetSdk 31
         versionCode 1
@@ -30,6 +30,10 @@ android {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
+        debug{
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
     }
 
 

+ 0 - 0
app/gradle.properties


+ 3 - 0
gradle.properties

@@ -26,3 +26,6 @@ kapt.use.worker.api=false
 kapt.incremental.apt=false
 
 isUserModule = true
+
+TEST_BASE_URL ="http://dev.colexiu.com/"
+RELEASE_BASE_URL =""

+ 7 - 0
teacher/build.gradle

@@ -28,6 +28,13 @@ android {
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            buildConfigField "String", "BASE_H5_URL", RELEASE_BASE_URL_H5
+        }
+
+        debug{
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            buildConfigField "String", "BASE_H5_URL", TEST_BASE_URL_H5
         }
     }
     compileOptions {

+ 2 - 0
teacher/gradle.properties

@@ -0,0 +1,2 @@
+TEST_BASE_URL_H5 ="http://dev.colexiu.com/teacher"
+RELEASE_BASE_URL_H5 ="http://dev.colexiu.com/teacher"

+ 1 - 0
teacher/src/main/AndroidManifest.xml

@@ -9,6 +9,7 @@
         android:label="@string/app_name"
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
+        android:networkSecurityConfig="@xml/network_security_config"
         android:theme="@style/Theme.CooleShow">
 
         <activity

+ 12 - 0
teacher/src/main/java/com/cooleshow/teacher/App.kt

@@ -1,8 +1,11 @@
 package com.cooleshow.teacher
 
+import android.text.TextUtils
 import com.cooleshow.base.common.BaseApplication
 import com.alibaba.android.arouter.launcher.ARouter
+import com.cooleshow.base.data.net.CommonParamsHelper
 import com.cooleshow.base.utils.Utils
+import com.cooleshow.usercenter.helper.UserHelper
 
 /**
  * Author by pq, Date on 2022/4/20.
@@ -12,5 +15,14 @@ class App : BaseApplication() {
         super.onCreate()
         ARouter.init(this)
         Utils.init(this)
+        initCommonParams();
+    }
+
+    private fun initCommonParams() {
+        var userToken = UserHelper.getUserToken()
+        if(!TextUtils.isEmpty(userToken)){
+            //添加公共参数
+            CommonParamsHelper.getInstance().addCommonHeaderParams(CommonParamsHelper.USER_TOKEN, userToken);
+        }
     }
 }

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

@@ -0,0 +1,37 @@
+package com.cooleshow.teacher.api;
+
+import com.cooleshow.base.data.net.BaseResponse;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.core.Observable;
+import okhttp3.RequestBody;
+import retrofit2.http.Body;
+import retrofit2.http.GET;
+import retrofit2.http.POST;
+import retrofit2.http.Query;
+
+import static com.cooleshow.base.common.BaseConstant.TEACHER_GROUP;
+
+/**
+ * Author by pq, Date on 2022/4/21.
+ */
+public interface APIService {
+    /**
+     * 根据月份获取老师该月有课的日期
+     *
+     * @param
+     * @return
+     */
+    @POST(TEACHER_GROUP + "courseSchedule/queryCourseSchedule")
+    Observable<BaseResponse<List<String>>> getCourseScheduleDateByMonth(@Body RequestBody body);
+
+    /**
+     * 根据日期获取老师当日排课
+     *
+     * @param date
+     * @return
+     */
+    @GET(TEACHER_GROUP + "courseSchedule/queryCourseUser")
+    Observable<BaseResponse<Object>> getCourseSchedulesWithDate(@Query("date") String date);
+}

+ 21 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/CourseTableContract.java

@@ -0,0 +1,21 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Author by pq, Date on 2022/4/20.
+ */
+public interface CourseTableContract {
+
+    interface CourseTableView extends BaseView {
+        void onGetCourseDateByMonthSuccess(List<String> datas);
+    }
+
+    interface Presenter {
+        void getCourseScheduleDateByMonth(String month);
+        void getCourseSchedulesWithDate(Date date);
+    }
+}

+ 0 - 1
teacher/src/main/java/com/cooleshow/teacher/contract/HomeContract.java

@@ -1,7 +1,6 @@
 package com.cooleshow.teacher.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
-import com.cooleshow.usercenter.data.protocol.UserInfo;
 
 /**
  * Author by pq, Date on 2022/4/20.

+ 54 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/main/CourseTablePresenter.java

@@ -0,0 +1,54 @@
+package com.cooleshow.teacher.presenter.main;
+
+import com.cooleshow.base.data.net.BaseResponse;
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.teacher.BuildConfig;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.contract.CourseTableContract;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Author by pq, Date on 2022/4/21.
+ */
+public class CourseTablePresenter extends BasePresenter<CourseTableContract.CourseTableView> implements CourseTableContract.Presenter {
+
+    /**
+     * 查询当月有课的日期
+     *
+     * @param month
+     */
+    @Override
+    public void getCourseScheduleDateByMonth(String month) {
+        JSONObject jsonObject =new JSONObject();
+        try {
+            jsonObject.putOpt("classMonth",month);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).getCourseScheduleDateByMonth(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<List<String>>() {
+            @Override
+            protected void onSuccess(List<String> data) {
+                if (getView() != null) {
+                    getView().onGetCourseDateByMonthSuccess(data);
+                }
+            }
+        });
+    }
+
+    /**
+     * 查询当天的课程
+     *
+     * @param date
+     */
+    @Override
+    public void getCourseSchedulesWithDate(Date date) {
+
+    }
+}

+ 39 - 18
teacher/src/main/java/com/cooleshow/teacher/ui/main/CourseTableFragment.kt

@@ -4,7 +4,6 @@ import android.view.MotionEvent
 import android.view.View
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-import com.chad.library.adapter.base.listener.OnItemChildClickListener
 import com.chad.library.adapter.base.listener.OnItemClickListener
 import com.cooleshow.base.ui.fragment.BaseMVPFragment
 import com.cooleshow.base.utils.SizeUtils
@@ -13,12 +12,13 @@ import com.cooleshow.base.utils.ToastUtils
 import com.cooleshow.teacher.R
 import com.cooleshow.teacher.adapter.CourseTableListAdapter
 import com.cooleshow.teacher.bean.CourseTableListBean
+import com.cooleshow.teacher.contract.CourseTableContract
 import com.cooleshow.teacher.contract.HomeContract
 import com.cooleshow.teacher.databinding.FragmentCourseTableLayoutBinding
+import com.cooleshow.teacher.presenter.main.CourseTablePresenter
 import com.cooleshow.teacher.presenter.main.HomePresenter
 import com.cooleshow.teacher.widgets.CalendarExpandDecoration
 import com.cooleshow.teacher.widgets.CalendarShrinkDecoration
-import com.cooleshow.teacher.widgets.CourseTableArrowView
 import com.haibin.calendarview.CalendarView
 import kotlinx.android.synthetic.main.fragment_course_table_layout.*
 import java.util.*
@@ -27,15 +27,17 @@ import java.util.*
 /**
  * Author by pq, Date on 2022/4/20.
  */
-class CourseTableFragment : BaseMVPFragment<FragmentCourseTableLayoutBinding, HomePresenter>(),
+class CourseTableFragment :
+    BaseMVPFragment<FragmentCourseTableLayoutBinding, CourseTablePresenter>(),
     HomeContract.HomeView, CalendarView.OnCalendarSelectListener,
     CalendarView.OnCalendarInterceptListener, CalendarView.OnMonthChangeListener,
-    CalendarView.OnViewChangeListener {
+    CalendarView.OnViewChangeListener, CourseTableContract.CourseTableView {
     private lateinit var date: Date
     private lateinit var calendarDate: String
     private lateinit var calendarExpandDecoration: CalendarExpandDecoration
     private lateinit var calendarShrinkDecoration: CalendarShrinkDecoration
     private lateinit var adapter: CourseTableListAdapter
+    private var day: Int = -1;
 
     override fun getLayoutView(): FragmentCourseTableLayoutBinding {
         return FragmentCourseTableLayoutBinding.inflate(layoutInflater)
@@ -65,7 +67,10 @@ class CourseTableFragment : BaseMVPFragment<FragmentCourseTableLayoutBinding, Ho
                     MotionEvent.ACTION_UP -> {
                         val right: Int = rv.width / 2 - SizeUtils.dp2px(16f)
                         val left: Int = rv.width / 2 + SizeUtils.dp2px(16f)
-                        if (right < e.x && e.x < left && e.y < SizeUtils.dp2px(30f) && y < SizeUtils.dp2px(30f)) {
+                        if (right < e.x && e.x < left && e.y < SizeUtils.dp2px(30f) && y < SizeUtils.dp2px(
+                                30f
+                            )
+                        ) {
                             if (mViewBinding.calendarLayout.isExpand) {
                                 mViewBinding.calendarLayout.shrink()
                             } else {
@@ -80,6 +85,7 @@ class CourseTableFragment : BaseMVPFragment<FragmentCourseTableLayoutBinding, Ho
         })
         adapter.setOnItemClickListener(OnItemClickListener() { adapter, view, position ->
             ToastUtils.showShort("点击position:" + position)
+            presenter.getCourseScheduleDateByMonth(calendarDate)
         })
         addTestData()
     }
@@ -100,17 +106,16 @@ class CourseTableFragment : BaseMVPFragment<FragmentCourseTableLayoutBinding, Ho
         val calendar = Calendar.getInstance()
         val year = calendar[Calendar.YEAR]
         val month = calendar[Calendar.MONTH] + 1
-        val day = calendar[Calendar.DAY_OF_MONTH]
-        var mCalendarView = mViewBinding.calendarView;
+        day = calendar[Calendar.DAY_OF_MONTH]
         if ((mViewBinding.calendarView.getCurDay() !== day || mViewBinding.calendarView.getCurMonth() !== month || mViewBinding.calendarView.getCurYear() !== year)) {
-            mCalendarView.updateCurrentDate()
-            mCalendarView.clearSingleSelect()
-            setMontAndDay(year, month, day)
-            date = TimeUtils.getNowDate()
-            calendarDate = TimeUtils.getNowString()
+            mViewBinding.calendarView.updateCurrentDate()
+            mViewBinding.calendarView.clearSingleSelect()
         }
-//        presenter.getCourseScheduleDateByMonth(calendarDate, false)
-//        presenter.getCourseSchedulesWithDate(date, false)
+        setMontAndDay(year, month, day)
+        date = TimeUtils.getNowDate()
+        calendarDate = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("yyyy-MM"))
+        presenter.getCourseScheduleDateByMonth(calendarDate)
+        presenter.getCourseSchedulesWithDate(date)
     }
 
     private fun setMontAndDay(year: Int, month: Int, day: Int) {
@@ -122,14 +127,14 @@ class CourseTableFragment : BaseMVPFragment<FragmentCourseTableLayoutBinding, Ho
         mViewBinding.tvCurrentDate.text = span
     }
 
-    override fun createPresenter(): HomePresenter {
-        return HomePresenter()
-    }
-
     override fun onCalendarOutOfRange(calendar: com.haibin.calendarview.Calendar?) {
     }
 
     override fun onCalendarSelect(calendar: com.haibin.calendarview.Calendar?, isClick: Boolean) {
+        val year = calendar!!.year
+        val month = calendar!!.month
+        val day = calendar!!.day
+        setMontAndDay(year, month, day)
     }
 
     override fun onCalendarIntercept(calendar: com.haibin.calendarview.Calendar?): Boolean {
@@ -143,6 +148,7 @@ class CourseTableFragment : BaseMVPFragment<FragmentCourseTableLayoutBinding, Ho
     }
 
     override fun onMonthChange(year: Int, month: Int) {
+        setMontAndDay(year, month, day)
     }
 
     override fun onViewChange(isMonthView: Boolean) {
@@ -159,4 +165,19 @@ class CourseTableFragment : BaseMVPFragment<FragmentCourseTableLayoutBinding, Ho
         }
     }
 
+    override fun createPresenter(): CourseTablePresenter {
+        return CourseTablePresenter()
+    }
+
+    /**
+     * 根据月份查询当月有课的日期
+     */
+    override fun onGetCourseDateByMonthSuccess(datas: MutableList<String>?) {
+        if (isDetached) {
+            return;
+        }
+        if (datas?.size != 0) {
+
+        }
+    }
 }

+ 18 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/splash/SplashActivity.kt

@@ -5,6 +5,7 @@ import com.cooleshow.base.ui.activity.BaseActivity
 import com.cooleshow.provider.router.RouterPath
 import com.cooleshow.teacher.R
 import com.cooleshow.teacher.databinding.ActivitySplashLayoutBinding
+import com.cooleshow.usercenter.helper.UserHelper
 
 
 /**
@@ -16,6 +17,23 @@ class SplashActivity : BaseActivity<ActivitySplashLayoutBinding>() {
     }
 
     override fun initView() {
+
+    }
+
+    override fun initData() {
+        super.initData()
+        if (UserHelper.isLogin()) {
+            jumpMain()
+        } else {
+            jumpLogin()
+        }
+    }
+
+    private fun jumpMain() {
+        ARouter.getInstance().build(RouterPath.APPCenter.PATH_HOME).navigation()
+    }
+
+    private fun jumpLogin() {
         ARouter.getInstance().build(RouterPath.UserCenter.PATH_LOGIN).navigation()
     }
 

+ 10 - 0
teacher/src/main/res/xml/network_security_config.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config xmlns:tools="http://schemas.android.com/tools">
+    <base-config cleartextTrafficPermitted="true"/>
+    <!--<domain-config-->
+        <!--cleartextTrafficPermitted="true"-->
+        <!--tools:ignore="NetworkSecurityConfig"/>-->
+    <!--<domain-->
+        <!--includeSubdomains="true"-->
+        <!--tools:ignore="NetworkSecurityConfig">47.99.212.176</domain>-->
+</network-security-config>

+ 31 - 0
usercenter/src/main/java/com/cooleshow/usercenter/bean/UserInfo.java

@@ -0,0 +1,31 @@
+package com.cooleshow.usercenter.bean;
+
+import java.io.Serializable;
+
+/**
+ * Author by pq, Date on 2022/4/22.
+ */
+public class UserInfo implements Serializable {
+
+    /**
+     * password : true
+     * authentication : {"access_token":"7767ca75-bb03-4971-98d6-d74396174be5","token_type":"bearer","refresh_token":"dda2ed9f-e0f3-4d8e-96b9-900104ff3e10","scope":"server"}
+     */
+
+    public boolean password;
+    public AuthenticationBean authentication;
+
+    public static class AuthenticationBean  {
+        /**
+         * access_token : 7767ca75-bb03-4971-98d6-d74396174be5
+         * token_type : bearer
+         * refresh_token : dda2ed9f-e0f3-4d8e-96b9-900104ff3e10
+         * scope : server
+         */
+
+        public String access_token;
+        public String token_type;
+        public String refresh_token;
+        public String scope;
+    }
+}

+ 0 - 19
usercenter/src/main/java/com/cooleshow/usercenter/data/api/UploadApi.kt

@@ -1,19 +0,0 @@
-package com.kotlin.user.data.api
-
-import com.cooleshow.base.data.protocol.BaseResp
-
-import io.reactivex.rxjava3.core.Observable
-import retrofit2.http.POST
-
-
-/*
-    上传相关 接口
- */
-interface UploadApi {
-
-    /*
-        获取七牛云上传凭证
-     */
-    @POST("common/getUploadToken")
-    fun getUploadToken(): Observable<BaseResp<String>>
-}

+ 8 - 6
usercenter/src/main/java/com/cooleshow/usercenter/data/api/UserApi.kt

@@ -1,12 +1,13 @@
 package com.cooleshow.usercenter.data.api
 
 
-import com.cooleshow.base.data.protocol.BaseResp
-import com.cooleshow.usercenter.data.protocol.LoginReq
+import com.cooleshow.base.data.net.BaseResponse
+import com.cooleshow.usercenter.bean.UserInfo
 import com.cooleshow.usercenter.data.protocol.RegisterReq
-import com.cooleshow.usercenter.data.protocol.UserInfo
 import io.reactivex.rxjava3.core.Observable
 import retrofit2.http.Body
+import retrofit2.http.FieldMap
+import retrofit2.http.FormUrlEncoded
 import retrofit2.http.POST
 
 
@@ -19,13 +20,14 @@ interface UserApi{
         用户注册
      */
     @POST("userCenter/register")
-    fun register(@Body req: RegisterReq): Observable<BaseResp<String>>
+    fun register(@Body req: RegisterReq): Observable<BaseResponse<String>>
 
     /*
         用户登录
      */
-    @POST("userCenter/login")
-    fun login(@Body req: LoginReq):Observable<BaseResp<UserInfo>>
+    @FormUrlEncoded
+    @POST("api-auth/usernameLogin")
+    fun login(@FieldMap req: MutableMap<String?,String?>):Observable<BaseResponse<UserInfo>>
 
     /*
         忘记密码

+ 0 - 11
usercenter/src/main/java/com/cooleshow/usercenter/data/protocol/UserInfo.kt

@@ -1,11 +0,0 @@
-package com.cooleshow.usercenter.data.protocol
-
-/*
-    用户实体类
- */
-data class UserInfo(val id:String,
-                    val userIcon:String,
-                    val userName:String,
-                    val userGender:String,
-                    val userMobile:String,
-                    val userSign:String)

+ 0 - 21
usercenter/src/main/java/com/cooleshow/usercenter/data/respository/UploadRepository.kt

@@ -1,21 +0,0 @@
-package com.cooleshow.usercenter.data.respository
-
-
-import com.cooleshow.base.data.net.RetrofitFactory
-import com.cooleshow.base.data.protocol.BaseResp
-import com.kotlin.user.data.api.UploadApi
-import io.reactivex.rxjava3.core.Observable
-
-/*
-    上传相关 数据层
- */
-class UploadRepository constructor(){
-    /*
-        获取七牛云上传凭证
-     */
-    fun getUploadToken(): Observable<BaseResp<String>> {
-        return RetrofitFactory.instance.create(UploadApi::class.java).getUploadToken()
-    }
-
-
-}

+ 6 - 6
usercenter/src/main/java/com/cooleshow/usercenter/data/respository/UserRepository.kt

@@ -1,11 +1,11 @@
 package com.kotlin.user.data.respository
 
+import com.cooleshow.base.data.net.BaseResponse
 import com.cooleshow.base.data.net.RetrofitFactory
-import com.cooleshow.base.data.protocol.BaseResp
+import com.cooleshow.usercenter.bean.UserInfo
 import com.cooleshow.usercenter.data.api.UserApi
 import com.cooleshow.usercenter.data.protocol.LoginReq
 import com.cooleshow.usercenter.data.protocol.RegisterReq
-import com.cooleshow.usercenter.data.protocol.UserInfo
 
 import io.reactivex.rxjava3.core.Observable
 
@@ -16,16 +16,16 @@ class UserRepository constructor(){
     /*
         用户注册
      */
-    fun register(mobile:String,pwd:String,verifyCode:String): Observable<BaseResp<String>> {
+    fun register(mobile:String,pwd:String,verifyCode:String): Observable<BaseResponse<String>> {
         return RetrofitFactory.instance.create(UserApi::class.java).register(RegisterReq(mobile,pwd,verifyCode))
     }
 
     /*
         用户登录
      */
-    fun login(mobile:String,pwd:String,pushId:String): Observable<BaseResp<UserInfo>> {
-        return RetrofitFactory.instance.create(UserApi::class.java).login(LoginReq(mobile,pwd,pushId))
-    }
+//    fun login(mobile:String,pwd:String,pushId:String): Observable<BaseResponse<UserInfo>> {
+//        return RetrofitFactory.instance.create(UserApi::class.java).login(LoginReq(mobile,pwd,pushId))
+//    }
     /*
    //        忘记密码
    //     */

+ 30 - 0
usercenter/src/main/java/com/cooleshow/usercenter/helper/UserHelper.java

@@ -0,0 +1,30 @@
+package com.cooleshow.usercenter.helper;
+
+import android.text.TextUtils;
+
+import com.cooleshow.base.utils.SPUtils;
+
+/**
+ * Author by pq, Date on 2022/4/22.
+ */
+public class UserHelper {
+    public static final String USER_TOKEN_KEY = "user_token";
+
+    public static boolean isLogin() {
+        return !TextUtils.isEmpty(getUserToken());
+    }
+
+
+    public static String buildToken(String tokenType, String token) {
+        return tokenType + " " + token;
+    }
+
+    public static void saveUserToken(String token) {
+        SPUtils.getInstance().put(USER_TOKEN_KEY, token);
+    }
+
+    public static String getUserToken() {
+        return SPUtils.getInstance().getString(USER_TOKEN_KEY);
+    }
+
+}

+ 20 - 1
usercenter/src/main/java/com/cooleshow/usercenter/presenter/LoginPresenter.kt

@@ -1,16 +1,35 @@
 package com.cooleshow.usercenter.presenter
 
+import com.cooleshow.base.constanst.Constanst
+import com.cooleshow.base.data.net.BaseResponse
 import com.cooleshow.base.presenter.BasePresenter
+import com.cooleshow.base.rx.BaseObserver
+import com.cooleshow.usercenter.bean.UserInfo
+import com.cooleshow.usercenter.data.api.UserApi
 import com.cooleshow.usercenter.presenter.contract.LoginContract
 
 
 /*
     登录界面 Presenter
  */
-class LoginPresenter constructor() : BasePresenter<LoginContract.LoginView>(),LoginContract.Presenter{
+class LoginPresenter constructor() : BasePresenter<LoginContract.LoginView>(),
+    LoginContract.Presenter {
 
     override fun onLoginByPwd(mobile: String?, pwd: String?) {
         view?.showLoading()
+        val params = mutableMapOf<String?, String?>()
+        params["clientId"] = Constanst.CLIENT
+        params["clientSecret"] = Constanst.CLIENT
+        params["username"] = mobile
+        params["password"] = pwd
+        addSubscribe(create(UserApi::class.java).login(params),
+            object : BaseObserver<UserInfo>(view) {
+                override fun onSuccess(data: UserInfo) {
+                    if (view != null) {
+                        view.onLoginResult(data)
+                    }
+                }
+            })
     }
 
 }

+ 1 - 1
usercenter/src/main/java/com/cooleshow/usercenter/presenter/contract/LoginContract.java

@@ -1,7 +1,7 @@
 package com.cooleshow.usercenter.presenter.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
-import com.cooleshow.usercenter.data.protocol.UserInfo;
+import com.cooleshow.usercenter.bean.UserInfo;
 
 /**
  * Author by pq, Date on 2022/4/20.

+ 1 - 1
usercenter/src/main/java/com/cooleshow/usercenter/presenter/contract/VerifyLoginContract.java

@@ -1,7 +1,7 @@
 package com.cooleshow.usercenter.presenter.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
-import com.cooleshow.usercenter.data.protocol.UserInfo;
+import com.cooleshow.usercenter.bean.UserInfo;
 
 /**
  * Author by pq, Date on 2022/4/19.

+ 1 - 1
usercenter/src/main/java/com/cooleshow/usercenter/service/UserService.kt

@@ -1,6 +1,6 @@
 package com.cooleshow.usercenter.service
 
-import com.cooleshow.usercenter.data.protocol.UserInfo
+import com.cooleshow.usercenter.bean.UserInfo
 import io.reactivex.rxjava3.core.Observable
 
 

+ 0 - 52
usercenter/src/main/java/com/cooleshow/usercenter/service/impl/UserServiceImpl.kt

@@ -1,52 +0,0 @@
-package com.cooleshow.usercenter.service.impl
-
-import com.cooleshow.base.ext.convert
-import com.cooleshow.base.ext.convertBoolean
-import com.cooleshow.usercenter.data.protocol.UserInfo
-import com.cooleshow.usercenter.service.UserService
-import com.kotlin.user.data.respository.UserRepository
-import io.reactivex.rxjava3.core.Observable
-
-
-/*
-    用户模块业务实现类
- */
-class UserServiceImpl constructor(): UserService {
-    lateinit var repository: UserRepository
-
-    /*
-        注册
-     */
-    override fun register(mobile: String, pwd: String, verifyCode: String): Observable<Boolean> {
-        return repository.register(mobile, pwd, verifyCode).convertBoolean()
-    }
-
-    /*
-        登录
-     */
-    override fun login(mobile: String, pwd: String, pushId: String): Observable<UserInfo> {
-        return repository.login(mobile, pwd, pushId).convert()
-    }
-
-//    /*
-//        忘记密码
-//     */
-//    override fun forgetPwd(mobile: String, verifyCode: String): Observable<Boolean> {
-//        return repository.forgetPwd(mobile, verifyCode).convertBoolean()
-//    }
-//
-//    /*
-//        重置密码
-//     */
-//    override fun resetPwd(mobile: String, pwd: String): Observable<Boolean> {
-//        return repository.resetPwd(mobile, pwd).convertBoolean()
-//    }
-//
-//    /*
-//        修改用户资料
-//     */
-//    override fun editUser(userIcon: String, userName: String, userGender: String, userSign: String): Observable<UserInfo> {
-//        return repository.editUser(userIcon,userName,userGender,userSign).convert()
-//    }
-
-}

+ 29 - 17
usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/LoginActivity.kt

@@ -2,23 +2,24 @@ package com.cooleshow.usercenter.ui.activity
 
 import android.os.Bundle
 import android.text.TextUtils
-import androidx.viewbinding.ViewBinding
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
+import com.cooleshow.base.data.net.CommonParamsHelper
 import com.cooleshow.base.ext.onClick
 import com.cooleshow.base.ui.activity.BaseMVPActivity
 import com.cooleshow.base.utils.ToastUtils
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper
 import com.cooleshow.provider.router.RouterPath
-import com.cooleshow.usercenter.R
-import com.cooleshow.usercenter.data.protocol.UserInfo
+import com.cooleshow.usercenter.bean.UserInfo
 import com.cooleshow.usercenter.databinding.ActivityLoginBinding
+import com.cooleshow.usercenter.helper.UserHelper
 import com.cooleshow.usercenter.presenter.LoginPresenter
 import com.cooleshow.usercenter.presenter.contract.LoginContract
 import kotlinx.android.synthetic.main.activity_login.*
 
 @Route(path = RouterPath.UserCenter.PATH_LOGIN)
-class LoginActivity : BaseMVPActivity<ActivityLoginBinding,LoginPresenter>(), LoginContract.LoginView {
+class LoginActivity : BaseMVPActivity<ActivityLoginBinding, LoginPresenter>(),
+    LoginContract.LoginView {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -39,23 +40,34 @@ class LoginActivity : BaseMVPActivity<ActivityLoginBinding,LoginPresenter>(), Lo
         }
 
         mLoginBtn.setOnClickListener {
-//            if (TextUtils.isEmpty(et_phone_num?.text)) {
-//                ToastUtils.showShort("手机号不可为空")
-//                return@setOnClickListener;
-//            }
-//            if (TextUtils.isEmpty(et_password?.text)) {
-//                ToastUtils.showShort("密码不可为空")
-//                return@setOnClickListener;
-//            }
-//            mPresenter.login(et_phone_num?.text.toString(), et_password?.text.toString(), "");
-            ARouter.getInstance().build(RouterPath.APPCenter.PATH_HOME).navigation()
+            if (TextUtils.isEmpty(et_phone_num?.text)) {
+                ToastUtils.showShort("手机号不可为空")
+                return@setOnClickListener;
+            }
+            if (TextUtils.isEmpty(et_password?.text)) {
+                ToastUtils.showShort("密码不可为空")
+                return@setOnClickListener;
+            }
+            presenter?.onLoginByPwd(et_phone_num?.text.toString(), et_password?.text.toString());
         }
-//        mForgetPwdTv.onClick{
-//            ARouter.getInstance().build(RouterPath.APPCenter.PATH_HOME).navigation()
-//        }
     }
 
+    /**
+     * 登录成功
+     */
     override fun onLoginResult(result: UserInfo) {
+        if (isFinishing || isDestroyed) {
+            return;
+        }
+        var token = UserHelper.buildToken(
+            result.authentication?.token_type,
+            result.authentication?.access_token
+        )
+        UserHelper.saveUserToken(token);
+
+        //添加公共参数
+        CommonParamsHelper.getInstance().addCommonHeaderParams(CommonParamsHelper.USER_TOKEN, token);
+        ARouter.getInstance().build(RouterPath.APPCenter.PATH_HOME).navigation()
     }
 
 }

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

@@ -6,15 +6,13 @@ import com.alibaba.android.arouter.facade.annotation.Route;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.provider.router.RouterPath;
-import com.cooleshow.usercenter.R;
-import com.cooleshow.usercenter.data.protocol.UserInfo;
+import com.cooleshow.usercenter.bean.UserInfo;
 import com.cooleshow.usercenter.databinding.ActivityVerifyCodeLoginBinding;
 import com.cooleshow.usercenter.presenter.VerifyLoginPresenter;
 import com.cooleshow.usercenter.presenter.contract.VerifyLoginContract;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.viewbinding.ViewBinding;
 
 /**
  * Author by pq, Date on 2022/4/19.

+ 2 - 0
usercenter/src/main/res/layout/activity_login.xml

@@ -52,6 +52,7 @@
         android:background="@null"
         android:hint="@string/please_input_phone_num"
         android:inputType="phone"
+        android:text="18086531408"
         android:textColorHint="@color/color_ffc1c1c1"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
@@ -90,6 +91,7 @@
         android:hint="@string/please_input_pwd"
         android:inputType="textPassword"
         android:paddingLeft="@dimen/common_padding_small"
+        android:text="123456"
         android:textColorHint="@color/color_ffc1c1c1"
         app:layout_constraintLeft_toLeftOf="@+id/et_phone_num"
         app:layout_constraintRight_toRightOf="@+id/et_phone_num"