Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in
Toggle navigation
W
WoolTrace
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hywang
WoolTrace
Commits
6e994d9c
Commit
6e994d9c
authored
Aug 11, 2021
by
hywang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.增加屠宰进场功能;
2.增加数据库版本更新。
parent
bf8ea70f
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
2210 additions
and
311 deletions
+2210
-311
build.gradle
app/build.gradle
+5
-1
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+17
-0
Configs.java
app/src/main/java/com/phlx/wool/Configs.java
+1
-0
Repository.java
app/src/main/java/com/phlx/wool/data/Repository.java
+6
-2
VMFactory.java
app/src/main/java/com/phlx/wool/data/VMFactory.java
+3
-0
ApiService.java
app/src/main/java/com/phlx/wool/data/http/ApiService.java
+8
-0
HttpDataSource.java
...src/main/java/com/phlx/wool/data/http/HttpDataSource.java
+6
-0
HttpDataSourceImpl.java
...main/java/com/phlx/wool/data/http/HttpDataSourceImpl.java
+6
-0
DbUtil.java
app/src/main/java/com/phlx/wool/db/DbUtil.java
+5
-4
MyOpenHelper.java
app/src/main/java/com/phlx/wool/db/MyOpenHelper.java
+53
-0
CacheLabel.java
app/src/main/java/com/phlx/wool/entity/CacheLabel.java
+76
-0
EntryRegistrationEntity.java
...in/java/com/phlx/wool/entity/EntryRegistrationEntity.java
+326
-0
VillusBuyEntity.java
app/src/main/java/com/phlx/wool/entity/VillusBuyEntity.java
+64
-33
RetrofitClient.java
app/src/main/java/com/phlx/wool/net/RetrofitClient.java
+1
-1
InventoryActivity.java
...in/java/com/phlx/wool/ui/inventory/InventoryActivity.java
+1
-1
InventoryVM.java
...src/main/java/com/phlx/wool/ui/inventory/InventoryVM.java
+111
-7
MainVM.java
app/src/main/java/com/phlx/wool/ui/main/MainVM.java
+15
-6
SlaughterEntryActivity.java
...va/com/phlx/wool/ui/slaughter/SlaughterEntryActivity.java
+179
-0
SlaughterEntryVM.java
.../java/com/phlx/wool/ui/slaughter/vm/SlaughterEntryVM.java
+275
-0
DownloadVM.java
app/src/main/java/com/phlx/wool/ui/sync/vm/DownloadVM.java
+4
-8
UploadVM.java
app/src/main/java/com/phlx/wool/ui/sync/vm/UploadVM.java
+91
-5
VillusBuyVM.java
...src/main/java/com/phlx/wool/ui/villus/vm/VillusBuyVM.java
+4
-1
BaseImageUtils.java
app/src/main/java/com/phlx/wool/util/BaseImageUtils.java
+128
-0
ImagePicker.java
app/src/main/java/com/phlx/wool/util/ImagePicker.java
+109
-0
StringConverter.java
app/src/main/java/com/phlx/wool/util/StringConverter.java
+35
-0
no_image.png
app/src/main/res/drawable-hdpi/no_image.png
+0
-0
activity_main.xml
app/src/main/res/layout/activity_main.xml
+327
-241
activity_slaughter_entry.xml
app/src/main/res/layout/activity_slaughter_entry.xml
+317
-0
activity_upload.xml
app/src/main/res/layout/activity_upload.xml
+14
-1
strings.xml
app/src/main/res/values/strings.xml
+8
-0
file_paths.xml
app/src/main/res/xml/file_paths.xml
+15
-0
No files found.
app/build.gradle
View file @
6e994d9c
...
@@ -46,7 +46,8 @@ android {
...
@@ -46,7 +46,8 @@ android {
}
}
greendao
{
greendao
{
schemaVersion
1
//数据库版本号
schemaVersion
5
//数据库版本号
targetGenDir
'src/main/java'
}
}
dependencies
{
dependencies
{
...
@@ -59,6 +60,7 @@ dependencies {
...
@@ -59,6 +60,7 @@ dependencies {
androidTestImplementation
'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation
'androidx.test.espresso:espresso-core:3.2.0'
implementation
'org.greenrobot:eventbus:3.2.0'
implementation
'org.greenrobot:eventbus:3.2.0'
implementation
'org.greenrobot:greendao:3.2.2'
implementation
'org.greenrobot:greendao:3.2.2'
implementation
'io.github.yuweiguocn:GreenDaoUpgradeHelper:v2.2.1'
// TinyPinyin核心包,约80KB
// TinyPinyin核心包,约80KB
implementation
'com.github.promeg:tinypinyin:2.0.3'
implementation
'com.github.promeg:tinypinyin:2.0.3'
implementation
'com.github.promeg:tinypinyin-lexicons-android-cncity:2.0.3'
implementation
'com.github.promeg:tinypinyin-lexicons-android-cncity:2.0.3'
...
@@ -76,4 +78,6 @@ dependencies {
...
@@ -76,4 +78,6 @@ dependencies {
//生成主键
//生成主键
implementation
'cn.hutool:hutool-all:4.5.6'
implementation
'cn.hutool:hutool-all:4.5.6'
//图片加载
implementation
'com.github.YancyYe:GalleryPick:1.2.1'
}
}
app/src/main/AndroidManifest.xml
View file @
6e994d9c
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.CAMERA"
/>
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.READ_PHONE_STATE"
/>
<uses-permission
android:name=
"android.permission.READ_PHONE_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
...
@@ -27,6 +28,17 @@
...
@@ -27,6 +28,17 @@
android:roundIcon=
"@mipmap/ic_launcher_round"
android:roundIcon=
"@mipmap/ic_launcher_round"
android:supportsRtl=
"true"
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme"
>
android:theme=
"@style/AppTheme"
>
<provider
android:name=
"androidx.core.content.FileProvider"
android:authorities=
"com.phlx.wool.file_provider"
android:exported=
"false"
android:grantUriPermissions=
"true"
>
<meta-data
android:name=
"android.support.FILE_PROVIDER_PATHS"
android:resource=
"@xml/file_paths"
/>
</provider>
<activity
<activity
android:name=
".ui.login.LoginActivity"
android:name=
".ui.login.LoginActivity"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:configChanges=
"keyboardHidden|orientation|screenSize"
...
@@ -105,6 +117,11 @@
...
@@ -105,6 +117,11 @@
android:screenOrientation=
"portrait"
android:screenOrientation=
"portrait"
android:windowSoftInputMode=
"stateHidden|adjustResize"
/>
android:windowSoftInputMode=
"stateHidden|adjustResize"
/>
<activity
android:name=
".ui.villus.BluetoothDeviceList"
/>
<activity
android:name=
".ui.villus.BluetoothDeviceList"
/>
<activity
android:name=
".ui.slaughter.SlaughterEntryActivity"
android:configChanges=
"keyboardHidden|orientation|screenSize"
android:screenOrientation=
"portrait"
android:windowSoftInputMode=
"stateHidden|adjustResize"
/>
</application>
</application>
</manifest>
</manifest>
\ No newline at end of file
app/src/main/java/com/phlx/wool/Configs.java
View file @
6e994d9c
...
@@ -57,6 +57,7 @@ public class Configs {
...
@@ -57,6 +57,7 @@ public class Configs {
public
static
final
String
WORK_TYPE_M
=
"work_type_mark"
;
public
static
final
String
WORK_TYPE_M
=
"work_type_mark"
;
public
static
final
String
WORK_TYPE_Q
=
"work_type_quarantine"
;
public
static
final
String
WORK_TYPE_Q
=
"work_type_quarantine"
;
public
static
final
String
WORK_TYPE_H
=
"work_type_harmless"
;
public
static
final
String
WORK_TYPE_H
=
"work_type_harmless"
;
public
static
final
String
WORK_TYPE_SE
=
"work_type_slaughter_entry"
;
//0 高频,1低频
//0 高频,1低频
public
static
String
FREQUENCY_CONFIG
=
"1"
;
public
static
String
FREQUENCY_CONFIG
=
"1"
;
...
...
app/src/main/java/com/phlx/wool/data/Repository.java
View file @
6e994d9c
...
@@ -9,6 +9,7 @@ import com.phlx.wool.data.local.LocalDataSource;
...
@@ -9,6 +9,7 @@ import com.phlx.wool.data.local.LocalDataSource;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.DivisionEntityDao
;
import
com.phlx.wool.entity.DivisionEntityDao
;
import
com.phlx.wool.entity.EntryRegistrationEntity
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Marking
;
import
com.phlx.wool.entity.Marking
;
...
@@ -18,14 +19,12 @@ import com.phlx.wool.entity.Unit;
...
@@ -18,14 +19,12 @@ import com.phlx.wool.entity.Unit;
import
com.phlx.wool.entity.User
;
import
com.phlx.wool.entity.User
;
import
com.phlx.wool.entity.Variety
;
import
com.phlx.wool.entity.Variety
;
import
com.phlx.wool.entity.Veterinary
;
import
com.phlx.wool.entity.Veterinary
;
import
com.phlx.wool.entity.VeterinaryDao
;
import
com.phlx.wool.entity.VillusBuyEntity
;
import
com.phlx.wool.entity.VillusBuyEntity
;
import
com.phlx.wool.entity.VillusBuyEntityDao
;
import
com.phlx.wool.entity.VillusBuyEntityDao
;
import
com.phlx.wool.entity.VillusGaugeEntity
;
import
com.phlx.wool.entity.VillusGaugeEntity
;
import
com.phlx.wool.params.BasicParams
;
import
com.phlx.wool.params.BasicParams
;
import
com.phlx.wool.params.CattleResponse
;
import
com.phlx.wool.params.CattleResponse
;
import
org.greenrobot.greendao.annotation.Id
;
import
org.greenrobot.greendao.query.QueryBuilder
;
import
org.greenrobot.greendao.query.QueryBuilder
;
import
java.util.List
;
import
java.util.List
;
...
@@ -126,6 +125,11 @@ public class Repository extends BaseModel implements HttpDataSource, LocalDataSo
...
@@ -126,6 +125,11 @@ public class Repository extends BaseModel implements HttpDataSource, LocalDataSo
return
mHttpDataSource
.
submitVillusGauge
(
body
);
return
mHttpDataSource
.
submitVillusGauge
(
body
);
}
}
@Override
public
Observable
<
CattleResponse
<
List
<
EntryRegistrationEntity
>>>
submitSlaughterEntry
(
RequestBody
body
)
{
return
mHttpDataSource
.
submitSlaughterEntry
(
body
);
}
@Override
@Override
public
Observable
<
CattleResponse
<
List
<
Quarantine
>>>
submitQuarantine
(
RequestBody
body
)
{
public
Observable
<
CattleResponse
<
List
<
Quarantine
>>>
submitQuarantine
(
RequestBody
body
)
{
return
mHttpDataSource
.
submitQuarantine
(
body
);
return
mHttpDataSource
.
submitQuarantine
(
body
);
...
...
app/src/main/java/com/phlx/wool/data/VMFactory.java
View file @
6e994d9c
...
@@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModelProvider;
...
@@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModelProvider;
import
com.phlx.wool.ui.inventory.InventoryVM
;
import
com.phlx.wool.ui.inventory.InventoryVM
;
import
com.phlx.wool.ui.login.LoginVM
;
import
com.phlx.wool.ui.login.LoginVM
;
import
com.phlx.wool.ui.main.MainVM
;
import
com.phlx.wool.ui.main.MainVM
;
import
com.phlx.wool.ui.slaughter.vm.SlaughterEntryVM
;
import
com.phlx.wool.ui.splash.SplashVM
;
import
com.phlx.wool.ui.splash.SplashVM
;
import
com.phlx.wool.ui.sync.vm.ClearVM
;
import
com.phlx.wool.ui.sync.vm.ClearVM
;
import
com.phlx.wool.ui.sync.vm.DownloadVM
;
import
com.phlx.wool.ui.sync.vm.DownloadVM
;
...
@@ -91,6 +92,8 @@ public class VMFactory extends ViewModelProvider.NewInstanceFactory {
...
@@ -91,6 +92,8 @@ public class VMFactory extends ViewModelProvider.NewInstanceFactory {
return
(
T
)
new
VillusBuyVM
(
mApplication
,
repository
);
return
(
T
)
new
VillusBuyVM
(
mApplication
,
repository
);
}
else
if
(
modelClass
.
isAssignableFrom
(
VillusGaugeVM
.
class
))
{
}
else
if
(
modelClass
.
isAssignableFrom
(
VillusGaugeVM
.
class
))
{
return
(
T
)
new
VillusGaugeVM
(
mApplication
,
repository
);
return
(
T
)
new
VillusGaugeVM
(
mApplication
,
repository
);
}
else
if
(
modelClass
.
isAssignableFrom
(
SlaughterEntryVM
.
class
))
{
return
(
T
)
new
SlaughterEntryVM
(
mApplication
,
repository
);
}
}
throw
new
IllegalArgumentException
(
"Unknown ViewModel class: "
+
modelClass
.
getName
());
throw
new
IllegalArgumentException
(
"Unknown ViewModel class: "
+
modelClass
.
getName
());
}
}
...
...
app/src/main/java/com/phlx/wool/data/http/ApiService.java
View file @
6e994d9c
...
@@ -3,6 +3,7 @@ package com.phlx.wool.data.http;
...
@@ -3,6 +3,7 @@ package com.phlx.wool.data.http;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.EntryRegistrationEntity
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Marking
;
import
com.phlx.wool.entity.Marking
;
...
@@ -112,6 +113,13 @@ public interface ApiService {
...
@@ -112,6 +113,13 @@ public interface ApiService {
@POST
(
"/app/villus/saveListVillusGauge"
)
@POST
(
"/app/villus/saveListVillusGauge"
)
Observable
<
CattleResponse
<
List
<
VillusGaugeEntity
>>>
submitVillusGauge
(
@Body
RequestBody
body
);
Observable
<
CattleResponse
<
List
<
VillusGaugeEntity
>>>
submitVillusGauge
(
@Body
RequestBody
body
);
/**
* 上传屠宰进场信息
*/
@Headers
({
"Content-Type: application/json"
,
"Accept: application/json"
})
@POST
(
"/app/entryRegistrat/saveList"
)
Observable
<
CattleResponse
<
List
<
EntryRegistrationEntity
>>>
submitSlaughterEntry
(
@Body
RequestBody
body
);
/**
/**
* 上传产地检疫
* 上传产地检疫
*/
*/
...
...
app/src/main/java/com/phlx/wool/data/http/HttpDataSource.java
View file @
6e994d9c
...
@@ -3,6 +3,7 @@ package com.phlx.wool.data.http;
...
@@ -3,6 +3,7 @@ package com.phlx.wool.data.http;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.EntryRegistrationEntity
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Marking
;
import
com.phlx.wool.entity.Marking
;
...
@@ -89,6 +90,11 @@ public interface HttpDataSource {
...
@@ -89,6 +90,11 @@ public interface HttpDataSource {
*/
*/
Observable
<
CattleResponse
<
List
<
VillusGaugeEntity
>>>
submitVillusGauge
(
@Body
RequestBody
body
);
Observable
<
CattleResponse
<
List
<
VillusGaugeEntity
>>>
submitVillusGauge
(
@Body
RequestBody
body
);
/**
* 上传屠宰进场信息
*/
Observable
<
CattleResponse
<
List
<
EntryRegistrationEntity
>>>
submitSlaughterEntry
(
@Body
RequestBody
body
);
/**
/**
* 上传产地检疫
* 上传产地检疫
*/
*/
...
...
app/src/main/java/com/phlx/wool/data/http/HttpDataSourceImpl.java
View file @
6e994d9c
...
@@ -3,6 +3,7 @@ package com.phlx.wool.data.http;
...
@@ -3,6 +3,7 @@ package com.phlx.wool.data.http;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.EntryRegistrationEntity
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Marking
;
import
com.phlx.wool.entity.Marking
;
...
@@ -106,6 +107,11 @@ public class HttpDataSourceImpl implements HttpDataSource {
...
@@ -106,6 +107,11 @@ public class HttpDataSourceImpl implements HttpDataSource {
return
apiService
.
submitVillusGauge
(
body
);
return
apiService
.
submitVillusGauge
(
body
);
}
}
@Override
public
Observable
<
CattleResponse
<
List
<
EntryRegistrationEntity
>>>
submitSlaughterEntry
(
RequestBody
body
)
{
return
apiService
.
submitSlaughterEntry
(
body
);
}
@Override
@Override
public
Observable
<
CattleResponse
<
List
<
Quarantine
>>>
submitQuarantine
(
RequestBody
body
)
{
public
Observable
<
CattleResponse
<
List
<
Quarantine
>>>
submitQuarantine
(
RequestBody
body
)
{
return
apiService
.
submitQuarantine
(
body
);
return
apiService
.
submitQuarantine
(
body
);
...
...
app/src/main/java/com/phlx/wool/db/DbUtil.java
View file @
6e994d9c
...
@@ -2,7 +2,6 @@ package com.phlx.wool.db;
...
@@ -2,7 +2,6 @@ package com.phlx.wool.db;
import
android.app.Application
;
import
android.app.Application
;
import
com.phlx.wool.App
;
import
com.phlx.wool.App
;
import
com.phlx.wool.db.interf.DbIDUCallBack
;
import
com.phlx.wool.db.interf.DbIDUCallBack
;
import
com.phlx.wool.db.interf.DbQueryCallBack
;
import
com.phlx.wool.db.interf.DbQueryCallBack
;
...
@@ -38,18 +37,20 @@ public class DbUtil {
...
@@ -38,18 +37,20 @@ public class DbUtil {
private
DaoMaster
mDaoMaster
;
private
DaoMaster
mDaoMaster
;
private
AbstractDao
mAbstractDao
;
private
AbstractDao
mAbstractDao
;
private
static
DbUtil
mDbUtils
;
private
static
DbUtil
mDbUtils
;
private
DaoMaster
.
Dev
OpenHelper
mHelper
;
private
My
OpenHelper
mHelper
;
private
DbQueryCallBack
mQueryCallBack
;
private
DbQueryCallBack
mQueryCallBack
;
private
DbIDUCallBack
mIDUCallBack
;
private
DbIDUCallBack
mIDUCallBack
;
private
DbUtil
(
Application
application
,
String
dbName
,
String
passWord
)
{
private
DbUtil
(
Application
application
,
String
dbName
,
String
passWord
)
{
if
(
mHelper
==
null
)
{
if
(
mHelper
==
null
)
{
mHelper
=
new
DaoMaster
.
DevOpenHelper
(
application
,
dbName
);
mHelper
=
new
MyOpenHelper
(
application
,
dbName
,
null
);
}
}
if
(
passWord
==
null
||
passWord
.
isEmpty
())
{
if
(
passWord
==
null
||
passWord
.
isEmpty
())
{
mDaoMaster
=
new
DaoMaster
(
mHelper
.
getWritableDb
());
mDaoMaster
=
new
DaoMaster
(
mHelper
.
getWritableDatabase
());
// mDaoMaster = new DaoMaster(mHelper.getWritableDb());
}
else
{
}
else
{
mDaoMaster
=
new
DaoMaster
(
mHelper
.
getEncryptedReadableDb
(
passWord
));
mDaoMaster
=
new
DaoMaster
(
mHelper
.
getEncryptedReadableDb
(
passWord
));
// mDaoMaster = new DaoMaster(mHelper.getEncryptedReadableDb(passWord));
}
}
mDaoSession
=
mDaoMaster
.
newSession
();
mDaoSession
=
mDaoMaster
.
newSession
();
...
...
app/src/main/java/com/phlx/wool/db/MyOpenHelper.java
0 → 100644
View file @
6e994d9c
package
com
.
phlx
.
wool
.
db
;
import
android.content.Context
;
import
android.database.sqlite.SQLiteDatabase
;
import
com.github.yuweiguocn.library.greendao.MigrationHelper
;
import
com.phlx.wool.entity.CacheLabel
;
import
com.phlx.wool.entity.CacheLabelDao
;
import
com.phlx.wool.entity.DaoMaster
;
import
com.phlx.wool.entity.DivisionEntityDao
;
import
com.phlx.wool.entity.EntryRegistrationEntity
;
import
com.phlx.wool.entity.EntryRegistrationEntityDao
;
import
com.phlx.wool.entity.HarmlessDao
;
import
com.phlx.wool.entity.HarmlessDetailDao
;
import
com.phlx.wool.entity.LabelDao
;
import
com.phlx.wool.entity.MarkingDao
;
import
com.phlx.wool.entity.QuarantineDao
;
import
com.phlx.wool.entity.QuarantineDetailDao
;
import
com.phlx.wool.entity.TreatmentMethodDao
;
import
com.phlx.wool.entity.UnitDao
;
import
com.phlx.wool.entity.VarietyDao
;
import
com.phlx.wool.entity.VeterinaryDao
;
import
com.phlx.wool.entity.VillusBuyEntityDao
;
import
com.phlx.wool.entity.VillusGaugeEntityDao
;
import
org.greenrobot.greendao.database.Database
;
public
class
MyOpenHelper
extends
DaoMaster
.
DevOpenHelper
{
public
MyOpenHelper
(
Context
context
,
String
name
,
SQLiteDatabase
.
CursorFactory
factory
)
{
super
(
context
,
name
,
factory
);
}
@Override
public
void
onUpgrade
(
Database
db
,
int
oldVersion
,
int
newVersion
)
{
//把需要管理的数据库表DAO作为最后一个参数传入到方法中
MigrationHelper
.
migrate
(
db
,
new
MigrationHelper
.
ReCreateAllTableListener
()
{
@Override
public
void
onCreateAllTables
(
Database
db
,
boolean
ifNotExists
)
{
DaoMaster
.
createAllTables
(
db
,
ifNotExists
);
}
@Override
public
void
onDropAllTables
(
Database
db
,
boolean
ifExists
)
{
DaoMaster
.
dropAllTables
(
db
,
ifExists
);
}
},
DivisionEntityDao
.
class
,
HarmlessDao
.
class
,
HarmlessDetailDao
.
class
,
LabelDao
.
class
,
MarkingDao
.
class
,
QuarantineDao
.
class
,
QuarantineDetailDao
.
class
,
TreatmentMethodDao
.
class
,
UnitDao
.
class
,
VarietyDao
.
class
,
VeterinaryDao
.
class
,
VillusBuyEntityDao
.
class
,
VillusGaugeEntityDao
.
class
,
EntryRegistrationEntityDao
.
class
,
CacheLabelDao
.
class
);
}
}
app/src/main/java/com/phlx/wool/entity/CacheLabel.java
0 → 100644
View file @
6e994d9c
package
com
.
phlx
.
wool
.
entity
;
/**
* 缓存屠宰进场的扫标
*/
import
android.os.Parcel
;
import
android.os.Parcelable
;
import
androidx.databinding.BaseObservable
;
import
org.greenrobot.greendao.annotation.Entity
;
import
org.greenrobot.greendao.annotation.Id
;
import
org.greenrobot.greendao.annotation.Generated
;
@Entity
public
class
CacheLabel
extends
BaseObservable
implements
Parcelable
{
@Id
(
autoincrement
=
false
)
private
String
epc
;
private
String
tid
;
public
CacheLabel
()
{
}
protected
CacheLabel
(
Parcel
in
)
{
epc
=
in
.
readString
();
tid
=
in
.
readString
();
}
@Generated
(
hash
=
709708457
)
public
CacheLabel
(
String
epc
,
String
tid
)
{
this
.
epc
=
epc
;
this
.
tid
=
tid
;
}
@Override
public
void
writeToParcel
(
Parcel
dest
,
int
flags
)
{
dest
.
writeString
(
epc
);
dest
.
writeString
(
tid
);
}
@Override
public
int
describeContents
()
{
return
0
;
}
public
static
final
Creator
<
CacheLabel
>
CREATOR
=
new
Creator
<
CacheLabel
>()
{
@Override
public
CacheLabel
createFromParcel
(
Parcel
in
)
{
return
new
CacheLabel
(
in
);
}
@Override
public
CacheLabel
[]
newArray
(
int
size
)
{
return
new
CacheLabel
[
size
];
}
};
public
String
getEpc
()
{
return
epc
;
}
public
void
setEpc
(
String
epc
)
{
this
.
epc
=
epc
;
}
public
String
getTid
()
{
return
tid
;
}
public
void
setTid
(
String
tid
)
{
this
.
tid
=
tid
;
}
}
app/src/main/java/com/phlx/wool/entity/EntryRegistrationEntity.java
0 → 100644
View file @
6e994d9c
package
com
.
phlx
.
wool
.
entity
;
import
android.os.Parcel
;
import
android.os.Parcelable
;
import
androidx.databinding.BaseObservable
;
import
com.google.gson.annotations.SerializedName
;
import
com.phlx.wool.util.StringConverter
;
import
org.greenrobot.greendao.annotation.Convert
;
import
org.greenrobot.greendao.annotation.Entity
;
import
org.greenrobot.greendao.annotation.Id
;
import
java.util.List
;
import
org.greenrobot.greendao.annotation.Generated
;
/**
* 屠宰进场bean
*/
@Entity
public
class
EntryRegistrationEntity
extends
BaseObservable
implements
Parcelable
{
/** $column.columnComment */
@Id
(
autoincrement
=
false
)
private
Long
id
;
/** 流水号 */
private
String
serialNo
;
/** 牧户代码 */
private
String
pastureUnitId
;
/** 牧户名称 */
private
String
pastureUnitName
;
/** 进厂时间 */
private
String
entryDate
;
/** 进厂数量 */
private
String
entryNum
;
/** 记录人 */
private
String
recorder
;
/** 检疫合格证图片 */
private
String
quarantineCertificateImg
;
/** 检疫合格证姓名 */
private
String
quarantineCertificateName
;
/** 检疫合格证身份证号 */
private
String
quarantineCertificateIdcard
;
private
String
quarantineImgPath
;
/** 低频耳标集合 */
@Convert
(
columnType
=
String
.
class
,
converter
=
StringConverter
.
class
)
private
List
<
String
>
list
;
/** 创建者 */
private
String
createBy
;
/** 创建时间 */
private
String
createTime
;
/**
* 数据状态 0--上传成功,1----未上传或上传失败
*/
private
int
status
;
/** 时间戳 */
@SerializedName
(
"inputTime"
)
private
Long
timestamp
;
public
EntryRegistrationEntity
()
{
}
protected
EntryRegistrationEntity
(
Parcel
in
)
{
if
(
in
.
readByte
()
==
0
)
{
id
=
null
;
}
else
{
id
=
in
.
readLong
();
}
serialNo
=
in
.
readString
();
pastureUnitId
=
in
.
readString
();
pastureUnitName
=
in
.
readString
();
entryDate
=
in
.
readString
();
entryNum
=
in
.
readString
();
recorder
=
in
.
readString
();
quarantineCertificateImg
=
in
.
readString
();
quarantineCertificateName
=
in
.
readString
();
quarantineCertificateIdcard
=
in
.
readString
();
quarantineImgPath
=
in
.
readString
();
list
=
in
.
createStringArrayList
();
createBy
=
in
.
readString
();
createTime
=
in
.
readString
();
status
=
in
.
readInt
();
if
(
in
.
readByte
()
==
0
)
{
timestamp
=
null
;
}
else
{
timestamp
=
in
.
readLong
();
}
}
@Generated
(
hash
=
505362997
)
public
EntryRegistrationEntity
(
Long
id
,
String
serialNo
,
String
pastureUnitId
,
String
pastureUnitName
,
String
entryDate
,
String
entryNum
,
String
recorder
,
String
quarantineCertificateImg
,
String
quarantineCertificateName
,
String
quarantineCertificateIdcard
,
String
quarantineImgPath
,
List
<
String
>
list
,
String
createBy
,
String
createTime
,
int
status
,
Long
timestamp
)
{
this
.
id
=
id
;
this
.
serialNo
=
serialNo
;
this
.
pastureUnitId
=
pastureUnitId
;
this
.
pastureUnitName
=
pastureUnitName
;
this
.
entryDate
=
entryDate
;
this
.
entryNum
=
entryNum
;
this
.
recorder
=
recorder
;
this
.
quarantineCertificateImg
=
quarantineCertificateImg
;
this
.
quarantineCertificateName
=
quarantineCertificateName
;
this
.
quarantineCertificateIdcard
=
quarantineCertificateIdcard
;
this
.
quarantineImgPath
=
quarantineImgPath
;
this
.
list
=
list
;
this
.
createBy
=
createBy
;
this
.
createTime
=
createTime
;
this
.
status
=
status
;
this
.
timestamp
=
timestamp
;
}
@Override
public
void
writeToParcel
(
Parcel
dest
,
int
flags
)
{
if
(
id
==
null
)
{
dest
.
writeByte
((
byte
)
0
);
}
else
{
dest
.
writeByte
((
byte
)
1
);
dest
.
writeLong
(
id
);
}
dest
.
writeString
(
serialNo
);
dest
.
writeString
(
pastureUnitId
);
dest
.
writeString
(
pastureUnitName
);
dest
.
writeString
(
entryDate
);
dest
.
writeString
(
entryNum
);
dest
.
writeString
(
recorder
);
dest
.
writeString
(
quarantineCertificateImg
);
dest
.
writeString
(
quarantineCertificateName
);
dest
.
writeString
(
quarantineCertificateIdcard
);
dest
.
writeString
(
quarantineImgPath
);
dest
.
writeStringList
(
list
);
dest
.
writeString
(
createBy
);
dest
.
writeString
(
createTime
);
dest
.
writeInt
(
status
);
if
(
timestamp
==
null
)
{
dest
.
writeByte
((
byte
)
0
);
}
else
{
dest
.
writeByte
((
byte
)
1
);
dest
.
writeLong
(
timestamp
);
}
}
@Override
public
int
describeContents
()
{
return
0
;
}
public
static
final
Creator
<
EntryRegistrationEntity
>
CREATOR
=
new
Creator
<
EntryRegistrationEntity
>()
{
@Override
public
EntryRegistrationEntity
createFromParcel
(
Parcel
in
)
{
return
new
EntryRegistrationEntity
(
in
);
}
@Override
public
EntryRegistrationEntity
[]
newArray
(
int
size
)
{
return
new
EntryRegistrationEntity
[
size
];
}
};
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
String
getSerialNo
()
{
return
serialNo
;
}
public
void
setSerialNo
(
String
serialNo
)
{
this
.
serialNo
=
serialNo
;
}
public
String
getPastureUnitId
()
{
return
pastureUnitId
;
}
public
void
setPastureUnitId
(
String
pastureUnitId
)
{
this
.
pastureUnitId
=
pastureUnitId
;
}
public
String
getPastureUnitName
()
{
return
pastureUnitName
;
}
public
void
setPastureUnitName
(
String
pastureUnitName
)
{
this
.
pastureUnitName
=
pastureUnitName
;
}
public
String
getEntryDate
()
{
return
entryDate
;
}
public
void
setEntryDate
(
String
entryDate
)
{
this
.
entryDate
=
entryDate
;
}
public
String
getEntryNum
()
{
return
entryNum
;
}
public
void
setEntryNum
(
String
entryNum
)
{
this
.
entryNum
=
entryNum
;
}
public
String
getRecorder
()
{
return
recorder
;
}
public
void
setRecorder
(
String
recorder
)
{
this
.
recorder
=
recorder
;
}
public
String
getQuarantineCertificateImg
()
{
return
quarantineCertificateImg
;
}
public
void
setQuarantineCertificateImg
(
String
quarantineCertificateImg
)
{
this
.
quarantineCertificateImg
=
quarantineCertificateImg
;
}
public
String
getQuarantineCertificateName
()
{
return
quarantineCertificateName
;
}
public
void
setQuarantineCertificateName
(
String
quarantineCertificateName
)
{
this
.
quarantineCertificateName
=
quarantineCertificateName
;
}
public
String
getQuarantineCertificateIdcard
()
{
return
quarantineCertificateIdcard
;
}
public
void
setQuarantineCertificateIdcard
(
String
quarantineCertificateIdcard
)
{
this
.
quarantineCertificateIdcard
=
quarantineCertificateIdcard
;
}
public
String
getQuarantineImgPath
()
{
return
quarantineImgPath
;
}
public
void
setQuarantineImgPath
(
String
quarantineImgPath
)
{
this
.
quarantineImgPath
=
quarantineImgPath
;
}
public
List
<
String
>
getList
()
{
return
list
;
}
public
void
setList
(
List
<
String
>
list
)
{
this
.
list
=
list
;
}
public
String
getCreateBy
()
{
return
createBy
;
}
public
void
setCreateBy
(
String
createBy
)
{
this
.
createBy
=
createBy
;
}
public
String
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
String
createTime
)
{
this
.
createTime
=
createTime
;
}
public
int
getStatus
()
{
return
status
;
}
public
void
setStatus
(
int
status
)
{
this
.
status
=
status
;
}
public
Long
getTimestamp
()
{
return
timestamp
;
}
public
void
setTimestamp
(
Long
timestamp
)
{
this
.
timestamp
=
timestamp
;
}
@Override
public
String
toString
()
{
return
"EntryRegistrationEntity{"
+
"id="
+
id
+
", serialNo='"
+
serialNo
+
'\''
+
", pastureUnitId='"
+
pastureUnitId
+
'\''
+
", pastureUnitName='"
+
pastureUnitName
+
'\''
+
", entryDate='"
+
entryDate
+
'\''
+
", entryNum='"
+
entryNum
+
'\''
+
", recorder='"
+
recorder
+
'\''
+
", quarantineCertificateImg='"
+
quarantineCertificateImg
+
'\''
+
", quarantineCertificateName='"
+
quarantineCertificateName
+
'\''
+
", quarantineCertificateIdcard='"
+
quarantineCertificateIdcard
+
'\''
+
", quarantineImgPath='"
+
quarantineImgPath
+
'\''
+
", list="
+
list
+
", createBy='"
+
createBy
+
'\''
+
", createTime='"
+
createTime
+
'\''
+
", status="
+
status
+
", timestamp="
+
timestamp
+
'}'
;
}
}
app/src/main/java/com/phlx/wool/entity/VillusBuyEntity.java
View file @
6e994d9c
...
@@ -70,10 +70,10 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
...
@@ -70,10 +70,10 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
private
String
productId
;
private
String
productId
;
/** 标签被打印的次数 */
/** 标签被打印的次数 */
private
int
printCount
;
private
Integer
printCount
;
/** 二维码被扫描的次数 */
/** 二维码被扫描的次数 */
private
int
scanCount
;
private
Integer
scanCount
;
/** 创建者 */
/** 创建者 */
private
String
createBy
;
private
String
createBy
;
...
@@ -86,6 +86,9 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
...
@@ -86,6 +86,9 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
*/
*/
private
int
status
;
private
int
status
;
private
Integer
testNum
;
private
int
numTest
;
public
VillusBuyEntity
()
{
public
VillusBuyEntity
()
{
}
}
...
@@ -105,18 +108,33 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
...
@@ -105,18 +108,33 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
pastureUnitName
=
in
.
readString
();
pastureUnitName
=
in
.
readString
();
pastureUnitPhone
=
in
.
readString
();
pastureUnitPhone
=
in
.
readString
();
productId
=
in
.
readString
();
productId
=
in
.
readString
();
printCount
=
in
.
readInt
();
if
(
in
.
readByte
()
==
0
)
{
scanCount
=
in
.
readInt
();
printCount
=
null
;
}
else
{
printCount
=
in
.
readInt
();
}
if
(
in
.
readByte
()
==
0
)
{
scanCount
=
null
;
}
else
{
scanCount
=
in
.
readInt
();
}
createBy
=
in
.
readString
();
createBy
=
in
.
readString
();
createTime
=
in
.
readString
();
createTime
=
in
.
readString
();
status
=
in
.
readInt
();
status
=
in
.
readInt
();
if
(
in
.
readByte
()
==
0
)
{
testNum
=
null
;
}
else
{
testNum
=
in
.
readInt
();
}
numTest
=
in
.
readInt
();
}
}
@Generated
(
hash
=
1651539007
)
@Generated
(
hash
=
2021863346
)
public
VillusBuyEntity
(
Long
id
,
String
buyBatch
,
String
revision
,
String
buyWeight
,
public
VillusBuyEntity
(
Long
id
,
String
buyBatch
,
String
revision
,
String
buyWeight
,
String
buyFactory
,
String
buyDate
,
String
personInCharge
,
String
pastureUnitId
,
String
buyFactory
,
String
buyDate
,
String
personInCharge
,
String
pastureUnitId
,
String
pastureUnitName
,
String
pastureUnitPhone
,
String
productId
,
int
printCount
,
String
pastureUnitName
,
String
pastureUnitPhone
,
String
productId
,
int
scanCount
,
String
createBy
,
String
createTime
,
int
status
)
{
Integer
printCount
,
Integer
scanCount
,
String
createBy
,
String
createTime
,
int
status
,
Integer
testNum
,
int
numTest
)
{
this
.
id
=
id
;
this
.
id
=
id
;
this
.
buyBatch
=
buyBatch
;
this
.
buyBatch
=
buyBatch
;
this
.
revision
=
revision
;
this
.
revision
=
revision
;
...
@@ -133,6 +151,8 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
...
@@ -133,6 +151,8 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
this
.
createBy
=
createBy
;
this
.
createBy
=
createBy
;
this
.
createTime
=
createTime
;
this
.
createTime
=
createTime
;
this
.
status
=
status
;
this
.
status
=
status
;
this
.
testNum
=
testNum
;
this
.
numTest
=
numTest
;
}
}
@Override
@Override
...
@@ -153,11 +173,28 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
...
@@ -153,11 +173,28 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
dest
.
writeString
(
pastureUnitName
);
dest
.
writeString
(
pastureUnitName
);
dest
.
writeString
(
pastureUnitPhone
);
dest
.
writeString
(
pastureUnitPhone
);
dest
.
writeString
(
productId
);
dest
.
writeString
(
productId
);
dest
.
writeInt
(
printCount
);
if
(
printCount
==
null
)
{
dest
.
writeInt
(
scanCount
);
dest
.
writeByte
((
byte
)
0
);
}
else
{
dest
.
writeByte
((
byte
)
1
);
dest
.
writeInt
(
printCount
);
}
if
(
scanCount
==
null
)
{
dest
.
writeByte
((
byte
)
0
);
}
else
{
dest
.
writeByte
((
byte
)
1
);
dest
.
writeInt
(
scanCount
);
}
dest
.
writeString
(
createBy
);
dest
.
writeString
(
createBy
);
dest
.
writeString
(
createTime
);
dest
.
writeString
(
createTime
);
dest
.
writeInt
(
status
);
dest
.
writeInt
(
status
);
if
(
testNum
==
null
)
{
dest
.
writeByte
((
byte
)
0
);
}
else
{
dest
.
writeByte
((
byte
)
1
);
dest
.
writeInt
(
testNum
);
}
dest
.
writeInt
(
numTest
);
}
}
@Override
@Override
...
@@ -265,19 +302,19 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
...
@@ -265,19 +302,19 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
this
.
productId
=
productId
;
this
.
productId
=
productId
;
}
}
public
int
getPrintCount
()
{
public
Integer
getPrintCount
()
{
return
printCount
;
return
printCount
;
}
}
public
void
setPrintCount
(
int
printCount
)
{
public
void
setPrintCount
(
Integer
printCount
)
{
this
.
printCount
=
printCount
;
this
.
printCount
=
printCount
;
}
}
public
int
getScanCount
()
{
public
Integer
getScanCount
()
{
return
scanCount
;
return
scanCount
;
}
}
public
void
setScanCount
(
int
scanCount
)
{
public
void
setScanCount
(
Integer
scanCount
)
{
this
.
scanCount
=
scanCount
;
this
.
scanCount
=
scanCount
;
}
}
...
@@ -305,25 +342,19 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
...
@@ -305,25 +342,19 @@ public class VillusBuyEntity extends BaseObservable implements Parcelable {
this
.
status
=
status
;
this
.
status
=
status
;
}
}
@Override
public
Integer
getTestNum
()
{
public
String
toString
()
{
return
testNum
;
return
"VillusBuyEntity{"
+
}
"id="
+
id
+
", buyBatch='"
+
buyBatch
+
'\''
+
public
void
setTestNum
(
Integer
testNum
)
{
", revision='"
+
revision
+
'\''
+
this
.
testNum
=
testNum
;
", buyWeight='"
+
buyWeight
+
'\''
+
}
", buyFactory='"
+
buyFactory
+
'\''
+
", buyDate='"
+
buyDate
+
'\''
+
public
int
getNumTest
()
{
", personInCharge='"
+
personInCharge
+
'\''
+
return
numTest
;
", pastureUnitId='"
+
pastureUnitId
+
'\''
+
}
", pastureUnitName='"
+
pastureUnitName
+
'\''
+
", pastureUnitPhone='"
+
pastureUnitPhone
+
'\''
+
public
void
setNumTest
(
int
numTest
)
{
", productId='"
+
productId
+
'\''
+
this
.
numTest
=
numTest
;
", printCount="
+
printCount
+
", scanCount="
+
scanCount
+
", createBy='"
+
createBy
+
'\''
+
", createTime='"
+
createTime
+
'\''
+
", status="
+
status
+
'}'
;
}
}
}
}
app/src/main/java/com/phlx/wool/net/RetrofitClient.java
View file @
6e994d9c
...
@@ -49,7 +49,7 @@ public class RetrofitClient {
...
@@ -49,7 +49,7 @@ public class RetrofitClient {
//服务端根路径
//服务端根路径
public
static
String
baseUrl
=
public
static
String
baseUrl
=
"58.18.92.126"
"58.18.92.126"
// "192.168.
100.101
"
// "192.168.
8.189
"
;
;
public
static
String
port
=
public
static
String
port
=
"899"
"899"
...
...
app/src/main/java/com/phlx/wool/ui/inventory/InventoryActivity.java
View file @
6e994d9c
...
@@ -82,7 +82,7 @@ public class InventoryActivity extends BaseActivity<ActivityInventoryBinding, In
...
@@ -82,7 +82,7 @@ public class InventoryActivity extends BaseActivity<ActivityInventoryBinding, In
super
.
initData
();
super
.
initData
();
setSupportActionBar
(
binding
.
include
.
toolbar
);
setSupportActionBar
(
binding
.
include
.
toolbar
);
disableShowSoftInput
(
binding
.
etInvDesc
);
//
disableShowSoftInput(binding.etInvDesc);
viewModel
.
initToolbar
(
type
);
viewModel
.
initToolbar
(
type
);
binding
.
setAdapter
(
new
BindingRecyclerViewAdapter
());
binding
.
setAdapter
(
new
BindingRecyclerViewAdapter
());
if
(
"0"
.
equals
(
Configs
.
FREQUENCY_CONFIG
))
{
if
(
"0"
.
equals
(
Configs
.
FREQUENCY_CONFIG
))
{
...
...
app/src/main/java/com/phlx/wool/ui/inventory/InventoryVM.java
View file @
6e994d9c
...
@@ -21,12 +21,19 @@ import com.phlx.wool.Configs;
...
@@ -21,12 +21,19 @@ import com.phlx.wool.Configs;
import
com.phlx.wool.R
;
import
com.phlx.wool.R
;
import
com.phlx.wool.data.Repository
;
import
com.phlx.wool.data.Repository
;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.db.interf.DbIDUCallBack
;
import
com.phlx.wool.db.interf.DbQueryCallBack
;
import
com.phlx.wool.entity.CacheLabel
;
import
com.phlx.wool.entity.EntryRegistrationEntity
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.LabelDao
;
import
com.phlx.wool.entity.LabelDao
;
import
com.phlx.wool.entity.Marking
;
import
com.phlx.wool.entity.VillusBuyEntity
;
import
com.phlx.wool.event.EventMsg
;
import
com.phlx.wool.event.EventMsg
;
import
com.phlx.wool.event.EventTag
;
import
com.phlx.wool.event.EventTag
;
import
com.phlx.wool.rfid.ModuleManager
;
import
com.phlx.wool.rfid.ModuleManager
;
import
com.phlx.wool.ui.base.BackBarVM
;
import
com.phlx.wool.ui.base.BackBarVM
;
import
com.phlx.wool.ui.slaughter.SlaughterEntryActivity
;
import
com.phlx.wool.ui.work.harmless.HarmlessActivity
;
import
com.phlx.wool.ui.work.harmless.HarmlessActivity
;
import
com.phlx.wool.ui.work.mark.MarkingActivity
;
import
com.phlx.wool.ui.work.mark.MarkingActivity
;
import
com.phlx.wool.ui.work.quarantine.QuarantineActivity
;
import
com.phlx.wool.ui.work.quarantine.QuarantineActivity
;
...
@@ -54,7 +61,6 @@ import me.goldze.mvvmhabit.http.ResponseThrowable;
...
@@ -54,7 +61,6 @@ import me.goldze.mvvmhabit.http.ResponseThrowable;
import
me.goldze.mvvmhabit.utils.KLog
;
import
me.goldze.mvvmhabit.utils.KLog
;
import
me.goldze.mvvmhabit.utils.RxUtils
;
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.ToastUtils
;
import
me.goldze.mvvmhabit.utils.ToastUtils
;
import
me.tatarka.bindingcollectionadapter2.ItemBinding
;
import
me.tatarka.bindingcollectionadapter2.ItemBinding
;
...
@@ -86,6 +92,8 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
...
@@ -86,6 +92,8 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
private
String
type
;
private
String
type
;
private
boolean
isCacheLabel
;
public
InventoryVM
(
@NonNull
Application
application
,
Repository
repository
)
{
public
InventoryVM
(
@NonNull
Application
application
,
Repository
repository
)
{
super
(
application
,
repository
);
super
(
application
,
repository
);
map
=
new
HashMap
<>();
map
=
new
HashMap
<>();
...
@@ -110,6 +118,13 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
...
@@ -110,6 +118,13 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
setBackTitleText
(
"检疫记录"
);
setBackTitleText
(
"检疫记录"
);
}
else
if
(
type
.
equals
(
Configs
.
WORK_TYPE_H
))
{
}
else
if
(
type
.
equals
(
Configs
.
WORK_TYPE_H
))
{
setBackTitleText
(
"无害化处理"
);
setBackTitleText
(
"无害化处理"
);
}
else
if
(
type
.
equals
(
Configs
.
WORK_TYPE_SE
))
{
setBackTitleText
(
"屠宰进场"
);
}
//如果是屠宰进场,就加载缓存标签
if
(
type
.
equals
(
Configs
.
WORK_TYPE_SE
))
{
queryCacheLabel
();
}
}
}
}
...
@@ -179,7 +194,7 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
...
@@ -179,7 +194,7 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
return
;
return
;
}
}
if
(
mList
.
size
()
>=
20
)
{
if
(
!
type
.
equals
(
Configs
.
WORK_TYPE_SE
)
&&
mList
.
size
()
>=
20
)
{
ToastUtils
.
showShort
(
"单次标签扫描已达20上限"
);
ToastUtils
.
showShort
(
"单次标签扫描已达20上限"
);
return
;
return
;
}
}
...
@@ -209,6 +224,8 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
...
@@ -209,6 +224,8 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
public
void
call
()
{
public
void
call
()
{
if
(
mList
!=
null
&&
mList
.
size
()
>
0
)
{
if
(
mList
!=
null
&&
mList
.
size
()
>
0
)
{
if
(
type
.
equals
(
Configs
.
WORK_TYPE_SE
))
clearCacheLabel
();
jumpToActivity
();
jumpToActivity
();
}
else
{
}
else
{
ToastUtils
.
showShort
(
"请扫描耳标"
);
ToastUtils
.
showShort
(
"请扫描耳标"
);
...
@@ -248,7 +265,7 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
...
@@ -248,7 +265,7 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
})
})
.
subscribe
((
Consumer
<
Label
>)
response
->
{
.
subscribe
((
Consumer
<
Label
>)
response
->
{
dismissDialog
();
dismissDialog
();
if
(
legalCount
>
0
)
{
if
(
legalCount
>
0
&&
!
isCacheLabel
)
{
labelCheckEvent
.
setValue
(
response
);
labelCheckEvent
.
setValue
(
response
);
}
else
{
}
else
{
addLabel
(
_label
);
addLabel
(
_label
);
...
@@ -266,19 +283,102 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
...
@@ -266,19 +283,102 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
observableList
.
add
(
itemViewModel
);
observableList
.
add
(
itemViewModel
);
labelCount
++;
labelCount
++;
labelNum
.
set
(
String
.
valueOf
(
labelCount
));
labelNum
.
set
(
String
.
valueOf
(
labelCount
));
soundPool
.
play
(
musicId
.
get
(
1
),
1
,
1
,
0
,
0
,
1
);
if
(!
isCacheLabel
)
soundPool
.
play
(
musicId
.
get
(
1
),
1
,
1
,
0
,
0
,
1
);
map
.
put
(
tag
,
mList
.
size
()
-
1
);
map
.
put
(
tag
,
mList
.
size
()
-
1
);
//如果是屠宰进场,就缓存标签
if
(
type
.
equals
(
Configs
.
WORK_TYPE_SE
)
&&
!
isCacheLabel
)
{
cacheLabel
(
_label
);
isCacheLabel
=
false
;
}
}
/**
* 缓存扫到的标签
*
* @param _label
*/
private
void
cacheLabel
(
Label
_label
)
{
CacheLabel
cl
=
new
CacheLabel
();
cl
.
setEpc
(
_label
.
getEpc
());
cl
.
setTid
(
_label
.
getTid
());
List
<
CacheLabel
>
cacheLabels
=
new
ArrayList
<>();
cacheLabels
.
add
(
cl
);
DbUtil
.
getInstance
().
setDbIDUCallBack
(
new
DbIDUCallBack
()
{
@Override
public
void
onNotification
(
boolean
result
)
{
dismissDialog
();
if
(
result
)
{
}
else
{
ToastUtils
.
showShort
(
"标签缓存失败"
);
}
}
}).
insertAsyncBatch
(
CacheLabel
.
class
,
cacheLabels
);
}
/**
* 进入屠宰扫标签页面时加载缓存的标签
*/
private
void
queryCacheLabel
()
{
DbUtil
.
getInstance
().
setDbQueryCallBack
(
new
DbQueryCallBack
<
CacheLabel
>()
{
@Override
public
void
onSuccess
(
List
<
CacheLabel
>
result
)
{
if
(
result
!=
null
)
{
for
(
CacheLabel
cl
:
result
)
{
String
epc
=
cl
.
getEpc
();
String
tid
=
cl
.
getTid
();
String
tag
=
epc
+
tid
;
if
(!
map
.
containsKey
(
tag
))
{
Label
label
=
new
Label
();
label
.
setEpc
(
epc
);
label
.
setTid
(
tid
);
isCacheLabel
=
true
;
checkLabel
(
label
);
}
}
}
else
{
ToastUtils
.
showShort
(
"加载缓存标签失败"
);
}
}
@Override
public
void
onFailed
()
{
ToastUtils
.
showShort
(
"加载缓存标签错误"
);
}
}).
queryAsyncAll
(
CacheLabel
.
class
,
null
);
}
/**
* 删除缓存标签数据
*/
private
void
clearCacheLabel
()
{
DbUtil
.
getInstance
().
setDbIDUCallBack
(
new
DbIDUCallBack
()
{
@Override
public
void
onNotification
(
boolean
result
)
{
if
(
result
)
{
}
else
{
ToastUtils
.
showShort
(
"删除标签缓存数据失败"
);
}
}
}).
deleteAsyncAll
(
CacheLabel
.
class
);
}
}
public
void
setTest
(
String
testcount
){
public
void
setTest
(
String
testcount
)
{
testlNum
.
set
(
testcount
);
testlNum
.
set
(
testcount
);
}
}
public
void
setTest2
(
String
testcount
){
public
void
setTest2
(
String
testcount
)
{
testpNum
.
set
(
testcount
);
testpNum
.
set
(
testcount
);
}
}
public
void
setTest3
(
String
testcount
){
public
void
setTest3
(
String
testcount
)
{
testyNum
.
set
(
testcount
);
testyNum
.
set
(
testcount
);
}
}
...
@@ -292,6 +392,8 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
...
@@ -292,6 +392,8 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
startActivity
(
QuarantineActivity
.
class
,
mBundle
);
startActivity
(
QuarantineActivity
.
class
,
mBundle
);
}
else
if
(
type
.
equals
(
Configs
.
WORK_TYPE_H
))
{
}
else
if
(
type
.
equals
(
Configs
.
WORK_TYPE_H
))
{
startActivity
(
HarmlessActivity
.
class
,
mBundle
);
startActivity
(
HarmlessActivity
.
class
,
mBundle
);
}
else
if
(
type
.
equals
(
Configs
.
WORK_TYPE_SE
))
{
startActivity
(
SlaughterEntryActivity
.
class
,
mBundle
);
}
}
finish
();
finish
();
}
else
{
}
else
{
...
@@ -313,6 +415,8 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
...
@@ -313,6 +415,8 @@ public class InventoryVM extends BackBarVM<Repository> implements OnInventoryLis
labelNum
.
set
(
""
);
labelNum
.
set
(
""
);
map
.
clear
();
map
.
clear
();
tipDesc
.
set
(
""
);
tipDesc
.
set
(
""
);
if
(
type
.
equals
(
Configs
.
WORK_TYPE_SE
))
clearCacheLabel
();
}
}
});
});
...
...
app/src/main/java/com/phlx/wool/ui/main/MainVM.java
View file @
6e994d9c
...
@@ -7,8 +7,6 @@ import androidx.annotation.NonNull;
...
@@ -7,8 +7,6 @@ import androidx.annotation.NonNull;
import
com.phlx.wool.Configs
;
import
com.phlx.wool.Configs
;
import
com.phlx.wool.data.Repository
;
import
com.phlx.wool.data.Repository
;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.entity.DivisionEntity
;
import
com.phlx.wool.entity.VillusBuyEntity
;
import
com.phlx.wool.entity.VillusBuyEntity
;
import
com.phlx.wool.ui.base.MainBarVM
;
import
com.phlx.wool.ui.base.MainBarVM
;
import
com.phlx.wool.ui.inventory.InventoryActivity
;
import
com.phlx.wool.ui.inventory.InventoryActivity
;
...
@@ -20,13 +18,9 @@ import com.phlx.wool.ui.villus.VillusBuyActivity;
...
@@ -20,13 +18,9 @@ import com.phlx.wool.ui.villus.VillusBuyActivity;
import
com.phlx.wool.ui.villus.VillusGaugeActivity
;
import
com.phlx.wool.ui.villus.VillusGaugeActivity
;
import
com.phlx.wool.ui.work.unit.UnitActivity
;
import
com.phlx.wool.ui.work.unit.UnitActivity
;
import
com.phlx.wool.util.PrintLabel
;
import
com.phlx.wool.util.PrintLabel
;
import
com.printer.sdk.PrinterConstants
;
import
com.printer.sdk.PrinterConstants.Command
;
import
com.printer.sdk.PrinterInstance
;
import
com.printer.sdk.PrinterInstance
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
me.goldze.mvvmhabit.binding.command.BindingAction
;
import
me.goldze.mvvmhabit.binding.command.BindingAction
;
...
@@ -135,6 +129,21 @@ public class MainVM extends MainBarVM<Repository> {
...
@@ -135,6 +129,21 @@ public class MainVM extends MainBarVM<Repository> {
}
}
});
});
public
BindingCommand
OnSlaughterEntryClickCommand
=
new
BindingCommand
(
new
BindingAction
()
{
@Override
public
void
call
()
{
unitSp
=
SPUtils
.
getInstance
().
getString
(
Configs
.
SP_UNIT_NAME
,
""
);
if
(
unitSp
.
isEmpty
())
{
nullEvent
.
call
();
}
else
{
Bundle
mBundle
=
new
Bundle
();
mBundle
.
putString
(
"type"
,
Configs
.
WORK_TYPE_SE
);
startActivity
(
InventoryActivity
.
class
,
mBundle
);
}
}
});
public
List
<
String
>
getVillusBuyList
()
{
public
List
<
String
>
getVillusBuyList
()
{
List
<
String
>
villusBuyNoList
=
new
ArrayList
<>();
List
<
String
>
villusBuyNoList
=
new
ArrayList
<>();
villusBuyEntities
=
new
ArrayList
<>();
villusBuyEntities
=
new
ArrayList
<>();
...
...
app/src/main/java/com/phlx/wool/ui/slaughter/SlaughterEntryActivity.java
0 → 100644
View file @
6e994d9c
package
com
.
phlx
.
wool
.
ui
.
slaughter
;
import
android.Manifest
;
import
android.app.Dialog
;
import
android.graphics.Bitmap
;
import
android.os.Bundle
;
import
android.util.Log
;
import
android.view.Gravity
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.Window
;
import
android.widget.FrameLayout
;
import
androidx.databinding.Observable
;
import
androidx.lifecycle.ViewModelProviders
;
import
com.bigkoo.pickerview.builder.TimePickerBuilder
;
import
com.bigkoo.pickerview.listener.OnTimeSelectChangeListener
;
import
com.bigkoo.pickerview.listener.OnTimeSelectListener
;
import
com.bigkoo.pickerview.view.TimePickerView
;
import
com.bumptech.glide.Glide
;
import
com.bumptech.glide.load.engine.DiskCacheStrategy
;
import
com.bumptech.glide.request.RequestOptions
;
import
com.phlx.wool.BR
;
import
com.phlx.wool.R
;
import
com.phlx.wool.data.VMFactory
;
import
com.phlx.wool.databinding.ActivitySlaughterEntryBinding
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.ui.base.BaseActivity
;
import
com.phlx.wool.ui.slaughter.vm.SlaughterEntryVM
;
import
com.phlx.wool.ui.villus.vm.VillusBuyVM
;
import
com.phlx.wool.util.BaseImageUtils
;
import
com.phlx.wool.util.ImagePicker
;
import
com.tbruyelle.rxpermissions2.RxPermissions
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
io.reactivex.functions.Consumer
;
import
me.goldze.mvvmhabit.base.BaseViewModel
;
import
me.goldze.mvvmhabit.utils.ToastUtils
;
public
class
SlaughterEntryActivity
extends
BaseActivity
<
ActivitySlaughterEntryBinding
,
SlaughterEntryVM
>
{
private
ArrayList
<
Label
>
labels
;
private
ImagePicker
quarantineImagePicker
;
private
TimePickerView
pvTime
;
@Override
public
int
initContentView
(
Bundle
savedInstanceState
)
{
return
R
.
layout
.
activity_slaughter_entry
;
}
@Override
public
int
initVariableId
()
{
return
BR
.
viewModel
;
}
@Override
public
void
initParam
()
{
super
.
initParam
();
Bundle
mBundle
=
getIntent
().
getExtras
();
if
(
mBundle
!=
null
)
{
labels
=
mBundle
.
getParcelableArrayList
(
"list"
);
}
}
@Override
public
SlaughterEntryVM
initViewModel
()
{
VMFactory
factory
=
VMFactory
.
getInstance
(
getApplication
());
return
ViewModelProviders
.
of
(
this
,
factory
).
get
(
SlaughterEntryVM
.
class
);
}
@Override
public
void
initData
()
{
super
.
initData
();
viewModel
.
setLabels
(
labels
);
viewModel
.
initToolbar
();
initTimePicker
();
if
(
quarantineImagePicker
==
null
)
{
quarantineImagePicker
=
new
ImagePicker
(
SlaughterEntryActivity
.
this
);
quarantineImagePicker
.
setOnImagePickerListener
(
new
ImagePicker
.
OnImagePickerListener
()
{
@Override
public
void
onSuccess
(
String
path
)
{
Bitmap
bitmap
=
BaseImageUtils
.
decodeBitmap
(
path
,
SlaughterEntryActivity
.
this
);
BaseImageUtils
.
saveBitmapToSDCard
(
bitmap
,
viewModel
.
getQuarantineImgUrl
());
viewModel
.
entity
.
setQuarantineImgPath
(
viewModel
.
getQuarantineImgUrl
());
Glide
.
with
(
SlaughterEntryActivity
.
this
)
.
load
(
viewModel
.
getQuarantineImgUrl
())
.
apply
(
new
RequestOptions
()
.
skipMemoryCache
(
true
)
.
diskCacheStrategy
(
DiskCacheStrategy
.
NONE
)
.
error
(
R
.
drawable
.
no_image
)
.
fallback
(
R
.
drawable
.
no_image
)
)
.
into
(
binding
.
quarantinePhotoView
);
}
});
}
}
@Override
public
void
initViewObservable
()
{
super
.
initViewObservable
();
viewModel
.
entryDay
.
observe
(
this
,
aBoolean
->
{
pvTime
.
show
(
binding
.
entryDayTv
);
});
viewModel
.
quarantinePhotoOnClick
.
observe
(
this
,
aBoolean
->
{
RxPermissions
rxPermissions
=
new
RxPermissions
(
SlaughterEntryActivity
.
this
);
rxPermissions
.
request
(
Manifest
.
permission
.
CAMERA
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
.
subscribe
(
new
Consumer
<
Boolean
>()
{
@Override
public
void
accept
(
Boolean
aBoolean
)
throws
Exception
{
if
(
aBoolean
)
{
quarantineImagePicker
.
show
(
SlaughterEntryActivity
.
this
);
}
else
{
ToastUtils
.
showShort
(
"权限被拒绝"
);
}
}
});
});
}
private
void
initTimePicker
()
{
//Dialog 模式下,在底部弹出
pvTime
=
new
TimePickerBuilder
(
this
,
new
OnTimeSelectListener
()
{
@Override
public
void
onTimeSelect
(
Date
date
,
View
v
)
{
viewModel
.
setEntryDate
(
date
);
}
})
.
setTimeSelectChangeListener
(
new
OnTimeSelectChangeListener
()
{
@Override
public
void
onTimeSelectChanged
(
Date
date
)
{
}
})
.
setType
(
new
boolean
[]{
true
,
true
,
true
,
false
,
false
,
false
})
.
isDialog
(
true
)
//默认设置false ,内部实现将DecorView 作为它的父控件。
.
addOnCancelClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
Log
.
i
(
"pvTime"
,
"onCancelClickListener"
);
}
})
.
setItemVisibleCount
(
5
)
//若设置偶数,实际值会加1(比如设置6,则最大可见条目为7)
.
setLineSpacingMultiplier
(
2.0f
)
.
isAlphaGradient
(
true
)
.
build
();
Dialog
mDialog
=
pvTime
.
getDialog
();
if
(
mDialog
!=
null
)
{
FrameLayout
.
LayoutParams
params
=
new
FrameLayout
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
ViewGroup
.
LayoutParams
.
WRAP_CONTENT
,
Gravity
.
BOTTOM
);
params
.
leftMargin
=
0
;
params
.
rightMargin
=
0
;
pvTime
.
getDialogContainerLayout
().
setLayoutParams
(
params
);
Window
dialogWindow
=
mDialog
.
getWindow
();
if
(
dialogWindow
!=
null
)
{
dialogWindow
.
setWindowAnimations
(
com
.
bigkoo
.
pickerview
.
R
.
style
.
picker_view_slide_anim
);
//修改动画样式
dialogWindow
.
setGravity
(
Gravity
.
BOTTOM
);
//改成Bottom,底部显示
dialogWindow
.
setDimAmount
(
0.3f
);
}
}
}
}
app/src/main/java/com/phlx/wool/ui/slaughter/vm/SlaughterEntryVM.java
0 → 100644
View file @
6e994d9c
package
com
.
phlx
.
wool
.
ui
.
slaughter
.
vm
;
import
android.app.Application
;
import
android.graphics.drawable.Drawable
;
import
android.os.Environment
;
import
android.view.View
;
import
androidx.annotation.NonNull
;
import
androidx.core.content.ContextCompat
;
import
com.google.gson.GsonBuilder
;
import
com.phlx.wool.Configs
;
import
com.phlx.wool.R
;
import
com.phlx.wool.data.Repository
;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.db.interf.DbIDUCallBack
;
import
com.phlx.wool.entity.EntryRegistrationEntity
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.VillusBuyEntity
;
import
com.phlx.wool.event.EventMsg
;
import
com.phlx.wool.event.EventTag
;
import
com.phlx.wool.params.CattleResponse
;
import
com.phlx.wool.params.UploadParams
;
import
com.phlx.wool.ui.base.BackBarVM
;
import
com.phlx.wool.util.BaseImageUtils
;
import
com.phlx.wool.util.StringUtil
;
import
java.io.File
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
cn.hutool.core.util.IdUtil
;
import
io.reactivex.disposables.Disposable
;
import
io.reactivex.functions.Consumer
;
import
me.goldze.mvvmhabit.base.BaseViewModel
;
import
me.goldze.mvvmhabit.binding.command.BindingAction
;
import
me.goldze.mvvmhabit.binding.command.BindingCommand
;
import
me.goldze.mvvmhabit.bus.RxBus
;
import
me.goldze.mvvmhabit.bus.RxSubscriptions
;
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
;
import
okhttp3.MediaType
;
import
okhttp3.RequestBody
;
public
class
SlaughterEntryVM
extends
BackBarVM
<
Repository
>
{
public
EntryRegistrationEntity
entity
;
private
ArrayList
<
Label
>
labels
;
public
Drawable
drawableImg
;
//照片路径
private
String
quarantineImgUrl
;
private
File
quarantineFile
;
private
Disposable
inventoryBus
;
public
SingleLiveEvent
<
Boolean
>
entryDay
=
new
SingleLiveEvent
<>();
public
SingleLiveEvent
<
Boolean
>
quarantinePhotoOnClick
=
new
SingleLiveEvent
<>();
private
SimpleDateFormat
dateFormat
;
private
List
<
EntryRegistrationEntity
>
uploadData
;
public
SlaughterEntryVM
(
@NonNull
Application
application
,
Repository
model
)
{
super
(
application
,
model
);
}
//初始化ToolBar
public
void
initToolbar
()
{
setBackTitleText
(
"屠宰进场"
);
setSettingVisibleObservable
(
View
.
GONE
);
setBackRightTextVisible
(
View
.
VISIBLE
);
setBackRightText
(
"保存"
);
if
(
entity
==
null
)
{
initEntity
();
}
//养殖单位
entity
.
setPastureUnitName
(
SPUtils
.
getInstance
().
getString
(
Configs
.
SP_UNIT_NAME
,
""
));
entity
.
setPastureUnitId
(
SPUtils
.
getInstance
().
getString
(
Configs
.
SP_UNIT_CODE
,
""
));
// entity.setPastureUnitPhone(SPUtils.getInstance().getString(Configs.SP_UNIT_PHONE, ""));
// entity.setRevision(SPUtils.getInstance().getString(Configs.SP_UNIT_REVISION, ""));
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
}
public
void
setLabels
(
ArrayList
<
Label
>
labels
)
{
this
.
labels
=
labels
;
}
public
void
initEntity
()
{
entity
=
new
EntryRegistrationEntity
();
long
batchNo
=
IdUtil
.
createSnowflake
(
3
,
1
).
nextId
();
entity
.
setId
(
batchNo
);
entity
.
setCreateBy
(
SPUtils
.
getInstance
().
getString
(
"name"
));
dateFormat
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
Date
_date
=
new
Date
();
entity
.
setSerialNo
(
dateFormat
.
format
(
_date
)
+
"-"
+
SPUtils
.
getInstance
().
getString
(
Configs
.
SP_ID
));
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
entity
.
setEntryNum
(
String
.
valueOf
(
labels
.
size
()));
quarantineImgUrl
=
Environment
.
getExternalStorageDirectory
().
getAbsolutePath
()
+
"/tracing/picture/"
+
"slaughterCiq"
+
batchNo
+
".jpg"
;
quarantineFile
=
new
File
(
quarantineImgUrl
);
//ImageView的占位图片,可以解决RecyclerView中图片错误问题
drawableImg
=
ContextCompat
.
getDrawable
(
getApplication
(),
R
.
drawable
.
no_image
);
List
<
String
>
epcList
=
new
ArrayList
<>();
for
(
Label
label
:
labels
)
{
epcList
.
add
(
label
.
getEpc
());
}
entity
.
setList
(
epcList
);
}
public
String
getQuarantineImgUrl
()
{
return
quarantineImgUrl
;
}
//进场日期
public
BindingCommand
onEntryDateClick
=
new
BindingCommand
(()
->
entryDay
.
call
());
public
void
setEntryDate
(
Date
date
)
{
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
entity
.
setEntryDate
(
dateFormat
.
format
(
date
));
entity
.
notifyChange
();
}
public
BindingCommand
quarantinePhotoOnClickCommand
=
new
BindingCommand
(
new
BindingAction
()
{
@Override
public
void
call
()
{
quarantinePhotoOnClick
.
call
();
}
});
/**
* 离线保存本地,在线先上传,后保存本地
*/
@Override
protected
void
backRightTextOnClick
()
{
if
(
StringUtils
.
isEmpty
(
entity
.
getEntryDate
()))
{
ToastUtils
.
showShort
(
"请选择收购日期"
);
return
;
}
// if (StringUtils.isEmpty(entity.getRevision())) {
// ToastUtils.showShort("请选择所属苏木");
// return;
// }
if
(
StringUtils
.
isEmpty
(
entity
.
getEntryNum
()))
{
ToastUtils
.
showShort
(
"请填写进场数量"
);
return
;
}
if
(
StringUtils
.
isEmpty
(
entity
.
getRecorder
()))
{
ToastUtils
.
showShort
(
"请填写负责人"
);
return
;
}
if
(
StringUtils
.
isEmpty
(
entity
.
getQuarantineImgPath
()))
{
ToastUtils
.
showShort
(
"请上传检疫合格证图片"
);
return
;
}
uploadData
=
new
ArrayList
<>();
entity
.
setCreateBy
(
SPUtils
.
getInstance
().
getString
(
Configs
.
SP_LOGIN_NAME
));
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
entity
.
setCreateTime
(
dateFormat
.
format
(
new
Date
()));
entity
.
setStatus
(
1
);
uploadData
.
add
(
entity
);
KLog
.
e
(
uploadData
.
size
()
+
uploadData
.
toString
());
/**
* 存储数据库
*/
showDialog
(
"正在保存本地..."
);
DbUtil
.
getInstance
().
setDbIDUCallBack
(
new
DbIDUCallBack
()
{
@Override
public
void
onNotification
(
boolean
result
)
{
dismissDialog
();
if
(
result
)
{
if
(
Configs
.
isOnLine
)
{
uploadSlaughterEntry
();
}
else
{
ToastUtils
.
showShort
(
"屠宰入场保存成功"
);
backMain
();
}
}
else
{
ToastUtils
.
showShort
(
"屠宰入场保存失败"
);
}
}
}).
insertAsyncBatch
(
EntryRegistrationEntity
.
class
,
uploadData
);
}
private
void
uploadSlaughterEntry
()
{
if
(
uploadData
!=
null
&&
uploadData
.
size
()
>
0
)
{
EntryRegistrationEntity
_entryRegistrationEntity
=
uploadData
.
get
(
0
);
if
(
_entryRegistrationEntity
.
getQuarantineImgPath
()
!=
null
&&
!
_entryRegistrationEntity
.
getQuarantineImgPath
().
equals
(
""
))
_entryRegistrationEntity
.
setQuarantineCertificateImg
(
BaseImageUtils
.
bitmapToString
(
_entryRegistrationEntity
.
getQuarantineImgPath
(),
getApplication
()));
}
String
postInfoStr
=
new
GsonBuilder
().
serializeNulls
()
// .excludeFieldsWithoutExposeAnnotation()
.
create
().
toJson
(
new
UploadParams
<
List
<
EntryRegistrationEntity
>>(
uploadData
));
RequestBody
body
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json; charset=utf-8"
),
postInfoStr
);
KLog
.
e
(
postInfoStr
);
addSubscribe
(
model
.
submitSlaughterEntry
(
body
)
.
compose
(
RxUtils
.
bindToLifecycle
(
getLifecycleProvider
()))
.
compose
(
RxUtils
.
schedulersTransformer
())
.
compose
(
RxUtils
.
exceptionTransformer
())
.
doOnSubscribe
(
disposable
->
showDialog
(
"正在上传屠宰进场数据..."
))
.
subscribe
((
Consumer
<
CattleResponse
<
List
<
VillusBuyEntity
>>>)
response
->
{
KLog
.
e
(
response
.
getCode
()
+
response
.
getMsg
());
if
(
response
.
getCode
()
==
0
)
{
for
(
int
i
=
0
;
i
<
uploadData
.
size
();
i
++)
{
uploadData
.
get
(
i
).
setStatus
(
0
);
}
DbUtil
.
getInstance
().
setDbIDUCallBack
(
new
DbIDUCallBack
()
{
@Override
public
void
onNotification
(
boolean
result
)
{
if
(
result
)
{
dismissDialog
();
ToastUtils
.
showShort
(
"屠宰进场上传成功"
);
finish
();
}
}
}).
insertAsyncBatch
(
EntryRegistrationEntity
.
class
,
uploadData
);
}
else
{
dismissDialog
();
ToastUtils
.
showShort
(
"屠宰进场上传失败"
);
}
},
(
Consumer
<
ResponseThrowable
>)
throwable
->
{
dismissDialog
();
ToastUtils
.
showShort
(
throwable
.
message
);
})
);
}
public
void
backMain
()
{
finish
();
}
@Override
public
void
registerRxBus
()
{
super
.
registerRxBus
();
inventoryBus
=
RxBus
.
getDefault
().
toObservable
(
EventMsg
.
class
).
subscribe
(
eventType
->
{
if
(
eventType
.
getAction
().
equals
(
EventTag
.
EVENT_INVENTORY_DATA
))
{
}
});
RxSubscriptions
.
add
(
inventoryBus
);
}
@Override
public
void
removeRxBus
()
{
super
.
removeRxBus
();
RxSubscriptions
.
remove
(
inventoryBus
);
}
}
app/src/main/java/com/phlx/wool/ui/sync/vm/DownloadVM.java
View file @
6e994d9c
...
@@ -13,24 +13,18 @@ import com.phlx.wool.data.Repository;
...
@@ -13,24 +13,18 @@ import com.phlx.wool.data.Repository;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.db.interf.DbIDUCallBack
;
import
com.phlx.wool.db.interf.DbIDUCallBack
;
import
com.phlx.wool.db.interf.DbQueryCallBack
;
import
com.phlx.wool.db.interf.DbQueryCallBack
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Label
;
import
com.phlx.wool.entity.Marking
;
import
com.phlx.wool.entity.Quarantine
;
import
com.phlx.wool.entity.TreatmentMethod
;
import
com.phlx.wool.entity.TreatmentMethod
;
import
com.phlx.wool.entity.Unit
;
import
com.phlx.wool.entity.Unit
;
import
com.phlx.wool.entity.Variety
;
import
com.phlx.wool.entity.Variety
;
import
com.phlx.wool.entity.Veterinary
;
import
com.phlx.wool.entity.Veterinary
;
import
com.phlx.wool.entity.VillusBuyEntity
;
import
com.phlx.wool.entity.VillusBuyEntity
;
import
com.phlx.wool.entity.VillusBuyEntityDao
;
import
com.phlx.wool.entity.VillusGaugeEntity
;
import
com.phlx.wool.params.BasicParams
;
import
com.phlx.wool.params.BasicParams
;
import
com.phlx.wool.params.CattleResponse
;
import
com.phlx.wool.params.CattleResponse
;
import
com.phlx.wool.params.PostParams
;
import
com.phlx.wool.params.PostParams
;
import
com.phlx.wool.ui.base.BackBarVM
;
import
com.phlx.wool.ui.base.BackBarVM
;
import
com.phlx.wool.ui.main.MainActivity
;
import
com.phlx.wool.ui.main.MainActivity
;
import
org.greenrobot.greendao.query.QueryBuilder
;
import
org.greenrobot.greendao.query.WhereCondition
;
import
org.greenrobot.greendao.query.WhereCondition
;
import
java.text.ParseException
;
import
java.text.ParseException
;
...
@@ -46,7 +40,6 @@ import me.goldze.mvvmhabit.http.ResponseThrowable;
...
@@ -46,7 +40,6 @@ import me.goldze.mvvmhabit.http.ResponseThrowable;
import
me.goldze.mvvmhabit.utils.KLog
;
import
me.goldze.mvvmhabit.utils.KLog
;
import
me.goldze.mvvmhabit.utils.RxUtils
;
import
me.goldze.mvvmhabit.utils.RxUtils
;
import
me.goldze.mvvmhabit.utils.SPUtils
;
import
me.goldze.mvvmhabit.utils.SPUtils
;
import
me.goldze.mvvmhabit.utils.ToastUtils
;
import
okhttp3.MediaType
;
import
okhttp3.MediaType
;
import
okhttp3.RequestBody
;
import
okhttp3.RequestBody
;
...
@@ -173,10 +166,13 @@ public class DownloadVM extends BackBarVM<Repository> {
...
@@ -173,10 +166,13 @@ public class DownloadVM extends BackBarVM<Repository> {
if
(
isDownloadLabel
.
get
()
&&
!
isLabelDownload
)
{
if
(
isDownloadLabel
.
get
()
&&
!
isLabelDownload
)
{
baseDateUpload
();
baseDateUpload
();
}
else
if
(
isDownloadBasic
.
get
()
&&
!
isBasicDownload
)
{
}
else
if
(
isDownloadBasic
.
get
()
&&
!
isBasicDownload
)
{
DbUtil
.
getInstance
().
deleteAll
(
TreatmentMethod
.
class
);
DbUtil
.
getInstance
().
deleteAll
(
Variety
.
class
);
requestBasicInfo
();
requestBasicInfo
();
}
else
if
(
isDownloadUnit
.
get
()
&&
!
isUnitDownload
)
{
}
else
if
(
isDownloadUnit
.
get
()
&&
!
isUnitDownload
)
{
queryUnitInputTime
(
unitPageIndex
,
100000
);
queryUnitInputTime
(
unitPageIndex
,
100000
);
}
else
if
(
isDownloadVeterinary
.
get
()
&&
!
isVeterinaryDownload
)
{
}
else
if
(
isDownloadVeterinary
.
get
()
&&
!
isVeterinaryDownload
)
{
DbUtil
.
getInstance
().
deleteAll
(
Veterinary
.
class
);
requestVeterinary
();
requestVeterinary
();
}
else
if
(
isDownloadVillusBuy
.
get
()
&&
!
isVillusBuyDownload
)
{
}
else
if
(
isDownloadVillusBuy
.
get
()
&&
!
isVillusBuyDownload
)
{
requestVillusBuy
();
requestVillusBuy
();
...
@@ -352,8 +348,8 @@ public class DownloadVM extends BackBarVM<Repository> {
...
@@ -352,8 +348,8 @@ public class DownloadVM extends BackBarVM<Repository> {
private
void
requestVeterinary
()
{
private
void
requestVeterinary
()
{
isVeterinaryDownload
=
true
;
isVeterinaryDownload
=
true
;
PostParams
postParams
=
new
PostParams
();
PostParams
postParams
=
new
PostParams
();
postParams
.
setInputTime
(
0
);
postParams
.
setPageNum
(
1
);
postParams
.
setPageNum
(
1
);
postParams
.
setInputTime
(
0
);
postParams
.
setPageSize
(
200
);
postParams
.
setPageSize
(
200
);
postParams
.
setYears
(
""
);
postParams
.
setYears
(
""
);
RequestBody
body
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json; charset=utf-8"
),
new
Gson
().
toJson
(
postParams
));
RequestBody
body
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json; charset=utf-8"
),
new
Gson
().
toJson
(
postParams
));
...
...
app/src/main/java/com/phlx/wool/ui/sync/vm/UploadVM.java
View file @
6e994d9c
...
@@ -13,6 +13,8 @@ import com.phlx.wool.data.Repository;
...
@@ -13,6 +13,8 @@ import com.phlx.wool.data.Repository;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.db.DbUtil
;
import
com.phlx.wool.db.interf.DbIDUCallBack
;
import
com.phlx.wool.db.interf.DbIDUCallBack
;
import
com.phlx.wool.db.interf.DbQueryCallBack
;
import
com.phlx.wool.db.interf.DbQueryCallBack
;
import
com.phlx.wool.entity.EntryRegistrationEntity
;
import
com.phlx.wool.entity.EntryRegistrationEntityDao
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.Harmless
;
import
com.phlx.wool.entity.HarmlessDao
;
import
com.phlx.wool.entity.HarmlessDao
;
import
com.phlx.wool.entity.HarmlessDetail
;
import
com.phlx.wool.entity.HarmlessDetail
;
...
@@ -62,17 +64,19 @@ public class UploadVM extends BackBarVM<Repository> {
...
@@ -62,17 +64,19 @@ public class UploadVM extends BackBarVM<Repository> {
public
ObservableField
<
String
>
harmlessLabelNum
=
new
ObservableField
<>(
"无害化处理"
);
public
ObservableField
<
String
>
harmlessLabelNum
=
new
ObservableField
<>(
"无害化处理"
);
public
ObservableField
<
String
>
quarantineLabelNum
=
new
ObservableField
<>(
"检疫记录"
);
public
ObservableField
<
String
>
quarantineLabelNum
=
new
ObservableField
<>(
"检疫记录"
);
public
ObservableField
<
String
>
villusBuyLabelNum
=
new
ObservableField
<>(
"绒毛购买"
);
public
ObservableField
<
String
>
villusBuyLabelNum
=
new
ObservableField
<>(
"绒毛购买"
);
public
ObservableField
<
String
>
villusgaugelabelnum
=
new
ObservableField
<>(
"绒毛测量"
);
public
ObservableField
<
String
>
villusGaugeLabelNum
=
new
ObservableField
<>(
"绒毛测量"
);
public
ObservableField
<
String
>
slaughterEntryLabelNum
=
new
ObservableField
<>(
"屠宰进场"
);
public
ObservableField
<
Boolean
>
isUploadMarking
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadMarking
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadHarmless
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadHarmless
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadQuarantine
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadQuarantine
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadVillusBuy
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadVillusBuy
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadVillusGauge
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadVillusGauge
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadSlaughterEntry
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadAll
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableField
<
Boolean
>
isUploadAll
=
new
ObservableField
<
Boolean
>(
false
);
public
ObservableInt
uploadDataVisibility
=
new
ObservableInt
();
public
ObservableInt
uploadDataVisibility
=
new
ObservableInt
();
private
boolean
isMarkingUpload
,
isHarmlessUpload
,
isQuarantineUpload
,
isVillusBuyUpload
,
isVillusGaugeUpload
;
private
boolean
isMarkingUpload
,
isHarmlessUpload
,
isQuarantineUpload
,
isVillusBuyUpload
,
isVillusGaugeUpload
,
isSlaughterEntryUpload
;
public
UploadVM
(
@NonNull
Application
application
,
Repository
repository
)
{
public
UploadVM
(
@NonNull
Application
application
,
Repository
repository
)
{
super
(
application
,
repository
);
super
(
application
,
repository
);
...
@@ -128,6 +132,14 @@ public class UploadVM extends BackBarVM<Repository> {
...
@@ -128,6 +132,14 @@ public class UploadVM extends BackBarVM<Repository> {
}
}
});
});
public
BindingCommand
<
Boolean
>
onUploadSlaughterEntryCommand
=
new
BindingCommand
<>(
new
BindingConsumer
<
Boolean
>()
{
@Override
public
void
call
(
Boolean
isChecked
)
{
isUploadSlaughterEntry
.
set
(
isChecked
);
}
});
public
BindingCommand
<
Boolean
>
onUploadAllCommand
=
public
BindingCommand
<
Boolean
>
onUploadAllCommand
=
new
BindingCommand
<>(
new
BindingConsumer
<
Boolean
>()
{
new
BindingCommand
<>(
new
BindingConsumer
<
Boolean
>()
{
@Override
@Override
...
@@ -143,6 +155,7 @@ public class UploadVM extends BackBarVM<Repository> {
...
@@ -143,6 +155,7 @@ public class UploadVM extends BackBarVM<Repository> {
isUploadQuarantine
.
set
(
isSelected
);
isUploadQuarantine
.
set
(
isSelected
);
isUploadVillusBuy
.
set
(
isSelected
);
isUploadVillusBuy
.
set
(
isSelected
);
isUploadVillusGauge
.
set
(
isSelected
);
isUploadVillusGauge
.
set
(
isSelected
);
isUploadSlaughterEntry
.
set
(
isSelected
);
}
}
//查询每项未上传记录数量
//查询每项未上传记录数量
...
@@ -152,6 +165,8 @@ public class UploadVM extends BackBarVM<Repository> {
...
@@ -152,6 +165,8 @@ public class UploadVM extends BackBarVM<Repository> {
harmlessLabelNum
.
set
(
"无害化处理 "
+
"("
+
DbUtil
.
getInstance
().
count
(
Harmless
.
class
)
+
")"
);
harmlessLabelNum
.
set
(
"无害化处理 "
+
"("
+
DbUtil
.
getInstance
().
count
(
Harmless
.
class
)
+
")"
);
quarantineLabelNum
.
set
(
"检疫记录 "
+
"("
+
DbUtil
.
getInstance
().
count
(
Quarantine
.
class
)
+
")"
);
quarantineLabelNum
.
set
(
"检疫记录 "
+
"("
+
DbUtil
.
getInstance
().
count
(
Quarantine
.
class
)
+
")"
);
// villusBuyLabelNum.set("绒毛购买 " + "(" + DbUtil.getInstance().count(VillusBuyEntity.class) + ")");
QueryBuilder
<
VillusBuyEntity
>
builder
=
QueryBuilder
<
VillusBuyEntity
>
builder
=
DbUtil
.
getInstance
().
getQueryBuilder
(
VillusBuyEntity
.
class
)
DbUtil
.
getInstance
().
getQueryBuilder
(
VillusBuyEntity
.
class
)
.
where
(
VillusBuyEntityDao
.
Properties
.
Status
.
eq
(
1
));
.
where
(
VillusBuyEntityDao
.
Properties
.
Status
.
eq
(
1
));
...
@@ -170,8 +185,10 @@ public class UploadVM extends BackBarVM<Repository> {
...
@@ -170,8 +185,10 @@ public class UploadVM extends BackBarVM<Repository> {
villusBuyLabelNum
.
set
(
"绒毛购买 "
+
"("
+
"-"
+
")"
);
villusBuyLabelNum
.
set
(
"绒毛购买 "
+
"("
+
"-"
+
")"
);
}
}
}).
queryAsyncAll
(
VillusBuyEntity
.
class
,
builder
);
}).
queryAsyncAll
(
VillusBuyEntity
.
class
,
builder
);
villusgaugelabelnum
.
set
(
"绒毛测量 "
+
"("
+
DbUtil
.
getInstance
().
count
(
VillusGaugeEntity
.
class
)
+
")"
);
;
villusGaugeLabelNum
.
set
(
"绒毛测量 "
+
"("
+
DbUtil
.
getInstance
().
count
(
VillusGaugeEntity
.
class
)
+
")"
);
slaughterEntryLabelNum
.
set
(
"屠宰进场 "
+
"("
+
DbUtil
.
getInstance
().
count
(
EntryRegistrationEntity
.
class
)
+
")"
);
}
}
private
void
uploadNext
()
{
private
void
uploadNext
()
{
...
@@ -186,9 +203,12 @@ public class UploadVM extends BackBarVM<Repository> {
...
@@ -186,9 +203,12 @@ public class UploadVM extends BackBarVM<Repository> {
uploadVillusBuy
();
uploadVillusBuy
();
}
else
if
(
isUploadVillusGauge
.
get
()
&&
!
isVillusGaugeUpload
)
{
}
else
if
(
isUploadVillusGauge
.
get
()
&&
!
isVillusGaugeUpload
)
{
uploadVillusGauge
();
uploadVillusGauge
();
}
else
if
(
isUploadSlaughterEntry
.
get
()
&&
!
isSlaughterEntryUpload
)
{
uploadSlaughterEntry
();
}
else
{
}
else
{
refreshUploadCount
();
refreshUploadCount
();
if
(!
isUploadMarking
.
get
()
&&
!
isUploadHarmless
.
get
()
&&
!
isUploadQuarantine
.
get
()
&&
!
isUploadVillusBuy
.
get
()
&&
!
isUploadVillusGauge
.
get
())
{
if
(!
isUploadMarking
.
get
()
&&
!
isUploadHarmless
.
get
()
&&
!
isUploadQuarantine
.
get
()
&&
!
isUploadVillusBuy
.
get
()
&&
!
isUploadVillusGauge
.
get
()
&&
!
isUploadSlaughterEntry
.
get
())
{
ToastUtils
.
showShort
(
"请选择上传的项目"
);
ToastUtils
.
showShort
(
"请选择上传的项目"
);
}
else
if
(!
""
.
equals
(
toastStr
))
{
}
else
if
(!
""
.
equals
(
toastStr
))
{
ToastUtils
.
showShort
(
toastStr
);
ToastUtils
.
showShort
(
toastStr
);
...
@@ -207,6 +227,7 @@ public class UploadVM extends BackBarVM<Repository> {
...
@@ -207,6 +227,7 @@ public class UploadVM extends BackBarVM<Repository> {
isQuarantineUpload
=
false
;
isQuarantineUpload
=
false
;
isVillusBuyUpload
=
false
;
isVillusBuyUpload
=
false
;
isVillusGaugeUpload
=
false
;
isVillusGaugeUpload
=
false
;
isSlaughterEntryUpload
=
false
;
toastStr
=
""
;
toastStr
=
""
;
uploadNext
();
uploadNext
();
...
@@ -558,4 +579,69 @@ public class UploadVM extends BackBarVM<Repository> {
...
@@ -558,4 +579,69 @@ public class UploadVM extends BackBarVM<Repository> {
}).
queryAsyncAll
(
VillusGaugeEntity
.
class
,
builder
);
}).
queryAsyncAll
(
VillusGaugeEntity
.
class
,
builder
);
}
}
/**
* 上传屠宰进场数据
*/
private
void
uploadSlaughterEntry
()
{
QueryBuilder
<
EntryRegistrationEntity
>
builder
=
DbUtil
.
getInstance
().
getQueryBuilder
(
EntryRegistrationEntity
.
class
).
where
(
EntryRegistrationEntityDao
.
Properties
.
Status
.
eq
(
1
));
DbUtil
.
getInstance
().
setDbQueryCallBack
(
new
DbQueryCallBack
<
EntryRegistrationEntity
>()
{
@Override
public
void
onSuccess
(
List
<
EntryRegistrationEntity
>
result
)
{
isSlaughterEntryUpload
=
true
;
if
(
result
!=
null
&&
result
.
size
()
>
0
)
{
KLog
.
e
(
result
.
toString
());
String
postInfoStr
=
new
GsonBuilder
().
serializeNulls
()
// .excludeFieldsWithoutExposeAnnotation()
.
create
().
toJson
(
new
UploadParams
<
List
<
EntryRegistrationEntity
>>(
result
));
RequestBody
body
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json; charset=utf-8"
),
postInfoStr
);
KLog
.
e
(
postInfoStr
);
addSubscribe
(
model
.
submitSlaughterEntry
(
body
)
.
compose
(
RxUtils
.
bindToLifecycle
(
getLifecycleProvider
()))
.
compose
(
RxUtils
.
schedulersTransformer
())
.
compose
(
RxUtils
.
exceptionTransformer
())
.
doOnSubscribe
(
disposable
->
showDialog
(
"正在上传屠宰进场数据..."
))
.
subscribe
((
Consumer
<
CattleResponse
<
List
<
EntryRegistrationEntity
>>>)
response
->
{
KLog
.
e
(
response
.
getCode
()
+
response
.
getMsg
());
dismissDialog
();
if
(
response
.
getCode
()
==
0
)
{
for
(
EntryRegistrationEntity
entryRegistrationEntity
:
result
)
{
entryRegistrationEntity
.
setStatus
(
0
);
}
DbUtil
.
getInstance
().
setDbIDUCallBack
(
new
DbIDUCallBack
()
{
@Override
public
void
onNotification
(
boolean
result
)
{
if
(
result
)
{
DbUtil
.
getInstance
().
deleteAll
(
EntryRegistrationEntity
.
class
);
}
else
{
ToastUtils
.
showShort
(
"删除屠宰进场数据失败"
);
}
uploadNext
();
}
}).
updateAsyncBatch
(
EntryRegistrationEntity
.
class
,
result
);
}
else
{
toastStr
+=
"上传屠宰进场数据失败;"
;
ToastUtils
.
showShort
(
"上传屠宰进场数据失败"
);
uploadNext
();
}
},
(
Consumer
<
ResponseThrowable
>)
throwable
->
{
dismissDialog
();
ToastUtils
.
showShort
(
throwable
.
message
);
uploadNext
();
})
);
}
else
{
uploadNext
();
}
}
@Override
public
void
onFailed
()
{
ToastUtils
.
showShort
(
"查询屠宰进场数据失败"
);
}
}).
queryAsyncAll
(
EntryRegistrationEntity
.
class
,
builder
);
}
}
}
app/src/main/java/com/phlx/wool/ui/villus/vm/VillusBuyVM.java
View file @
6e994d9c
...
@@ -198,6 +198,7 @@ public class VillusBuyVM extends BackBarVM<Repository> {
...
@@ -198,6 +198,7 @@ public class VillusBuyVM extends BackBarVM<Repository> {
entity
.
setStatus
(
1
);
entity
.
setStatus
(
1
);
entity
.
setProductId
(
StringUtil
.
to32String
(
IdUtil
.
createSnowflake
(
3
,
1
).
nextId
()));
entity
.
setProductId
(
StringUtil
.
to32String
(
IdUtil
.
createSnowflake
(
3
,
1
).
nextId
()));
entity
.
setPrintCount
(
0
);
entity
.
setPrintCount
(
0
);
entity
.
setScanCount
(
0
);
uploadData
.
add
(
entity
);
uploadData
.
add
(
entity
);
KLog
.
e
(
uploadData
.
size
()
+
uploadData
.
toString
());
KLog
.
e
(
uploadData
.
size
()
+
uploadData
.
toString
());
...
@@ -208,14 +209,16 @@ public class VillusBuyVM extends BackBarVM<Repository> {
...
@@ -208,14 +209,16 @@ public class VillusBuyVM extends BackBarVM<Repository> {
DbUtil
.
getInstance
().
setDbIDUCallBack
(
new
DbIDUCallBack
()
{
DbUtil
.
getInstance
().
setDbIDUCallBack
(
new
DbIDUCallBack
()
{
@Override
@Override
public
void
onNotification
(
boolean
result
)
{
public
void
onNotification
(
boolean
result
)
{
if
(
result
)
{
dismissDialog
();
dismissDialog
();
if
(
result
)
{
if
(
Configs
.
isOnLine
)
{
if
(
Configs
.
isOnLine
)
{
uploadVillusBuy
();
uploadVillusBuy
();
}
else
{
}
else
{
ToastUtils
.
showShort
(
"绒毛购买保存成功"
);
ToastUtils
.
showShort
(
"绒毛购买保存成功"
);
backMain
();
backMain
();
}
}
}
else
{
ToastUtils
.
showShort
(
"绒毛购买保存失败"
);
}
}
}
}
}).
insertAsyncBatch
(
VillusBuyEntity
.
class
,
uploadData
);
}).
insertAsyncBatch
(
VillusBuyEntity
.
class
,
uploadData
);
...
...
app/src/main/java/com/phlx/wool/util/BaseImageUtils.java
0 → 100644
View file @
6e994d9c
package
com
.
phlx
.
wool
.
util
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.BitmapFactory
;
import
android.os.Environment
;
import
android.util.Base64
;
import
android.util.Log
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.OutputStream
;
/**
* 作者 : lei
* 时间 : 2018/12/27 11 : 31
*/
public
class
BaseImageUtils
{
//把bitmap转换成String
public
static
String
bitmapToString
(
String
filePath
,
Context
context
)
{
Bitmap
bm
=
decodeBitmap
(
filePath
,
context
);
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
bm
.
compress
(
Bitmap
.
CompressFormat
.
JPEG
,
80
,
baos
);
byte
[]
b
=
baos
.
toByteArray
();
Log
.
d
(
"d"
,
"压缩后的大小="
+
b
.
length
);
return
Base64
.
encodeToString
(
b
,
Base64
.
DEFAULT
);
}
/**
* 2 * 加载本地大图片
* 3 *
* 4 * @param localPath
* 5 * @param context
* 6 * @return
* 7
*/
public
static
Bitmap
decodeBitmap
(
String
localPath
,
Context
context
)
{
BitmapFactory
.
Options
opts
=
new
BitmapFactory
.
Options
();
// 置为true,仅仅返回图片的分辨率
opts
.
inJustDecodeBounds
=
true
;
BitmapFactory
.
decodeFile
(
localPath
,
opts
);
// 得到原图的分辨率;
int
srcHeight
=
opts
.
outHeight
;
int
srcWidth
=
opts
.
outWidth
;
// 得到设备的分辨率
int
screenHeight
=
context
.
getResources
().
getDisplayMetrics
().
heightPixels
;
int
screenWidth
=
context
.
getResources
().
getDisplayMetrics
().
widthPixels
;
// 通过比较得到合适的比例值;
// 屏幕的 宽320 高 480 ,图片的宽3000 ,高是2262 3000/320=9 2262/480=5,,使用大的比例值
int
scale
=
1
;
int
sx
=
srcWidth
/
screenWidth
;
int
sy
=
srcHeight
/
screenHeight
;
if
(
sx
>=
sy
&&
sx
>
1
)
{
scale
=
sx
;
}
if
(
sy
>=
sx
&&
sy
>
1
)
{
scale
=
sy
;
}
// 根据比例值,缩放图片,并加载到内存中;
// 置为false,让BitmapFactory.decodeFile()返回一个图片对象
opts
.
inJustDecodeBounds
=
false
;
// 可以把图片缩放为原图的1/scale * 1/scale
opts
.
inSampleSize
=
scale
;
// 得到缩放后的bitmap
// Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()
// + "/lp.jpg", opts);
return
BitmapFactory
.
decodeFile
(
localPath
,
opts
);
}
//base64字符串转化成图片
public
static
boolean
saveBaseImage
(
String
base64
,
String
path
)
{
try
{
byte
[]
b
=
Base64
.
decode
(
base64
,
Base64
.
DEFAULT
);
//生成jpeg图片
OutputStream
out
=
new
FileOutputStream
(
path
);
out
.
write
(
b
);
out
.
flush
();
out
.
close
();
return
true
;
}
catch
(
Exception
e
)
{
return
false
;
}
}
/**
* 将bitmap对象保存成图片到sd卡中
*/
public
static
void
saveBitmapToSDCard
(
Bitmap
bitmap
,
String
path
)
{
File
folder
=
new
File
(
Environment
.
getExternalStorageDirectory
()
.
getAbsolutePath
()
+
"/tracing/picture"
);
if
(!
folder
.
exists
())
{
folder
.
mkdirs
();
}
File
file
=
new
File
(
path
);
try
{
FileOutputStream
fileOutputStream
=
new
FileOutputStream
(
file
);
bitmap
.
compress
(
Bitmap
.
CompressFormat
.
JPEG
,
50
,
((
OutputStream
)
fileOutputStream
));
//设置PNG的话,透明区域不会变成黑色
fileOutputStream
.
close
();
System
.
out
.
println
(
"----------save success-------------------"
);
recycle
(
bitmap
);
}
catch
(
Exception
v0
)
{
v0
.
printStackTrace
();
}
}
/**
* 回收Bitmap
*
* @param thumbBmp 需要被回收的bitmap
*/
public
static
void
recycle
(
Bitmap
thumbBmp
)
{
if
(
thumbBmp
!=
null
&&
!
thumbBmp
.
isRecycled
())
{
thumbBmp
.
recycle
();
}
}
}
app/src/main/java/com/phlx/wool/util/ImagePicker.java
0 → 100644
View file @
6e994d9c
package
com
.
phlx
.
wool
.
util
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.util.Log
;
import
com.bumptech.glide.Glide
;
import
com.yancy.gallerypick.config.GalleryConfig
;
import
com.yancy.gallerypick.config.GalleryPick
;
import
com.yancy.gallerypick.inter.IHandlerCallBack
;
import
com.yancy.gallerypick.inter.ImageLoader
;
import
com.yancy.gallerypick.widget.GalleryImageView
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
ImagePicker
{
private
static
final
String
TAG
=
ImagePicker
.
class
.
getName
();
private
static
final
String
DEFAULT_DIR
=
"/tracing/camera"
;
private
IHandlerCallBack
iHandlerCallBack
;
private
GalleryConfig
galleryConfig
;
private
List
<
String
>
path
=
new
ArrayList
<>();
private
OnImagePickerListener
listener
;
private
Context
mContext
;
public
ImagePicker
(
Context
context
)
{
this
.
mContext
=
context
;
initGallery
();
}
private
class
GlideImageLoader
implements
ImageLoader
{
@Override
public
void
displayImage
(
Activity
activity
,
Context
context
,
String
path
,
GalleryImageView
galleryImageView
,
int
width
,
int
height
)
{
Glide
.
with
(
context
).
load
(
path
).
into
(
galleryImageView
);
}
@Override
public
void
clearMemoryCache
()
{
}
}
private
void
initGallery
()
{
iHandlerCallBack
=
new
IHandlerCallBack
()
{
@Override
public
void
onStart
()
{
Log
.
i
(
TAG
,
"onStart: 开启"
);
}
@Override
public
void
onSuccess
(
List
<
String
>
photoList
)
{
Log
.
i
(
TAG
,
"onSuccess: 返回数据"
);
path
.
clear
();
for
(
String
s
:
photoList
)
{
Log
.
i
(
TAG
,
s
);
path
.
add
(
s
);
}
if
(
listener
!=
null
&&
path
.
size
()
>
0
)
{
listener
.
onSuccess
(
path
.
get
(
0
));
}
}
@Override
public
void
onCancel
()
{
Log
.
i
(
TAG
,
"onCancel: 取消"
);
}
@Override
public
void
onFinish
()
{
Log
.
i
(
TAG
,
"onFinish: 结束"
);
}
@Override
public
void
onError
()
{
Log
.
i
(
TAG
,
"onError: 出错"
);
}
};
galleryConfig
=
new
GalleryConfig
.
Builder
().
imageLoader
(
new
GlideImageLoader
())
// ImageLoader 加载框架(必填)
.
iHandlerCallBack
(
iHandlerCallBack
)
// 监听接口(必填)
.
provider
(
mContext
.
getPackageName
()
+
".file_provider"
)
// provider (必填)
.
multiSelect
(
false
)
.
isOpenCamera
(
true
)
// 是否现实相机按钮 默认:false
.
filePath
(
DEFAULT_DIR
)
// 图片存放路径
.
build
();
}
public
void
show
(
Activity
activity
)
{
GalleryPick
.
getInstance
().
setGalleryConfig
(
galleryConfig
).
open
(
activity
);
}
public
void
setOnImagePickerListener
(
OnImagePickerListener
listener
)
{
this
.
listener
=
listener
;
}
public
interface
OnImagePickerListener
{
void
onSuccess
(
String
path
);
}
}
app/src/main/java/com/phlx/wool/util/StringConverter.java
0 → 100644
View file @
6e994d9c
package
com
.
phlx
.
wool
.
util
;
import
org.greenrobot.greendao.converter.PropertyConverter
;
import
java.util.Arrays
;
import
java.util.List
;
public
class
StringConverter
implements
PropertyConverter
<
List
<
String
>,
String
>
{
@Override
public
List
<
String
>
convertToEntityProperty
(
String
databaseValue
)
{
if
(
databaseValue
==
null
)
{
return
null
;
}
else
{
List
<
String
>
list
=
Arrays
.
asList
(
databaseValue
.
split
(
","
));
return
list
;
}
}
@Override
public
String
convertToDatabaseValue
(
List
<
String
>
entityProperty
)
{
if
(
entityProperty
==
null
){
return
null
;
}
else
{
StringBuilder
sb
=
new
StringBuilder
();
for
(
String
link:
entityProperty
){
sb
.
append
(
link
);
sb
.
append
(
","
);
}
return
sb
.
toString
();
}
}
}
app/src/main/res/drawable-hdpi/no_image.png
0 → 100644
View file @
6e994d9c
5.23 KB
app/src/main/res/layout/activity_main.xml
View file @
6e994d9c
...
@@ -33,249 +33,335 @@
...
@@ -33,249 +33,335 @@
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/include"
/>
binding:layout_constraintTop_toBottomOf=
"@+id/include"
/>
<View
<androidx.core.widget.NestedScrollView
android:id=
"@+id/unit_tip_line"
android:layout_width=
"@dimen/dp_2"
android:layout_height=
"@dimen/dp_13"
android:layout_marginStart=
"@dimen/dp_20"
android:layout_marginTop=
"@dimen/dp_15"
android:background=
"#4963cd"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/main_bg"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/unit_tip_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_11"
android:text=
"@string/unit"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_14"
binding:layout_constraintStart_toEndOf=
"@id/data_tip_line"
binding:layout_constraintTop_toBottomOf=
"@+id/main_bg"
/>
<View
android:id=
"@+id/unit_line"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_2"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_5"
android:layout_marginEnd=
"@dimen/dp_15"
android:background=
"#dcdee4"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/unit_tip_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/select_unit_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_breed"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/select_unit"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/unit_line"
binding:onClickCommand=
"@{viewModel.OnSelectUnitClickCommand}"
/>
<View
android:id=
"@+id/data_tip_line"
android:layout_width=
"@dimen/dp_2"
android:layout_height=
"@dimen/dp_13"
android:layout_marginStart=
"@dimen/dp_20"
android:layout_marginTop=
"@dimen/dp_15"
android:background=
"#18ba57"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/select_unit_btn"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/data_tip_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_11"
android:text=
"@string/data_entry"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_14"
binding:layout_constraintStart_toEndOf=
"@id/data_tip_line"
binding:layout_constraintTop_toBottomOf=
"@+id/select_unit_btn"
/>
<View
android:id=
"@+id/data_line"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_2"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_5"
android:layout_marginEnd=
"@dimen/dp_15"
android:background=
"#dcdee4"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/data_tip_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/marking_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_marking"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/marking"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"@+id/select_unit_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/data_line"
binding:onClickCommand=
"@{viewModel.OnMarkingClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/quarantine_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_quarantine"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/quarantine"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/marking_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/data_line"
binding:onClickCommand=
"@{viewModel.OnQuarantineClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/harmless_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/harmless"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/quarantine_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/data_line"
binding:onClickCommand=
"@{viewModel.OnHarmlessClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/villus_buy_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/villus_buy"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"@+id/select_unit_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/marking_btn"
binding:onClickCommand=
"@{viewModel.OnVillusBuyClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/villus_gauge_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/villus_gauge"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/villus_buy_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/marking_btn"
binding:onClickCommand=
"@{viewModel.OnVillusGaugeClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/villus_print_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/villus_print"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/villus_gauge_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/marking_btn"
binding:onClickCommand=
"@{viewModel.OnVillusPrintClickCommand}"
/>
<View
android:id=
"@+id/sync_tip_line"
android:layout_width=
"@dimen/dp_2"
android:layout_height=
"@dimen/dp_13"
android:layout_marginStart=
"@dimen/dp_20"
android:layout_marginTop=
"@dimen/dp_15"
android:background=
"#ff3c3c"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/villus_buy_btn"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/sync_tip_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_11"
android:text=
"@string/data_sync"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_14"
binding:layout_constraintStart_toEndOf=
"@id/sync_tip_line"
binding:layout_constraintTop_toBottomOf=
"@+id/villus_buy_btn"
/>
<View
android:id=
"@+id/sync_line"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_2"
android:layout_height=
"@dimen/dp_0"
android:layout_marginStart=
"@dimen/dp_15"
binding:layout_constraintBottom_toBottomOf=
"parent"
android:layout_marginTop=
"@dimen/dp_5"
binding:layout_constraintEnd_toEndOf=
"parent"
android:layout_marginEnd=
"@dimen/dp_15"
android:background=
"#dcdee4"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/sync_tip_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/download_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_download"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/download"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/sync_line"
binding:layout_constraintTop_toBottomOf=
"@+id/main_bg"
>
binding:onClickCommand=
"@{viewModel.OnDownloadClickCommand}"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
<androidx.appcompat.widget.AppCompatTextView
android:layout_height=
"match_parent"
>
android:id=
"@+id/upload_btn"
android:layout_width=
"wrap_content"
<View
android:layout_height=
"wrap_content"
android:id=
"@+id/unit_tip_line"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_width=
"@dimen/dp_2"
android:layout_marginTop=
"@dimen/dp_10"
android:layout_height=
"@dimen/dp_13"
android:drawableTop=
"@mipmap/ic_upload"
android:layout_marginStart=
"@dimen/dp_20"
android:drawablePadding=
"@dimen/dp_10"
android:layout_marginTop=
"@dimen/dp_15"
android:text=
"@string/upload"
android:background=
"#4963cd"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintStart_toEndOf=
"@+id/download_btn"
binding:layout_constraintTop_toTopOf=
"parent"
/>
binding:layout_constraintTop_toBottomOf=
"@+id/sync_line"
binding:onClickCommand=
"@{viewModel.OnUploadClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/unit_tip_desc"
android:layout_width=
"wrap_content"
<androidx.appcompat.widget.AppCompatTextView
android:layout_height=
"wrap_content"
android:id=
"@+id/clear_data_btn"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_width=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_11"
android:layout_height=
"wrap_content"
android:text=
"@string/unit"
android:layout_marginStart=
"@dimen/dp_40"
android:textColor=
"@color/black"
android:layout_marginTop=
"@dimen/dp_10"
android:textSize=
"@dimen/sp_14"
android:drawableTop=
"@mipmap/ic_clear"
binding:layout_constraintStart_toEndOf=
"@id/data_tip_line"
android:drawablePadding=
"@dimen/dp_10"
binding:layout_constraintTop_toTopOf=
"parent"
/>
android:text=
"@string/clear_data"
android:textSize=
"@dimen/main_btn_size"
<View
binding:layout_constraintStart_toEndOf=
"@+id/upload_btn"
android:id=
"@+id/unit_line"
binding:layout_constraintTop_toBottomOf=
"@+id/sync_line"
android:layout_width=
"match_parent"
binding:onClickCommand=
"@{viewModel.OnClearDataClickCommand}"
/>
android:layout_height=
"@dimen/dp_2"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_5"
android:layout_marginEnd=
"@dimen/dp_15"
android:background=
"#dcdee4"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/unit_tip_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/select_unit_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_breed"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/select_unit"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/unit_line"
binding:onClickCommand=
"@{viewModel.OnSelectUnitClickCommand}"
/>
<View
android:id=
"@+id/data_tip_line"
android:layout_width=
"@dimen/dp_2"
android:layout_height=
"@dimen/dp_13"
android:layout_marginStart=
"@dimen/dp_20"
android:layout_marginTop=
"@dimen/dp_15"
android:background=
"#18ba57"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/select_unit_btn"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/data_tip_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_11"
android:text=
"@string/data_entry"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_14"
binding:layout_constraintStart_toEndOf=
"@id/data_tip_line"
binding:layout_constraintTop_toBottomOf=
"@+id/select_unit_btn"
/>
<View
android:id=
"@+id/data_line"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_2"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_5"
android:layout_marginEnd=
"@dimen/dp_15"
android:background=
"#dcdee4"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/data_tip_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/marking_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_marking"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/marking"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"@+id/select_unit_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/data_line"
binding:onClickCommand=
"@{viewModel.OnMarkingClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/quarantine_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_quarantine"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/quarantine"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/marking_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/data_line"
binding:onClickCommand=
"@{viewModel.OnQuarantineClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/harmless_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/harmless"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/quarantine_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/data_line"
binding:onClickCommand=
"@{viewModel.OnHarmlessClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/villus_buy_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/villus_buy"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"@+id/select_unit_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/marking_btn"
binding:onClickCommand=
"@{viewModel.OnVillusBuyClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/villus_gauge_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/villus_gauge"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/villus_buy_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/marking_btn"
binding:onClickCommand=
"@{viewModel.OnVillusGaugeClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/villus_print_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/villus_print"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/villus_gauge_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/marking_btn"
binding:onClickCommand=
"@{viewModel.OnVillusPrintClickCommand}"
/>
<View
android:id=
"@+id/slaughter_tip_line"
android:layout_width=
"@dimen/dp_2"
android:layout_height=
"@dimen/dp_13"
android:layout_marginStart=
"@dimen/dp_20"
android:layout_marginTop=
"@dimen/dp_15"
android:background=
"#18ba57"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/villus_buy_btn"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/slaughter_tip_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_11"
android:text=
"@string/slaughter"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_14"
binding:layout_constraintStart_toEndOf=
"@id/data_tip_line"
binding:layout_constraintTop_toBottomOf=
"@+id/villus_buy_btn"
/>
<View
android:id=
"@+id/slaughter_line"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_2"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_5"
android:layout_marginEnd=
"@dimen/dp_15"
android:background=
"#dcdee4"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/slaughter_tip_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/slaughter_entry_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_marking"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/slaughter_entry"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"@+id/select_unit_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/slaughter_line"
binding:onClickCommand=
"@{viewModel.OnSlaughterEntryClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/slaughter_change_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_quarantine"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/quarantine"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/slaughter_entry_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/slaughter_line"
binding:onClickCommand=
"@{viewModel.OnQuarantineClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/slaughter_quarantine_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_harmless"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/harmless"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/slaughter_change_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/slaughter_line"
binding:onClickCommand=
"@{viewModel.OnHarmlessClickCommand}"
/>
<View
android:id=
"@+id/sync_tip_line"
android:layout_width=
"@dimen/dp_2"
android:layout_height=
"@dimen/dp_13"
android:layout_marginStart=
"@dimen/dp_20"
android:layout_marginTop=
"@dimen/dp_15"
android:background=
"#ff3c3c"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/slaughter_entry_btn"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/sync_tip_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_11"
android:text=
"@string/data_sync"
android:textColor=
"@color/black"
android:textSize=
"@dimen/sp_14"
binding:layout_constraintStart_toEndOf=
"@id/sync_tip_line"
binding:layout_constraintTop_toBottomOf=
"@+id/slaughter_entry_btn"
/>
<View
android:id=
"@+id/sync_line"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_2"
android:layout_marginStart=
"@dimen/dp_15"
android:layout_marginTop=
"@dimen/dp_5"
android:layout_marginEnd=
"@dimen/dp_15"
android:background=
"#dcdee4"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/sync_tip_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/download_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_download"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/download"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/sync_line"
binding:onClickCommand=
"@{viewModel.OnDownloadClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/upload_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_upload"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/upload"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/download_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/sync_line"
binding:onClickCommand=
"@{viewModel.OnUploadClickCommand}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/clear_data_btn"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_40"
android:layout_marginTop=
"@dimen/dp_10"
android:drawableTop=
"@mipmap/ic_clear"
android:drawablePadding=
"@dimen/dp_10"
android:text=
"@string/clear_data"
android:textSize=
"@dimen/main_btn_size"
binding:layout_constraintStart_toEndOf=
"@+id/upload_btn"
binding:layout_constraintTop_toBottomOf=
"@+id/sync_line"
binding:onClickCommand=
"@{viewModel.OnClearDataClickCommand}"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<include
<include
...
...
app/src/main/res/layout/activity_slaughter_entry.xml
0 → 100644
View file @
6e994d9c
<layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:binding=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/tools"
app:ignore=
"NamespaceTypo"
>
<data>
<variable
name=
"viewModel"
type=
"com.phlx.wool.ui.slaughter.vm.SlaughterEntryVM"
/>
<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=
"69dp"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/veterinary_selected_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/select_unit"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBaseline_toBaselineOf=
"@id/veterinary_edit"
binding:layout_constraintBottom_toTopOf=
"@+id/batch_selected_desc"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toTopOf=
"parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/veterinary_edit"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:background=
"@drawable/input_frame_bg"
android:gravity=
"center_vertical"
android:text=
"@={viewModel.entity.pastureUnitName}"
android:textSize=
"@dimen/edit_size"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toTopOf=
"parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/batch_selected_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/entry_batch"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBaseline_toBaselineOf=
"@id/batch_edit"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/veterinary_selected_desc"
binding:layout_constraintBottom_toTopOf=
"@+id/batch_day_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/batch_edit"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:background=
"@drawable/input_frame_bg"
android:gravity=
"center_vertical"
android:text=
"@={viewModel.entity.serialNo}"
android:textSize=
"@dimen/edit_size"
android:enabled=
"false"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/veterinary_edit"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/entry_day_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/entry_day"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBaseline_toBaselineOf=
"@id/entry_day_tv"
binding:layout_constraintBottom_toTopOf=
"@+id/l_variety_selected_desc"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/batch_selected_desc"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/entry_day_tv"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"match_parent"
android:layout_marginTop=
"@dimen/dp_5"
android:background=
"@drawable/input_frame_bg"
android:drawableEnd=
"@mipmap/ic_date_btn"
android:drawablePadding=
"@dimen/dp_3"
android:gravity=
"center_vertical"
android:hint=
"请选择进场日期"
android:text=
"@={viewModel.entity.entryDate}"
android:textSize=
"@dimen/edit_size"
binding:layout_constraintBottom_toTopOf=
"@+id/superior_division_sp"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/batch_edit"
binding:onClickCommand=
"@{viewModel.onEntryDateClick}"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/l_variety_selected_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/superior_pertain"
android:visibility=
"gone"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBottom_toTopOf=
"@+id/variety_selected_desc"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/entry_day_desc"
/>
<Spinner
android:id=
"@+id/superior_division_sp"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:minHeight=
"@dimen/dp_40"
android:visibility=
"gone"
android:spinnerMode=
"dialog"
binding:layout_constraintBottom_toTopOf=
"@+id/variety_sp"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/entry_day_tv"
/>
<!-- binding:itemDatas="@{viewModel.superiorPertainItemData}"-->
<!-- binding:onItemSelectedCommand="@{viewModel.onSuperiorPertainSelectorCommand}"-->
<!-- binding:valueReply="@{viewModel.entity.revision}"-->
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/variety_selected_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/pertain"
android:visibility=
"gone"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBottom_toTopOf=
"@+id/birth_place_desc"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/l_variety_selected_desc"
/>
<!-- app:items="@{viewModel.pertainItemData}"-->
<!-- binding:valueReply="@{viewModel.entity.revision}" -->
<androidx.appcompat.widget.AppCompatSpinner
android:id=
"@+id/division_sp"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:minHeight=
"@dimen/dp_40"
android:visibility=
"gone"
android:spinnerMode=
"dialog"
app:adapter=
"@{spinnerAdapter}"
binding:layout_constraintBottom_toTopOf=
"@+id/birth_place_edit"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/superior_division_sp"
/>
<!-- binding:itemDatas="@{viewModel.pertainItemData}"-->
<!-- binding:onItemSelectedCommand="@{viewModel.onPertainSelectorCommand}"-->
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/entry_count_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/entry_count"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBaseline_toBaselineOf=
"@id/entry_count_edit"
binding:layout_constraintBottom_toTopOf=
"@+id/weight_selected_desc"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/variety_selected_desc"
/>
<androidx.appcompat.widget.AppCompatEditText
android:id=
"@+id/entry_count_edit"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:background=
"@drawable/input_frame_bg"
android:hint=
"请输入进场数量"
android:maxLines=
"1"
android:inputType=
"number"
android:enabled=
"false"
android:text=
"@={viewModel.entity.entryNum}"
android:textSize=
"@dimen/edit_size"
binding:layout_constraintBottom_toTopOf=
"@+id/weight_edit"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/division_sp"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/weight_selected_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/person_in_charge"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBaseline_toBaselineOf=
"@id/weight_edit"
binding:layout_constraintBottom_toTopOf=
"@+id/breed_sheep_desc"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/entry_count_desc"
/>
<androidx.appcompat.widget.AppCompatEditText
android:id=
"@+id/weight_edit"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:background=
"@drawable/input_frame_bg"
android:hint=
"请输入负责人"
android:maxLines=
"1"
android:text=
"@={viewModel.entity.recorder}"
android:textSize=
"@dimen/edit_size"
binding:layout_constraintBottom_toTopOf=
"@+id/breed_sheep_cb"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/entry_count_edit"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/certificate_name_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/quarantine_certificate_name"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBaseline_toBaselineOf=
"@id/certificate_name_edit"
binding:layout_constraintBottom_toTopOf=
"@+id/twin_sheep_desc"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/weight_selected_desc"
/>
<androidx.appcompat.widget.AppCompatEditText
android:id=
"@+id/certificate_name_edit"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:background=
"@drawable/input_frame_bg"
android:hint=
"请输入检疫合格证姓名"
android:maxLines=
"1"
android:text=
"@={viewModel.entity.quarantineCertificateName}"
android:textSize=
"@dimen/edit_size"
binding:layout_constraintBottom_toTopOf=
"@+id/twin_sheep_cb"
binding:layout_constraintHorizontal_bias=
"0.0"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/weight_edit"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/certificate_idcard_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/quarantine_certificate_idcard"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintBaseline_toBaselineOf=
"@id/certificate_idcard_edit"
binding:layout_constraintBottom_toTopOf=
"@+id/twin_sheep_desc"
binding:layout_constraintStart_toStartOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/certificate_name_desc"
/>
<androidx.appcompat.widget.AppCompatEditText
android:id=
"@+id/certificate_idcard_edit"
android:layout_width=
"@dimen/dp_0"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_5"
android:background=
"@drawable/input_frame_bg"
android:hint=
"请输入负责人"
android:maxLines=
"1"
android:text=
"@={viewModel.entity.quarantineCertificateIdcard}"
android:textSize=
"@dimen/edit_size"
binding:layout_constraintBottom_toTopOf=
"@+id/twin_sheep_cb"
binding:layout_constraintHorizontal_bias=
"0.0"
binding:layout_constraintLeft_toLeftOf=
"@+id/marking_guideline_vertical"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/certificate_name_edit"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id=
"@+id/quarantine_photo_view"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_300"
android:src=
"@{viewModel.drawableImg}"
binding:onClickCommand=
"@{viewModel.quarantinePhotoOnClickCommand}"
binding:url=
"@{viewModel.entity.quarantineImgPath}"
binding:layout_constraintLeft_toLeftOf=
"parent"
binding:layout_constraintRight_toRightOf=
"parent"
binding:layout_constraintTop_toBottomOf=
"@+id/certificate_idcard_edit"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
app/src/main/res/layout/activity_upload.xml
View file @
6e994d9c
...
@@ -88,13 +88,26 @@
...
@@ -88,13 +88,26 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_20"
android:layout_marginTop=
"@dimen/dp_20"
android:checked=
"@{viewModel.isUploadVillusGauge}"
android:checked=
"@{viewModel.isUploadVillusGauge}"
android:text=
"@{viewModel.villus
gaugelabeln
um}"
android:text=
"@{viewModel.villus
GaugeLabelN
um}"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintStart_toStartOf=
"@id/marking_info_desc"
binding:layout_constraintStart_toStartOf=
"@id/marking_info_desc"
binding:layout_constraintTop_toBottomOf=
"@+id/quarantine_info_desc"
binding:layout_constraintTop_toBottomOf=
"@+id/quarantine_info_desc"
binding:onCheckedChangedCommand=
"@{viewModel.onUploadVillusGaugeCommand}"
/>
binding:onCheckedChangedCommand=
"@{viewModel.onUploadVillusGaugeCommand}"
/>
<androidx.appcompat.widget.AppCompatCheckBox
android:id=
"@+id/slaughter_entry_desc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_20"
android:layout_marginEnd=
"@dimen/dp_20"
android:checked=
"@{viewModel.isUploadSlaughterEntry}"
android:text=
"@{viewModel.slaughterEntryLabelNum}"
android:textColor=
"@color/black"
android:textSize=
"@dimen/desc_text_size"
binding:layout_constraintStart_toStartOf=
"@id/villus_buy_desc"
binding:layout_constraintTop_toBottomOf=
"@+id/villus_buy_desc"
binding:onCheckedChangedCommand=
"@{viewModel.onUploadSlaughterEntryCommand}"
/>
<View
<View
android:id=
"@+id/clear_line"
android:id=
"@+id/clear_line"
...
...
app/src/main/res/values/strings.xml
View file @
6e994d9c
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
<string
name=
"villus_buy"
>
绒毛收购
</string>
<string
name=
"villus_buy"
>
绒毛收购
</string>
<string
name=
"villus_gauge"
>
绒毛测量
</string>
<string
name=
"villus_gauge"
>
绒毛测量
</string>
<string
name=
"villus_print"
>
绒毛收购打印
</string>
<string
name=
"villus_print"
>
绒毛收购打印
</string>
<string
name=
"slaughter_entry"
>
屠宰进场
</string>
<string
name=
"download"
>
下载数据
</string>
<string
name=
"download"
>
下载数据
</string>
<string
name=
"upload"
>
上传数据
</string>
<string
name=
"upload"
>
上传数据
</string>
<string
name=
"re_login"
>
重新登录
</string>
<string
name=
"re_login"
>
重新登录
</string>
...
@@ -22,11 +23,17 @@
...
@@ -22,11 +23,17 @@
<string
name=
"select_unit"
>
养殖单位
</string>
<string
name=
"select_unit"
>
养殖单位
</string>
<string
name=
"veterinary"
>
兽医
</string>
<string
name=
"veterinary"
>
兽医
</string>
<string
name=
"buy_batch"
>
收购批次
</string>
<string
name=
"buy_batch"
>
收购批次
</string>
<string
name=
"entry_batch"
>
进场批次
</string>
<string
name=
"superior_pertain"
>
所属旗
</string>
<string
name=
"superior_pertain"
>
所属旗
</string>
<string
name=
"pertain"
>
所属苏木
</string>
<string
name=
"pertain"
>
所属苏木
</string>
<string
name=
"buy_day"
>
收购日期
</string>
<string
name=
"buy_day"
>
收购日期
</string>
<string
name=
"buy_weight"
>
收购重量
</string>
<string
name=
"buy_weight"
>
收购重量
</string>
<string
name=
"buy_factory"
>
收购厂家
</string>
<string
name=
"buy_factory"
>
收购厂家
</string>
<string
name=
"entry_day"
>
进场日期
</string>
<string
name=
"entry_count"
>
进场数量
</string>
<string
name=
"quarantine_certificate_img"
>
检疫合格证图片
</string>
<string
name=
"quarantine_certificate_name"
>
检疫合格证姓名
</string>
<string
name=
"quarantine_certificate_idcard"
>
检疫合格证身份证号
</string>
<string
name=
"person_in_charge"
>
负责人
</string>
<string
name=
"person_in_charge"
>
负责人
</string>
<string
name=
"gauge_day"
>
测量日期
</string>
<string
name=
"gauge_day"
>
测量日期
</string>
<string
name=
"diameter"
>
直径μm
</string>
<string
name=
"diameter"
>
直径μm
</string>
...
@@ -89,6 +96,7 @@
...
@@ -89,6 +96,7 @@
<string
name=
"disconnect_blue"
>
断开蓝牙
</string>
<string
name=
"disconnect_blue"
>
断开蓝牙
</string>
<string
name=
"dot"
>
.
</string>
<string
name=
"dot"
>
.
</string>
<string
name=
"data_entry"
>
数据采集
</string>
<string
name=
"data_entry"
>
数据采集
</string>
<string
name=
"slaughter"
>
屠宰
</string>
<string
name=
"data_sync"
>
数据同步
</string>
<string
name=
"data_sync"
>
数据同步
</string>
<string
name=
"unit"
>
养殖单位
</string>
<string
name=
"unit"
>
养殖单位
</string>
</resources>
</resources>
app/src/main/res/xml/file_paths.xml
0 → 100644
View file @
6e994d9c
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<external-path
name=
"external"
path=
""
/>
<files-path
name=
"files"
path=
""
/>
<cache-path
name=
"cache"
path=
""
/>
</paths>
</resources>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment