Commit ea57c8d609700b40fa515a2d7c64cabd95c87ce9

Authored by shixianjie
1 parent bd79e76cdd
Exists in master

周总结和阶段性总结列表展示

.idea/deploymentTargetDropDown.xml
... ... @@ -3,7 +3,20 @@
3 3 <component name="deploymentTargetDropDown">
4 4 <value>
5 5 <entry key="app">
6   - <State />
  6 + <State>
  7 + <runningDeviceTargetSelectedWithDropDown>
  8 + <Target>
  9 + <type value="RUNNING_DEVICE_TARGET" />
  10 + <deviceKey>
  11 + <Key>
  12 + <type value="SERIAL_NUMBER" />
  13 + <value value="192.168.3.176:35119" />
  14 + </Key>
  15 + </deviceKey>
  16 + </Target>
  17 + </runningDeviceTargetSelectedWithDropDown>
  18 + <timeTargetWasSelectedWithDropDown value="2024-10-09T03:21:59.277023400Z" />
  19 + </State>
7 20 </entry>
8 21 </value>
9 22 </component>
... ...
app/src/main/java/com/hjx/parent/StuHomeworkActivity.java
... ... @@ -3,12 +3,21 @@ package com.hjx.parent;
3 3 import android.annotation.SuppressLint;
4 4 import android.content.Intent;
5 5 import android.os.Bundle;
  6 +import android.view.Gravity;
  7 +import android.view.View;
  8 +import android.widget.ImageView;
6 9 import android.widget.LinearLayout;
  10 +import android.widget.PopupMenu;
7 11 import android.widget.PopupWindow;
  12 +import android.widget.TextView;
8 13  
  14 +import androidx.annotation.NonNull;
9 15 import androidx.annotation.Nullable;
10 16 import androidx.lifecycle.MutableLiveData;
11 17  
  18 +import com.chad.library.adapter.base.BaseQuickAdapter;
  19 +import com.chad.library.adapter.base.BaseViewHolder;
  20 +import com.google.android.material.tabs.TabLayout;
12 21 import com.google.gson.Gson;
13 22 import com.hjx.parent.adapter.HomeworkListAdapter;
14 23 import com.hjx.parent.databinding.ActivityStudentHomeworkBinding;
... ... @@ -17,14 +26,27 @@ import com.hjx.parent.databinding.PopupFilterGradeBinding;
17 26 import com.hjx.parent.databinding.PopupFilterSubjectBinding;
18 27 import com.hjx.parent.databinding.PopupFilterTermBinding;
19 28 import com.hjx.parent.dialog.MsgConfirmDialog;
  29 +import com.hjx.parent.dialog.StageHuyouDialog;
  30 +import com.hjx.parent.function.Function1;
20 31 import com.hjx.parent.rx.BaseRxActivity;
  32 +import com.prws.common.bean.ResponseResult;
21 33 import com.prws.common.bean.Student;
22 34 import com.prws.common.bean.homework.HomeworkList;
  35 +import com.prws.common.bean.homework.StDetail;
23 36 import com.prws.common.net.NetWorks;
24 37 import com.prws.common.utils.SharedPreferencesUtil;
25 38 import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
26 39  
  40 +import java.text.DecimalFormat;
  41 +import java.text.SimpleDateFormat;
  42 +import java.util.ArrayList;
  43 +import java.util.Calendar;
27 44 import java.util.Collections;
  45 +import java.util.Date;
  46 +import java.util.HashMap;
  47 +import java.util.List;
  48 +import java.util.Locale;
  49 +import java.util.Map;
28 50  
29 51 import io.reactivex.Observable;
30 52 import io.reactivex.android.schedulers.AndroidSchedulers;
... ... @@ -34,8 +56,14 @@ public class StuHomeworkActivity extends BaseRxActivity&lt;ActivityStudentHomeworkB
34 56  
35 57 private final HomeworkListAdapter homeworkAdapter = new HomeworkListAdapter();
36 58  
  59 + private final List<StDetail> mWeekList = new ArrayList<>();
  60 + private final List<StDetail> mStageList = new ArrayList<>();
  61 + private final HuyouAdapter weekAdapter = new HuyouAdapter(mWeekList);
  62 + private final HuyouAdapter stageAdapter = new HuyouAdapter(mStageList);
  63 +
37 64 PopupWindow subjectFilter, gradeFilter, termFilter, feedbackFilter;
38 65 MsgConfirmDialog deleteDialog;
  66 + StageHuyouDialog stageHuyouDialog;
39 67 State state = new State();
40 68  
41 69 private void handlerIntent() {
... ... @@ -55,7 +83,7 @@ public class StuHomeworkActivity extends BaseRxActivity&lt;ActivityStudentHomeworkB
55 83 }
56 84 binding.toolbar.setNavigationOnClickListener(v -> onBackPressed());
57 85 binding.tvTitle.setText(state.student.stuName + "的全部作业");
58   -
  86 + setupTab();
59 87 binding.recyclerView.setAdapter(homeworkAdapter);
60 88  
61 89 binding.ftSubject.setOnClickListener(v -> showSubjectFilter());
... ... @@ -96,6 +124,15 @@ public class StuHomeworkActivity extends BaseRxActivity&lt;ActivityStudentHomeworkB
96 124 intent.putExtra("needBack", true);
97 125 startActivityForResult(intent, 0xA01);
98 126 });
  127 +
  128 + binding.btnGeneralHuyou.setOnClickListener(v -> generalWeek());
  129 + binding.btnStageHuyou.setOnClickListener(v -> {
  130 + if (stageHuyouDialog == null) stageHuyouDialog = new StageHuyouDialog(this);
  131 + stageHuyouDialog.show(this::generalStage);
  132 + });
  133 +
  134 + getWeekHuyou();
  135 + getStageHuyou();
99 136 }
100 137  
101 138 @Override
... ... @@ -114,11 +151,43 @@ public class StuHomeworkActivity extends BaseRxActivity&lt;ActivityStudentHomeworkB
114 151 state.student = new Gson().fromJson(json, Student.class);
115 152 binding.tvTitle.setText(state.student.stuName + "的全部作业");
116 153 getHomework();
  154 + getWeekHuyou();
  155 + getStageHuyou();
117 156 }
118 157 catch (Throwable t) { t.printStackTrace(); }
119 158 }
120 159 }
121 160  
  161 + private void setupTab() {
  162 + binding.tabLayout.addTab(binding.tabLayout.newTab().setText("每日作业"));
  163 + binding.tabLayout.addTab(binding.tabLayout.newTab().setText("每周总结"));
  164 + binding.tabLayout.addTab(binding.tabLayout.newTab().setText("阶段性总结"));
  165 + binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
  166 + @Override
  167 + public void onTabSelected(TabLayout.Tab tab) {
  168 + binding.filterBar.setVisibility(View.GONE);
  169 + binding.weekBar.setVisibility(View.GONE);
  170 + binding.stageBar.setVisibility(View.GONE);
  171 + if (tab.getPosition() == 0) { //每日
  172 + binding.filterBar.setVisibility(View.VISIBLE);
  173 + binding.recyclerView.setAdapter(homeworkAdapter);
  174 + } else if (tab.getPosition() == 1) { //每周
  175 + binding.weekBar.setVisibility(View.VISIBLE);
  176 + binding.recyclerView.setAdapter(weekAdapter);
  177 + } else if (tab.getPosition() == 2) { //阶段
  178 + binding.stageBar.setVisibility(View.VISIBLE);
  179 + binding.recyclerView.setAdapter(stageAdapter);
  180 + }
  181 + }
  182 + @Override
  183 + public void onTabUnselected(TabLayout.Tab tab) {
  184 + }
  185 + @Override
  186 + public void onTabReselected(TabLayout.Tab tab) {
  187 + }
  188 + });
  189 + }
  190 +
122 191 @SuppressLint("CheckResult")
123 192 protected void deleteHomework(HomeworkList data) {
124 193 NetWorks.service_url.deleteHomework(NetWorks.getHeader(), data.getId())
... ... @@ -174,6 +243,101 @@ public class StuHomeworkActivity extends BaseRxActivity&lt;ActivityStudentHomeworkB
174 243 });
175 244 }
176 245  
  246 + @SuppressLint({"CheckResult", "NotifyDataSetChanged"})
  247 + private void getWeekHuyou() {
  248 + NetWorks.service_url.getHuyouList(NetWorks.getHeader(), state.student.stuId, 0)
  249 + .compose(transformSingle())
  250 + .map(ResponseResult::getData)
  251 + .subscribe((list, throwable) -> {
  252 + if (throwable != null) {
  253 + throwable.printStackTrace();
  254 + return;
  255 + }
  256 + if (list != null) {
  257 + mWeekList.clear();
  258 + mWeekList.addAll(list);
  259 + weekAdapter.notifyDataSetChanged();
  260 +
  261 + boolean exist = false;
  262 + int thisWeek = Calendar.getInstance().get(Calendar.WEEK_OF_YEAR);
  263 + for (StDetail bean: mWeekList) {
  264 + Calendar other = Calendar.getInstance();
  265 + other.setTime(bean.endTime);
  266 + if (other.get(Calendar.WEEK_OF_YEAR) == thisWeek) {
  267 + exist = true;
  268 + break;
  269 + }
  270 + }
  271 + binding.btnGeneralHuyou.setVisibility(exist ? View.GONE : View.VISIBLE);
  272 + }
  273 + });
  274 + }
  275 +
  276 + @SuppressLint({"CheckResult", "NotifyDataSetChanged"})
  277 + private void getStageHuyou() {
  278 + NetWorks.service_url.getHuyouList(NetWorks.getHeader(), state.student.stuId, 1)
  279 + .compose(transformSingle())
  280 + .map(ResponseResult::getData)
  281 + .subscribe((list, throwable) -> {
  282 + if (throwable != null) {
  283 + throwable.printStackTrace();
  284 + return;
  285 + }
  286 + if (list != null) {
  287 + mStageList.clear();
  288 + mStageList.addAll(list);
  289 + stageAdapter.notifyDataSetChanged();
  290 + }
  291 + });
  292 + }
  293 +
  294 + @SuppressLint("CheckResult")
  295 + private void generalWeek() {
  296 + showLoadingDialog("稍等...");
  297 + NetWorks.service_url.generalHuyou()
  298 + .compose(transformSingle())
  299 + .subscribe((response, throwable) -> {
  300 + cancelLoadingDialog();
  301 + if (throwable != null) {
  302 + loadFail("失败");
  303 + throwable.printStackTrace();
  304 + return;
  305 + }
  306 + if (response != null && response.getSuccess()) {
  307 + binding.btnGeneralHuyou.setVisibility(View.GONE);
  308 + getWeekHuyou();
  309 + }
  310 + });
  311 + }
  312 +
  313 + @SuppressLint("CheckResult")
  314 + private void generalStage(Date startDate, Date endDate, String subject) {
  315 + SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss", Locale.CHINA);
  316 + Map<String, Object> body = new HashMap<>();
  317 + body.put("stuId", state.student.stuId);
  318 + body.put("startTime", format.format(startDate));
  319 + body.put("endTime", format.format(endDate));
  320 + body.put("subject", subject);
  321 + showLoadingDialog("稍等...");
  322 + NetWorks.service_url.generalStageHuyou(NetWorks.getHeader(), body)
  323 + .subscribeOn(Schedulers.io())
  324 + .observeOn(AndroidSchedulers.mainThread())
  325 + .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
  326 + .subscribe((response, throwable) -> {
  327 + if (throwable != null) {
  328 + loadFail("失败");
  329 + throwable.printStackTrace();
  330 + return;
  331 + }
  332 + if (response.getSuccess()) {
  333 + getStageHuyou();
  334 + cancelLoadingDialog();
  335 + } else {
  336 + loadFail(response.getMsg());
  337 + }
  338 + });
  339 + }
  340 +
177 341 private void showSubjectFilter() {
178 342 if (subjectFilter == null) {
179 343 PopupFilterSubjectBinding db = PopupFilterSubjectBinding.inflate(getLayoutInflater());
... ... @@ -255,4 +419,52 @@ public class StuHomeworkActivity extends BaseRxActivity&lt;ActivityStudentHomeworkB
255 419 feedback.setValue(value);
256 420 }
257 421 }
  422 +
  423 + static class HuyouAdapter extends BaseQuickAdapter<StDetail, BaseViewHolder> {
  424 + public Function1<StDetail> deleteCall;
  425 + public Student student;
  426 +
  427 + public HuyouAdapter(@Nullable List<StDetail> data) {
  428 + super(R.layout.item_homework_list, data);
  429 + }
  430 +
  431 + @SuppressLint("SetTextI18n,SimpleDateFormat")
  432 + @Override
  433 + protected void convert(@NonNull BaseViewHolder holder, StDetail data) {
  434 + holder.setGone(R.id.tvFlag, false);
  435 + int subjectImg;
  436 + switch (data.homeworkSubject) {
  437 + case "语文":
  438 + subjectImg = R.drawable.ic_chinese;
  439 + break;
  440 + case "英语":
  441 + subjectImg = R.drawable.ic_english;
  442 + break;
  443 + case "物理":
  444 + subjectImg = R.drawable.ic_physics;
  445 + break;
  446 + case "化学":
  447 + subjectImg = R.drawable.ic_chemistry;
  448 + break;
  449 + case "数学":
  450 + default:
  451 + subjectImg = R.drawable.ic_math;
  452 + }
  453 + holder.setImageResource(R.id.ivSubject, subjectImg);
  454 + Date endDate = new Date(data.endTime.getTime() - 1000);
  455 + String startStr = new SimpleDateFormat("yyyy.M.d").format(data.startTime);
  456 + String endStr = new SimpleDateFormat("-M.d").format(endDate);
  457 + String typeStr = data.type == 0 ? "作业周总结" : "作业阶段性总结";
  458 + String title = startStr + endStr + data.homeworkSubject + typeStr;
  459 + holder.setText(R.id.tvName, title);
  460 + holder.setText(R.id.tvGrade, data.grade);
  461 + }
  462 +
  463 + private SimpleDateFormat getFormatWithGmt8(String pattern) {
  464 + SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.CHINA);
  465 + //format.setTimeZone(TimeZone.getTimeZone("GMT+16"));
  466 + return format;
  467 + }
  468 + }
  469 +
258 470 }
... ...
app/src/main/java/com/hjx/parent/dialog/StageHuyouDialog.java
... ... @@ -0,0 +1,96 @@
  1 +package com.hjx.parent.dialog;
  2 +
  3 +import android.content.Context;
  4 +import android.view.View;
  5 +import android.widget.RadioButton;
  6 +import android.widget.Toast;
  7 +
  8 +import androidx.annotation.NonNull;
  9 +
  10 +import com.bigkoo.pickerview.builder.TimePickerBuilder;
  11 +import com.bigkoo.pickerview.view.TimePickerView;
  12 +import com.hjx.parent.databinding.DialogStageHuyouBinding;
  13 +import com.hjx.parent.function.Function3;
  14 +
  15 +import java.text.SimpleDateFormat;
  16 +import java.util.Date;
  17 +
  18 +public class StageHuyouDialog extends BaseDialog<DialogStageHuyouBinding>{
  19 +
  20 + Function3<Date, Date, String> callback;
  21 + Date startDate;
  22 + Date endDate;
  23 +
  24 + public StageHuyouDialog(Context context) {
  25 + super(context);
  26 + }
  27 +
  28 + @Override
  29 + public void initView() {
  30 + super.initView();
  31 + RadioButton firstRb = (RadioButton) binding.rgSubject.getChildAt(0);
  32 + firstRb.setChecked(true);
  33 + binding.btnClose.setOnClickListener(v -> {
  34 + dismiss();
  35 + });
  36 + binding.tvStart.setOnClickListener(v -> {
  37 + TimePickerView pickerView = new TimePickerBuilder(getContext(), (date, p) -> {
  38 + long t = date.getTime();
  39 + long day = 24 * 60 * 60 * 1000;
  40 + long h8 = 8 * 60 * 60 * 1000;
  41 + startDate = new Date(t / day * day - h8);
  42 + binding.tvStart.setText(new SimpleDateFormat("yyyy-MM-dd").format(startDate));
  43 + }).setType(new boolean[] {true, true, true, false, false, false}).isDialog(true).build();
  44 + pickerView.show();
  45 + });
  46 + binding.tvEnd.setOnClickListener(v -> {
  47 + TimePickerView pickerView = new TimePickerBuilder(getContext(), (date, p) -> {
  48 + long t = date.getTime();
  49 + long day = 24 * 60 * 60 * 1000;
  50 + long h8 = 8 * 60 * 60 * 1000;
  51 + endDate = new Date(t / day * day - h8 + day - 1000);
  52 + binding.tvEnd.setText(new SimpleDateFormat("yyyy-MM-dd").format(endDate));
  53 + }).setType(new boolean[] {true, true, true, false, false, false}).isDialog(true).build();
  54 + pickerView.show();
  55 + });
  56 + binding.btnConfirm.setOnClickListener(v -> {
  57 + if (startDate == null) {
  58 + Toast.makeText(getContext(), "请先设置开始时间和截止时间。", Toast.LENGTH_SHORT).show();
  59 + return;
  60 + }
  61 + if (endDate == null) {
  62 + Toast.makeText(getContext(), "请先设置开始时间和截止时间。", Toast.LENGTH_SHORT).show();
  63 + return;
  64 + }
  65 + if (endDate.before(startDate)) {
  66 + Toast.makeText(getContext(), "结束时间不能早于开始时间", Toast.LENGTH_SHORT).show();
  67 + return;
  68 + }
  69 + String subject = "";
  70 + for (int i = 0; i < binding.rgSubject.getChildCount(); i++) {
  71 + View view = binding.rgSubject.getChildAt(i);
  72 + if (!(view instanceof RadioButton)) {
  73 + continue;
  74 + }
  75 + RadioButton rb = (RadioButton) view;
  76 + if (rb.isChecked()) {
  77 + subject = rb.getText().toString();
  78 + break;
  79 + }
  80 + }
  81 + if (callback != null) callback.invoke(startDate, endDate, subject);
  82 + dismiss();
  83 + });
  84 + }
  85 +
  86 + public void show(Function3<Date, Date, String> callback) {
  87 + this.callback = callback;
  88 + super.show();
  89 + }
  90 +
  91 + @NonNull
  92 + @Override
  93 + public DialogStageHuyouBinding getBinding() {
  94 + return DialogStageHuyouBinding.inflate(getLayoutInflater());
  95 + }
  96 +}
