Commit db96dcd7 authored by hywang's avatar hywang

1.增加麒联上电;

2.增加自动判断上电模块;
3.增加标签绑定、标签换绑功能;
4,增加基础信息新增功能。
parent b8c195a0
...@@ -45,6 +45,8 @@ android { ...@@ -45,6 +45,8 @@ android {
abortOnError false abortOnError false
} }
ndkVersion '22.1.7171670'
} }
greendao { greendao {
...@@ -57,7 +59,6 @@ dependencies { ...@@ -57,7 +59,6 @@ dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation files('libs\\uhf.jar')
testImplementation 'junit:junit:4.13' testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
...@@ -80,7 +81,6 @@ dependencies { ...@@ -80,7 +81,6 @@ dependencies {
implementation project(':appupdateX') implementation project(':appupdateX')
implementation project(':mycontrol') implementation project(':mycontrol')
implementation files('libs/uhf.jar') implementation files('libs/uhf.jar')
//生成主键 //生成主键
implementation 'cn.hutool:hutool-all:4.5.6' implementation 'cn.hutool:hutool-all:4.5.6'
//图片加载 //图片加载
......
No preview for this file type
...@@ -94,6 +94,16 @@ ...@@ -94,6 +94,16 @@
android:launchMode="singleTask" android:launchMode="singleTask"
android:screenOrientation="landscape" android:screenOrientation="landscape"
android:windowSoftInputMode="stateHidden|adjustResize" /> android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.bind.BindActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.labelchange.LabelChangeActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize" />
<service <service
......
...@@ -90,6 +90,11 @@ public class Configs { ...@@ -90,6 +90,11 @@ public class Configs {
//盘点类型 //盘点类型
public static final String SP_INVENTORY_STATUS = "SP_inventory_status"; public static final String SP_INVENTORY_STATUS = "SP_inventory_status";
//上电类型
public static final String SP_POWER_ON_TYPE = "sp_power_on_type";
//模块类型
public static final String SP_MODULE_TYPE = "sp_module_type";
//0 高频,1低频 //0 高频,1低频
public static String FREQUENCY_CONFIG = "1"; public static String FREQUENCY_CONFIG = "1";
......
...@@ -8,6 +8,7 @@ import androidx.annotation.VisibleForTesting; ...@@ -8,6 +8,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import com.phlx.anchorcollect.ui.bind.BindVM;
import com.phlx.anchorcollect.ui.fragment.vm.BasicsCollectVM; import com.phlx.anchorcollect.ui.fragment.vm.BasicsCollectVM;
import com.phlx.anchorcollect.ui.fragment.vm.BreedingRecordVM; import com.phlx.anchorcollect.ui.fragment.vm.BreedingRecordVM;
import com.phlx.anchorcollect.ui.fragment.vm.ImmunRecordVM; import com.phlx.anchorcollect.ui.fragment.vm.ImmunRecordVM;
...@@ -16,6 +17,7 @@ import com.phlx.anchorcollect.ui.fragment.vm.PerformanceVM; ...@@ -16,6 +17,7 @@ import com.phlx.anchorcollect.ui.fragment.vm.PerformanceVM;
import com.phlx.anchorcollect.ui.fragment.vm.WeightManVM; import com.phlx.anchorcollect.ui.fragment.vm.WeightManVM;
import com.phlx.anchorcollect.ui.home.HomeVM; import com.phlx.anchorcollect.ui.home.HomeVM;
import com.phlx.anchorcollect.ui.info.CattleVM; import com.phlx.anchorcollect.ui.info.CattleVM;
import com.phlx.anchorcollect.ui.labelchange.LabelChangeVM;
import com.phlx.anchorcollect.ui.login.LoginVM; import com.phlx.anchorcollect.ui.login.LoginVM;
import com.phlx.anchorcollect.ui.main.MainVM; import com.phlx.anchorcollect.ui.main.MainVM;
import com.phlx.anchorcollect.ui.setting.SettingVM; import com.phlx.anchorcollect.ui.setting.SettingVM;
...@@ -102,6 +104,12 @@ public class VMFactory extends ViewModelProvider.NewInstanceFactory { ...@@ -102,6 +104,12 @@ public class VMFactory extends ViewModelProvider.NewInstanceFactory {
} 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(BindVM.class)) {
return (T) new BindVM(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);
} }
......
...@@ -18,7 +18,6 @@ import org.greenrobot.greendao.annotation.Generated; ...@@ -18,7 +18,6 @@ import org.greenrobot.greendao.annotation.Generated;
*/ */
@Entity @Entity
public class CattleResumeEntity extends BaseObservable implements Parcelable { public class CattleResumeEntity extends BaseObservable implements Parcelable {
private static final long serialVersionUID = 1L;
/** unid主键 */ /** unid主键 */
@Id(autoincrement = false) @Id(autoincrement = false)
...@@ -654,4 +653,43 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -654,4 +653,43 @@ 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();
}
} }
...@@ -50,15 +50,16 @@ public class RetrofitClient { ...@@ -50,15 +50,16 @@ public class RetrofitClient {
private static final int CACHE_TIMEOUT = 10 * 1024 * 1024; private static final int CACHE_TIMEOUT = 10 * 1024 * 1024;
//服务端根路径 //服务端根路径
public static String baseUrl = public static String baseUrl =
"serve.xlglmnmyzspt.org.cn"//正式 // "serve.xlglmnmyzspt.org.cn"//正式old
// "serve.xlglzy.org.cn"//正式
// "39.101.170.186"//阿里云测试 // "39.101.170.186"//阿里云测试
// "192.168.1.80"//董 "192.168.8.135"//董
// "192.168.43.154"//张敏 // "192.168.43.154"//张敏
; ;
public static String port = public static String port =
""//正式 // ""//正式
// "9000"//阿里云测试 // "9000"//阿里云测试
// "9000"//董 "9000"//董
; ;
private static Context mContext = Utils.getContext(); private static Context mContext = Utils.getContext();
......
...@@ -14,109 +14,93 @@ import java.io.IOException; ...@@ -14,109 +14,93 @@ import java.io.IOException;
*/ */
class DeviceControl { class DeviceControl {
private void WriteFile(String path, String value) throws IOException {
void PowerOnDevice() { File DeviceName = new File(path);
if (DeviceName.exists()) {
switch (Configs.cpuName) { BufferedWriter CtrlFile = new BufferedWriter(new FileWriter(DeviceName, false));
CtrlFile.write(value);
case "MT6735": CtrlFile.flush();
try { CtrlFile.close();
//手持机 RM_7088_MT2
WriteFile("/sys/class/misc/mtgpio/pin", "-wdout94 1");
Thread.sleep(300);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
break;
case "MT6762V/CB":
try {
//pad RM_WIOT61c_S1
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 24 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "mode 24 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "dir 24 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 55 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "mode 55 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "dir 55 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 173 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "mode 173 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "dir 173 1");
SystemClock.sleep(500);
} catch (IOException e) {
e.printStackTrace();
}
break;
case "MT6763V/B":
try {
//pad RM_SD100T_MT1
WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "mode75 0");
WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out75 1");
WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out55 1");
Thread.sleep(300);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
break;
} }
//RM_SD100T_MT1
// WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out55 1");
} }
void PowerOffDevice() {
switch (Configs.cpuName) { void PowerOn_pad_RM_SD100T_MT1( ) {
try {
case "MT6735": //pad RM_SD100T_MT1
try { WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "mode75 0");
//手持机 RM_7088_MT2 WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out75 1");
WriteFile("/sys/class/misc/mtgpio/pin", "-wdout94 0"); WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out55 1");
} catch (IOException e) { Thread.sleep(3000);
e.printStackTrace(); } catch (IOException | InterruptedException e) {
} e.printStackTrace();
break; }
}
case "MT6762V/CB":
try {
//RM_WIOT61c_S1
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 24 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 55 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 173 0");
} catch (IOException e) {
e.printStackTrace();
}
break;
case "MT6763V/B": void PowerOff_pad_RM_SD100T_MT1() {
try { try {
//pad RM_SD100T_MT1 //pad RM_SD100T_MT1
WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out75 0"); WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out75 0");
WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out55 0"); WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out55 0");
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
break; }
void PowerOn_pad_RM_SD1006762_S0( ) {
try {
//pad RM_SD1006762_S0
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 52 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "mode 52 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "dir 52 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 89 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "mode 89 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "dir 89 1");
Thread.sleep( 3000);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
//RM_SD100T_MT1 void PowerOff_pad_RM_SD1006762_S0() {
// WriteFile("/sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio", "out55 0"); try {
//pad RM_SD1006762_S0
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 52 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 89 0");
} catch (IOException e) {
e.printStackTrace();
}
}
void PowerOn_pad_RM_SD1006762_S1( ) {
try {
//pad RM_SD1006762_S1
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 24 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "mode 24 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "dir 24 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 55 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "mode 55 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "dir 55 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 173 1");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "mode 173 0");
WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "dir 173 1");
Thread.sleep( 3000);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
} }
} }
private void WriteFile(String path, String value) throws IOException { void PowerOff_pad_RM_SD1006762_S1() {
File DeviceName = new File(path); try {
if (DeviceName.exists()) { //pad RM_SD1006762_S1
BufferedWriter CtrlFile = new BufferedWriter(new FileWriter(DeviceName, false)); WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 24 0");
CtrlFile.write(value); WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 55 0");
CtrlFile.flush(); WriteFile("/sys/devices/platform/pinctrl/mt_gpio", "out 173 0");
CtrlFile.close(); } catch (IOException e) {
e.printStackTrace();
} }
} }
} }
\ No newline at end of file
package com.phlx.anchorcollect.rfid; package com.phlx.anchorcollect.rfid;
import android.util.Log;
import com.phlx.anchorcollect.App; import com.phlx.anchorcollect.App;
import com.phlx.anchorcollect.Configs; import com.phlx.anchorcollect.Configs;
import com.uhf.structures.Rfid_Value; import com.uhf.structures.Rfid_Value;
import java.util.ArrayList;
import java.util.List;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.StringUtils;
public class ModuleManager { public class ModuleManager {
private static String serialPort = "/dev/ttyMT1"; private static String serialPort = "/dev/ttyMT1";
public static int openCom() { final static String RM_SD100T_MT1 = "RM_SD100T_MT1";
final static String RM_SD1006762_S0 = "RM_SD1006762_S0";
switch (Configs.cpuName) { final static String RM_SD1006762_S1 = "RM_SD1006762_S1";
//手持机 RM_7088_MT2 final static List<String> powerList = new ArrayList<String>() {
case "MT6735": {
serialPort = "/dev/ttyMT2"; add(RM_SD100T_MT1);
break; add(RM_SD1006762_S0);
add(RM_SD1006762_S1);
}
//pad RM_WIOT61c_S1 };
case "MT6762V/CB":
serialPort = "/dev/ttyS1"; public static boolean initPower() {
break;
String powerOnType = SPUtils.getInstance().getString(Configs.SP_POWER_ON_TYPE, "");
// powerOnType = RM_SD100T_MT1;
if (!StringUtils.isEmpty(powerOnType)) {
return powerOn(powerOnType);
} else {//没存类型就便利所有上电
for (int i = 0; i < powerList.size(); i++) {
if (powerOn(powerList.get(i))) {
SPUtils.getInstance().put(Configs.SP_POWER_ON_TYPE, powerList.get(i));
return true;
}
}
}
return false;
}
//pad RM_SD100T_MT1 //上电
case "MT6763V/B": public static boolean powerOn(String powerOnType) {
serialPort = "/dev/ttyMT1";
break; String portStr = powerOnType.substring(powerOnType.lastIndexOf("_") + 1, powerOnType.length());
serialPort = "/dev/tty" + portStr;
boolean powerOnStatus = false;
if (App.getInstance().getLinkage().open_serial(serialPort) == 0) {
DeviceControl DevCtrl = new DeviceControl();
switch (powerOnType) {
case RM_SD100T_MT1:
DevCtrl.PowerOn_pad_RM_SD100T_MT1();
break;
case RM_SD1006762_S0:
DevCtrl.PowerOn_pad_RM_SD1006762_S0();
break;
case RM_SD1006762_S1:
DevCtrl.PowerOn_pad_RM_SD1006762_S1();
break;
}
powerOnStatus = openCom(powerOnType);
} }
return powerOnStatus;
}
//设置模块类型
public static boolean openCom(String powerOnType) {
return App.getInstance().getLinkage().open_serial(serialPort); boolean openComStatus = false;
Rfid_Value rf = new Rfid_Value();
int moduleType = SPUtils.getInstance().getInt(Configs.SP_MODULE_TYPE, -1);
if (moduleType == -1) {//没有存就便利所有
rf = new Rfid_Value();
App.getInstance().getLinkage().setRFModuleType(1);//R2000 0,MagicRF 1,RM70xx 2, R2000plus 3
App.getInstance().getLinkage().getVersion(rf);
if (rf.value == 0) {
SPUtils.getInstance().put(Configs.SP_MODULE_TYPE, 1);
SPUtils.getInstance().put(Configs.SP_POWER_ON_TYPE, powerOnType);
return true;
}
App.getInstance().getLinkage().setRFModuleType(0);//R2000 0,MagicRF 1,RM70xx 2, R2000plus 3
App.getInstance().getLinkage().getVersion(rf);
if (rf.value == 0) {
SPUtils.getInstance().put(Configs.SP_MODULE_TYPE, 0);
SPUtils.getInstance().put(Configs.SP_POWER_ON_TYPE, powerOnType);
return true;
}
rf = new Rfid_Value();
App.getInstance().getLinkage().setRFModuleType(3);//R2000 0,MagicRF 1,RM70xx 2, R2000plus 3
App.getInstance().getLinkage().getVersion(rf);
if (rf.value == 0) {
SPUtils.getInstance().put(Configs.SP_MODULE_TYPE, 3);
SPUtils.getInstance().put(Configs.SP_POWER_ON_TYPE, powerOnType);
return true;
}
} else {
App.getInstance().getLinkage().setRFModuleType(moduleType);//R2000 0,MagicRF 1,RM70xx 2, R2000plus 3
App.getInstance().getLinkage().getVersion(rf);
openComStatus = rf.value == 0;
}
return openComStatus;
} }
public static void destroyLibSO() { public static void destroyLibSO() {
App.getInstance().getLinkage().deinitRFID(); App.getInstance().getLinkage().deinitRFID();
App.getInstance().getLinkage().close_serial(); App.getInstance().getLinkage().close_serial();
powerOff(); powerOff();
} }
public static int powerOn() {
DeviceControl DevCtrl = new DeviceControl();
DevCtrl.PowerOnDevice();
Rfid_Value rf = new Rfid_Value();
App.getInstance().getLinkage().getVersion(rf);
return rf.value;
}
public static void powerOff() { public static void powerOff() {
String powerOnType = SPUtils.getInstance().getString(Configs.SP_POWER_ON_TYPE, "");
DeviceControl DevCtrl = new DeviceControl(); DeviceControl DevCtrl = new DeviceControl();
DevCtrl.PowerOffDevice();
}
switch (powerOnType) {
case RM_SD100T_MT1:
DevCtrl.PowerOff_pad_RM_SD100T_MT1();
break;
case RM_SD1006762_S0:
DevCtrl.PowerOff_pad_RM_SD1006762_S0();
break;
case RM_SD1006762_S1:
DevCtrl.PowerOff_pad_RM_SD1006762_S1();
break;
default://如果没有存类型,就关闭所有类型
DevCtrl.PowerOff_pad_RM_SD100T_MT1();
DevCtrl.PowerOff_pad_RM_SD1006762_S0();
DevCtrl.PowerOff_pad_RM_SD1006762_S1();
break;
}
}
} }
package com.phlx.anchorcollect.ui.bind;
import android.os.Bundle;
import androidx.lifecycle.ViewModelProviders;
import com.phlx.anchorcollect.R;
import com.phlx.anchorcollect.data.VMFactory;
import com.phlx.anchorcollect.databinding.ActivityBindBinding;
import com.phlx.anchorcollect.ui.base.BaseActivity;
import me.tatarka.bindingcollectionadapter2.BR;
public class BindActivity extends BaseActivity<ActivityBindBinding, BindVM> {
@Override
public int initContentView(Bundle savedInstanceState) {
return R.layout.activity_bind;
}
@Override
public int initVariableId() {
return BR.viewModel;
}
@Override
public void initParam() {
super.initParam();
}
@Override
public BindVM initViewModel() {
VMFactory factory = VMFactory.getInstance(getApplication());
return ViewModelProviders.of(this, factory).get(BindVM.class);
}
@Override
public void initData() {
super.initData();
viewModel.initToolbar();
}
@Override
public void initViewObservable() {
super.initViewObservable();
}
}
package com.phlx.anchorcollect.ui.bind;
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.SparseIntArray;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import com.phlx.anchorcollect.App;
import com.phlx.anchorcollect.Configs;
import com.phlx.anchorcollect.R;
import com.phlx.anchorcollect.data.Repository;
import com.phlx.anchorcollect.db.DbUtil;
import com.phlx.anchorcollect.db.gen.CattleResumeEntityDao;
import com.phlx.anchorcollect.db.interf.DbQueryCallBack;
import com.phlx.anchorcollect.entity.CattleResumeEntity;
import com.phlx.anchorcollect.ui.base.BackBarVM;
import com.phlx.anchorcollect.util.TextUtil;
import com.phlx.anchorcollect.widget.ItemData;
import com.uhf.structures.InventoryData;
import com.uhf.structures.OnInventoryListener;
import org.greenrobot.greendao.query.QueryBuilder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import cn.wandersnail.commons.util.ToastUtils;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.binding.command.BindingConsumer;
import me.goldze.mvvmhabit.binding.viewadapter.spinner.IKeyAndValue;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.StringUtils;
public class BindVM extends BackBarVM<Repository> implements OnInventoryListener {
public ObservableArrayList<IKeyAndValue> tagItemData;
private List<CattleResumeEntity> cattleResumeEntityList;
public ObservableField<String> individualNo = new ObservableField<>("");
public ObservableField<String> registrationNo = new ObservableField<>("");
private SoundPool soundPool;//盘点到标签时的提示音
private SparseIntArray musicId;
private boolean isScan = false;//是否在扫描
private String tag = "";//扫描到的标记
private CattleResumeEntity entity;
private SimpleDateFormat dateFormat;
public BindVM(@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));
}
@Override
public void onResume() {
super.onResume();
isScan = false;
tag = "";
App.getInstance().getLinkage().setOnInventoryListener(this);
}
//初始化ToolBar
public void initToolbar() {
setBackTitleText("绑定耳标");
setSettingVisibleObservable(View.GONE);
setBackRightTextVisible(View.VISIBLE);
setBackRightText(getApplication().getResources().getString(R.string.save));
initData();
}
private void initData() {
tagItemData = new ObservableArrayList<>();
cattleResumeEntityList = new ArrayList<>();
queryTag();
}
private void queryTag() {
tagItemData.clear();
cattleResumeEntityList.clear();
QueryBuilder<CattleResumeEntity> builder0 =
DbUtil.getInstance().getQueryBuilder(CattleResumeEntity.class)
.where(CattleResumeEntityDao.Properties.RegistrationNo.eq(""));
DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<CattleResumeEntity>() {
@Override
public void onSuccess(List<CattleResumeEntity> result) {
if (result != null && result.size() > 0) {
cattleResumeEntityList.addAll(result);
for (CattleResumeEntity cattleResumeEntity : result) {
tagItemData.add(new ItemData(cattleResumeEntity.getIndividualNo(), cattleResumeEntity.getIndividualNo()));
}
}
}
@Override
public void onFailed() {
ToastUtils.showShort("查询基础数据数量失败!");
dismissDialog();
}
}).queryAsyncAll(CattleResumeEntity.class, builder0);
}
public BindingCommand<IKeyAndValue> onTagSelectorCommand = new BindingCommand<>(new BindingConsumer<IKeyAndValue>() {
@Override
public void call(IKeyAndValue iKeyAndValue) {
individualNo.set(iKeyAndValue.getValue());
}
});
public BindingCommand onRegistrationNoClick = new BindingCommand(() -> startInventory());
@Override
protected void backRightTextOnClick() {
super.backRightTextOnClick();
if (StringUtils.isEmpty(individualNo.get())) {
ToastUtils.showShort("请选择可视耳标");
return;
}
if (StringUtils.isEmpty(registrationNo.get())) {
ToastUtils.showShort("请扫描标签");
return;
}
//判断是否已经绑定过高频耳标
QueryBuilder<CattleResumeEntity> builder0 =
DbUtil.getInstance().getQueryBuilder(CattleResumeEntity.class)
.where(CattleResumeEntityDao.Properties.RegistrationNo.eq(registrationNo.get()));
DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<CattleResumeEntity>() {
@Override
public void onSuccess(List<CattleResumeEntity> result) {
if (result != null && result.size() > 0) {
ToastUtils.showShort("该耳标已被绑定,请重新扫描!");
return;
} else {
bindRfid();
}
}
@Override
public void onFailed() {
ToastUtils.showShort("查询基础数据数量失败!");
dismissDialog();
}
}).queryAsyncAll(CattleResumeEntity.class, builder0);
}
private void bindRfid() {
for (CattleResumeEntity cattleResumeEntity : cattleResumeEntityList) {
if (cattleResumeEntity.getIndividualNo().equals(individualNo.get())) {
entity = cattleResumeEntity;
entity.setRegistrationNo(registrationNo.get());
entity.setUploadStatus("0");
cattleResumeEntity.setUpdateBy(SPUtils.getInstance().getString(Configs.SP_LOGIN_NAME));
dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cattleResumeEntity.setUpdateTime(dateFormat.format(new Date()));
break;
}
}
if (entity != null) {
long saveStatus = DbUtil.getInstance().insertOrReplace(entity);
if (saveStatus != -1) {
ToastUtils.showShort("耳标绑定成功!");
entity = null;
individualNo.set("");
registrationNo.set("");
queryTag();
} else {
ToastUtils.showShort("耳标绑定失败!");
}
}
}
//开始盘点一次
public void startInventory() {
if (!isScan) {
App.getInstance().getLinkage().startInventory(1, 0);
tag = "";
registrationNo.set("");
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;
registrationNo.set(epc);
isScan = false;
}
@Override
public void getInventoryData(InventoryData inventoryData) {
if (inventoryData != null) {
Message messenger = handler.obtainMessage();
messenger.what = 0x333;
messenger.obj = inventoryData;
handler.sendMessage(messenger);
}
}
}
...@@ -2,6 +2,7 @@ package com.phlx.anchorcollect.ui.fragment; ...@@ -2,6 +2,7 @@ package com.phlx.anchorcollect.ui.fragment;
import android.Manifest; import android.Manifest;
import android.app.Dialog; import android.app.Dialog;
import android.graphics.Bitmap;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
...@@ -45,6 +46,7 @@ import com.phlx.anchorcollect.entity.GenTableColumn; ...@@ -45,6 +46,7 @@ import com.phlx.anchorcollect.entity.GenTableColumn;
import com.phlx.anchorcollect.event.EventTag; import com.phlx.anchorcollect.event.EventTag;
import com.phlx.anchorcollect.ui.fragment.vm.BasicsCollectVM; import com.phlx.anchorcollect.ui.fragment.vm.BasicsCollectVM;
import com.phlx.anchorcollect.ui.info.CattleActivity; import com.phlx.anchorcollect.ui.info.CattleActivity;
import com.phlx.anchorcollect.util.BaseImageUtils;
import com.phlx.anchorcollect.util.DictUtils; import com.phlx.anchorcollect.util.DictUtils;
import com.phlx.anchorcollect.util.ImagePicker; import com.phlx.anchorcollect.util.ImagePicker;
import com.phlx.anchorcollect.widget.SpaceItemDecoration; import com.phlx.anchorcollect.widget.SpaceItemDecoration;
...@@ -57,6 +59,7 @@ import java.util.List; ...@@ -57,6 +59,7 @@ import java.util.List;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseFragment; import me.goldze.mvvmhabit.base.BaseFragment;
import me.goldze.mvvmhabit.utils.StringUtils;
import me.goldze.mvvmhabit.utils.ToastUtils; import me.goldze.mvvmhabit.utils.ToastUtils;
...@@ -68,6 +71,8 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin ...@@ -68,6 +71,8 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin
private MaterialDialog showEpcDialog; private MaterialDialog showEpcDialog;
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();
} }
...@@ -124,6 +129,7 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin ...@@ -124,6 +129,7 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin
if (!hidden) { if (!hidden) {
viewModel.addInventoryListener(); viewModel.addInventoryListener();
initImagePicker();
viewModel.initDataForUnid(Configs.tempUnid); viewModel.initDataForUnid(Configs.tempUnid);
Configs.currentEvent = EventTag.EVENT_WEIGHT_DATA_BASICS; Configs.currentEvent = EventTag.EVENT_WEIGHT_DATA_BASICS;
} else { } else {
...@@ -232,7 +238,7 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin ...@@ -232,7 +238,7 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin
} }
} }
Glide.with(getContext()) Glide.with(getContext())
.load(viewModel.imgUrl) .load(viewModel.getMarkImgUrl())
.apply( .apply(
new RequestOptions() new RequestOptions()
.skipMemoryCache(true) .skipMemoryCache(true)
...@@ -285,6 +291,67 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin ...@@ -285,6 +291,67 @@ 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();
}
});
} }
//选择框 //选择框
...@@ -490,5 +557,30 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin ...@@ -490,5 +557,30 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin
} }
} }
private void initImagePicker() {
if (mImagePicker == null) {
mImagePicker = new ImagePicker(getActivity());
mImagePicker.setOnImagePickerListener(new ImagePicker.OnImagePickerListener() {
@Override
public void onSuccess(String path) {
Bitmap bitmap = BaseImageUtils.decodeBitmap(path, getActivity());
// Bitmap bitmap2 = BaseImageUtils.rotateBitmapByDegree(bitmap, BaseImageUtils.getBitmapDegree(path));
BaseImageUtils.saveBitmapToSDCard(bitmap, viewModel.getMarkImgUrl());
Configs.tempCattleResume.setPhotoPath(viewModel.getMarkImgUrl());
Glide.with(getActivity())
.load(viewModel.getMarkImgUrl())
.apply(
new RequestOptions()
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.error(R.drawable.no_image)
.fallback(R.drawable.no_image)
)
.into(binding.ivCattlePhoto);
}
});
}
}
} }
...@@ -6,7 +6,6 @@ import android.graphics.drawable.Drawable; ...@@ -6,7 +6,6 @@ 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.Bundle;
import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.util.Log; import android.util.Log;
...@@ -18,6 +17,8 @@ import androidx.databinding.ObservableArrayList; ...@@ -18,6 +17,8 @@ import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.databinding.ObservableList; import androidx.databinding.ObservableList;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.phlx.anchorcollect.App; import com.phlx.anchorcollect.App;
import com.phlx.anchorcollect.BR; import com.phlx.anchorcollect.BR;
import com.phlx.anchorcollect.Configs; import com.phlx.anchorcollect.Configs;
...@@ -27,6 +28,7 @@ import com.phlx.anchorcollect.db.DbUtil; ...@@ -27,6 +28,7 @@ import com.phlx.anchorcollect.db.DbUtil;
import com.phlx.anchorcollect.db.gen.CattleResumeEntityDao; import com.phlx.anchorcollect.db.gen.CattleResumeEntityDao;
import com.phlx.anchorcollect.db.gen.DictEntityDao; import com.phlx.anchorcollect.db.gen.DictEntityDao;
import com.phlx.anchorcollect.db.gen.WeightManEntityDao; import com.phlx.anchorcollect.db.gen.WeightManEntityDao;
import com.phlx.anchorcollect.db.interf.DbIDUCallBack;
import com.phlx.anchorcollect.db.interf.DbQueryCallBack; import com.phlx.anchorcollect.db.interf.DbQueryCallBack;
import com.phlx.anchorcollect.entity.CattleResumeEntity; import com.phlx.anchorcollect.entity.CattleResumeEntity;
import com.phlx.anchorcollect.entity.DictEntity; import com.phlx.anchorcollect.entity.DictEntity;
...@@ -34,6 +36,8 @@ import com.phlx.anchorcollect.entity.GenTableColumn; ...@@ -34,6 +36,8 @@ import com.phlx.anchorcollect.entity.GenTableColumn;
import com.phlx.anchorcollect.entity.WeightManEntity; import com.phlx.anchorcollect.entity.WeightManEntity;
import com.phlx.anchorcollect.event.EventMsg; import com.phlx.anchorcollect.event.EventMsg;
import com.phlx.anchorcollect.event.EventTag; import com.phlx.anchorcollect.event.EventTag;
import com.phlx.anchorcollect.ui.bind.BindActivity;
import com.phlx.anchorcollect.ui.labelchange.LabelChangeActivity;
import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem; import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem;
import com.phlx.anchorcollect.ui.setting.SettingActivity; import com.phlx.anchorcollect.ui.setting.SettingActivity;
import com.phlx.anchorcollect.ui.setting.SyncActivity; import com.phlx.anchorcollect.ui.setting.SyncActivity;
...@@ -41,6 +45,7 @@ import com.phlx.anchorcollect.util.EntityUtils; ...@@ -41,6 +45,7 @@ import com.phlx.anchorcollect.util.EntityUtils;
import com.phlx.anchorcollect.util.TextUtil; import com.phlx.anchorcollect.util.TextUtil;
import com.uhf.structures.InventoryData; import com.uhf.structures.InventoryData;
import com.uhf.structures.OnInventoryListener; import com.uhf.structures.OnInventoryListener;
import com.uhf.structures.Rfid_Value;
import org.greenrobot.greendao.query.QueryBuilder; import org.greenrobot.greendao.query.QueryBuilder;
...@@ -50,23 +55,19 @@ import java.text.ParseException; ...@@ -50,23 +55,19 @@ import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import io.reactivex.Observable; import cn.hutool.core.util.IdUtil;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseViewModel; import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction; import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand; import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.bus.RxBus; import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.bus.RxSubscriptions; import me.goldze.mvvmhabit.bus.RxSubscriptions;
import me.goldze.mvvmhabit.bus.event.SingleLiveEvent; 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.SPUtils;
import me.goldze.mvvmhabit.utils.StringUtils; import me.goldze.mvvmhabit.utils.StringUtils;
import me.goldze.mvvmhabit.utils.ToastUtils; import me.goldze.mvvmhabit.utils.ToastUtils;
...@@ -76,13 +77,14 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -76,13 +77,14 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
public Drawable drawableImg; public Drawable drawableImg;
//照片路径 //照片路径
public String imgUrl; public String markeImgUrl;
private File imgFile; private File markFile;
//存放非list控件 //存放非list控件
public List<GenTableColumn> uiList = new ArrayList<>(); public List<GenTableColumn> uiList = new ArrayList<>();
public GenTableColumn currentParamEntity; public GenTableColumn currentParamEntity;
public GenTableColumn remarkParamEntity = new GenTableColumn(); public GenTableColumn remarkParamEntity = new GenTableColumn();
public GenTableColumn photoParamEntity = new GenTableColumn();
//给RecyclerView添加ObservableList //给RecyclerView添加ObservableList
public ObservableList<CollectGridItem> observableList = new ObservableArrayList<>(); public ObservableList<CollectGridItem> observableList = new ObservableArrayList<>();
...@@ -96,6 +98,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -96,6 +98,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
public SingleLiveEvent<List<String>> onShowEpcListEvent = new SingleLiveEvent<>();//普通盘点模式下epc列表 public SingleLiveEvent<List<String>> onShowEpcListEvent = new SingleLiveEvent<>();//普通盘点模式下epc列表
public SingleLiveEvent<String> onShowDialogEvent = new SingleLiveEvent<>();//弹窗提示 public SingleLiveEvent<String> onShowDialogEvent = new SingleLiveEvent<>();//弹窗提示
public SingleLiveEvent<String> onChangeLabelEvent = new SingleLiveEvent<>();//换绑标签的弹窗
public ObservableField<String> tag = new ObservableField<>(""); public ObservableField<String> tag = new ObservableField<>("");
public ObservableField<String> rfid = new ObservableField<>(""); public ObservableField<String> rfid = new ObservableField<>("");
public ObservableField<String> weight = new ObservableField<>("----"); public ObservableField<String> weight = new ObservableField<>("----");
...@@ -113,6 +118,10 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -113,6 +118,10 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
private SimpleDateFormat dateFormat; private SimpleDateFormat dateFormat;
public boolean isModify = false;
private List<CattleResumeEntity> uploadData;
public boolean isScan = false;//是否在扫描 public boolean isScan = false;//是否在扫描
private String rfidTag = "";//扫描到的标记 private String rfidTag = "";//扫描到的标记
...@@ -124,6 +133,8 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -124,6 +133,8 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
private boolean isWeightScan = false; private boolean isWeightScan = false;
public int scanFunction = 0;//0 是普通扫描耳标,1 是弹出窗的扫描耳标, 2 是换绑耳标的扫描耳标
public BasicsCollectVM(@NonNull Application application, Repository model) { public BasicsCollectVM(@NonNull Application application, Repository model) {
super(application, model); super(application, model);
...@@ -142,6 +153,20 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -142,6 +153,20 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
} }
public String getMarkImgUrl() {
return markeImgUrl;
}
public void setMarkImgUrl() {
File externalFileRootDir = getApplication().getExternalFilesDir("/collect/picture/");
// externalFileRootDir.mkdirs();
// Environment.getExternalStorageDirectory().getAbsolutePath()
String savePath = externalFileRootDir.getAbsolutePath();//不分开就少个斜杠
markeImgUrl = savePath + "/anchorCiq" + Configs.tempCattleResume.getUnid() + ".jpg";
markFile = new File(markeImgUrl);
}
public void addInventoryListener() { public void addInventoryListener() {
App.getInstance().getLinkage().setOnInventoryListener(this); App.getInstance().getLinkage().setOnInventoryListener(this);
} }
...@@ -178,11 +203,18 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -178,11 +203,18 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
remarkParamEntity.setColumnType("varchar(500)"); remarkParamEntity.setColumnType("varchar(500)");
remarkParamEntity.setIsEdit("1"); remarkParamEntity.setIsEdit("1");
//初始化照片
photoParamEntity.setContent("");
photoParamEntity.setShowName("");
photoParamEntity.setHtmlType("photo");
photoParamEntity.setIsEdit("1");
} }
public void initDataForTag(String tag) { public void initDataForTag(String tag) {
clearTempInfo(); if (isModify)
clearTempInfo();
// clearParamList(); // clearParamList();
// onNotifyAllEvent.setValue(false); // onNotifyAllEvent.setValue(false);
this.tag.set(tag); this.tag.set(tag);
...@@ -225,17 +257,43 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -225,17 +257,43 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
queryCattleResume(builder); queryCattleResume(builder);
} }
public BindingCommand onSaveClick = new BindingCommand(new BindingAction() {
@Override
public void call() {
if (StringUtils.isEmpty(tag.get())) {
onShowDialogEvent.setValue("请完成可视耳标的录入");
return;
}
//在这判断一下图片
if (Configs.tempCattleResume == null || StringUtils.isEmpty(Configs.tempCattleResume.getPhotoPath())) {
ToastUtils.showShort("请上传打标图片");
return;
}
//判断必填
for (GenTableColumn gtc : Configs.cattleresume) {
if ("1".equals(gtc.getIsRequired()) && StringUtils.isEmpty(gtc.getContent())) {
onShowDialogEvent.setValue("请完成" + gtc.getColumnComment() + "的录入");
return;
}
}
saveCattleresume();
}
});
//扫描rfid //扫描rfid
private void scanRfid() { public void scanRfid() {
if (!isScan && isWeightScan) { if (!isScan && isWeightScan) {
clearTempInfo(); rfidTag = "";
if (isModify)
clearTempInfo();
// clearParamList(); // clearParamList();
// onNotifyAllEvent.setValue(false); // onNotifyAllEvent.setValue(false);
if (Configs.inventoryStatus) { if (Configs.inventoryStatus) {
showDialog("正在扫描耳标!"); showDialog("正在扫描耳标!");
} }
App.getInstance().getLinkage().startInventory(1, 0); App.getInstance().getLinkage().startInventory(1, 0);
isScan = true; isScan = true;
ToastUtils.showShort("开始盘点"); ToastUtils.showShort("开始盘点");
...@@ -322,8 +380,17 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -322,8 +380,17 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
public void onItemClick(GenTableColumn entity) { public void onItemClick(GenTableColumn entity) {
if (Configs.tempUnid == null) { // if (Configs.tempUnid == null) {
ToastUtils.showShort("请扫描耳标或者输入耳标信息"); // ToastUtils.showShort("请扫描耳标或者输入耳标信息");
// return;
// }
if (Configs.tempUnid != null && !"1".equals(entity.getIsEdit())) {
ToastUtils.showShort("该项无法修改!");
return;
}
if (Configs.tempTag == null) {
ToastUtils.showShort("请输入耳标信息");
return; return;
} }
...@@ -331,10 +398,6 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -331,10 +398,6 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
onCardClickEvent.call(); onCardClickEvent.call();
} }
public String getImgUrl() {
return imgUrl;
}
//输入可视耳标 //输入可视耳标
public BindingCommand onTagInputClick = new BindingCommand(new BindingAction() { public BindingCommand onTagInputClick = new BindingCommand(new BindingAction() {
@Override @Override
...@@ -351,15 +414,28 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -351,15 +414,28 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
} }
}); });
//修改标签
public BindingCommand onLabelChangeClick = new BindingCommand(new BindingAction() {
@Override
public void call() {
onChangeLabelEvent.call();
}
});
//同步数据 //同步数据
public BindingCommand onSyncClick = new BindingCommand(new BindingAction() { public BindingCommand onSyncClick = new BindingCommand(new BindingAction() {
@Override @Override
public void call() { public void call() {
if (!Configs.isOnLine) { // if (!Configs.isOnLine) {
ToastUtils.showShort("请在联网模式下同步数据!"); // ToastUtils.showShort("请在联网模式下同步数据!");
return; // return;
// }
// startActivity(SyncActivity.class);
if (Configs.isOnLine) {
startActivity(SyncActivity.class);
} else {
startActivity(BindActivity.class);
} }
startActivity(SyncActivity.class);
} }
}); });
...@@ -384,8 +460,18 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -384,8 +460,18 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
public void click(int id) { public void click(int id) {
if (Configs.tempUnid == null) { // if (Configs.tempUnid == null) {
ToastUtils.showShort("请扫描耳标或者输入耳标信息"); // ToastUtils.showShort("请扫描耳标或者输入耳标信息");
// return;
// }
if (StringUtils.isEmpty(rfid.get())) {
ToastUtils.showShort("请扫描耳标");
return;
}
if (StringUtils.isEmpty(tag.get())) {
ToastUtils.showShort("请输入可视耳标");
return; return;
} }
...@@ -394,15 +480,37 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -394,15 +480,37 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
currentParamEntity = remarkParamEntity; currentParamEntity = remarkParamEntity;
return;//基础信息不可修改 return;//基础信息不可修改
} else { } else {
currentParamEntity = uiList.get(id); if (id == 100) {
currentParamEntity = photoParamEntity;
} else {
currentParamEntity = uiList.get(id);
}
if (!"1".equals(currentParamEntity.getIsEdit())) { if (!"1".equals(currentParamEntity.getIsEdit())) {
return; return;
} }
if (Configs.tempCattleResume == null) {
Configs.tempCattleResume = new CattleResumeEntity();
}
if (Configs.tempCattleResume.getUnid() == null) {
Configs.tempCattleResume.setUnid(IdUtil.createSnowflake(3, 1).nextId());
}
setMarkImgUrl();
} }
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>() {
...@@ -411,9 +519,15 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -411,9 +519,15 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
if (result != null && result.size() > 0) { if (result != null && result.size() > 0) {
imgUrl = getApplication().getExternalFilesDir("/collect/picture/").getAbsolutePath() isModify = true;
markeImgUrl = getApplication().getExternalFilesDir("/collect/picture/").getAbsolutePath()
+ "/anchorCiq" + result.get(0).getUnid() + ".jpg"; + "/anchorCiq" + result.get(0).getUnid() + ".jpg";
imgFile = new File(imgUrl); markFile = new File(markeImgUrl);
// File externalFileRootDir = getApplication().getExternalFilesDir("/collect/picture/");
//// externalFileRootDir.mkdirs();
// String savePath = externalFileRootDir.getAbsolutePath();
// markeImgUrl = savePath + "/anchorCiq" + result.get(0).getUnid() + ".jpg";
// markFile = new File(markeImgUrl);
Configs.tempCattleResume = result.get(0); Configs.tempCattleResume = result.get(0);
Configs.tempTag = result.get(0).getIndividualNo(); Configs.tempTag = result.get(0).getIndividualNo();
...@@ -455,7 +569,8 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -455,7 +569,8 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
DbUtil.getInstance().getQueryBuilder(DictEntity.class) DbUtil.getInstance().getQueryBuilder(DictEntity.class)
.where(DictEntityDao.Properties.DictType.eq(gtc.getDictType()) .where(DictEntityDao.Properties.DictType.eq(gtc.getDictType())
, DictEntityDao.Properties.DictValue.eq(value)); , DictEntityDao.Properties.DictValue.eq(value));
List<DictEntity> dictEntities = DbUtil.getInstance().queryAll(DictEntity.class, builder); List<DictEntity> dictEntities =
DbUtil.getInstance().queryAll(DictEntity.class, builder);
if (dictEntities != null && dictEntities.size() > 0) { if (dictEntities != null && dictEntities.size() > 0) {
showName = dictEntities.get(0).getDictLabel(); showName = dictEntities.get(0).getDictLabel();
} }
...@@ -472,7 +587,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -472,7 +587,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
onNotifyAllEvent.setValue(false); onNotifyAllEvent.setValue(false);
} else { } else {
onNotifyAllEvent.setValue(true); if (isModify)
onNotifyAllEvent.setValue(true);
isModify = false;
} }
} }
...@@ -485,6 +602,74 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -485,6 +602,74 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
}).queryAsyncAll(CattleResumeEntity.class, builder); }).queryAsyncAll(CattleResumeEntity.class, builder);
} }
private void saveCattleresume() {
JsonObject jsonObject = new JsonObject();
for (GenTableColumn gtc : Configs.cattleresume) {
//防止转json类型错误
if ("".equals(gtc.getContent())) {
switch (gtc.getJavaType()) {
case "Long":
case "Double":
case "Integer":
case "BigDecimal":
gtc.setContent("0");
break;
}
}
jsonObject.addProperty(gtc.getJavaField(), gtc.getContent());
}
Gson gson = new Gson();
CattleResumeEntity cattleResumeEntity = gson.fromJson(jsonObject, CattleResumeEntity.class);
dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (!isModify) {//新增
// uuid = IdUtil.createSnowflake(3, 1).nextId();
cattleResumeEntity.setUnid(Configs.tempCattleResume.getUnid());
cattleResumeEntity.setCreateBy(SPUtils.getInstance().getString(Configs.SP_LOGIN_NAME));
cattleResumeEntity.setCreateTime(dateFormat.format(new Date()));
} else {
cattleResumeEntity.setCreateBy(Configs.tempCattleResume.getCreateBy());
cattleResumeEntity.setCreateTime(Configs.tempCattleResume.getCreateTime());
cattleResumeEntity.setUnid(Configs.tempUnid);
cattleResumeEntity.setUpdateBy(SPUtils.getInstance().getString(Configs.SP_LOGIN_NAME));
cattleResumeEntity.setUpdateTime(dateFormat.format(new Date()));
}
//保存图片 改在上传时候读
// if (Configs.tempCattleResume.getPhotoPath() != null && !Configs.tempCattleResume.getPhotoPath().equals("")) {
// cattleResumeEntity.setPhoto(BaseImageUtils.bitmapToString(Configs.tempCattleResume.getPhotoPath(),
// getApplication()));
// }
cattleResumeEntity.setPhotoPath(Configs.tempCattleResume.getPhotoPath());
cattleResumeEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
cattleResumeEntity.setRegistrationNo(rfid.get());
cattleResumeEntity.setIndividualNo(tag.get());//修改去配置里修改
cattleResumeEntity.setRemark(remarkParamEntity.getContent());
cattleResumeEntity.setUploadStatus("0");
uploadData = new ArrayList<>();
uploadData.add(cattleResumeEntity);
DbUtil.getInstance().setDbIDUCallBack(new DbIDUCallBack() {
@Override
public void onNotification(boolean result) {
dismissDialog();
if (result) {
isModify = false;
clearTempInfo();
onNotifyAllEvent.setValue(true);
onShowDialogEvent.setValue("保存基础信息成功!");
} else {
ToastUtils.showShort("保存基础信息失败");
}
}
}).insertAsyncBatch(CattleResumeEntity.class, uploadData);
}
@SuppressLint("HandlerLeak") @SuppressLint("HandlerLeak")
private Handler handler = new Handler() { private Handler handler = new Handler() {
...@@ -493,7 +678,8 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -493,7 +678,8 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
if (msg.what == 0x333) { if (msg.what == 0x333) {
InventoryData inventoryData = (InventoryData) msg.obj; InventoryData inventoryData = (InventoryData) msg.obj;
if (inventoryData.getDataLength() > 0 && inventoryData.getEpcLength() > 0) { if (inventoryData.getDataLength() > 0 && inventoryData.getEpcLength() > 0) {
String epc = TextUtil.byteToHexString(inventoryData.getEPC_Data(), inventoryData.getEpcLength()).substring(1); String epc =
TextUtil.byteToHexString(inventoryData.getEPC_Data(), inventoryData.getEpcLength()).substring(1);
String tid = TextUtil.byteToHexString(inventoryData.getData(), inventoryData.getDataLength()); String tid = TextUtil.byteToHexString(inventoryData.getData(), inventoryData.getDataLength());
soundPool.play(musicId.get(1), 1, 1, 0, 0, 1); soundPool.play(musicId.get(1), 1, 1, 0, 0, 1);
App.getInstance().getLinkage().stopInventory(); App.getInstance().getLinkage().stopInventory();
...@@ -536,7 +722,8 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -536,7 +722,8 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
// QueryBuilder<CattleResumeEntity> builder = // QueryBuilder<CattleResumeEntity> builder =
// DbUtil.getInstance().getQueryBuilder(CattleResumeEntity.class) // DbUtil.getInstance().getQueryBuilder(CattleResumeEntity.class)
// .where(CattleResumeEntityDao.Properties.RegistrationNo.eq(epc)); // .where(CattleResumeEntityDao.Properties.RegistrationNo.eq(epc));
// List<CattleResumeEntity> labels = DbUtil.getInstance().queryAll(CattleResumeEntity.class, builder); // List<CattleResumeEntity> labels = DbUtil.getInstance().queryAll(CattleResumeEntity.class,
// builder);
// //
// if (labels.size() > 0) { // if (labels.size() > 0) {
// emitter.onNext(labels.get(0)); // emitter.onNext(labels.get(0));
...@@ -571,6 +758,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -571,6 +758,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
@Override @Override
public void getInventoryData(InventoryData inventoryData) { public void getInventoryData(InventoryData inventoryData) {
if (inventoryData != null) { if (inventoryData != null) {
Log.e("lei", "getInventoryData: " + inventoryData.toString());
Message messenger = handler.obtainMessage(); Message messenger = handler.obtainMessage();
messenger.what = 0x333; messenger.what = 0x333;
messenger.obj = inventoryData; messenger.obj = inventoryData;
...@@ -588,7 +776,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -588,7 +776,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
if (weightNum > 25) { if (weightNum > 25) {
scanRfid(); scanRfid();
// if (isWeightScan) // if (isWeightScan)
Configs.tempWeight = weightNum; Configs.tempWeight = weightNum;
isWeightScan = false; isWeightScan = false;
} else { } else {
String lastWeight = weight.get(); String lastWeight = weight.get();
...@@ -631,7 +819,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -631,7 +819,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
public void clearParamList() { public void clearParamList() {
//备注清除数据 //备注清除数据
imgUrl = ""; markeImgUrl = "";
remarkParamEntity.setContent(""); remarkParamEntity.setContent("");
remarkParamEntity.setShowName(""); remarkParamEntity.setShowName("");
currentParamEntity = new GenTableColumn(); currentParamEntity = new GenTableColumn();
......
package com.phlx.anchorcollect.ui.labelchange;
import android.os.Bundle;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModelProviders;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bigkoo.pickerview.view.TimePickerView;
import com.phlx.anchorcollect.BR;
import com.phlx.anchorcollect.R;
import com.phlx.anchorcollect.data.VMFactory;
import com.phlx.anchorcollect.databinding.ActivityLabelChangeBinding;
import com.phlx.anchorcollect.ui.base.BaseActivity;
import com.phlx.anchorcollect.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.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.SparseIntArray;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableField;
import com.phlx.anchorcollect.App;
import com.phlx.anchorcollect.Configs;
import com.phlx.anchorcollect.R;
import com.phlx.anchorcollect.data.Repository;
import com.phlx.anchorcollect.db.DbUtil;
import com.phlx.anchorcollect.db.interf.DbIDUCallBack;
import com.phlx.anchorcollect.db.interf.DbQueryCallBack;
import com.phlx.anchorcollect.entity.CattleResumeEntity;
import com.phlx.anchorcollect.ui.base.BackBarVM;
import com.phlx.anchorcollect.util.TextUtil;
import com.uhf.structures.InventoryData;
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.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);
}
}
...@@ -80,8 +80,8 @@ public class LoginVM extends BaseViewModel<Repository> { ...@@ -80,8 +80,8 @@ public class LoginVM extends BaseViewModel<Repository> {
userName.set(model.getUserName()); userName.set(model.getUserName());
password.set(model.getPassword()); password.set(model.getPassword());
// userName.set("dzy"); userName.set("15047917803");
// password.set("123456"); password.set("Tpsq7803*");
// userName.set("ewei"); // userName.set("ewei");
// password.set("123456"); // password.set("123456");
} }
......
...@@ -146,8 +146,7 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> { ...@@ -146,8 +146,7 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> {
// ModuleManager.powerOff(); // ModuleManager.powerOff();
App.getInstance().getLinkage().setRFConnectMode(0); App.getInstance().getLinkage().setRFConnectMode(0);
App.getInstance().getLinkage().setRFModuleType(0);//R2000 0,R2000plus 3 if (!ModuleManager.initPower()) {
if (ModuleManager.openCom() != 0 || ModuleManager.powerOn() != 0) {
new MaterialDialog.Builder(this).title("系统提示").content("串口打开失败,无法工作,请检查设备").cancelable(false).canceledOnTouchOutside(false).positiveText("退出").onAny(new MaterialDialog.SingleButtonCallback() { new MaterialDialog.Builder(this).title("系统提示").content("串口打开失败,无法工作,请检查设备").cancelable(false).canceledOnTouchOutside(false).positiveText("退出").onAny(new MaterialDialog.SingleButtonCallback() {
@Override @Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
...@@ -165,14 +164,14 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> { ...@@ -165,14 +164,14 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainVM> {
viewModel.setInventoryStatus(); viewModel.setInventoryStatus();
ToastUtils.showShort(connectManger.getModuleVersion()); ToastUtils.showShort(connectManger.getModuleVersion());
//设置盘点内容:Epc + Tid // //设置盘点内容:Epc + Tid
InventoryParams inventoryParams = new InventoryParams(); InventoryParams inventoryParams = new InventoryParams();
inventoryParams.address = 0; inventoryParams.address = 0;
inventoryParams.inventoryArea = 2; inventoryParams.inventoryArea = 2;
inventoryParams.len = 6; inventoryParams.len = 6;
App.getInstance().getLinkage().Radio_SetInventoryParams(inventoryParams); App.getInstance().getLinkage().Radio_SetInventoryParams(inventoryParams);
setAlgorithm(); // setAlgorithm();
} }
/** /**
......
...@@ -141,7 +141,7 @@ public class SettingVM extends BaseViewModel<Repository> implements DiscoveryLis ...@@ -141,7 +141,7 @@ public class SettingVM extends BaseViewModel<Repository> implements DiscoveryLis
* 获取天线功率 * 获取天线功率
*/ */
private void getAntennaPower() { private void getAntennaPower() {
if (ModuleManager.powerOn() != 0) { if (!ModuleManager.initPower()) {
me.goldze.mvvmhabit.utils.ToastUtils.showShort("模块连接失败"); me.goldze.mvvmhabit.utils.ToastUtils.showShort("模块连接失败");
ModuleManager.powerOff(); ModuleManager.powerOff();
return; return;
...@@ -163,7 +163,7 @@ public class SettingVM extends BaseViewModel<Repository> implements DiscoveryLis ...@@ -163,7 +163,7 @@ public class SettingVM extends BaseViewModel<Repository> implements DiscoveryLis
* 设置天线功率 * 设置天线功率
*/ */
private void setAntennaPower() { private void setAntennaPower() {
if (ModuleManager.powerOn() != 0) { if (!ModuleManager.initPower()) {
me.goldze.mvvmhabit.utils.ToastUtils.showShort("模块连接失败"); me.goldze.mvvmhabit.utils.ToastUtils.showShort("模块连接失败");
ModuleManager.powerOff(); ModuleManager.powerOff();
return; return;
......
<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.ui.bind.BindVM" />
<variable
name="spinnerAdapter"
type="android.widget.ArrayAdapter" />
<variable
name="adapter"
type="BindingRecyclerViewAdapter" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_bg"
android:padding="5dp">
<include
android:id="@+id/include"
layout="@layout/layout_back_bar"
binding:backBarVM="@{viewModel.backBarVM}" />
<TextView
android:id="@+id/tv_rfid_text"
android:layout_width="0dp"
android:layout_height="@dimen/dp_45"
android:background="@drawable/bg_radius_stroke_white_5"
android:gravity="center"
android:layout_margin="@dimen/dp_20"
android:hint="未扫到电子耳标"
android:text="@{viewModel.registrationNo}"
android:textColor="@color/black"
binding:layout_constraintLeft_toLeftOf="parent"
binding:layout_constraintRight_toRightOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/include"
onClickCommand="@{viewModel.onRegistrationNoClick}"
/>
<Spinner
android:id="@+id/colony_house_no_sp"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:layout_marginTop="@dimen/dp_5"
android:gravity="center_vertical"
android:minHeight="@dimen/dp_40"
android:layout_margin="@dimen/dp_20"
android:spinnerMode="dialog"
binding:valueReply="@{viewModel.individualNo}"
app:adapter="@{spinnerAdapter}"
binding:itemDatas="@{viewModel.tagItemData}"
binding:onItemSelectedCommand="@{viewModel.onTagSelectorCommand}"
binding:layout_constraintLeft_toLeftOf="parent"
binding:layout_constraintRight_toRightOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/tv_rfid_text"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
<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.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
...@@ -139,8 +139,7 @@ ...@@ -139,8 +139,7 @@
binding:layout_constraintLeft_toLeftOf="parent" binding:layout_constraintLeft_toLeftOf="parent"
binding:layout_constraintRight_toLeftOf="@+id/tv_unit" binding:layout_constraintRight_toLeftOf="@+id/tv_unit"
binding:layout_constraintTop_toTopOf="parent" binding:layout_constraintTop_toTopOf="parent"
binding:onClickCommand="@{viewModel.onWeightChangedClick}" binding:onClickCommand="@{viewModel.onWeightChangedClick}" />
/>
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_unit" android:id="@+id/tv_unit"
...@@ -374,10 +373,9 @@ ...@@ -374,10 +373,9 @@
android:id="@+id/iv_cattle_photo" android:id="@+id/iv_cattle_photo"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:onClick="@{() ->viewModel.click(100)}"
android:src="@{viewModel.drawableImg}" android:src="@{viewModel.drawableImg}"
binding:url="@{viewModel.imgUrl}"/> binding:url="@{viewModel.markImgUrl}" />
<!-- android:onClick="@{() ->viewModel.click(100)}"-->
<!-- binding:url="@{viewModel.uiList.get(17).value}"-->
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
...@@ -472,7 +470,7 @@ ...@@ -472,7 +470,7 @@
android:maxLines="1" android:maxLines="1"
android:singleLine="true" android:singleLine="true"
android:text="@{viewModel.uiList.get(2).columnComment}" android:text="@{viewModel.uiList.get(2).columnComment}"
android:textColor="@color/color_font_null" android:textColor="@color/colorPrimary"
android:textSize="@dimen/sp_8" /> android:textSize="@dimen/sp_8" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
...@@ -508,7 +506,7 @@ ...@@ -508,7 +506,7 @@
android:maxLines="1" android:maxLines="1"
android:singleLine="true" android:singleLine="true"
android:text="@{viewModel.uiList.get(3).columnComment}" android:text="@{viewModel.uiList.get(3).columnComment}"
android:textColor="@color/color_font_null" android:textColor="@color/colorPrimary"
android:textSize="@dimen/sp_8" /> android:textSize="@dimen/sp_8" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
...@@ -545,13 +543,32 @@ ...@@ -545,13 +543,32 @@
android:paddingLeft="5dp" android:paddingLeft="5dp"
binding:layout_constraintBottom_toBottomOf="parent" binding:layout_constraintBottom_toBottomOf="parent"
binding:layout_constraintLeft_toRightOf="@+id/guideline_vertical" binding:layout_constraintLeft_toRightOf="@+id/guideline_vertical"
binding:layout_constraintRight_toRightOf="parent" binding:layout_constraintRight_toRightOf="parent">
>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/card_label_change"
android:layout_width="100dp"
android:layout_height="37dp"
android:layout_marginLeft="5dp"
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="match_parent" android:layout_width="0dp"
android:layout_height="37dp" android:layout_height="37dp"
android:layout_marginLeft="5dp"
android:layout_weight="1"
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"
...@@ -579,8 +596,8 @@ ...@@ -579,8 +596,8 @@
android:layout_width="100dp" android:layout_width="100dp"
android:layout_height="37dp" android:layout_height="37dp"
android:layout_marginLeft="5dp" android:layout_marginLeft="5dp"
android:visibility="gone" android:background="@drawable/bg_radius_white_5"
android:background="@drawable/bg_radius_white_5"> binding:onClickCommand="@{viewModel.onSaveClick}">
<!-- binding:onClickCommand="@{viewModel.onCardSaveClick}"--> <!-- binding:onClickCommand="@{viewModel.onCardSaveClick}"-->
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
......
...@@ -44,6 +44,21 @@ ...@@ -44,6 +44,21 @@
binding:layout_constraintStart_toStartOf="parent" binding:layout_constraintStart_toStartOf="parent"
binding:layout_constraintTop_toTopOf="parent" /> binding:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_right_text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?selectableItemBackground"
android:gravity="center"
android:padding="12dp"
android:text="@{backBarVM.backRightText}"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="@{backBarVM.backRightTextVisibleObservable}"
binding:layout_constraintRight_toRightOf="parent"
binding:layout_constraintBaseline_toBaselineOf="@+id/tv_title"
binding:onClickCommand="@{backBarVM.backRightTextOnClick}" />
<ImageView <ImageView
android:id="@+id/iv_setting_icon" android:id="@+id/iv_setting_icon"
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,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="error_data_upload">错误上报</string> <string name="error_data_upload">错误上报</string>
<string name="one_click_sync">一键同步</string> <string name="one_click_sync">一键同步</string>
......
...@@ -6,16 +6,18 @@ buildscript { ...@@ -6,16 +6,18 @@ buildscript {
agp_version = '3.5.0' agp_version = '3.5.0'
} }
repositories { repositories {
maven { url 'https://maven.aliyun.com/repository/google/' }
google() google()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/repository/jcenter/'}
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } // maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/repository/public/' } // maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/repository/central' } // maven { url 'https://maven.aliyun.com/repository/public/' }
// maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' } //
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } // maven { url 'https://maven.aliyun.com/repository/google' }
// maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
jcenter()
// jcenter()
mavenCentral() mavenCentral()
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
...@@ -31,17 +33,20 @@ buildscript { ...@@ -31,17 +33,20 @@ buildscript {
allprojects { allprojects {
repositories { repositories {
maven { url 'https://maven.aliyun.com/repository/google/' }
google() google()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/repository/jcenter/'}
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } // maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/repository/public/' } // maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/repository/central' } // maven { url 'https://maven.aliyun.com/repository/public/' }
// maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' } //
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } // maven { url 'https://maven.aliyun.com/repository/google' }
// maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
jcenter() jcenter()
mavenCentral() mavenCentral()
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
} }
} }
......
...@@ -16,6 +16,9 @@ android { ...@@ -16,6 +16,9 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
} }
lintOptions {
abortOnError false
}
} }
dependencies { dependencies {
......
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
package="me.goldze.mvvmhabit"> package="me.goldze.mvvmhabit">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application> <application>
<activity <activity
android:name=".base.ContainerActivity" android:name=".base.ContainerActivity"
......
package me.goldze.mvvmhabit; package me.goldze.mvvmhabit;
import org.junit.Test;
import static org.junit.Assert.*;
/** /**
* Example local unit test, which will execute on the development machine (host). * Example local unit test, which will execute on the development machine (host).
...@@ -10,8 +7,4 @@ import static org.junit.Assert.*; ...@@ -10,8 +7,4 @@ import static org.junit.Assert.*;
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/ */
public class ExampleUnitTest { public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
} }
\ No newline at end of file
...@@ -18,15 +18,18 @@ android { ...@@ -18,15 +18,18 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
} }
lintOptions {
abortOnError false
}
} }
dependencies { dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs') api fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'
}) })
compile 'com.android.support:design:25.+' implementation 'com.android.support:design:25.+'
compile 'com.android.support:appcompat-v7:25.+' implementation 'com.android.support:appcompat-v7:25.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
} }
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