|
@@ -0,0 +1,191 @@
|
|
|
+package org.brynhild.graduation.activity.common
|
|
|
+
|
|
|
+import android.annotation.SuppressLint
|
|
|
+import android.os.Bundle
|
|
|
+import android.view.LayoutInflater
|
|
|
+import android.webkit.WebSettings
|
|
|
+import android.webkit.WebView
|
|
|
+import android.webkit.WebViewClient
|
|
|
+import android.widget.Toast
|
|
|
+import androidx.core.content.ContextCompat
|
|
|
+import com.google.gson.Gson
|
|
|
+import org.brynhild.graduation.common.config.LoginConfiguration
|
|
|
+import org.brynhild.graduation.common.constant.StatisticConstant
|
|
|
+import org.brynhild.graduation.common.transfer.Result
|
|
|
+import org.brynhild.graduation.common.transfer.bo.timetable.StatisticInfo
|
|
|
+import org.brynhild.graduation.common.transfer.dto.FileInfo
|
|
|
+import org.brynhild.graduation.common.transfer.handler.ResponseHandler
|
|
|
+import org.brynhild.graduation.common.transfer.utils.ServiceCreator
|
|
|
+import org.brynhild.graduation.common.transfer.vo.timetable.AdminQueryClassStatistic
|
|
|
+import org.brynhild.graduation.common.transfer.vo.timetable.AdminQueryStudentStatistic
|
|
|
+import org.brynhild.graduation.common.utils.FileDownloadUtil
|
|
|
+import org.brynhild.graduation.common.utils.JsonUtils
|
|
|
+import org.brynhild.graduation.databinding.ActivityStatisticBinding
|
|
|
+import org.brynhild.graduation.service.http.CommonService
|
|
|
+import retrofit2.Call
|
|
|
+import retrofit2.Callback
|
|
|
+import retrofit2.Response
|
|
|
+import kotlin.properties.Delegates
|
|
|
+
|
|
|
+class StatisticActivity : BaseActivity() {
|
|
|
+ private lateinit var binding: ActivityStatisticBinding
|
|
|
+ private var type by Delegates.notNull<Int>()
|
|
|
+ private var id by Delegates.notNull<Long>()
|
|
|
+
|
|
|
+ @SuppressLint("SetJavaScriptEnabled")
|
|
|
+ override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
+ super.onCreate(savedInstanceState)
|
|
|
+
|
|
|
+
|
|
|
+ binding=ActivityStatisticBinding.inflate(LayoutInflater.from(this))
|
|
|
+ setContentView(binding.root)
|
|
|
+
|
|
|
+ type=intent.getIntExtra(StatisticConstant.ACTION,1)
|
|
|
+ id=intent.getLongExtra(StatisticConstant.ID_ENUM,0L)
|
|
|
+
|
|
|
+
|
|
|
+ val webSettings: WebSettings = binding.backupChart.settings
|
|
|
+ webSettings.domStorageEnabled = true
|
|
|
+ webSettings.javaScriptEnabled = true
|
|
|
+ webSettings.javaScriptCanOpenWindowsAutomatically = true
|
|
|
+ webSettings.setSupportZoom(false)
|
|
|
+ webSettings.displayZoomControls = false
|
|
|
+ binding.backupChart.setBackgroundColor(ContextCompat.getColor(this, android.R.color.transparent))
|
|
|
+ binding.backupChart.loadUrl("file:///android_asset/echarts.html")
|
|
|
+ binding.backupChart.webViewClient = object : WebViewClient() {
|
|
|
+ override fun onPageFinished(view: WebView?, url: String?) {
|
|
|
+ super.onPageFinished(view, url)
|
|
|
+ loadStatisticInfo()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ bindOnClick()
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun bindOnClick(){
|
|
|
+ binding.downloadStatistic.setOnClickListener {
|
|
|
+ val service=ServiceCreator.create(CommonService::class.java)
|
|
|
+ val handler=object:Callback<Result>{
|
|
|
+ override fun onResponse(call: Call<Result>, response: Response<Result>) {
|
|
|
+ ResponseHandler.handle(response,{
|
|
|
+ val gson=Gson()
|
|
|
+ val list=ArrayList<FileInfo>()
|
|
|
+ for(item in it.data as List<*>){
|
|
|
+ val json=gson.toJson(item)
|
|
|
+ val info=JsonUtils.fromJson<FileInfo>(json)
|
|
|
+ if(info!=null){
|
|
|
+ list.add(info)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(list.size==1){
|
|
|
+ val info=list[0]
|
|
|
+ val downLoadName=if(type==StatisticConstant.STUDENT_ACTION){
|
|
|
+ "student-${id}.docx"
|
|
|
+ }else{
|
|
|
+ "class-${id}.docx"
|
|
|
+ }
|
|
|
+ println("download:${info.path}")
|
|
|
+ FileDownloadUtil.downLoad(info.path,downLoadName){
|
|
|
+ Toast.makeText(this@StatisticActivity,"文件下载完成",Toast.LENGTH_SHORT).show()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },{
|
|
|
+ ResponseHandler.showMessage(it)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onFailure(call: Call<Result>, t: Throwable) {
|
|
|
+ t.printStackTrace()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ when(type){
|
|
|
+ StatisticConstant.CLASS_ACTION->{
|
|
|
+ val data=AdminQueryClassStatistic(id)
|
|
|
+ service.generateClassStatistic(LoginConfiguration.userInfo!!.token,data).enqueue(handler)
|
|
|
+ }
|
|
|
+ StatisticConstant.STUDENT_ACTION->{
|
|
|
+ val data=AdminQueryStudentStatistic(id)
|
|
|
+ service.generateStudentStatistic(LoginConfiguration.userInfo!!.token,data).enqueue(handler)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ binding.title.text="考勤数据"
|
|
|
+ binding.backButton.setOnClickListener {
|
|
|
+ finish()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private fun loadStatisticInfo() {
|
|
|
+ val service=ServiceCreator.create(CommonService::class.java)
|
|
|
+ val handler=object:Callback<Result>{
|
|
|
+ override fun onResponse(call: Call<Result>, response: Response<Result>) {
|
|
|
+ ResponseHandler.handle(response,{
|
|
|
+ val gson=Gson()
|
|
|
+ val list=ArrayList<StatisticInfo>()
|
|
|
+ println(gson.toJson(it))
|
|
|
+ for(item in it.data as List<*>){
|
|
|
+ val json=gson.toJson(item)
|
|
|
+ val info=JsonUtils.fromJson<StatisticInfo>(json)
|
|
|
+ if(info!=null){
|
|
|
+ list.add(info)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ renderStatisticInfoList(list)
|
|
|
+ },{
|
|
|
+ ResponseHandler.showMessage(it)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onFailure(call: Call<Result>, t: Throwable) {
|
|
|
+ t.printStackTrace()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ when(type){
|
|
|
+ StatisticConstant.CLASS_ACTION->{
|
|
|
+ val data=AdminQueryClassStatistic(id)
|
|
|
+ service.queryClassStatistic(LoginConfiguration.userInfo!!.token,data).enqueue(handler)
|
|
|
+ }
|
|
|
+ StatisticConstant.STUDENT_ACTION->{
|
|
|
+ val data=AdminQueryStudentStatistic(id)
|
|
|
+ service.queryStudentStatistic(LoginConfiguration.userInfo!!.token,data).enqueue(handler)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun renderStatisticInfoList(list:List<StatisticInfo>){
|
|
|
+ var first=true
|
|
|
+ val nameBuilder=StringBuilder()
|
|
|
+ val rateBuilder=StringBuilder()
|
|
|
+
|
|
|
+ for(item in list){
|
|
|
+ if(!first){
|
|
|
+ nameBuilder.append(",")
|
|
|
+ rateBuilder.append(",")
|
|
|
+ }
|
|
|
+ nameBuilder.append(item.course.name)
|
|
|
+ rateBuilder.append(item.rate*100)
|
|
|
+ first=false
|
|
|
+ }
|
|
|
+ val chartOptions = """
|
|
|
+ setChartOptions(
|
|
|
+ {
|
|
|
+ xAxis: {type: 'value'},
|
|
|
+ yAxis: {type: 'category', data: [${nameBuilder}]},
|
|
|
+ series: [{
|
|
|
+ type: 'bar',
|
|
|
+ data: [${rateBuilder}],
|
|
|
+ label: {show: true, position: 'inside'}
|
|
|
+ }]
|
|
|
+ }
|
|
|
+ );
|
|
|
+ """
|
|
|
+ println(chartOptions)
|
|
|
+ binding.backupChart.evaluateJavascript(chartOptions, null)
|
|
|
+ }
|
|
|
+
|
|
|
+}
|