... ...
app/src/main/res/color/color_huyou_subject_select.xml
... ... @@ -0,0 +1,5 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <item android:color="@color/white" android:state_checked="true"/>
  4 + <item android:color="#333"/>
  5 +</selector>
0 6 \ No newline at end of file
... ...
app/src/main/res/drawable/bg_huyou_time_select.xml
... ... @@ -0,0 +1,7 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <corners android:radius="4dp"/>
  5 + <stroke android:width="1dp" android:color="#ccc"/>
  6 +
  7 +</shape>
0 8 \ No newline at end of file
... ...
app/src/main/res/drawable/btn_general_huyou.xml
... ... @@ -0,0 +1,7 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<shape xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <corners android:radius="12dp"/>
  5 + <stroke android:color="#1C90F3" android:width="1dp" android:dashWidth="6dp" android:dashGap="3dp"/>
  6 +
  7 +</shape>
0 8 \ No newline at end of file
... ...
app/src/main/res/drawable/btn_huyou_subject_select.xml
... ... @@ -0,0 +1,18 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<selector xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <item android:state_checked="true">
  5 + <shape>
  6 + <corners android:radius="88dp"/>
  7 + <solid android:color="#489AFA"/>
  8 + </shape>
  9 + </item>
  10 +
  11 + <item>
  12 + <shape>
  13 + <corners android:radius="88dp"/>
  14 + <solid android:color="#F5F5F5"/>
  15 + </shape>
  16 + </item>
  17 +
  18 +</selector>
0 19 \ No newline at end of file
... ...
app/src/main/res/drawable/svg_close_24.xml
... ... @@ -0,0 +1,10 @@
  1 +<vector xmlns:android="http://schemas.android.com/apk/res/android"
  2 + android:width="24dp"
  3 + android:height="24dp"
  4 + android:viewportWidth="24"
  5 + android:viewportHeight="24">
  6 + <path
  7 + android:pathData="M22.482,4.316L14.748,11.686L22.477,19.05C23.235,19.772 23.235,20.942 22.477,21.664L22.134,21.991C21.377,22.713 20.148,22.713 19.391,21.991L11.846,14.802L4.302,21.991C3.544,22.713 2.316,22.713 1.558,21.991L1.215,21.664C0.457,20.942 0.457,19.772 1.215,19.05L8.949,11.681L1.22,4.316C0.462,3.594 0.462,2.424 1.22,1.702L1.563,1.375C2.321,0.653 3.549,0.653 4.307,1.375L11.851,8.564L19.396,1.375C20.153,0.653 21.382,0.653 22.139,1.375L22.482,1.702C23.24,2.424 23.24,3.594 22.482,4.316Z"
  8 + android:fillColor="#333333"
  9 + android:fillType="evenOdd"/>
  10 +</vector>
... ...
app/src/main/res/layout/activity_student_homework.xml
... ... @@ -32,7 +32,23 @@
32 32 android:layout_width="20dp"
33 33 android:layout_height="20dp"/>
34 34 </androidx.appcompat.widget.Toolbar>
  35 + <com.google.android.material.tabs.TabLayout
  36 + android:id="@+id/tabLayout"
  37 + app:tabMode="fixed"
  38 + app:tabGravity="fill"
  39 + app:tabTextColor="#333333"
  40 + app:tabSelectedTextColor="#1C90F3"
  41 + app:tabIndicatorColor="#1C90F3"
  42 + app:tabIndicatorHeight="2dp"
  43 + app:tabIndicatorFullWidth="false"
  44 + app:tabTextAppearance="@style/tab_homework"
  45 + app:tabRippleColor="@color/transparent"
  46 + android:background="@color/white"
  47 + android:layout_width="match_parent"
  48 + android:layout_height="45dp"/>
35 49 <LinearLayout
  50 + android:id="@+id/filterBar"
  51 + tools:visibility="gone"
