Commit f9235109 authored by hywang's avatar hywang

1.增加换绑标签功能

parent 10459ada
...@@ -9,8 +9,8 @@ android { ...@@ -9,8 +9,8 @@ android {
applicationId "com.phlx.anchorcollect_p" applicationId "com.phlx.anchorcollect_p"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 12 versionCode 14
versionName "2.0.6" versionName "2.0.8"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
......
...@@ -92,6 +92,11 @@ ...@@ -92,6 +92,11 @@
android:configChanges="keyboardHidden|orientation|screenSize" android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask" android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize" /> android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.labelchange.LabelChangeActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize" />
<service <service
......
...@@ -17,6 +17,7 @@ import com.phlx.anchorcollect_p.ui.fragment.vm.PerformanceVM; ...@@ -17,6 +17,7 @@ import com.phlx.anchorcollect_p.ui.fragment.vm.PerformanceVM;
import com.phlx.anchorcollect_p.ui.fragment.vm.WeightManVM; import com.phlx.anchorcollect_p.ui.fragment.vm.WeightManVM;
import com.phlx.anchorcollect_p.ui.home.HomeVM; import com.phlx.anchorcollect_p.ui.home.HomeVM;
import com.phlx.anchorcollect_p.ui.info.CattleVM; import com.phlx.anchorcollect_p.ui.info.CattleVM;
import com.phlx.anchorcollect_p.ui.labelchange.LabelChangeVM;
import com.phlx.anchorcollect_p.ui.login.LoginVM; import com.phlx.anchorcollect_p.ui.login.LoginVM;
import com.phlx.anchorcollect_p.ui.main.MainVM; import com.phlx.anchorcollect_p.ui.main.MainVM;
import com.phlx.anchorcollect_p.ui.setting.SettingVM; import com.phlx.anchorcollect_p.ui.setting.SettingVM;
...@@ -104,6 +105,8 @@ public class VMFactory extends ViewModelProvider.NewInstanceFactory { ...@@ -104,6 +105,8 @@ public class VMFactory extends ViewModelProvider.NewInstanceFactory {
return (T) new BindVM(mApplication, repository); return (T) new BindVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(SettingVM.class)) { } else if (modelClass.isAssignableFrom(SettingVM.class)) {
return (T) new SettingVM(mApplication, repository); return (T) new SettingVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(LabelChangeVM.class)) {
return (T) new LabelChangeVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(SyncVM.class)) { } else if (modelClass.isAssignableFrom(SyncVM.class)) {
return (T) new SyncVM(mApplication, repository); return (T) new SyncVM(mApplication, repository);
......
...@@ -634,4 +634,44 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -634,4 +634,44 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
", remark='" + remark + '\'' + ", remark='" + remark + '\'' +
'}'; '}';
} }
public void copyEntity(CattleResumeEntity cre) {
this.unid= cre.getUnid();
this.registrationNo= cre.getRegistrationNo();
this.individualNo= cre.getIndividualNo();
this.circleNo= cre.getCircleNo();
this.raiseType= cre.getRaiseType();
this.raiseVarieties= cre.getRaiseVarieties();
this.birthdate= cre.getBirthdate();
this.birthHeavy= cre.getBirthHeavy();
this.sex= cre.getSex();
this.birthDifficulty= cre.getBirthDifficulty();
this.isTwins= cre.getIsTwins();
this.childTime= cre.getChildTime();
this.grade= cre.getGrade();
this.fatherReg= cre.getFatherReg();
this.motherReg= cre.getMotherReg();
this.fromMilkHeavy= cre.getFromMilkHeavy();
this.health= cre.getHealth();
this.junHeavy= cre.getJunHeavy();
this.decAppScore= cre.getDecAppScore();
this.photo= cre.getPhoto();
this.photoPath= cre.getPhotoPath();
this.status= cre.getStatus();
this.isOut= cre.getIsOut();
this.age= cre.getAge();
this.colour= cre.getColour();
this.inputTime= cre.getInputTime();
this.deptId= cre.getDeptId();
this.uploadStatus= cre.getUploadStatus();
this.uploadTime= cre.getUploadTime();
this.createBy= cre.getCreateBy();
this.createTime= cre.getCreateTime();
this.updateBy= cre.getUpdateBy();
this.updateTime= cre.getUpdateTime();
this.remark= cre.getRemark();
}
} }
...@@ -69,7 +69,7 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin ...@@ -69,7 +69,7 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin
private ImagePicker mImagePicker; private ImagePicker mImagePicker;
public MaterialDialog scanRfidDialog; public MaterialDialog scanRfidDialog, scanChangeLabelDialog;
private static class SingletonClassInstance { private static class SingletonClassInstance {
private static final BasicsCollectFragment instance = new BasicsCollectFragment(); private static final BasicsCollectFragment instance = new BasicsCollectFragment();
...@@ -297,6 +297,74 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin ...@@ -297,6 +297,74 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin
}).show(); }).show();
} }
}); });
viewModel.onChangeLabelEvent.observe(getActivity(), new Observer<String>() {
@Override
public void onChanged(String s) {
scanChangeLabelDialog = new MaterialDialog.Builder(getActivity())
.title("请扫描或输入原耳标")
// .iconRes(R.drawable.ic_logo)
.canceledOnTouchOutside(false)
.autoDismiss(false)
// .content("高频耳标")
// .widgetColor(Color.BLUE)//输入框光标的颜色
//前2个一个是hint一个是预输入的文字
.input("可视耳标", "", new MaterialDialog.InputCallback() {
@Override
public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
Log.i("scan", "输入的是:" + input);
}
})
.neutralText("扫描")
.onNeutral(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
viewModel.scanFunction = 2;
viewModel.scanRfid();
}
})
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
// dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false);
String registrationNo = dialog.getContentView().getText().toString();
String individualNo = dialog.getInputEditText().getText().toString();
if (StringUtils.isEmpty(registrationNo) && StringUtils.isEmpty(individualNo)) {
ToastUtils.showShort("请扫描或者输入耳标!");
return;
}
if (!StringUtils.isEmpty(registrationNo) && registrationNo.length() > 50) {
ToastUtils.showShort("高频耳标长度非法,请重新扫描!");
return;
}
if (!StringUtils.isEmpty(individualNo) && individualNo.length() > 25) {
ToastUtils.showShort("可视耳标超长,请填写在25位内!");
return;
}
viewModel.forwardChangeLabel(registrationNo, individualNo);
dialog.dismiss();
}
})
.negativeText("取消")
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
dialog.dismiss();
}
})
.show();
}
});
viewModel.setChangeLabelRfidValueEvent.observe(getActivity(), new Observer<String>() {
@Override
public void onChanged(String s) {
scanChangeLabelDialog.setContent(s);
}
});
} }
//选择框 //选择框
......
...@@ -5,6 +5,7 @@ import android.app.Application; ...@@ -5,6 +5,7 @@ import android.app.Application;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.SoundPool; import android.media.SoundPool;
import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
...@@ -17,6 +18,7 @@ import androidx.databinding.ObservableArrayList; ...@@ -17,6 +18,7 @@ import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.databinding.ObservableList; import androidx.databinding.ObservableList;
import com.afollestad.materialdialogs.MaterialDialog;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.phlx.anchorcollect_p.App; import com.phlx.anchorcollect_p.App;
...@@ -39,6 +41,7 @@ import com.phlx.anchorcollect_p.event.EventMsg; ...@@ -39,6 +41,7 @@ import com.phlx.anchorcollect_p.event.EventMsg;
import com.phlx.anchorcollect_p.event.EventTag; import com.phlx.anchorcollect_p.event.EventTag;
import com.phlx.anchorcollect_p.ui.bind.BindActivity; import com.phlx.anchorcollect_p.ui.bind.BindActivity;
import com.phlx.anchorcollect_p.ui.fragment.list.CollectGridItem; import com.phlx.anchorcollect_p.ui.fragment.list.CollectGridItem;
import com.phlx.anchorcollect_p.ui.labelchange.LabelChangeActivity;
import com.phlx.anchorcollect_p.ui.setting.SettingActivity; import com.phlx.anchorcollect_p.ui.setting.SettingActivity;
import com.phlx.anchorcollect_p.ui.setting.SyncActivity; import com.phlx.anchorcollect_p.ui.setting.SyncActivity;
import com.phlx.anchorcollect_p.util.BaseImageUtils; import com.phlx.anchorcollect_p.util.BaseImageUtils;
...@@ -93,6 +96,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -93,6 +96,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
public SingleLiveEvent<Boolean> onNotifyAllEvent = new SingleLiveEvent<>();//true是清空页面 public SingleLiveEvent<Boolean> onNotifyAllEvent = new SingleLiveEvent<>();//true是清空页面
public SingleLiveEvent<String> setRfidValueEvent = new SingleLiveEvent<>();//设置弹窗的扫到的标签epc public SingleLiveEvent<String> setRfidValueEvent = new SingleLiveEvent<>();//设置弹窗的扫到的标签epc
public SingleLiveEvent<String> setChangeLabelRfidValueEvent = new SingleLiveEvent<>();//设置换绑标签弹窗的扫到的标签epc
public SingleLiveEvent<String> onChangeLabelEvent = new SingleLiveEvent<>();//换绑标签的弹窗
public SingleLiveEvent<String> onShowDialogEvent = new SingleLiveEvent<>();//弹窗提示 public SingleLiveEvent<String> onShowDialogEvent = new SingleLiveEvent<>();//弹窗提示
...@@ -122,7 +128,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -122,7 +128,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
private List<CattleResumeEntity> uploadData; private List<CattleResumeEntity> uploadData;
public int scanFunction = 0;//0 是普通扫描耳标,1 是弹出窗的扫描耳标 public int scanFunction = 0;//0 是普通扫描耳标,1 是弹出窗的扫描耳标, 2 是换绑耳标的扫描耳标
public BasicsCollectVM(@NonNull Application application, Repository model) { public BasicsCollectVM(@NonNull Application application, Repository model) {
...@@ -281,7 +287,18 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -281,7 +287,18 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
public BindingCommand onSettingClick = new BindingCommand(new BindingAction() { public BindingCommand onSettingClick = new BindingCommand(new BindingAction() {
@Override @Override
public void call() { public void call() {
startActivity(SettingActivity.class); // if (Configs.isOnLine) {
startActivity(SettingActivity.class);
// } else {
// onChangeLabelEvent.call();
// }
}
});
//设置
public BindingCommand onLabelChangeClick = new BindingCommand(new BindingAction() {
@Override
public void call() {
onChangeLabelEvent.call();
} }
}); });
...@@ -365,6 +382,15 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -365,6 +382,15 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
onCardClickEvent.call(); onCardClickEvent.call();
} }
//跳转到换绑页面
public void forwardChangeLabel(String epc, String noticeNo) {
Bundle mBundle = new Bundle();
mBundle.putString("epc", epc);
mBundle.putString("noticeNo", noticeNo);
startActivity(LabelChangeActivity.class, mBundle);
}
private void queryCattleResume(QueryBuilder<CattleResumeEntity> builder) { private void queryCattleResume(QueryBuilder<CattleResumeEntity> builder) {
DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<CattleResumeEntity>() { DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<CattleResumeEntity>() {
...@@ -505,8 +531,6 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -505,8 +531,6 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
} }
} }
}).insertAsyncBatch(CattleResumeEntity.class, uploadData); }).insertAsyncBatch(CattleResumeEntity.class, uploadData);
} }
...@@ -535,12 +559,18 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -535,12 +559,18 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
}; };
private void checkEpc(String epc, String tid) { private void checkEpc(String epc, String tid) {
ToastUtils.showShort("盘点到标签:" + epc + "|停止盘点"); // ToastUtils.showShort("盘点到标签:" + epc + "|停止盘点");
rfidTag = epc + tid; rfidTag = epc + tid;
if (scanFunction == 0) { switch (scanFunction) {
initDataForRfid(epc); case 0:
} else if (scanFunction == 1) { initDataForRfid(epc);
setRfidValueEvent.setValue(epc); break;
case 1:
setRfidValueEvent.setValue(epc);
break;
case 2:
setChangeLabelRfidValueEvent.setValue(epc);
break;
} }
} }
......
package com.phlx.anchorcollect_p.ui.labelchange;
import android.os.Bundle;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bigkoo.pickerview.view.TimePickerView;
import com.phlx.anchorcollect_p.BR;
import com.phlx.anchorcollect_p.R;
import com.phlx.anchorcollect_p.data.VMFactory;
import com.phlx.anchorcollect_p.databinding.ActivityLabelChangeBinding;
import com.phlx.anchorcollect_p.rfid.ModuleManager;
import com.phlx.anchorcollect_p.ui.base.BaseActivity;
import com.phlx.anchorcollect_p.util.ImagePicker;
public class LabelChangeActivity extends BaseActivity<ActivityLabelChangeBinding, LabelChangeVM> {
private TimePickerView pvTime;
private ImagePicker markImagePicker;
private String epc, noticeNo;
@Override
public int initContentView(Bundle savedInstanceState) {
return R.layout.activity_label_change;
}
@Override
public int initVariableId() {
return BR.viewModel;
}
@Override
public void initParam() {
super.initParam();
Bundle _bundle = getIntent().getExtras();
if (_bundle != null) {
epc = _bundle.getString("epc");
noticeNo = _bundle.getString("noticeNo");
}
}
@Override
public LabelChangeVM initViewModel() {
VMFactory factory = VMFactory.getInstance(getApplication());
return ViewModelProviders.of(this, factory).get(LabelChangeVM.class);
}
@Override
public void initData() {
super.initData();
viewModel.initToolbar(epc, noticeNo);
}
@Override
public void initViewObservable() {
super.initViewObservable();
}
/**
* 监听Back键按下事件
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
new MaterialDialog.Builder(this).title("系统提示").content("数据尚未保存,是否退出?").positiveText("确定").negativeText("取消").onAny(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
if (which == DialogAction.POSITIVE) {
finish();
}
}
}).show();
return true;
} else if (keyCode == 782) {
// viewModel.photoOnClick.call();
}
return super.onKeyDown(keyCode, event);
}
}
package com.phlx.anchorcollect_p.ui.labelchange;
import android.annotation.SuppressLint;
import android.app.Application;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.util.SparseIntArray;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableField;
import com.phlx.anchorcollect_p.App;
import com.phlx.anchorcollect_p.Configs;
import com.phlx.anchorcollect_p.R;
import com.phlx.anchorcollect_p.data.Repository;
import com.phlx.anchorcollect_p.db.DbUtil;
import com.phlx.anchorcollect_p.db.interf.DbIDUCallBack;
import com.phlx.anchorcollect_p.db.interf.DbQueryCallBack;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.rfid.ModuleManager;
import com.phlx.anchorcollect_p.ui.base.BackBarVM;
import com.phlx.anchorcollect_p.ui.login.LoginActivity;
import com.phlx.anchorcollect_p.util.TextUtil;
import com.uhf.structures.InventoryData;
import com.uhf.structures.InventoryParams;
import com.uhf.structures.OnInventoryListener;
import org.greenrobot.greendao.query.WhereCondition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.bus.event.SingleLiveEvent;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.StringUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class LabelChangeVM extends BackBarVM<Repository> implements OnInventoryListener {
public CattleResumeEntity entity = new CattleResumeEntity();
private List<CattleResumeEntity> uploadData;
public SingleLiveEvent<Boolean> initRFIDEvent = new SingleLiveEvent<>();
public SingleLiveEvent<Boolean> uploadDataEvent = new SingleLiveEvent<>();
private SimpleDateFormat dateFormat;
public ObservableField<String> epc = new ObservableField<>();
public ObservableField<String> noticeNo = new ObservableField<>();
private boolean isModify;
private SoundPool soundPool;//盘点到标签时的提示音
private SparseIntArray musicId;
private boolean isScan = false;//是否在扫描
private String tag = "";//扫描到的标记
public LabelChangeVM(@NonNull Application application, Repository model) {
super(application, model);
soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 5);
musicId = new SparseIntArray();
musicId.put(1, soundPool.load(getApplication(), R.raw.readcard, 1));
musicId.put(2, soundPool.load(getApplication(), R.raw.failure, 1));
}
//初始化ToolBar
public void initToolbar(String epc, String noticeNo) {
setBackTitleText(getApplication().getResources().getString(R.string.label_change));
setSettingVisibleObservable(View.GONE);
setBackRightTextVisible(View.VISIBLE);
setBackRightText(getApplication().getResources().getString(R.string.save));
this.epc.set(epc);
this.noticeNo.set(noticeNo);
getCattleResume();
}
@Override
public void onResume() {
super.onResume();
isScan = false;
tag = "";
App.getInstance().getLinkage().setOnInventoryListener(this);
}
private void initData() {
uploadData = new ArrayList<>();
epc.set(entity.getRegistrationNo());
noticeNo.set(entity.getIndividualNo());
// entity.notifyChange();
}
public BindingCommand onScanRfidClick = new BindingCommand(() -> startInventory());
@Override
protected void backRightTextOnClick() {
saveCattleResume();
}
private void saveCattleResume() {
if (StringUtils.isEmpty(epc.get()) && StringUtils.isEmpty(noticeNo.get())) {
ToastUtils.showShort("请至少填一个耳标号!");
return;
}
if (!StringUtils.isEmpty(epc.get()) && epc.get().length() > 50) {
ToastUtils.showShort("高频耳标长度非法,请重新扫描!");
return;
}
if (!StringUtils.isEmpty(noticeNo.get()) && noticeNo.get().length() > 25) {
ToastUtils.showShort("可视耳标超长,请填写在25位内!");
return;
}
int checkResult = checkCattleResume();
if (checkResult != 0) {
switch (checkResult) {
case 1:
ToastUtils.showShort("高频耳标已存在,请重新扫描!");
return;
case 3:
ToastUtils.showShort("可视耳标已存在,请重新填写!");
return;
}
}
if (!StringUtils.isEmpty(epc.get()))
entity.setRegistrationNo(epc.get());
if (!StringUtils.isEmpty(noticeNo.get()))
entity.setIndividualNo(noticeNo.get());
entity.setUploadStatus("0");
dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
entity.setUpdateBy(model.getUserName());
entity.setUpdateTime(dateFormat.format(new Date(System.currentTimeMillis())));
entity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
uploadData.add(entity);
DbUtil.getInstance().setDbIDUCallBack(new DbIDUCallBack() {
@Override
public void onNotification(boolean result) {
if (result) {
ToastUtils.showShort("保存" + getApplication().getResources().getString(R.string.label_change) + "成功!");
finish();
} else {
ToastUtils.showShort("保存" + getApplication().getResources().getString(R.string.label_change) + "失败!");
}
}
}).insertAsyncBatch(CattleResumeEntity.class, uploadData);
}
private int checkCattleResume() {
List<CattleResumeEntity> cattleResumeEntityList = DbUtil.getInstance().queryAll(CattleResumeEntity.class);
if (cattleResumeEntityList != null && cattleResumeEntityList.size() > 0) {
for (CattleResumeEntity cattleResumeEntity : cattleResumeEntityList) {
if (cattleResumeEntity.getUnid().equals(entity.getUnid())) {
continue;
}
if (!StringUtils.isEmpty(epc.get()) && epc.get().equals(cattleResumeEntity.getRegistrationNo())) {
return 1;
}
if (!StringUtils.isEmpty(noticeNo.get()) && noticeNo.get().equals(cattleResumeEntity.getIndividualNo())) {
return 3;
}
}
return 0;
} else {
return 0;
}
}
@Override
public void getInventoryData(InventoryData inventoryData) {
if (inventoryData != null) {
Message messenger = handler.obtainMessage();
messenger.what = 0x333;
messenger.obj = inventoryData;
handler.sendMessage(messenger);
}
}
//开始盘点一次
public void startInventory() {
if (!isScan) {
App.getInstance().getLinkage().startInventory(1, 0);
tag = "";
isScan = true;
} else {
App.getInstance().getLinkage().stopInventory();
isScan = false;
}
}
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x333) {
InventoryData inventoryData = (InventoryData) msg.obj;
if (inventoryData.getDataLength() > 0 && inventoryData.getEpcLength() > 0) {
String epc = TextUtil.byteToHexString(inventoryData.getEPC_Data(), inventoryData.getEpcLength()).substring(1);
String tid = TextUtil.byteToHexString(inventoryData.getData(), inventoryData.getDataLength());
soundPool.play(musicId.get(1), 1, 1, 0, 0, 1);
App.getInstance().getLinkage().stopInventory();
if ("".equals(tag))
checkEpc(epc, tid);
}
}
}
};
private void checkEpc(String epc, String tid) {
tag = epc + tid;
ToastUtils.showShort(epc);
this.epc.set(epc);
isScan = false;
}
/**
* 查询基础信息
**/
private void getCattleResume() {
StringBuffer sbf = new StringBuffer();
if (!StringUtils.isEmpty(epc.get()))
sbf.append(" REGISTRATION_NO = '" + epc.get() + "'");
if (!StringUtils.isEmpty(noticeNo.get())) {
if (sbf.length() > 0)
sbf.append(" AND ");
sbf.append(" INDIVIDUAL_NO= '" + noticeNo.get() + "'");
}
String sql = sbf.toString();
WhereCondition.StringCondition stringCondition = new WhereCondition.StringCondition(sql);
DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<CattleResumeEntity>() {
@Override
public void onSuccess(List<CattleResumeEntity> result) {
if (result != null && result.size() > 0) {
entity.copyEntity(result.get(0));
initData();
} else {
ToastUtils.showShort("耳标不存在,请重新扫描!");
finish();
}
}
@Override
public void onFailed() {
ToastUtils.showShort("查询数据库失败");
finish();
}
}).queryAsync(CattleResumeEntity.class, stringCondition);
}
@Override
public void onPause() {
super.onPause();
App.getInstance().getLinkage().stopInventory();
App.getInstance().getLinkage().setOnInventoryListener(null);
}
}
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools"
xmlns:binding="http://schemas.android.com/apk/res-auto"
app:ignore="NamespaceTypo">
<data>
<import type="me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter" />
<import type="me.goldze.mvvmhabit.binding.viewadapter.recyclerview.LayoutManagers" />
<import type="me.goldze.mvvmhabit.binding.viewadapter.recyclerview.LineManagers" />
<variable
name="viewModel"
type="com.phlx.anchorcollect_p.ui.labelchange.LabelChangeVM" />
<variable
name="spinnerAdapter"
type="android.widget.ArrayAdapter" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/include"
layout="@layout/layout_back_bar"
binding:backBarVM="@{viewModel.backBarVM}" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0"
binding:layout_constraintBottom_toBottomOf="parent"
binding:layout_constraintEnd_toEndOf="parent"
binding:layout_constraintStart_toStartOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/include">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_30">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/marking_guideline_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
binding:layout_constraintGuide_begin="@dimen/dp_75" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_label"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:orientation="vertical"
binding:layout_constraintLeft_toLeftOf="parent"
binding:layout_constraintRight_toLeftOf="@+id/marking_guideline_vertical"
binding:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/high_no_desc"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_40"
android:gravity="center_vertical"
android:layout_marginTop="@dimen/dp_5"
android:text="高频耳标"
android:textColor="@color/black"
android:textSize="@dimen/desc_text_size" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/notice_no_desc"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_40"
android:gravity="center_vertical"
android:layout_marginTop="@dimen/dp_5"
android:text="可视耳标"
android:textColor="@color/black"
android:textSize="@dimen/desc_text_size" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:orientation="vertical"
binding:layout_constraintHorizontal_bias="1.0"
binding:layout_constraintLeft_toRightOf="@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf="parent"
binding:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/high_no_edit"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:gravity="center_vertical"
android:layout_marginTop="@dimen/dp_5"
android:inputType="number"
android:background="@drawable/input_frame_bg"
android:text="@={viewModel.epc}"
android:textSize="@dimen/edit_size"
binding:onClickCommand="@{viewModel.onScanRfidClick}"/>
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/notice_no_edit"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:gravity="center_vertical"
android:layout_marginTop="@dimen/dp_5"
android:maxLength="20"
android:singleLine="true"
android:background="@drawable/input_frame_bg"
android:text="@={viewModel.noticeNo}"
android:textSize="@dimen/edit_size"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
...@@ -56,12 +56,10 @@ ...@@ -56,12 +56,10 @@
android:layout_margin="@dimen/dp_5" android:layout_margin="@dimen/dp_5"
android:background="@drawable/bg_radius_white_5" android:background="@drawable/bg_radius_white_5"
android:orientation="vertical" android:orientation="vertical"
android:padding="5dp"
binding:layout_constraintBottom_toBottomOf="@id/card_100" binding:layout_constraintBottom_toBottomOf="@id/card_100"
binding:layout_constraintLeft_toRightOf="@+id/card_100" binding:layout_constraintLeft_toRightOf="@+id/card_100"
binding:layout_constraintRight_toRightOf="parent" binding:layout_constraintRight_toRightOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/tv_rfid_text" binding:layout_constraintTop_toBottomOf="@+id/tv_rfid_text">
binding:onClickCommand="@{viewModel.onTagInputClick}">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -70,16 +68,32 @@ ...@@ -70,16 +68,32 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:text="可视耳标" android:text="可视耳标"
android:textColor="@color/colorPrimary" android:textColor="@color/colorPrimary"
android:textSize="@dimen/sp_16" /> android:textSize="@dimen/sp_16"
binding:onClickCommand="@{viewModel.onTagInputClick}"/>
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:layout_marginTop="10dp" android:layout_marginTop="20dp"
android:text="@{viewModel.tag}" android:text="@{viewModel.tag}"
android:textColor="@color/black" android:textColor="@color/black"
android:textSize="@dimen/sp_18" /> android:textSize="@dimen/sp_18"
binding:onClickCommand="@{viewModel.onTagInputClick}" />
<!-- <androidx.appcompat.widget.AppCompatTextView-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="换绑标签"-->
<!-- android:layout_marginLeft="10dp"-->
<!-- android:layout_marginRight="10dp"-->
<!-- android:layout_marginTop="10dp"-->
<!-- android:paddingBottom="5dp"-->
<!-- android:paddingTop="5dp"-->
<!-- android:textColor="@color/white"-->
<!-- android:background="@drawable/bg_button_orange_gradient"-->
<!-- android:gravity="center"-->
<!-- binding:onClickCommand="@{viewModel.onLabelChangeClick}"/>-->
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
...@@ -115,11 +129,29 @@ ...@@ -115,11 +129,29 @@
binding:layout_constraintLeft_toLeftOf="parent" binding:layout_constraintLeft_toLeftOf="parent"
binding:layout_constraintRight_toRightOf="parent"> binding:layout_constraintRight_toRightOf="parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/card_label_change"
android:layout_width="75dp"
android:layout_height="37dp"
android:background="@drawable/bg_radius_white_5"
binding:onClickCommand="@{viewModel.onLabelChangeClick}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_button_orange_gradient"
android:gravity="center"
android:text="换绑标签"
android:textColor="@color/white"
android:textSize="@dimen/sp_12" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/card_99" android:id="@+id/card_99"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="37dp" android:layout_height="37dp"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="5dp"
android:background="@drawable/bg_radius_white_5" android:background="@drawable/bg_radius_white_5"
android:onClick="@{() ->viewModel.click(99)}" android:onClick="@{() ->viewModel.click(99)}"
android:orientation="vertical" android:orientation="vertical"
...@@ -144,7 +176,7 @@ ...@@ -144,7 +176,7 @@
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/card_save" android:id="@+id/card_save"
android:layout_width="100dp" android:layout_width="75dp"
android:layout_height="37dp" android:layout_height="37dp"
android:layout_marginLeft="5dp" android:layout_marginLeft="5dp"
android:background="@drawable/bg_radius_white_5" android:background="@drawable/bg_radius_white_5"
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
<string name="immun_record_detail">免疫详情</string> <string name="immun_record_detail">免疫详情</string>
<string name="breeding_record">配种记录</string> <string name="breeding_record">配种记录</string>
<string name="breeding_record_detail">配种详情</string> <string name="breeding_record_detail">配种详情</string>
<string name="label_change">标签换绑</string>
<string name="one_click_sync">一键同步</string> <string name="one_click_sync">一键同步</string>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment