package com.hjx.parent; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.bumptech.glide.Glide; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import com.google.android.flexbox.FlexboxLayoutManager; import com.google.gson.Gson; import com.hjx.parent.databinding.ActivityHomeworkFeedbackBinding; import com.hjx.parent.rx.BaseRxActivity; import com.prws.common.bean.Student; import com.prws.common.bean.homework.Correction; import com.prws.common.bean.homework.CorrectionPoint; import com.prws.common.bean.homework.HomeWork; import com.prws.common.bean.homework.HomeworkList; import com.prws.common.bean.homework.KeyValue; import com.prws.common.net.NetWorks; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; public class HomeworkFeedbackActivity extends BaseRxActivity { private Student student; private HomeworkList mData; private ArrayList mList; private List corrections = new ArrayList<>(); @SuppressWarnings("unchecked") @Override public void initView(Bundle savedInstanceState) { binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); student = (Student) getIntent().getSerializableExtra("student"); mData = (HomeworkList) getIntent().getSerializableExtra("data"); mList = (ArrayList) getIntent().getSerializableExtra("list"); binding.tvStuName.setText(student.stuName); binding.tvGrade.setText(student.grade); List errorList = new ArrayList<>(); int correctNo = 0; for (HomeWork homeWork: mList) { homeWork.state = 1; homeWork.index = mList.indexOf(homeWork); corrections.add(new Correction(homeWork.brief, homeWork.check ? 1 : 0)); if (!homeWork.check) correctNo ++; else errorList.add(homeWork); } binding.tvPercent.setText(new DecimalFormat("0%").format(1f * correctNo / mList.size())); binding.rvCorrect.setLayoutManager(new FlexboxLayoutManager(this)); NumberAdapter numberAdapter = new NumberAdapter(mList); binding.rvCorrect.setAdapter(numberAdapter); binding.rvError.setVisibility(errorList.isEmpty() ? View.GONE : View.VISIBLE); binding.rvError.setAdapter(new EvalAdapter(errorList)); binding.btnDetail.setOnClickListener(v -> { viewTopicDetail(0); }); numberAdapter.setOnItemClickListener((baseQuickAdapter, view, i) -> { viewTopicDetail(i); }); binding.btnPublish.setOnClickListener(v -> submit()); } private void viewTopicDetail(int position) { Intent intent = new Intent(this, HomeworkTopicActivity.class); intent.putExtra("list", mList); intent.putExtra("position", position); startActivity(intent); } @SuppressLint("CheckResult") private void submit() { Map body = new HashMap<>(); body.put("homeworkId", mData.getId()); body.put("comment", binding.etComment.getText().toString()); body.put("stuId", student.stuId); body.put("points", countPoint()); body.put("correctionList", corrections); NetWorks.service_url.uploadHomeworkFeedback(NetWorks.getHeader(), body) .compose(transformSingle()) .subscribe((response, th) -> { if (th != null) th.printStackTrace(); if (response != null && response.getSuccess()) { // TODO Toast.makeText(this, "反馈成功", Toast.LENGTH_SHORT).show(); } }); } @SuppressLint("CheckResult") private List countPoint() { Set set = new HashSet<>(); Map totalTimes = new HashMap<>(); Map correctTimes = new HashMap<>(); Map underTimes = new HashMap<>(); Map baseTimes = new HashMap<>(); Map normalTimes = new HashMap<>(); Gson gson = new Gson(); for (HomeWork homeWork: mList) { homeWork.formatPoints(gson); set.addAll(homeWork.pointsObj); for (KeyValue keyValue: homeWork.pointsObj) { String key = keyValue.Key; if (totalTimes.containsKey(key)) { totalTimes.put(key, totalTimes.get(key) + 1); } else { totalTimes.put(key, 1); } if (!homeWork.check) { if (correctTimes.containsKey(key)) { correctTimes.put(key, correctTimes.get(key) + 1); } else { correctTimes.put(key, 1); } } else if (homeWork.state == 1) { if (underTimes.containsKey(key)) { underTimes.put(key, underTimes.get(key) + 1); } else { underTimes.put(key, 1); } } else if (homeWork.state == 2) { if (baseTimes.containsKey(key)) { baseTimes.put(key, baseTimes.get(key) + 1); } else { baseTimes.put(key, 1); } } else if (homeWork.state == 3) { if (normalTimes.containsKey(key)) { normalTimes.put(key, normalTimes.get(key) + 1); } else { normalTimes.put(key, 1); } } } } List points = new ArrayList<>(); for (KeyValue obj: set) { CorrectionPoint point = new CorrectionPoint(); point.pointId = obj.Key; point.pointName = obj.Value; point.totalCount = ifNull(totalTimes.get(obj.Key), 1); point.correctCount = ifNull(correctTimes.get(obj.Key), 0); point.understandCount = ifNull(underTimes.get(obj.Key), 0); point.basicCount = ifNull(baseTimes.get(obj.Key), 0); point.normalCount = ifNull(normalTimes.get(obj.Key), 0); points.add(point); } return points; } private int ifNull(Integer src, int defaultVal) { if (src == null) return defaultVal; else return src; } @Override protected ActivityHomeworkFeedbackBinding getViewBinding() { return ActivityHomeworkFeedbackBinding.inflate(getLayoutInflater()); } static class NumberAdapter extends BaseQuickAdapter { public NumberAdapter(List list) { super(R.layout.item_feedback_num, list); } @Override protected void convert(@NonNull BaseViewHolder holder, HomeWork homeWork) { int position = getData().indexOf(homeWork); holder.setText(R.id.tvNum, String.valueOf(position + 1)); if (homeWork.check) { holder.setImageResource(R.id.ivType, R.drawable.ic_wrong_small); } else { holder.setImageResource(R.id.ivType, R.drawable.ic_correct_small); } } } static class EvalAdapter extends BaseQuickAdapter { public EvalAdapter(@Nullable List data) { super(R.layout.item_homework_eval, data); } @Override protected void convert(@NonNull BaseViewHolder holder, HomeWork homeWork) { holder.itemView.setClipToOutline(true); holder.setText(R.id.tvNo, "题目" + (homeWork.index + 1)); ImageView iv = holder.getView(R.id.ivTopic); Glide.with(mContext).load(homeWork.url).into(iv); RadioButton chk1 = holder.getView(R.id.chk1); RadioButton chk2 = holder.getView(R.id.chk2); RadioButton chk3 = holder.getView(R.id.chk3); chk1.setOnCheckedChangeListener((v, b) -> { if (b) { homeWork.state = 1; } }); chk2.setOnCheckedChangeListener((v, b) -> { if (b) { homeWork.state = 2; } }); chk3.setOnCheckedChangeListener((v, b) -> { if (b) { homeWork.state = 3; } }); chk1.setChecked(homeWork.state == 1); chk2.setChecked(homeWork.state == 2); chk3.setChecked(homeWork.state == 3); } } }