36 52 android:orientation="horizontal"
37 53 android:background="@color/white"
38 54 android:paddingHorizontal="15dp"
... ... @@ -64,6 +80,48 @@
64 80 android:layout_width="0dp"
65 81 android:layout_height="0dp"/>
66 82  
  83 + <FrameLayout
  84 + android:id="@+id/weekBar"
  85 + android:visibility="gone"
  86 + android:layout_width="match_parent"
  87 + android:layout_height="wrap_content">
  88 + <TextView
  89 + android:id="@+id/btnGeneralHuyou"
  90 + android:visibility="gone"
  91 + tools:visibility="visible"
  92 + android:text="生成本周作业总结"
  93 + android:textSize="13sp"
  94 + android:textColor="#1C90F3"
  95 + android:gravity="center"
  96 + android:textStyle="bold"
  97 + android:background="@drawable/btn_general_huyou"
  98 + android:layout_marginTop="16dp"
  99 + android:layout_marginHorizontal="30dp"
  100 + android:layout_width="match_parent"
  101 + android:layout_height="35dp"
  102 + tools:ignore="HardcodedText" />
  103 + </FrameLayout>
  104 +
  105 + <FrameLayout
  106 + android:id="@+id/stageBar"
  107 + android:visibility="gone"
  108 + android:layout_width="match_parent"
  109 + android:layout_height="wrap_content">
  110 + <TextView
  111 + android:id="@+id/btnStageHuyou"
  112 + android:text="生成阶段性作业总结"
  113 + android:textSize="13sp"
  114 + android:textColor="#1C90F3"
  115 + android:gravity="center"
  116 + android:textStyle="bold"
  117 + android:background="@drawable/btn_general_huyou"
  118 + android:layout_marginTop="16dp"
  119 + android:layout_marginHorizontal="30dp"
  120 + android:layout_width="match_parent"
  121 + android:layout_height="35dp"
  122 + tools:ignore="HardcodedText" />
  123 + </FrameLayout>
  124 +
