Browse Source

重构登录流程,token适配新流程;添加获取SOP详细信息

Frankensteinly 1 year ago
parent
commit
4a4a4d1b92

+ 2 - 0
app/src/main/java/com/grkj/iscs/MyApplication.kt

@@ -4,6 +4,7 @@ import android.app.Application
 import android.content.Context
 import androidx.multidex.MultiDex
 import com.grkj.iscs.ble.BleUtil
+import com.grkj.iscs.model.Token
 import com.grkj.iscs.util.FileUtil
 import com.grkj.iscs.util.NetHttpManager
 import com.grkj.iscs.util.log.LogUtil
@@ -20,6 +21,7 @@ class MyApplication : Application() {
         LogUtil.init(instance!!, FileUtil.ROOT_APP + FileUtil.LOG_DIR)
         BleUtil.instance?.initBle(this)
         NetHttpManager.getInstance().initCtx(this)
+        Token.clear(this)
     }
 
     override fun attachBaseContext(base: Context?) {

+ 1 - 3
app/src/main/java/com/grkj/iscs/activity/CreateTicketActivity.kt

@@ -18,13 +18,13 @@ class CreateTicketActivity : BaseMvpActivity<ICreateTicketView, CreateTicketPres
 
     override fun initView() {
         presenter?.initData()
-        presenter?.getSopList()
     }
 
     override fun showSopList(sopList: MutableList<SopPageVO.Record>) {
         mBinding?.siSop?.mOptionList = sopList.stream().map { it.sopName }.collect(Collectors.toList())
         mBinding?.siSop?.setOnSpinnerSelectListener(object : SelectableInput.OnSpinnerSelectListener {
             override fun onSelect(str: String?, index: Int) {
+                presenter?.getSopById(sopList[index].sopId)
                 mSelectedSopIdx = index
                 val sop = sopList[index]
                 mBinding?.siWorkshop?.setText(sop.workshopName)
@@ -40,6 +40,4 @@ class CreateTicketActivity : BaseMvpActivity<ICreateTicketView, CreateTicketPres
     override fun initPresenter(): CreateTicketPresenter {
         return CreateTicketPresenter()
     }
-
-
 }

+ 0 - 24
app/src/main/java/com/grkj/iscs/model/IscsToken.kt

@@ -1,24 +0,0 @@
-package com.grkj.iscs.model
-
-import android.content.Context
-import android.content.SharedPreferences
-
-class IscsToken(val token: String) {
-
-    fun saveToSp(context: Context): Boolean {
-        return tokenSp(context).edit().putString("token", token).commit()
-    }
-
-    companion object {
-
-        fun fromSp(context:Context): IscsToken? {
-            val sp = tokenSp(context)
-            val token = sp.getString("token", null) ?: return null
-            return IscsToken(token)
-        }
-
-        private fun tokenSp(context: Context): SharedPreferences {
-            return context.getSharedPreferences("token", Context.MODE_PRIVATE)
-        }
-    }
-}

+ 19 - 21
app/src/main/java/com/grkj/iscs/model/Token.kt

@@ -5,20 +5,16 @@ import android.content.SharedPreferences
 import java.util.concurrent.TimeUnit
 
 class Token(
-    val accessToken: String,
-    val refreshToken: String,
-    val expiresIn: Int = 0,
-    val expiresAt: Long
-
+    val token: String,
+    private val expiresAt: Long
 ) {
 
+
     fun saveToSp(context:Context): Boolean {
         val now = System.currentTimeMillis() / 1000
         return tokenSp(context).edit()
-            .putString("accessToken", accessToken)
-            .putString("refreshToken", refreshToken)
-            .putLong("expiresAt", expiresIn + now - 60)
-            .putLong("refreshExpiresAt", TimeUnit.DAYS.toSeconds(7) + now - 60)
+            .putString("token", token)
+            .putLong("expiresAt", now + 60 * 60 * 2)
             .commit()
     }
 
@@ -26,31 +22,30 @@ class Token(
         return expiresAt < 0 || expiresAt > System.currentTimeMillis() / 1000
     }
 
+    override fun toString(): String {
+        return "Token(token='$token', expiresAt=$expiresAt)"
+    }
 
     companion object {
 
         fun fromSp(context:Context): Token? {
             val sp = tokenSp(context)
-            val accessToken = sp.getString("accessToken", null)
-            val refreshToken = sp.getString("refreshToken", null)
-            if (accessToken == null || refreshToken == null) {
+            val token = sp.getString("token", null)
+            if (token == null) {
                 return null
             }
-            val refreshExpiresAt = sp.getLong("refreshExpiresAt", 0)
+            val expiresAt = sp.getLong("expiresAt", 0)
             val now = System.currentTimeMillis() / 1000
-            if (refreshExpiresAt < now) {
+            if (expiresAt < now) {
                 return null
             }
-            val expiresAt = sp.getLong("expiresAt", 0)
-            return Token(accessToken, refreshToken, expiresAt = expiresAt)
+            return Token(token, expiresAt)
         }
 
         fun clear(context: Context) : Boolean {
             return tokenSp(context).edit()
-                .putString("accessToken", null)
-                .putString("refreshToken", null)
+                .putString("token", null)
                 .putLong("expiresAt", 0)
-                .putLong("refreshExpiresAt", 0)
                 .commit()
         }
 
@@ -58,7 +53,10 @@ class Token(
             return context.getSharedPreferences("token", Context.MODE_PRIVATE)
         }
 
+        fun refresh(context: Context) {
+            val now = System.currentTimeMillis() / 1000
+            val sp = tokenSp(context)
+            sp.edit().putLong("expiresAt", now + 60 * 60 * 2).apply()
+        }
     }
-
-
 }

+ 6 - 1
app/src/main/java/com/grkj/iscs/model/UrlConsts.kt

@@ -2,7 +2,7 @@ package com.grkj.iscs.model
 
 object UrlConsts {
     //    const val BASE_URL = "http://192.168.1.127:9090"
-    const val BASE_URL = "http://192.168.1.246:9090"
+    const val BASE_URL = "http://192.168.58.12:9090"
     const val WEB_SOCKET = "ws://192.168.1.127:9090/websocket/iot/127"
 
     const val AUTOCODE_TICKET_NUMBER = "JOB_TICKET_CODE"
@@ -27,6 +27,11 @@ object UrlConsts {
      */
     const val AUTO_CODE = "/system/autocode/get"
 
+    /**
+     * 获取SOP详细信息
+     */
+    const val SOP_INFO = "/iscs/sop/selectIsSopById"
+
 
     /**
      * 获取地区树

+ 3 - 3
app/src/main/java/com/grkj/iscs/model/vo/SopPageVO.kt

@@ -21,15 +21,15 @@ data class SopPageVO(
         val pointCount: Int,
         val sopCode: String,
         val sopContent: String,
-        val sopId: String,
+        val sopId: Long,
         val sopName: String,
         val sopStatus: String,
         val sopType: String,
         val updateBy: String,
         val updateTime: String,
-        val workareaId: String,
+        val workareaId: Long,
         val workareaName: String,
-        val workshopId: String,
+        val workshopId: Long,
         val workshopName: String
     )
 }

+ 19 - 8
app/src/main/java/com/grkj/iscs/presenter/CreateTicketPresenter.kt

@@ -5,6 +5,7 @@ import com.grkj.iscs.iview.ICreateTicketView
 import com.grkj.iscs.model.UrlConsts
 import com.grkj.iscs.model.vo.SopPageVO
 import com.grkj.iscs.model.vo.TicketTypeVO
+import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.NetApi
 
 class CreateTicketPresenter : BasePresenter<ICreateTicketView>() {
@@ -13,18 +14,28 @@ class CreateTicketPresenter : BasePresenter<ICreateTicketView>() {
     var mTicketTypeList = mutableListOf<TicketTypeVO>()
 
     fun initData() {
-        NetApi.getTicketType {
-            mTicketTypeList = it as MutableList<TicketTypeVO>
+        NetApi.login {
+
         }
-        NetApi.getAutoCode(UrlConsts.AUTOCODE_TICKET_NUMBER) {
-            println("getAutoCode : $it")
+        Executor.delayOnMain(5000) {
+            NetApi.getTicketType {
+                mTicketTypeList = it as MutableList<TicketTypeVO>
+            }
+            NetApi.getAutoCode(UrlConsts.AUTOCODE_TICKET_NUMBER) {
+                println("getAutoCode : $it")
+            }
+            NetApi.getSopPage(0, 10) {
+                Executor.runOnMain {
+                    mSopList = it?.records as MutableList<SopPageVO.Record>
+                    mvpView?.showSopList(mSopList)
+                }
+            }
         }
     }
 
-    fun getSopList() {
-        NetApi.getSopPage(0, 10) {
-            mSopList = it?.records as MutableList<SopPageVO.Record>
-            mvpView?.showSopList(mSopList)
+    fun getSopById(sopId: Long) {
+        NetApi.getSopInfo(sopId) {
+
         }
     }
 

+ 20 - 4
app/src/main/java/com/grkj/iscs/util/NetApi.kt

@@ -1,13 +1,12 @@
 package com.grkj.iscs.util
 
-import cn.zhxu.data.TypeRef
+import com.grkj.iscs.MyApplication
 import com.grkj.iscs.model.AreaTree
+import com.grkj.iscs.model.Token
 import com.grkj.iscs.model.UrlConsts
-import com.grkj.iscs.model.vo.BaseVO
 import com.grkj.iscs.model.vo.SopPageVO
 import com.grkj.iscs.model.vo.TicketTypeVO
 
-
 /**
  * 网络请求
  */
@@ -21,7 +20,10 @@ object NetApi {
                 "password" to "grkj8888"
             ),
             { res, errMsg, codeInt ->
-                // TODO 待完善
+                res?.let {
+                    val newToken = it.toBean(Token::class.java)
+                    newToken.saveToSp(MyApplication.instance!!.applicationContext)
+                }
             }, isGet = false, isAuth = false)
     }
 
@@ -63,4 +65,18 @@ object NetApi {
                 }
             }, isGet = true, isAuth = true)
     }
+
+    fun getSopInfo(sopId: Long, callBack: (String?) -> Unit) {
+        NetHttpManager.getInstance().doRequestNet(
+            UrlConsts.SOP_INFO,
+            false,
+            mapOf(
+                "sopId" to sopId
+            ),
+            { res, errMsg, codeInt ->
+                res?.let {
+//                    callBack.invoke(it.toString())
+                }
+            }, isGet = true, isAuth = true)
+    }
 }

+ 14 - 36
app/src/main/java/com/grkj/iscs/util/NetHttpManager.kt

@@ -9,9 +9,9 @@ import cn.zhxu.okhttps.HttpTask
 import cn.zhxu.okhttps.OkHttps
 import cn.zhxu.okhttps.gson.GsonMsgConvertor
 import cn.zhxu.okhttps.okhttp.OkHttpClientWrapper
+import com.grkj.iscs.MyApplication
 import com.grkj.iscs.R
 import com.grkj.iscs.model.Constants
-import com.grkj.iscs.model.IscsToken
 import com.grkj.iscs.model.Token
 import com.grkj.iscs.model.UrlConsts
 import com.grkj.iscs.model.UrlConsts.SIGN_IN
@@ -58,11 +58,7 @@ class NetHttpManager {
                     itPreChain.proceed()
                     return@addSerialPreprocessor
                 }
-//                requestTokenAndRefreshIfExpired {
-//                    itPreChain.task.addHeader("Access-Token", it)
-//                    itPreChain.proceed()
-//                }
-                doLogin {
+                requestTokenAndRefreshIfExpired {
                     itPreChain.task.addHeader("Authorization", it)
                     itPreChain.proceed()
                 }
@@ -76,42 +72,22 @@ class NetHttpManager {
     fun requestTokenAndRefreshIfExpired(callback: (String?) -> Unit) {
         val token = Token.fromSp(context!!)
         if (token == null) {
-//            doLogin(callback)
+            doLogin(callback)
             return
         }
         if (token.isValid()) {
-            callback(token.accessToken)
+            callback(token.token)
             return
         }
-        // 访问令牌已过期,刷新令牌未过期,则调接口刷新当前令牌
-//        myHttp.async(TOKEN_REFRESH)
-        myHttp.async("/app-api/member/auth/refresh-token")
-            .skipPreproc() // 跳过所有预处理器
-            .addBodyPara("refreshToken", token.refreshToken)
-            .nextOnIO()
-            .setOnResponse { res: HttpResult ->
-                exceptionCount = 0
-                if (!res.isSuccessful) {
-//                    doLogin(callback)
-                    return@setOnResponse
-                }
-                try {
-                    val newToken = res.body.toBean(Token::class.java)
-                    newToken.saveToSp(context!!)
-                    callback(newToken.accessToken)
-                } catch (e: Exception) {
-//                    doLogin(callback)
-                    return@setOnResponse
-                }
-            }
-            .setOnException { e: IOException ->
-                evictHttpConnectPool(e)
-//                doLogin(callback)
-            }
-            .post()
+        doLogin(callback)
     }
 
     private fun doLogin(callback: (String?) -> Unit) {
+        val ctx = MyApplication.instance?.applicationContext
+        // TODO 临时注掉,方便调试
+//        if (ctx == null || SPUtils.getLoginUser(ctx) == null) {
+//            return
+//        }
         myHttp.async(SIGN_IN)
             .skipPreproc()
             .addBodyPara("username", "admin")
@@ -124,8 +100,7 @@ class NetHttpManager {
                     return@setOnResponse
                 }
                 try {
-//                    val newToken = it.body.toBean(Token::class.java)
-                    val newToken = it.body.toBean(IscsToken::class.java)
+                    val newToken = it.body.toBean(Token::class.java)
                     newToken.saveToSp(context!!)
                     callback(newToken.token)
                 } catch (e: Exception) {
@@ -159,6 +134,9 @@ class NetHttpManager {
             .setOnResponse {
                 exceptionCount = 0
                 if (it.isSuccessful) {
+                    MyApplication.instance?.applicationContext?.let { itCtx ->
+                        Token.refresh(itCtx)
+                    }
                     callback(it.body, null, it.status)
                 } else {
                     var bobyStr = it.body.toString()

+ 19 - 0
app/src/main/java/com/grkj/iscs/util/SPUtils.kt

@@ -0,0 +1,19 @@
+package com.grkj.iscs.util
+
+import android.content.Context
+
+object SPUtils {
+
+    private const val SP_NAME = "iscs"
+    private const val KEY_LOGIN_USER = "login_user"
+
+    fun getLoginUser(context: Context): String? {
+        val sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
+        return sp.getString(KEY_LOGIN_USER, null)
+    }
+
+    fun setLoginUser(context: Context, user: String) {
+        val sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
+        sp.edit().putString(KEY_LOGIN_USER, user).apply()
+    }
+}