Procházet zdrojové kódy

1.添加测评module

王鹏鹏 před 2 roky
rodič
revize
50c69c9414

+ 144 - 2
baselib/schemas/com.yingyangfly.baselib.db.AppDataBase/1.json

@@ -2,7 +2,7 @@
   "formatVersion": 1,
   "database": {
     "version": 1,
-    "identityHash": "4e48854390b25b1e77c8c921ee8329d5",
+    "identityHash": "0e256fbdbcde18374164ae5aeae4a404",
     "entities": [
       {
         "tableName": "Questions",
@@ -303,12 +303,154 @@
         },
         "indices": [],
         "foreignKeys": []
+      },
+      {
+        "tableName": "QuestionOption",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `correctOption` TEXT, `id` TEXT, `optionKey` TEXT, `optionVal` TEXT, `questionId` TEXT)",
+        "fields": [
+          {
+            "fieldPath": "uid",
+            "columnName": "uid",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "correctOption",
+            "columnName": "correctOption",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "optionKey",
+            "columnName": "optionKey",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "optionVal",
+            "columnName": "optionVal",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "questionId",
+            "columnName": "questionId",
+            "affinity": "TEXT",
+            "notNull": false
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "uid"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "QuestionRecords",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `correctOptionId` TEXT, `correctOptionName` TEXT, `examinationId` TEXT, `examinationTitle` TEXT, `id` TEXT, `manualHelp` TEXT, `orgCode` TEXT, `orgName` TEXT, `score` TEXT, `status` TEXT, `title` TEXT, `usedTime` TEXT)",
+        "fields": [
+          {
+            "fieldPath": "uid",
+            "columnName": "uid",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "correctOptionId",
+            "columnName": "correctOptionId",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "correctOptionName",
+            "columnName": "correctOptionName",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "examinationId",
+            "columnName": "examinationId",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "examinationTitle",
+            "columnName": "examinationTitle",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "manualHelp",
+            "columnName": "manualHelp",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "orgCode",
+            "columnName": "orgCode",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "orgName",
+            "columnName": "orgName",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "score",
+            "columnName": "score",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "status",
+            "columnName": "status",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "title",
+            "columnName": "title",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "usedTime",
+            "columnName": "usedTime",
+            "affinity": "TEXT",
+            "notNull": false
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "uid"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
       }
     ],
     "views": [],
     "setupQueries": [
       "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
-      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '4e48854390b25b1e77c8c921ee8329d5')"
+      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0e256fbdbcde18374164ae5aeae4a404')"
     ]
   }
 }

+ 12 - 6
baselib/src/main/java/com/yingyangfly/baselib/base/BaseActivity.kt

@@ -18,6 +18,8 @@ import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
 import com.yingyangfly.baselib.R
 import com.yingyangfly.baselib.databinding.ActivityBaseBinding
 import com.yingyangfly.baselib.db.AppDataBase
+import com.yingyangfly.baselib.db.QuestionOptionDao
+import com.yingyangfly.baselib.db.QuestionRecordsDao
 import com.yingyangfly.baselib.db.QuestionsDao
 import com.yingyangfly.baselib.dialog.LoadingDialog
 import com.yingyangfly.baselib.ext.getDbClass
@@ -28,8 +30,7 @@ import gorden.rxbus2.RxBus
 /**
  * activity基类
  */
