[function]补录功能

This commit is contained in:
Ming 2022-04-08 13:07:49 +08:00
parent 714bac19f9
commit bafc66cdaa
7 changed files with 375 additions and 69 deletions

View File

@ -44,3 +44,5 @@ const val NUMBER = "counter"
const val TIMING_NAME = "定时计数(秒)"
const val NUMBER_NAME = "定数计数(个)"
const val ACTIVITY = "ACTIVITY"

View File

@ -16,6 +16,7 @@ import com.skipping.net.ScoreReqBean
import com.skipping.utils.*
import com.skipping.view.dialog.DialogBean
import com.skipping.view.dialog.DialogTool
import com.tencent.mmkv.MMKV
import kotlinx.android.synthetic.main.activity_begin.*
import kotlinx.android.synthetic.main.activity_home.*
import kotlinx.android.synthetic.main.net_item.view.*
@ -29,11 +30,28 @@ import java.util.concurrent.ScheduledFuture
*/
class BeginActivity : BaseActivity<BeginPresenter>() {
lateinit var adaper: BeginGridAdaper
val mmkv = MMKV.defaultMMKV()
/**
* 详情列表
*/
lateinit var detailBean: DetailActivityBean
lateinit var future: ScheduledFuture<*>
lateinit var dialog: AlertDialog
/**
* 可选择的班级列表
*/
var choseGradeBeanList = mutableListOf<DialogBean<List<DetailActivityBean.CandidatesBean>>>()
/**
* 选择的班级
*/
lateinit var showBean: List<DetailActivityBean.CandidatesBean>
/**
* 选择的组别
*/
var position = 0
var scList = mutableListOf<ScoreReqBean.CandidatesBean>()
var complete = mutableListOf<Int>()
@ -63,31 +81,35 @@ class BeginActivity : BaseActivity<BeginPresenter>() {
}
override fun initData() {
p.getActivityDetail(intent.getBundleExtra(DATA).getString(ID))
var saveBean = mmkv?.decodeParcelable(ACTIVITY + intent.getBundleExtra(DATA).getString(ID), DetailActivityBean::class.java)
if (saveBean == null) {
p.getActivityDetail(intent.getBundleExtra(DATA).getString(ID))
} else {
activityDetailResult(saveBean)
}
begin_back.setOnClickListener {
finish()
}
begin_start.setOnClickListener {
//当不是连接模式或吗,没有设备连接提示
if (!ConnectManager.getSingleton().deviceStatus || !ConnectManager.getSingleton().deviceNum()) {
ToastUtil.longToast("请先连接设备并开启连接模式")
return@setOnClickListener
}
if (detailBean.activityType == TIMING) {
//定时计数
var num = detailBean.activityValue
ConnectManager.getSingleton().startJumpLimitTime(num)
future = ThreadPoolUtil.getSingleton().scheduleWithFixedDelayMain({
if (num <= 0) {
ConnectManager.getSingleton().stopGetScore()
// ConnectManager.getSingleton().stopJump()
future.cancel(false)
choseGradeBeanList.get(position).bean = showBean
choseGradeBeanList.get(position).bean
ConnectManager.getSingleton().getCount()
score()
flushScore()
score()
begin_listRL.isClickable = true
begin_start.isClickable = true
return@scheduleWithFixedDelayMain
@ -99,29 +121,6 @@ class BeginActivity : BaseActivity<BeginPresenter>() {
begin_type.text = "${TIMING_NAME} ${num}"
flushScore()
}, 1000, 1000)
} else {
//定数计时
// future = ThreadPoolUtil.getSingleton().scheduleWithFixedDelayMain({
// if(){
//
// }
//
//
// if (num <= 0) {
// ConnectManager.getSingleton().stopGetScore()
//// ConnectManager.getSingleton().stopJump()
// future.cancel(false)
// choseGradeBeanList.get(position).bean = showBean
// choseGradeBeanList.get(position).bean
// score()
// ConnectManager.getSingleton().getCount()
// return@scheduleWithFixedDelayMain
// }
// ConnectManager.getSingleton().getCount()
// num--
// begin_type.text = "${NUMBER_NAME} ${num} 个"
// flushScore()
// }, 1000, 1000)
}
}
begin_listRL.setOnClickListener {
@ -148,7 +147,6 @@ class BeginActivity : BaseActivity<BeginPresenter>() {
val num = NumberUtil.numberToChinese(index + 1)
choseGradeBeanList.add(DialogBean("$num", mutableList))
}
detailBean = bean
showBean = bean.candidates[0]
begin_name.text = bean.activityName
@ -174,24 +172,67 @@ class BeginActivity : BaseActivity<BeginPresenter>() {
adaper.notifyDataSetChanged()
}
/**
* 提交成绩
*/
fun score() {
var bean = ScoreReqBean.CandidatesBean()
bean.complateTime = (System.currentTimeMillis() / 1000).toInt()
var list = mutableListOf<ScoreReqBean.CandidatesBean.InfoBean>()
choseGradeBeanList.get(position).bean.forEachIndexed() { po, it ->
var info = ScoreReqBean.CandidatesBean.InfoBean()
info.personID = it.personID
info.score = it.score
info.detail = cute(po)
list.add(info)
showBean.forEachIndexed { index, candidatesBean ->
val list = ConnectManager.getSingleton().scoreMap[index + 1]
detailBean.candidates[position][index].detail = list
}
bean.info = list
scList.add(bean)
complete.add(position)
if (complete.size == choseGradeBeanList.size) {
p.score(intent.getBundleExtra(DATA).getString(ID).toInt(), detailBean.step, scList)
if (inspect()) {
var bean = ScoreReqBean()
bean.id = detailBean.id
bean.step = detailBean.step
var canList = mutableListOf<ScoreReqBean.CandidatesBean>()
detailBean.candidates.forEach {
var can = ScoreReqBean.CandidatesBean()
can.complateTime = (System.currentTimeMillis() / 1000).toInt()
it.forEach {
var infoBean = ScoreReqBean.CandidatesBean.InfoBean()
infoBean.personID = it.personID
infoBean.score = it.score
infoBean.detail = it.detail
can.info.add(infoBean)
}
canList.add(can)
}
bean.candidates = canList
p.score(bean)
}
// var bean = ScoreReqBean.CandidatesBean()
// bean.complateTime = (System.currentTimeMillis() / 1000).toInt()
// var list = mutableListOf<ScoreReqBean.CandidatesBean.InfoBean>()
// choseGradeBeanList.get(position).bean.forEachIndexed() { po, it ->
// var info = ScoreReqBean.CandidatesBean.InfoBean()
// info.personID = it.personID
// info.score = it.score
// info.detail = cute(po)
// list.add(info)
// }
// bean.info = list
// scList.add(bean)
// complete.add(position)
// if (scList.size == choseGradeBeanList.size) {
//
// p.score(intent.getBundleExtra(DATA).getString(ID).toInt(), detailBean.step, scList)
// }
}
/**
*
*/
fun inspect(): Boolean {
detailBean.candidates.forEachIndexed { index, mutableList ->
detailBean.candidates[index].forEach {
if (it.detail == null || it.detail.size == 0) {
return false
}
}
}
return true
}
fun cute(position: Int): List<Int>? {
@ -221,4 +262,10 @@ class BeginActivity : BaseActivity<BeginPresenter>() {
finish()
}
override fun onDestroy() {
mmkv?.encode(ACTIVITY + intent.getBundleExtra(DATA).getString(ID), detailBean)
super.onDestroy()
}
}

View File

@ -7,10 +7,7 @@ import com.libs.network.CallBack
import com.libs.network.Concise
import com.libs.utils.LogUtil
import com.libs.utils.ToastUtil
import com.skipping.ACCOUNT
import com.skipping.BASE_URL
import com.skipping.PASSWORD
import com.skipping.TOKEN
import com.skipping.*
import com.skipping.activity.IView
import com.skipping.net.*
import com.tencent.mmkv.MMKV
@ -35,23 +32,23 @@ class BeginPresenter() : BasePresenter<BeginActivity>() {
})
}
fun score(id:Int,step:Int,list: List<ScoreReqBean.CandidatesBean>) {
var bean = ScoreReqBean()
bean.id = id
bean.step = step
bean.candidates = list
fun score(bean:ScoreReqBean) {
LogUtil.e("提交数据",bean)
concise.request(v, concise.api.score(bean), object : CallBack<BaseBean<*>> {
override fun onSuccess(k: BaseBean<*>?) {
if(k?.code == 0){
ToastUtil.longToast("成绩提交成功")
mmkv?.remove(ACTIVITY + bean.id)
v.scoreResult()
}else{
ToastUtil.longToast(k?.msg)
}
}
// concise.request(v, concise.api.score(bean), object : CallBack<BaseBean<*>> {
// override fun onSuccess(k: BaseBean<*>?) {
// ToastUtil.longToast("成绩提交成功")
// v.scoreResult()
// }
//
// override fun onFailed(e: Throwable?) {
// ToastUtil.longToast("成绩提交失败")
// }
//
// })
override fun onFailed(e: Throwable?) {
ToastUtil.longToast("成绩提交失败")
}
})
}
}

View File

@ -0,0 +1,139 @@
package com.skipping.net;
import android.os.Parcelable;
import java.util.List;
/**
* @author Ming
* 4/8/22
*/
public class DetailAcBean {
/**
* ID : 1
* ActivityName : 活动1
* ActivityType : timing
* ActivityValue : 60
* Step : 2
* Max : 12
* Avg : 9.75
* Median : 9.5
* Candidates : [[{"PersonID":"329b20b046f5888bcd5165d115f1","Name":"xiaofang","StudentID":"1002","Score":12,"Detail":null},{"PersonID":"4557de13408aaf9057752285c81a","Name":"xiaohai","StudentID":"1003","Score":8,"Detail":null},{"PersonID":"4dee38df466fa8469f0e62f672fb","Name":"xiaoli","StudentID":"1004","Score":9,"Detail":null}]]
*/
private Integer ID;
private String ActivityName;
private String ActivityType;
private Integer ActivityValue;
private Integer Step;
private Integer Max;
private Double Avg;
private Double Median;
private List<List<DetailActivityBean.CandidatesBean>> Candidates;
public Integer getId() {
return ID;
}
public void setId(Integer id) {
this.ID = id;
}
public String getActivityName() {
return ActivityName;
}
public void setActivityName(String activityName) {
ActivityName = activityName;
}
public String getActivityType() {
return ActivityType;
}
public void setActivityType(String activityType) {
ActivityType = activityType;
}
public Integer getActivityValue() {
return ActivityValue;
}
public void setActivityValue(Integer activityValue) {
ActivityValue = activityValue;
}
public Integer getStep() {
return Step;
}
public void setStep(Integer step) {
Step = step;
}
public Integer getMax() {
return Max;
}
public void setMax(Integer max) {
Max = max;
}
public Double getAvg() {
return Avg;
}
public void setAvg(Double avg) {
Avg = avg;
}
public Double getMedian() {
return Median;
}
public void setMedian(Double median) {
Median = median;
}
public List<List<DetailActivityBean.CandidatesBean>> getCandidates() {
return Candidates;
}
public void setCandidates(List<List<DetailActivityBean.CandidatesBean>> candidates) {
Candidates = candidates;
}
@Override
public String toString() {
return "DetailActivityBean{" +
"id=" + ID +
", ActivityName='" + ActivityName + '\'' +
", ActivityType='" + ActivityType + '\'' +
", ActivityValue=" + ActivityValue +
", Step=" + Step +
", Max=" + Max +
", Avg=" + Avg +
", Median=" + Median +
", Candidates=" + Candidates +
'}';
}
public static class CandidatesBean{
/**
* PersonID : 329b20b046f5888bcd5165d115f1
* Name : xiaofang
* StudentID : 1002
* Score : 12
* Detail : [0,1,2]
*/
private String PersonID;
private String Name;
private String StudentID;
private Integer Score;
private List<Integer> Detail;
}
}

View File

@ -1,15 +1,19 @@
package com.skipping.net;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author Ming
* 3/15/22
*/
public class DetailActivityBean implements Serializable {
public class DetailActivityBean implements Parcelable {
/**
* ID : 1
@ -120,7 +124,7 @@ public class DetailActivityBean implements Serializable {
'}';
}
public static class CandidatesBean implements Serializable {
public static class CandidatesBean implements Parcelable {
/**
* PersonID : 329b20b046f5888bcd5165d115f1
* Name : xiaofang
@ -185,5 +189,111 @@ public class DetailActivityBean implements Serializable {
", Detail=" + Detail +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.PersonID);
dest.writeString(this.Name);
dest.writeString(this.StudentID);
dest.writeValue(this.Score);
dest.writeList(this.Detail);
}
public void readFromParcel(Parcel source) {
this.PersonID = source.readString();
this.Name = source.readString();
this.StudentID = source.readString();
this.Score = (Integer) source.readValue(Integer.class.getClassLoader());
this.Detail = new ArrayList<Integer>();
source.readList(this.Detail, Integer.class.getClassLoader());
}
public CandidatesBean() {
}
protected CandidatesBean(Parcel in) {
this.PersonID = in.readString();
this.Name = in.readString();
this.StudentID = in.readString();
this.Score = (Integer) in.readValue(Integer.class.getClassLoader());
this.Detail = new ArrayList<Integer>();
in.readList(this.Detail, Integer.class.getClassLoader());
}
public static final Parcelable.Creator<CandidatesBean> CREATOR = new Parcelable.Creator<CandidatesBean>() {
@Override
public CandidatesBean createFromParcel(Parcel source) {
return new CandidatesBean(source);
}
@Override
public CandidatesBean[] newArray(int size) {
return new CandidatesBean[size];
}
};
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(this.ID);
dest.writeString(this.ActivityName);
dest.writeString(this.ActivityType);
dest.writeValue(this.ActivityValue);
dest.writeValue(this.Step);
dest.writeValue(this.Max);
dest.writeValue(this.Avg);
dest.writeValue(this.Median);
dest.writeList(this.Candidates);
}
public void readFromParcel(Parcel source) {
this.ID = (Integer) source.readValue(Integer.class.getClassLoader());
this.ActivityName = source.readString();
this.ActivityType = source.readString();
this.ActivityValue = (Integer) source.readValue(Integer.class.getClassLoader());
this.Step = (Integer) source.readValue(Integer.class.getClassLoader());
this.Max = (Integer) source.readValue(Integer.class.getClassLoader());
this.Avg = (Double) source.readValue(Double.class.getClassLoader());
this.Median = (Double) source.readValue(Double.class.getClassLoader());
this.Candidates = new ArrayList<List<CandidatesBean>>();
source.readList(this.Candidates, CandidatesBean.class.getClassLoader());
}
public DetailActivityBean() {
}
protected DetailActivityBean(Parcel in) {
this.ID = (Integer) in.readValue(Integer.class.getClassLoader());
this.ActivityName = in.readString();
this.ActivityType = in.readString();
this.ActivityValue = (Integer) in.readValue(Integer.class.getClassLoader());
this.Step = (Integer) in.readValue(Integer.class.getClassLoader());
this.Max = (Integer) in.readValue(Integer.class.getClassLoader());
this.Avg = (Double) in.readValue(Double.class.getClassLoader());
this.Median = (Double) in.readValue(Double.class.getClassLoader());
this.Candidates = new ArrayList<List<CandidatesBean>>();
in.readList(this.Candidates, CandidatesBean.class.getClassLoader());
}
public static final Parcelable.Creator<DetailActivityBean> CREATOR = new Parcelable.Creator<DetailActivityBean>() {
@Override
public DetailActivityBean createFromParcel(Parcel source) {
return new DetailActivityBean(source);
}
@Override
public DetailActivityBean[] newArray(int size) {
return new DetailActivityBean[size];
}
};
}

View File

@ -3,6 +3,7 @@ package com.skipping.net;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
@ -61,7 +62,7 @@ public class ScoreReqBean implements Serializable {
*/
private Integer ComplateTime;
private List<InfoBean> Info;
private List<InfoBean> Info = new ArrayList<>();
public Integer getComplateTime() {
return ComplateTime;

View File

@ -50,9 +50,17 @@ public class ConnectManager {
private OnflushList onflushList;
private ScheduledFuture scheduledFuture;
private static volatile ConnectManager connectManager;
/**
* 设备列表
*/
public List<DeviceBean> deviceBeanList = new ArrayList<>();
private ScheduledFuture future;
private DialogTool dialog;
/**
* 成绩列表 key是设备id value是成绩
*/
public HashMap<Integer, List<Integer>> scoreMap = new HashMap<>();
private boolean getScore = false;
public Boolean deviceStatus = false;
@ -333,6 +341,7 @@ public class ConnectManager {
loopDevice = (LoopDevice) msg.obj;
LogUtil.e("连接LoopDevice__LOOP_GET_DEVICE_INFO", loopDevice.toString());
if (getScore) {
//当执行获取模式保存在scoreMap key是设备id value是成绩
if (scoreMap.get(loopDevice.loopDeviceId) == null) {
List<Integer> list = new ArrayList<>();
list.add(loopDevice.count);
@ -341,6 +350,7 @@ public class ConnectManager {
scoreMap.get(loopDevice.loopDeviceId).add(loopDevice.count);
}
} else {
//当不是获取模式刷新设备列表
addList(loopDevice);
}
break;