67 125 <androidx.recyclerview.widget.RecyclerView
68 126 android:id="@+id/recyclerView"
69 127 android:background="#F8F8F8"
... ...
app/src/main/res/layout/dialog_stage_huyou.xml
... ... @@ -0,0 +1,173 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<FrameLayout
  3 + xmlns:android="http://schemas.android.com/apk/res/android"
  4 + xmlns:tools="http://schemas.android.com/tools"
  5 + android:layout_width="match_parent"
  6 + android:layout_height="match_parent"
  7 + tools:ignore="UselessParent,HardcodedText,ContentDescription,SmallSp">
  8 +
  9 + <LinearLayout
  10 + android:scaleX="0.72"
  11 + android:scaleY="0.72"
  12 + android:orientation="vertical"
  13 + android:paddingBottom="16dp"
  14 + android:background="@drawable/shape_radius_10"
  15 + android:backgroundTint="@color/white"
  16 + android:layout_gravity="center"
  17 + android:layout_width="416dp"
  18 + android:layout_height="wrap_content">
  19 + <FrameLayout
  20 + android:paddingVertical="16dp"
  21 + android:layout_width="match_parent"
  22 + android:layout_height="wrap_content">
  23 + <TextView
  24 + android:id="@+id/tvTitle"
  25 + android:text="设置阶段性总结"
  26 + android:textSize="20sp"
  27 + android:textColor="#333"
  28 + android:textStyle="bold"
  29 + android:layout_gravity="center"
  30 + android:layout_width="wrap_content"
  31 + android:layout_height="wrap_content"/>
  32 + <ImageView
  33 + android:id="@+id/btnClose"
  34 + android:src="@drawable/svg_close_24"
  35 + android:padding="8dp"
  36 + android:layout_marginEnd="8dp"
  37 + android:layout_gravity="end|center_vertical"
  38 + android:layout_width="32dp"
  39 + android:layout_height="32dp" />
  40 + </FrameLayout>
  41 +
  42 + <TextView
  43 + android:text="选择时间:"
  44 + android:textSize="18sp"
  45 + android:textColor="#333"
  46 + android:textStyle="bold"
  47 + android:layout_marginHorizontal="16dp"
  48 + android:layout_marginTop="2dp"
  49 + android:layout_width="wrap_content"
  50 + android:layout_height="wrap_content"/>
  51 +
  52 + <LinearLayout
  53 + android:orientation="horizontal"
  54 + android:layout_marginHorizontal="16dp"
  55 + android:layout_marginTop="12dp"
  56 + android:layout_width="match_parent"
  57 + android:layout_height="wrap_content">
  58 + <TextView
  59 + android:id="@+id/tvStart"
  60 + android:hint="开始时间"
  61 + android:textSize="18sp"
  62 + android:textColor="#333"
  63 + android:textColorHint="#999"
  64 + android:gravity="center_vertical"
  65 + android:paddingHorizontal="6dp"
  66 + android:background="@drawable/bg_huyou_time_select"
  67 + android:layout_weight="1"
  68 + android:layout_width="0dp"
  69 + android:layout_height="36dp"/>
  70 + <TextView
  71 + android:text="至"
  72 + android:textSize="18sp"
  73 + android:textColor="#333"
  74 + android:layout_marginHorizontal="8dp"
  75 + android:layout_width="wrap_content"
  76 + android:layout_height="wrap_content"/>
  77 + <TextView
  78 + android:id="@+id/tvEnd"
  79 + android:hint="截至时间"
  80 + android:textSize="18sp"
  81 + android:textColor="#333"
  82 + android:textColorHint="#999"
  83 + android:gravity="center_vertical"
  84 + android:paddingHorizontal="6dp"
  85 + android:background="@drawable/bg_huyou_time_select"
  86 + android:layout_weight="1"
  87 + android:layout_width="0dp"
  88 + android:layout_height="36dp"/>
  89 + </LinearLayout>
  90 +
  91 + <TextView
  92 + android:text="选择科目:"
  93 + android:textSize="18sp"
  94 + android:textColor="#333"
  95 + android:textStyle="bold"
  96 + android:layout_marginHorizontal="16dp"
  97 + android:layout_marginTop="24dp"
  98 + android:layout_width="wrap_content"
  99 + android:layout_height="wrap_content"/>
  100 + <RadioGroup
  101 + android:id="@+id/rgSubject"
  102 + android:orientation="horizontal"
  103 + android:layout_marginHorizontal="16dp"
  104 + android:layout_marginTop="12dp"
  105 + android:layout_width="match_parent"
  106 + android:layout_height="wrap_content">
  107 + <RadioButton
  108 + android:text="数学"
  109 + android:button="@null"
  110 + android:textSize="14sp"
  111 + android:gravity="center"
  112 + android:textColor="@color/color_huyou_subject_select"
  113 + android:background="@drawable/btn_huyou_subject_select"
  114 + android:layout_width="64dp"
  115 + android:layout_height="32dp"/>
  116 + <Space style="@style/empty_space"/>
  117 + <RadioButton
  118 + android:text="语文"
  119 + android:button="@null"
  120 + android:textSize="14sp"
  121 + android:gravity="center"
  122 + android:textColor="@color/color_huyou_subject_select"
  123 + android:background="@drawable/btn_huyou_subject_select"
  124 + android:layout_width="64dp"
  125 + android:layout_height="32dp"/>
  126 + <Space style="@style/empty_space"/>
  127 + <RadioButton
  128 + android:text="英语"
  129 + android:button="@null"
  130 + android:textSize="14sp"
  131 + android:gravity="center"
  132 + android:textColor="@color/color_huyou_subject_select"
  133 + android:background="@drawable/btn_huyou_subject_select"
  134 + android:layout_width="64dp"
  135 + android:layout_height="32dp"/>
  136 + <Space style="@style/empty_space"/>
  137 + <RadioButton
  138 + android:text="物理"
  139 + android:button="@null"
  140 + android:textSize="14sp"
  141 + android:gravity="center"
  142 + android:textColor="@color/color_huyou_subject_select"
  143 + android:background="@drawable/btn_huyou_subject_select"
  144 + android:layout_width="64dp"
  145 + android:layout_height="32dp"/>
  146 + <Space style="@style/empty_space"/>
  147 + <RadioButton
  148 + android:text="化学"
  149 + android:button="@null"
  150 + android:textSize="14sp"
  151 + android:gravity="center"
  152 + android:textColor="@color/color_huyou_subject_select"
  153 + android:background="@drawable/btn_huyou_subject_select"
  154 + android:layout_width="64dp"
  155 + android:layout_height="32dp"/>
  156 + </RadioGroup>
  157 +
  158 + <TextView
  159 + android:id="@+id/btnConfirm"
  160 + android:text="确认生成"
  161 + android:textSize="18sp"
  162 + android:textColor="@color/white"
  163 + android:gravity="center"
  164 + android:background="@drawable/shape_circle"
  165 + android:backgroundTint="#489AFA"
  166 + android:layout_gravity="center_horizontal"
  167 + android:layout_marginTop="24dp"
  168 + android:layout_width="120dp"
  169 + android:layout_height="40dp"/>
  170 +
  171 + </LinearLayout>
  172 +
  173 +</FrameLayout>