-abstract class BaseActivity<DB : ViewDataBinding> : AppCompatActivity(),
-    OnRefreshLoadMoreListener {
+abstract class BaseActivity<DB : ViewDataBinding> : AppCompatActivity(), OnRefreshLoadMoreListener {
 
     /**
      * 确定初始化将总是发生在单个线程,那么你可以使用 LazyThreadSafetyMode.NONE模式, 它不会有任何线程安全的保证和相关的开销。
@@ -66,6 +67,11 @@ abstract class BaseActivity<DB : ViewDataBinding> : AppCompatActivity(),
      */
     var questionsDao: QuestionsDao? = null
 
+    /**
+     * 其他测评
+     */
+    var questionRecordsDao: QuestionRecordsDao? = null
+    var questionOptionDao: QuestionOptionDao? = null
 
     @SuppressLint("SourceLockedOrientationActivity")
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -80,8 +86,7 @@ abstract class BaseActivity<DB : ViewDataBinding> : AppCompatActivity(),
         ActivityManagers.instance.addActivity(this)
         initSmartRefresh()
         val params: ViewGroup.LayoutParams = LinearLayout.LayoutParams(
-            LinearLayout.LayoutParams.MATCH_PARENT,
-            LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
+            LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f
         )
         binding.root.layoutParams = params
         bindingBase.llytContent.addView(binding.root)
@@ -89,6 +94,8 @@ abstract class BaseActivity<DB : ViewDataBinding> : AppCompatActivity(),
         db = AppDataBase.getInstance(mContext.applicationContext)
         if (db != null) {
             questionsDao = db?.getQuestionsDao()
+            questionRecordsDao = db?.getQuestionRecordsDao()
+            questionOptionDao = db?.getQuestionOptionDao()
         }
         initMVVM()
         initViews()
@@ -257,8 +264,7 @@ abstract class BaseActivity<DB : ViewDataBinding> : AppCompatActivity(),
     fun showFragment(viewId: Int, f: Fragment) {
         try {
             val ft = supportFragmentManager.beginTransaction()
-            if (showFragment != null)
-                ft.hide(showFragment!!)
+            if (showFragment != null) ft.hide(showFragment!!)
             if (f.isAdded) {
                 ft.show(f)
             } else {

+ 1 - 23
baselib/src/main/java/com/yingyangfly/baselib/bean/QuestionRecordsListBean.kt

@@ -1,6 +1,6 @@
 package com.yingyangfly.baselib.bean
 
-import com.yingyangfly.baselib.db.QuestionOptionBean
+import com.yingyangfly.baselib.db.QuestionRecordsBean
 
 data class QuestionRecordsListBean(
     val countId: Any,
@@ -13,26 +13,4 @@ data class QuestionRecordsListBean(
     val searchCount: Boolean,
     val size: Int,
     val total: Int
-)
-
-data class QuestionRecordsBean(
-    val correctOptionId: Any,
-    val correctOptionName: Any,
-    val createBy: String,
-    val createTime: String,
-    val examinationId: String,
-    val examinationTitle: Any,
-    val id: String,
-    val limit: Int,
-    val manualHelp: String,
-    val orgCode: String,
-    val orgName: String,
-    val page: Int,
-    val questionOptions: List<QuestionOptionBean>,
-    val score: Int,
-    val status: String,
-    val title: String,
-    val updateBy: String,
-    val updateTime: String,
-    val usedTime: Any
 )

+ 3 - 1
baselib/src/main/java/com/yingyangfly/baselib/db/AppDataBase.kt

@@ -6,7 +6,7 @@ import androidx.room.Room
 import androidx.room.RoomDatabase
 
 @Database(
-    entities = [QuestionsBean::class, VoicePlayerBean::class, ExaminationRecord::class, QuestionOptionBean::class],
+    entities = [QuestionsBean::class, VoicePlayerBean::class, ExaminationRecord::class, QuestionOptionBean::class, QuestionRecordsBean::class],
     version = 1
 )
 abstract class AppDataBase : RoomDatabase() {
@@ -19,6 +19,8 @@ abstract class AppDataBase : RoomDatabase() {
 
     abstract fun getQuestionOptionDao(): QuestionOptionDao
 
+    abstract fun getQuestionRecordsDao(): QuestionRecordsDao
+
     companion object {
         @Volatile
         private var sInstance: AppDataBase? = null

+ 8 - 2
baselib/src/main/java/com/yingyangfly/baselib/db/QuestionOptionBean.java

@@ -3,6 +3,7 @@ package com.yingyangfly.baselib.db;
 import android.text.TextUtils;
 
 import androidx.room.Entity;
+import androidx.room.Ignore;
 import androidx.room.PrimaryKey;
 
 /**
@@ -17,14 +18,19 @@ public class QuestionOptionBean {
     private int uid;
 
     private String correctOption;
-    private String createBy;
-    private String createTime;
     private String id;
     private String optionKey;
     private String optionVal;
     private String questionId;
+
+    @Ignore
     private String updateBy;
+    @Ignore
     private String updateTime;
+    @Ignore
+    private String createBy;
+    @Ignore
+    private String createTime;
 
     public int getUid() {
         return uid;

+ 266 - 0
baselib/src/main/java/com/yingyangfly/baselib/db/QuestionRecordsBean.java

@@ -0,0 +1,266 @@
+package com.yingyangfly.baselib.db;
+
+import android.text.TextUtils;
+
+import androidx.room.Entity;
+import androidx.room.Ignore;
+import androidx.room.PrimaryKey;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 试题内容列表
+ * @author 王鹏鹏
+ */
+@Entity(tableName = "QuestionRecords")
+public class QuestionRecordsBean {
+
+    @PrimaryKey(autoGenerate = true)
+    private int uid;
+
+    private String correctOptionId;
+    private String correctOptionName;
+    private String examinationId;
+    private String examinationTitle;
+    private String id;
+    private String manualHelp;
+    private String orgCode;
+    private String orgName;
+    private String score;
+    private String status;
+    private String title;
+    private String usedTime;
+
+    @Ignore
+    private String createBy;
+    @Ignore
+    private String createTime;
+    @Ignore
+    private String updateBy;
+    @Ignore
+    private String updateTime;
+    @Ignore
+    private String page;
+    @Ignore
+    private List<QuestionOptionBean> questionOptions;
+    @Ignore
+    private String limit;
+
+    public int getUid() {
+        return uid;
+    }
+
+    public void setUid(int uid) {
+        this.uid = uid;
+    }
+
+    public String getCorrectOptionId() {
+        if (TextUtils.isEmpty(correctOptionId)) {
+            return "";
+        }
+        return correctOptionId;
+    }
+
+    public void setCorrectOptionId(String correctOptionId) {
+        this.correctOptionId = correctOptionId;
+    }
+
+    public String getCorrectOptionName() {
+        if (TextUtils.isEmpty(correctOptionName)) {
+            return "";
+        }
+        return correctOptionName;
+    }
+
+    public void setCorrectOptionName(String correctOptionName) {
+        this.correctOptionName = correctOptionName;
+    }
+
+    public String getCreateBy() {
+        if (TextUtils.isEmpty(createBy)) {
+            return "";
+        }
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getCreateTime() {
+        if (TextUtils.isEmpty(createTime)) {
+            return "";
+        }
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getExaminationId() {
+        if (TextUtils.isEmpty(examinationId)) {
+            return "";
+        }
+        return examinationId;
+    }
+
+    public void setExaminationId(String examinationId) {
+        this.examinationId = examinationId;
+    }
+
+    public String getExaminationTitle() {
+        if (TextUtils.isEmpty(examinationTitle)) {
+            return "";
+        }
+        return examinationTitle;
+    }
+
+    public void setExaminationTitle(String examinationTitle) {
+        this.examinationTitle = examinationTitle;
+    }
+
+    public String getId() {
+        if (TextUtils.isEmpty(id)) {
+            return "";
+        }
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getLimit() {
+        if (TextUtils.isEmpty(limit)) {
+            return "";
+        }
+        return limit;
+    }
+
+    public void setLimit(String limit) {
+        this.limit = limit;
+    }
+
+    public String getManualHelp() {
+        if (TextUtils.isEmpty(manualHelp)) {
+            return "";
+        }
+        return manualHelp;
+    }
+
+    public void setManualHelp(String manualHelp) {
+        this.manualHelp = manualHelp;
+    }
+
+    public String getOrgCode() {
+        if (TextUtils.isEmpty(orgCode)) {
+            return "";
+        }
+        return orgCode;
+    }
+
+    public void setOrgCode(String orgCode) {
+        this.orgCode = orgCode;
+    }
+
+    public String getOrgName() {
+        if (TextUtils.isEmpty(orgName)) {
+            return "";
+        }
+        return orgName;
+    }
+
+    public void setOrgName(String orgName) {
+        this.orgName = orgName;
+    }
+
+    public String getPage() {
+        if (TextUtils.isEmpty(page)) {
+            return "";
+        }
+        return page;
+    }
+
+    public void setPage(String page) {
+        this.page = page;
+    }
+
+    public List<QuestionOptionBean> getQuestionOptions() {
+        if (questionOptions == null) {
+            questionOptions = new ArrayList<>();
+        }
+        return questionOptions;
+    }
+
+    public void setQuestionOptions(List<QuestionOptionBean> questionOptions) {
+        this.questionOptions = questionOptions;
+    }
+
+    public String getScore() {
+        if (TextUtils.isEmpty(score)) {
+            return "";
+        }
+        return score;
+    }
+
+    public void setScore(String score) {
+        this.score = score;
+    }
+
+    public String getStatus() {
+        if (TextUtils.isEmpty(status)) {
+            return "";
+        }
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getTitle() {
+        if (TextUtils.isEmpty(title)) {
+            return "";
+        }
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getUpdateBy() {
+        if (TextUtils.isEmpty(updateBy)) {
+            return "";
+        }
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public String getUpdateTime() {
+        if (TextUtils.isEmpty(updateTime)) {
+            return "";
+        }
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUsedTime() {
+        if (TextUtils.isEmpty(usedTime)) {
+            return "";
+        }
+        return usedTime;
+    }
+
+    public void setUsedTime(String usedTime) {
+        this.usedTime = usedTime;
+    }
+}

+ 26 - 0
baselib/src/main/java/com/yingyangfly/baselib/db/QuestionRecordsDao.kt

@@ -0,0 +1,26 @@
+package com.yingyangfly.baselib.db
+
+import androidx.room.*
+
+@Dao
+interface QuestionRecordsDao : BaseDao<QuestionRecordsBean> {
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    fun insert(element: QuestionRecordsBean)
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    override fun insertAll(list: MutableList<QuestionRecordsBean>)
+
+    @Query("select * from QuestionRecords")
+    fun getAllQuestionRecordsBeanBean(): MutableList<QuestionRecordsBean>
+
+    @Query("select * from QuestionRecords where uid = :uid")
+    fun getQuestionRecordsBeanByUid(uid: String): List<QuestionRecordsBean>
+
+    @Query("delete from QuestionRecords")
+    fun deleteAll()
+
+    @Update
+    override fun update(element: QuestionRecordsBean)
+
+}

+ 20 - 0
evaluation/src/main/java/com/yingyangfly/evaluation/otherevaluation/OtherEvaluationActivity.kt

@@ -8,6 +8,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.yingyangfly.baselib.db.ExaminationRecord
+import com.yingyangfly.baselib.db.QuestionOptionBean
+import com.yingyangfly.baselib.db.QuestionRecordsBean
 import com.yingyangfly.baselib.ext.getEndAnimation
 import com.yingyangfly.baselib.ext.getScaleAnimation
 import com.yingyangfly.baselib.ext.toast
@@ -54,6 +56,12 @@ class OtherEvaluationActivity :
 
             rvEvaluation.adapter = examinationAdapter
             examinationAdapter.onClickListener = {
+                if (questionRecordsDao != null) {
+                    questionRecordsDao?.deleteAll()
+                }
+                if (questionOptionDao != null) {
+                    questionOptionDao?.deleteAll()
+                }
                 getQuestionList(it.examinationId)
             }
         }
@@ -167,6 +175,18 @@ class OtherEvaluationActivity :
             it.toast()
         }, success = {
             if (it != null && it.records.isNullOrEmpty().not()) {
+                val questionRecordsBean = mutableListOf<QuestionRecordsBean>()
+                questionRecordsBean.addAll(it.records)
+                val questionOptionBean = mutableListOf<QuestionOptionBean>()
+                it.records.forEach {
+                    questionOptionBean.addAll(it.questionOptions)
+                }
+                if (questionRecordsDao != null) {
+                    questionRecordsDao?.insertAll(questionRecordsBean)
+                }
+                if (questionOptionDao != null) {
+                    questionOptionDao?.insertAll(questionOptionBean)
+                }
                 JumpUtil.jumpActivity(RouterUrlCommon.questionList, mContext)
             }
         })

+ 4 - 10
evaluation/src/main/java/com/yingyangfly/evaluation/questionlist/QuestionListActivity.kt

@@ -24,6 +24,7 @@ class QuestionListActivity : BaseActivity<ActivityQuestionListBinding>(), View.O
 
     override fun initViews() {
         rxTimer = RxTimer()
+
     }
 
     @SuppressLint("ClickableViewAccessibility")
@@ -76,16 +77,9 @@ class QuestionListActivity : BaseActivity<ActivityQuestionListBinding>(), View.O
      * 退出确认弹窗
      */
     private fun showTipsDialog() {
-        TipsDialog.TipDialogBuilder()
-            .title("提示")
-            .content("您确定取消测评?")
-            .leftBtnText("取消")
-            .rightBtnText("确定")
-            .leftClick({
-            }, true)
-            .rightClick({
+        TipsDialog.TipDialogBuilder().title("提示").content("您确定取消测评?").leftBtnText("取消")
+            .rightBtnText("确定").leftClick({}, true).rightClick({
                 finish()
-            }, true)
-            .show(supportFragmentManager)
+            }, true).show(supportFragmentManager)
     }
 }