0 174 \ No newline at end of file
... ...
app/src/main/res/values/appearance.xml
... ... @@ -6,4 +6,8 @@
6 6 <item name="android:textStyle">bold</item>
7 7 </style>
8 8  
  9 + <style name="tab_homework">
  10 + <item name="android:textSize">13sp</item>
  11 + </style>
  12 +
9 13 </resources>
10 14 \ No newline at end of file
... ...
libs/common/src/main/java/com/prws/common/bean/homework/StDetail.java
... ... @@ -0,0 +1,70 @@
  1 +package com.prws.common.bean.homework;
  2 +
  3 +import com.google.gson.Gson;
  4 +import com.google.gson.GsonBuilder;
  5 +import com.google.gson.reflect.TypeToken;
  6 +
  7 +import java.util.ArrayList;
  8 +import java.util.Date;
  9 +import java.util.List;
  10 +
  11 +public class StDetail {
  12 +
  13 + public String id;
  14 +
  15 + public String stuId;
  16 + public Date startTime;
  17 + public Date endTime;
  18 + public String homeworkSubject;
  19 + public String scId;
  20 + public String grade;
  21 +
  22 + public int total;
  23 + public int correct;
  24 +
  25 + public float mondayCorrection;
  26 + public float tuesdayCorrection;
  27 + public float wednesdayCorrection;
  28 + public float thursdayCorrection;
  29 + public float fridayCorrection;
  30 +
  31 + public String correction;
  32 + public transient List<Correction> correctionList;
  33 +
  34 + public List<Point> points;
  35 +
  36 + public int type;
  37 +
  38 + public void formatCollection() {
  39 + correctionList = new ArrayList<>();
  40 + if (correction == null) {
  41 + return;
  42 + }
  43 + Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
  44 + try {
  45 + List<Correction> list = gson.fromJson(correction, new TypeToken<List<Correction>>(){}.getType());
  46 + for (Correction item: list) {
  47 + if (item != null && item.date != null) {
  48 + correctionList.add(item);
  49 + }
  50 + }
  51 + } catch (Exception e){
  52 + e.printStackTrace();
  53 + }
  54 + }
  55 +
  56 + public static class Point {
  57 + public String pointId;
  58 + public String pointName;
  59 + public float beforeState;
  60 + public float afterState;
  61 + public float gap;
  62 + public float correctness;
  63 + }
  64 +
  65 + public static class Correction {
  66 + public float correction;
  67 + public Date date;
  68 + }
  69 +
  70 +}
... ...
libs/common/src/main/java/com/prws/common/net/NetWorks.java
... ... @@ -17,6 +17,7 @@ import com.prws.common.bean.baidu.BaiduInput;
17 17 import com.prws.common.bean.homework.HomeWork;
18 18 import com.prws.common.bean.homework.HomeworkDetail;
19 19 import com.prws.common.bean.homework.HomeworkList;
  20 +import com.prws.common.bean.homework.StDetail;
20 21 import com.prws.common.utils.BitmapUtils;
21 22 import com.prws.common.utils.SharedPreferencesUtil;
22 23  
... ... @@ -221,6 +222,34 @@ public class NetWorks extends RetrofitUtils {
221 222 @Query("type") boolean type
222 223 );
223 224  
  225 + @GET("api/v1/homework/listHomeworkStatistics")
  226 + Single<ResponseResult<List<StDetail>>> getHuyouList(
  227 + @Header("Authorization") String token,
  228 + @Query("stuId") String stuId,
  229 + @Query("type") int type //0: 周报, 1:阶段总结
  230 + );
  231 +
  232 + @GET("api/v1/homework/listHomeworkStatisticsDetailForStudent")
  233 + Single<ResponseResult<StDetail>> getHuyouDetail(
  234 + @Header("Authorization") String token,
  235 + @Query("homeworkStatisticsId") String homeworkId
  236 + );
  237 +
  238 + @GET("api/v1/demo/generalStatisticsHomework")
  239 + Single<ResponseResult<Object>> generalHuyou();
  240 +
  241 + @POST("api/v1/homework/generalHomeworkStageStatistics")
  242 + Single<ResponseResult<Boolean>> generalStageHuyou(
  243 + @Header("Authorization") String token,
  244 + @Body Object body
  245 + );
  246 +
  247 + @GET("api/v1/homework/removeHomeworkStatistics")
  248 + Single<ResponseResult<Boolean>> deleteHuyou(
  249 + @Header("Authorization") String token,
  250 + @Query("homeworkStatisticsId") String homeworkId
  251 + );
  252 +
224 253 }
225 254  
226 255 public static String getUserId() {
... ...