Commit 733d7006 authored by hywang's avatar hywang

1.添加系谱功能;

2.修改配种详情页面逻辑;
3.性能测定增加十字部高。
parent 275dee22
......@@ -37,7 +37,7 @@ class HttpUtils<T> {
_dio = Dio(options);
_dio.interceptors.add(TokenInterceptor());
_dio.interceptors
.add(PrettyDioLogger(requestHeader: true, requestBody: true, responseHeader: true, responseBody: true));
.add(PrettyDioLogger(requestHeader: true, requestBody: false, responseHeader: true, responseBody: false));
}
factory HttpUtils() {
......@@ -148,8 +148,8 @@ class HttpUtils<T> {
_handleResponse(response);
} catch (e) {
loading.dismissLoading();
DialogUtils.dismissDialog();
var exception = ApiException.from(e);
// DialogUtils.dismissDialog();
if (errorCallback != null) {
errorCallback!(e.toString(), exception.code ?? -1);
}
......
import 'dart:convert';
import '../generated/json/api_response.g.dart';
import '../generated/json/base/json_field.dart';
import 'api_response.g.dart';
@JsonSerializable()
class ApiResponse<T> {
......
class APIS{
static const baseUrl =
"http://192.168.8.135:9000/";
// "http://82.156.29.228:9000/";
// "http://serve.xlglmnmyzspt.org.cn/";
// "http://192.168.8.135:9000/";
"http://82.156.29.228:9000/";
// "http://serve.xlglmnmyzspt.org.cn";//正式old
// "http://serve.xlglzy.org.cn";//正式
/// 初始化游客token
static const initialize = "api/initialize";
......
import 'dart:convert';
import '../generated/json/base/json_convert_content.dart';
import 'api_response.dart';
import '../../api/api_response.dart';
import 'base/json_convert_content.dart';
ApiResponse<T> $ApiResponseFromJson<T>(Map<String, dynamic> json) {
final ApiResponse<T> apiResponse = ApiResponse<T>();
......
import 'dart:convert';
import 'package:anchor_collect_flutter/api/api_response.dart';
import 'json_convert_content.dart';
ApiResponse<T> $ApiResponseFromJson<T>(Map<String, dynamic> json) {
final ApiResponse<T> apiResponse = ApiResponse<T>();
final int? code = jsonConvert.convert<int>(json['code']);
if (code != null) {
apiResponse.code = code;
}
final String? msg = jsonConvert.convert<String>(json['msg']);
if (msg != null) {
apiResponse.msg = msg;
}
T? data;
data = jsonConvert.convert<T>(json['data']);
if (data != null) {
apiResponse.data = data;
}
return apiResponse;
}
ApiResponse<T> $ApiResponseFromJsonList<T>(Map<String, dynamic> json) {
final ApiResponse<T> apiResponse = ApiResponse<T>();
final int? code = jsonConvert.convert<int>(json['code']);
if (code != null) {
apiResponse.code = code;
}
final String? msg = jsonConvert.convert<String>(json['msg']);
if (msg != null) {
apiResponse.msg = msg;
}
List<T?>? data;
data = jsonConvert.convertList<T>(json['data']);
if (data != null) {
apiResponse.list = data;
}
return apiResponse;
}
Map<String, dynamic> $ApiResponseToJson(ApiResponse entity) {
final Map<String, dynamic> data = <String, dynamic>{};
data['code'] = entity.code;
data['msg'] = entity.msg;
data['data'] = entity.data.toJson();
data['list'] = entity.data.toJson();
return data;
}
extension ApiResponseExtension on ApiResponse {
ApiResponse copyWith({
int? code,
String? msg,
ApiResponseData? data,
}) {
return ApiResponse()
..code = code ?? this.code
..msg = msg ?? this.msg
..data = data ?? this.data
..list = list;
}
}
ApiResponseData $ApiResponseDataFromJson(Map<String, dynamic> json) {
final ApiResponseData apiResponseData = ApiResponseData();
return apiResponseData;
}
Map<String, dynamic> $ApiResponseDataToJson(ApiResponseData entity) {
final Map<String, dynamic> data = <String, dynamic>{};
return data;
}
extension ApiResponseDataExtension on ApiResponseData {}
......@@ -37,6 +37,10 @@ BreedingRecordDetailEntity $BreedingRecordDetailEntityFromJson(Map<String, dynam
if (frozenSemenBatch != null) {
breedingRecordDetailEntity.frozenSemenBatch = frozenSemenBatch;
}
final String? other = jsonConvert.convert<String>(json['other']);
if (other != null) {
breedingRecordDetailEntity.other = other;
}
final String? matingDate = jsonConvert.convert<String>(json['matingDate']);
if (matingDate != null) {
breedingRecordDetailEntity.matingDate = matingDate;
......@@ -106,6 +110,7 @@ Map<String, dynamic> $BreedingRecordDetailEntityToJson(BreedingRecordDetailEntit
data['registrationNo'] = entity.registrationNo;
data['individualNo'] = entity.individualNo;
data['frozenSemenBatch'] = entity.frozenSemenBatch;
data['other'] = entity.other;
data['matingDate'] = entity.matingDate;
data['isReturn'] = entity.isReturn;
data['backLoveDate'] = entity.backLoveDate;
......@@ -133,6 +138,7 @@ extension BreedingRecordDetailEntityExtension on BreedingRecordDetailEntity {
String? registrationNo,
String? individualNo,
String? frozenSemenBatch,
String? other,
String? matingDate,
String? isReturn,
String? backLoveDate,
......@@ -157,6 +163,7 @@ extension BreedingRecordDetailEntityExtension on BreedingRecordDetailEntity {
..registrationNo = registrationNo ?? this.registrationNo
..individualNo = individualNo ?? this.individualNo
..frozenSemenBatch = frozenSemenBatch ?? this.frozenSemenBatch
..other = other ?? this.other
..matingDate = matingDate ?? this.matingDate
..isReturn = isReturn ?? this.isReturn
..backLoveDate = backLoveDate ?? this.backLoveDate
......
......@@ -69,6 +69,54 @@ CattleResumeEntity $CattleResumeEntityFromJson(Map<String, dynamic> json) {
if (motherReg != null) {
cattleResumeEntity.motherReg = motherReg;
}
final String? ffNum = jsonConvert.convert<String>(json['ffNum']);
if (ffNum != null) {
cattleResumeEntity.ffNum = ffNum;
}
final String? fmNum = jsonConvert.convert<String>(json['fmNum']);
if (fmNum != null) {
cattleResumeEntity.fmNum = fmNum;
}
final String? mfNum = jsonConvert.convert<String>(json['mfNum']);
if (mfNum != null) {
cattleResumeEntity.mfNum = mfNum;
}
final String? mmNum = jsonConvert.convert<String>(json['mmNum']);
if (mmNum != null) {
cattleResumeEntity.mmNum = mmNum;
}
final String? fffNum = jsonConvert.convert<String>(json['fffNum']);
if (fffNum != null) {
cattleResumeEntity.fffNum = fffNum;
}
final String? ffmNum = jsonConvert.convert<String>(json['ffmNum']);
if (ffmNum != null) {
cattleResumeEntity.ffmNum = ffmNum;
}
final String? fmfNum = jsonConvert.convert<String>(json['fmfNum']);
if (fmfNum != null) {
cattleResumeEntity.fmfNum = fmfNum;
}
final String? fmmNum = jsonConvert.convert<String>(json['fmmNum']);
if (fmmNum != null) {
cattleResumeEntity.fmmNum = fmmNum;
}
final String? mffNum = jsonConvert.convert<String>(json['mffNum']);
if (mffNum != null) {
cattleResumeEntity.mffNum = mffNum;
}
final String? mfmNum = jsonConvert.convert<String>(json['mfmNum']);
if (mfmNum != null) {
cattleResumeEntity.mfmNum = mfmNum;
}
final String? mmfNum = jsonConvert.convert<String>(json['mmfNum']);
if (mmfNum != null) {
cattleResumeEntity.mmfNum = mmfNum;
}
final String? mmmNum = jsonConvert.convert<String>(json['mmmNum']);
if (mmmNum != null) {
cattleResumeEntity.mmmNum = mmmNum;
}
final double? fromMilkHeavy = jsonConvert.convert<double>(json['fromMilkHeavy']);
if (fromMilkHeavy != null) {
cattleResumeEntity.fromMilkHeavy = fromMilkHeavy;
......@@ -166,6 +214,18 @@ Map<String, dynamic> $CattleResumeEntityToJson(CattleResumeEntity entity) {
data['grade'] = entity.grade;
data['fatherReg'] = entity.fatherReg;
data['motherReg'] = entity.motherReg;
data['ffNum'] = entity.ffNum;
data['fmNum'] = entity.fmNum;
data['mfNum'] = entity.mfNum;
data['mmNum'] = entity.mmNum;
data['fffNum'] = entity.fffNum;
data['ffmNum'] = entity.ffmNum;
data['fmfNum'] = entity.fmfNum;
data['fmmNum'] = entity.fmmNum;
data['mffNum'] = entity.mffNum;
data['mfmNum'] = entity.mfmNum;
data['mmfNum'] = entity.mmfNum;
data['mmmNum'] = entity.mmmNum;
data['fromMilkHeavy'] = entity.fromMilkHeavy;
data['health'] = entity.health;
data['junHeavy'] = entity.junHeavy;
......@@ -206,6 +266,18 @@ extension CattleResumeEntityExtension on CattleResumeEntity {
String? grade,
String? fatherReg,
String? motherReg,
String? ffNum,
String? fmNum,
String? mfNum,
String? mmNum,
String? fffNum,
String? ffmNum,
String? fmfNum,
String? fmmNum,
String? mffNum,
String? mfmNum,
String? mmfNum,
String? mmmNum,
double? fromMilkHeavy,
String? health,
String? junHeavy,
......@@ -243,6 +315,18 @@ extension CattleResumeEntityExtension on CattleResumeEntity {
..grade = grade ?? this.grade
..fatherReg = fatherReg ?? this.fatherReg
..motherReg = motherReg ?? this.motherReg
..ffNum = ffNum ?? this.ffNum
..fmNum = fmNum ?? this.fmNum
..mfNum = mfNum ?? this.mfNum
..mmNum = mmNum ?? this.mmNum
..fffNum = fffNum ?? this.fffNum
..ffmNum = ffmNum ?? this.ffmNum
..fmfNum = fmfNum ?? this.fmfNum
..fmmNum = fmmNum ?? this.fmmNum
..mffNum = mffNum ?? this.mffNum
..mfmNum = mfmNum ?? this.mfmNum
..mmfNum = mmfNum ?? this.mmfNum
..mmmNum = mmmNum ?? this.mmmNum
..fromMilkHeavy = fromMilkHeavy ?? this.fromMilkHeavy
..health = health ?? this.health
..junHeavy = junHeavy ?? this.junHeavy
......
......@@ -73,6 +73,10 @@ PerformanceEntity $PerformanceEntityFromJson(Map<String, dynamic> json) {
if (crossWidth != null) {
performanceEntity.crossWidth = crossWidth;
}
final double? crossHeight = jsonConvert.convert<double>(json['crossHeight']);
if (crossHeight != null) {
performanceEntity.crossHeight = crossHeight;
}
final double? guanWei = jsonConvert.convert<double>(json['guanWei']);
if (guanWei != null) {
performanceEntity.guanWei = guanWei;
......@@ -167,6 +171,7 @@ Map<String, dynamic> $PerformanceEntityToJson(PerformanceEntity entity) {
data['chestDeep'] = entity.chestDeep;
data['waistWidth'] = entity.waistWidth;
data['crossWidth'] = entity.crossWidth;
data['crossHeight'] = entity.crossHeight;
data['guanWei'] = entity.guanWei;
data['eyeMuscleArea'] = entity.eyeMuscleArea;
data['grade'] = entity.grade;
......@@ -207,6 +212,7 @@ extension PerformanceEntityExtension on PerformanceEntity {
double? chestDeep,
double? waistWidth,
double? crossWidth,
double? crossHeight,
double? guanWei,
double? eyeMuscleArea,
String? grade,
......@@ -244,6 +250,7 @@ extension PerformanceEntityExtension on PerformanceEntity {
..chestDeep = chestDeep ?? this.chestDeep
..waistWidth = waistWidth ?? this.waistWidth
..crossWidth = crossWidth ?? this.crossWidth
..crossHeight = crossHeight ?? this.crossHeight
..guanWei = guanWei ?? this.guanWei
..eyeMuscleArea = eyeMuscleArea ?? this.eyeMuscleArea
..grade = grade ?? this.grade
......
......@@ -28,7 +28,7 @@ class BreedingRecordDetailEntity{
String? matingStyle;
/**
* 畜耳标号
* 畜耳标号
*/
String? cattleresumeId;
......@@ -39,10 +39,15 @@ class BreedingRecordDetailEntity{
String? individualNo;
/**
* 冻精批次号
* 冻精批id
*/
String? frozenSemenBatch;
/**
* 冻精批次号
*/
String? other;
/**
* 配种日期
*/
......
......@@ -52,12 +52,51 @@ class CattleResumeEntity {
/** 等级 */
String? grade;
/** 父登记号 */
/**
* 父登记号
*/
String? fatherReg;
/** 母登记号 */
String? motherReg;
/** 祖父号 */
String? ffNum;
/** 祖母号 */
String? fmNum;
/** 外祖父号 */
String? mfNum;
/** 外祖母号 */
String? mmNum;
/** 曾祖父 */
String? fffNum;
/** 曾祖母 */
String? ffmNum;
/** 曾外祖父 */
String? fmfNum;
/** 曾外祖母 */
String? fmmNum;
/** 外曾祖父 */
String? mffNum;
/** 外曾祖母 */
String? mfmNum;
/** 外曾外祖父 */
String? mmfNum;
/** 外曾外祖母 */
String? mmmNum;
/** 离乳重 */
double? fromMilkHeavy;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -22,7 +22,7 @@ class DictEntity {
String? dictLabel;
/** 字典键值 */
@Index(unique: true, replace: true)
// @Index(unique: true, replace: true)
String? dictValue;
/** 字典类型 */
......
......@@ -98,21 +98,7 @@ const DictEntitySchema = CollectionSchema(
deserialize: _dictEntityDeserialize,
deserializeProp: _dictEntityDeserializeProp,
idName: r'id',
indexes: {
r'dictCode': IndexSchema(
id: 7118880238269416410,
name: r'dictCode',
unique: true,
replace: true,
properties: [
IndexPropertySchema(
name: r'dictCode',
type: IndexType.hash,
caseSensitive: true,
)
],
)
},
indexes: {},
links: {},
embeddedSchemas: {},
getId: _dictEntityGetId,
......@@ -323,61 +309,6 @@ void _dictEntityAttach(IsarCollection<dynamic> col, Id id, DictEntity object) {
object.id = id;
}
extension DictEntityByIndex on IsarCollection<DictEntity> {
Future<DictEntity?> getByDictCode(String? dictCode) {
return getByIndex(r'dictCode', [dictCode]);
}
DictEntity? getByDictCodeSync(String? dictCode) {
return getByIndexSync(r'dictCode', [dictCode]);
}
Future<bool> deleteByDictCode(String? dictCode) {
return deleteByIndex(r'dictCode', [dictCode]);
}
bool deleteByDictCodeSync(String? dictCode) {
return deleteByIndexSync(r'dictCode', [dictCode]);
}
Future<List<DictEntity?>> getAllByDictCode(List<String?> dictCodeValues) {
final values = dictCodeValues.map((e) => [e]).toList();
return getAllByIndex(r'dictCode', values);
}
List<DictEntity?> getAllByDictCodeSync(List<String?> dictCodeValues) {
final values = dictCodeValues.map((e) => [e]).toList();
return getAllByIndexSync(r'dictCode', values);
}
Future<int> deleteAllByDictCode(List<String?> dictCodeValues) {
final values = dictCodeValues.map((e) => [e]).toList();
return deleteAllByIndex(r'dictCode', values);
}
int deleteAllByDictCodeSync(List<String?> dictCodeValues) {
final values = dictCodeValues.map((e) => [e]).toList();
return deleteAllByIndexSync(r'dictCode', values);
}
Future<Id> putByDictCode(DictEntity object) {
return putByIndex(r'dictCode', object);
}
Id putByDictCodeSync(DictEntity object, {bool saveLinks = true}) {
return putByIndexSync(r'dictCode', object, saveLinks: saveLinks);
}
Future<List<Id>> putAllByDictCode(List<DictEntity> objects) {
return putAllByIndex(r'dictCode', objects);
}
List<Id> putAllByDictCodeSync(List<DictEntity> objects,
{bool saveLinks = true}) {
return putAllByIndexSync(r'dictCode', objects, saveLinks: saveLinks);
}
}
extension DictEntityQueryWhereSort
on QueryBuilder<DictEntity, DictEntity, QWhere> {
QueryBuilder<DictEntity, DictEntity, QAfterWhere> anyId() {
......@@ -453,71 +384,6 @@ extension DictEntityQueryWhere
));
});
}
QueryBuilder<DictEntity, DictEntity, QAfterWhereClause> dictCodeIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IndexWhereClause.equalTo(
indexName: r'dictCode',
value: [null],
));
});
}
QueryBuilder<DictEntity, DictEntity, QAfterWhereClause> dictCodeIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IndexWhereClause.between(
indexName: r'dictCode',
lower: [null],
includeLower: false,
upper: [],
));
});
}
QueryBuilder<DictEntity, DictEntity, QAfterWhereClause> dictCodeEqualTo(
String? dictCode) {
return QueryBuilder.apply(this, (query) {
return query.addWhereClause(IndexWhereClause.equalTo(
indexName: r'dictCode',
value: [dictCode],
));
});
}
QueryBuilder<DictEntity, DictEntity, QAfterWhereClause> dictCodeNotEqualTo(
String? dictCode) {
return QueryBuilder.apply(this, (query) {
if (query.whereSort == Sort.asc) {
return query
.addWhereClause(IndexWhereClause.between(
indexName: r'dictCode',
lower: [],
upper: [dictCode],
includeUpper: false,
))
.addWhereClause(IndexWhereClause.between(
indexName: r'dictCode',
lower: [dictCode],
includeLower: false,
upper: [],
));
} else {
return query
.addWhereClause(IndexWhereClause.between(
indexName: r'dictCode',
lower: [dictCode],
includeLower: false,
upper: [],
))
.addWhereClause(IndexWhereClause.between(
indexName: r'dictCode',
lower: [],
upper: [dictCode],
includeUpper: false,
));
}
});
}
}
extension DictEntityQueryFilter
......
......@@ -86,6 +86,11 @@ class PerformanceEntity{
*/
double? crossWidth;
/**
* 十字部高(cm)
*/
double? crossHeight;
/**
* 管维(cm)
*/
......
This diff is collapsed.
......@@ -7,7 +7,8 @@ class SyncPageModel {
String title;
int? count;
int? errorCount;
int? allCount;
String? updateTime;
SyncPageModel(this.title,{ this.count = 0, this.errorCount = 0, this.updateTime = ''});
SyncPageModel(this.title,{ this.count = 0, this.errorCount = 0, this.allCount = 0, this.updateTime = ''});
}
import 'package:get/get.dart';
import 'begats_record_logic.dart';
class BegatsRecordBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => BegatsRecordLogic());
}
}
import 'package:anchor_collect_flutter/models/cattle_resume_entity.dart';
import 'package:anchor_collect_flutter/utils/dialog_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import '../../congifs.dart';
import '../../controllers/global_service.dart';
import '../../utils/sp_helper.dart';
import 'begats_record_state.dart';
class BegatsRecordLogic extends GetxController {
final BegatsRecordState state = BegatsRecordState();
late TextEditingController individualController;
late TextEditingController fatherRegController;
late TextEditingController motherRegController;
late TextEditingController ffNumController;
late TextEditingController fmNumController;
late TextEditingController mfNumController;
late TextEditingController mmNumController;
late TextEditingController fffNumController;
late TextEditingController ffmNumController;
late TextEditingController fmfNumController;
late TextEditingController fmmNumController;
late TextEditingController mffNumController;
late TextEditingController mfmNumController;
late TextEditingController mmfNumController;
late TextEditingController mmmNumController;
@override
void onInit() {
individualController = TextEditingController();
fatherRegController = TextEditingController();
motherRegController = TextEditingController();
ffNumController = TextEditingController();
fmNumController = TextEditingController();
mfNumController = TextEditingController();
mmNumController = TextEditingController();
fffNumController = TextEditingController();
ffmNumController = TextEditingController();
fmfNumController = TextEditingController();
fmmNumController = TextEditingController();
mffNumController = TextEditingController();
mfmNumController = TextEditingController();
mmfNumController = TextEditingController();
mmmNumController = TextEditingController();
Map<String, dynamic> arguments = Get.arguments;
state.entity.value = arguments['entity'];
individualController.text = state.entity.value.registrationNo ?? '';
fatherRegController.text = state.entity.value.fatherReg ?? '';
motherRegController.text = state.entity.value.motherReg ?? '';
ffNumController.text = state.entity.value.ffNum ?? '';
fmNumController.text = state.entity.value.fmNum ?? '';
mfNumController.text = state.entity.value.mfNum ?? '';
mmNumController.text = state.entity.value.mmNum ?? '';
fffNumController.text = state.entity.value.fffNum ?? '';
ffmNumController.text = state.entity.value.ffmNum ?? '';
fmfNumController.text = state.entity.value.fmfNum ?? '';
fmmNumController.text = state.entity.value.fmmNum ?? '';
mffNumController.text = state.entity.value.mffNum ?? '';
mfmNumController.text = state.entity.value.mfmNum ?? '';
mmfNumController.text = state.entity.value.mmfNum ?? '';
mmmNumController.text = state.entity.value.mmmNum ?? '';
}
Future<void> save() async {
if (state.entity == null) {
DialogUtils.showToast('牛只信息无效!');
return;
}
state.entity.value.fatherReg = fatherRegController.text ?? '';
state.entity.value.motherReg = motherRegController.text ?? '';
state.entity.value.ffNum = ffNumController.text ?? '';
state.entity.value.fmNum = fmNumController.text ?? '';
state.entity.value.mfNum = mfNumController.text ?? '';
state.entity.value.mmNum = mmNumController.text ?? '';
state.entity.value.fffNum = fffNumController.text ?? '';
state.entity.value.ffmNum = ffmNumController.text ?? '';
state.entity.value.fmfNum = fmfNumController.text ?? '';
state.entity.value.fmmNum = fmmNumController.text ?? '';
state.entity.value.mffNum = mffNumController.text ?? '';
state.entity.value.mfmNum = mfmNumController.text ?? '';
state.entity.value.mmfNum = mmfNumController.text ?? '';
state.entity.value.mmmNum = mmmNumController.text ?? '';
state.entity.value.updateTime = DateTime.now().toString();
state.entity.value.updateBy = SpHelper.getStorage(Config.SP_STR_USERNAME);
state.entity.value.deptId = SpHelper.getStorage(Config.SP_DEPT_ID);
state.entity.value.uploadStatus = '0';
await GlobalService.to.isar.writeTxn(() async => {
await GlobalService.to.isar.cattleResumeEntitys.put(state.entity.value),
});
DialogUtils.showToast('保存系谱成功');
Get.back();
}
}
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import '../../models/cattle_resume_entity.dart';
class BegatsRecordState {
late Rx<CattleResumeEntity> entity = CattleResumeEntity().obs;
BegatsRecordState() {
///Initialize variables
}
}
This diff is collapsed.
import 'package:anchor_collect_flutter/models/breeding_record_detail_entity.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:uuid/uuid.dart';
import 'package:flutter/material.dart';
import '../../../congifs.dart';
......@@ -16,29 +17,33 @@ import 'breeding_record_detail_state.dart';
class BreedingRecordDetailLogic extends GetxController {
final BreedingRecordDetailState state = BreedingRecordDetailState();
BreedingRecordDetailEntity? detailEntity;
BreedingRecordEntity? entity;
// 创建一个Uuid实例
var uuid = Uuid();
@override
void onReady() {
Map<String, dynamic> arguments = Get.arguments;
BreedingRecordDetailEntity? detailEntity = arguments['detailEntity'];
BreedingRecordEntity? entity = arguments['entity'];
detailEntity = arguments['detailEntity'];
entity = arguments['entity'];
if (entity == null) {
DialogUtils.showToast('数据信息问题');
Get.back(result: 'refresh');
} else {
if (detailEntity != null) {
state.entity.value = detailEntity;
state.entity.value = detailEntity!;
state.isModify = true;
state.unid = state.entity.value.unid!;
} else {
state.entity.value.unid = uuid.v4().hashCode.toString() + uuid.v4().hashCode.toString();
state.entity.value.cattleresumeId = entity.cattleresumeId;
state.entity.value.registrationNo = entity.registrationNo;
state.entity.value.individualNo = entity.individualNo;
state.entity.value.fUnid = entity.unid;
// state.entity.value.cattleresumeId = entity.cattleresumeId;
state.entity.value.registrationNo = entity!.registrationNo;
state.entity.value.individualNo = entity!.individualNo;
state.entity.value.fUnid = entity!.unid;
state.entity.value.matingStyle == '2';
}
refreshDictData();
}
......@@ -48,17 +53,21 @@ class BreedingRecordDetailLogic extends GetxController {
refreshDictData() async {
state.matingStyle =
await DictUtils.getDictName('zxgl_cattlemating_matingStyle', state.entity.value.matingStyle ?? '');
state.frozenSemenBatch =
await DictUtils.getDictName('zxgl_frozen_semen', state.entity.value.frozenSemenBatch ?? '');
// state.grade = await DictUtils.getDictName('zxgl_cattleresume_grade', state.entity.value.grade ?? '');
update();
}
calculateDueDate(String matingDate){
// DateFormat dateFormatter = DateFormat('yyyy-MM-dd');
// DateTime startDate = DateTime(2024, 1, 21);
// dateFormatter.add(const Duration(days: 128));
// final dateString = dateFormatter.format(matingDate),
// DateTime.parse(dateString).;
///计算预产期
calculateDueDate(String matingDate) {
DateTime startDate = DateTime.parse(matingDate);
int daysToAdd = 280;
DateTime endDate = startDate.add(Duration(days: daysToAdd));
String formattedEndDate = DateFormat('yyyy-MM-dd').format(endDate);
state.entity.value.dueDate = formattedEndDate;
update();
}
......@@ -88,26 +97,10 @@ class BreedingRecordDetailLogic extends GetxController {
}
Future<bool> checkRequiredFields() async {
if (!EmptyUtils.isStrNotEmpty(state.entity.value.cattleresumeId)) {
if (entity == null || !EmptyUtils.isStrNotEmpty(entity!.cattleresumeId)) {
DialogUtils.showToast('高频耳标或者可视耳标无效');
return true;
}
// if (!EmptyUtils.isStrNotEmpty(state.entity.individualNo)) {
// DialogUtils.showToast('必须填写可视耳标');
// return true;
// }
// if (!EmptyUtils.isStrNotEmpty(state.entity.photoPath) && !EmptyUtils.isStrNotEmpty(state.photoPath)) {
// DialogUtils.showToast('必须上传牛只拍照');
// return true;
// }
// if (!EmptyUtils.isStrNotEmpty(state.entity.circleNo)) {
// DialogUtils.showToast('必须选择圈舍');
// return true;
// }
// if (!EmptyUtils.isStrNotEmpty(state.entity.raiseType)) {
// DialogUtils.showToast('必须选择饲养类型');
// return true;
// }
if (!EmptyUtils.isStrNotEmpty(state.entity.value.matingDate)) {
DialogUtils.showToast('必须选择配种日期');
return true;
......@@ -116,26 +109,6 @@ class BreedingRecordDetailLogic extends GetxController {
DialogUtils.showToast('必须选择配种方式');
return true;
}
// if (state.entity.value.drugNumber == null ||state.entity.value.drugNumber == 0) {
// DialogUtils.showToast('必须填写用药数量');
// return true;
// }
// if (state.entity.birthHeavy == null || state.entity.birthHeavy == 0) {
// DialogUtils.showToast('必须填写出生重量');
// return true;
// }
// if (!EmptyUtils.isStrNotEmpty(state.entity.sex)) {
// DialogUtils.showToast('必须选择性别');
// return true;
// }
// if (!EmptyUtils.isStrNotEmpty(state.entity.status)) {
// DialogUtils.showToast('必须选择状态');
// return true;
// }
// if (!EmptyUtils.isStrNotEmpty(state.entity.colour)) {
// DialogUtils.showToast('必须填写犊牛毛色');
// return true;
// }
return false;
}
......@@ -149,6 +122,7 @@ class BreedingRecordDetailLogic extends GetxController {
state.entity.value.matingStyle = formerEntity.matingStyle;
state.entity.value.frozenSemenBatch = formerEntity.frozenSemenBatch;
state.entity.value.matingDate = formerEntity.matingDate;
state.entity.value.other = formerEntity.other;
state.entity.value.isReturn = formerEntity.isReturn;
state.entity.value.backLoveDate = formerEntity.backLoveDate;
state.entity.value.dueDate = formerEntity.dueDate;
......
......@@ -15,7 +15,10 @@ class BreedingRecordDetailState {
bool isModify = false;
bool isOther = false;
late String matingStyle='';
late String frozenSemenBatch='';
BreedingRecordDetailState() {
///Initialize variables
......
......@@ -16,7 +16,10 @@ class BreedingRecordDetailPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('配种详情'),
title: const Text('配种详情',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
),
......@@ -62,32 +65,101 @@ class BreedingRecordDetailPage extends StatelessWidget {
const SizedBox(
width: 10,
),
// getItemView(
// '配种方式',
// state.matingStyle ?? '',
// () async => {
// DialogUtils.showSingleListDialog(
// await DictUtils.getDictList('zxgl_cattlemating_matingStyle'),
// onPositive: (selectReslut) => {
// state.matingStyle = selectReslut.key,
// state.entity.value.matingStyle = selectReslut.value,
// if (selectReslut.value == '1')//1本交 2 受精
// {
// state.isMating = true,
// state.entity.value.frozenSemenBatch = '',
// state.frozenSemenBatch = '',
// state.entity.value.other = '',
// }
// else
// {
// state.isMating = false,
// state.entity.value.cattleresumeId = '',
// },
// logic.update(),
// }),
// }),
getItemView(
'冻精信息',
state.frozenSemenBatch ?? '',
() async => {
DialogUtils.showSingleListDialog(await DictUtils.getDictList('zxgl_frozen_semen'),
onPositive: (selectReslut) => {
state.frozenSemenBatch = selectReslut.key,
state.entity.value.frozenSemenBatch = selectReslut.value,
if (selectReslut.value == '1')
{
state.isOther = true,
state.entity.value.cattleresumeId = '',
}
else
{
state.isOther = false,
state.entity.value.other = '',
state.entity.value.cattleresumeId = selectReslut.key.substring(selectReslut.key.lastIndexOf('/')+1, selectReslut.key.length),
},
logic.update(),
}),
}),
getItemView(
'配种方式',
state.matingStyle ?? '',
() async => {
DialogUtils.showSingleListDialog(
await DictUtils.getDictList('zxgl_cattlemating_matingStyle'),
onPositive: (selectReslut) => {
state.matingStyle = selectReslut.key,
state.entity.value.matingStyle = selectReslut.value,
logic.update(),
}),
'冻精注册号',
state.entity.value.cattleresumeId ?? '',
() => {
// DialogUtils.showInputDialog(
// hintText: '输入冻精注册号',
// onPositive: (text) => {
// state.entity.value.cattleresumeId = text ?? '',
// logic.update(),
// }),
}),
],
),
),
Padding(
padding: const EdgeInsets.all(2.0),
child: Row(
children: [
const SizedBox(
width: 10,
),
getItemView(
'配种日期',
state.entity.value.matingDate ?? '',
'其它',
state.entity.value.other ?? '',
() => {
DialogUtils.showTimeDialog(
Get.context!,
isTime: false,
title: '请选择配种日期',
onPositive: (date) => {
state.entity.value.matingDate = date,
logic.calculateDueDate(date),
if (state.isOther)
{
DialogUtils.showInputDialog(
hintText: '输入冻精批次',
onPositive: (text) => {
state.entity.value.other = text ?? '',
logic.update(),
}),
},
),
}),
getItemView(
'配种日期',
state.entity.value.matingDate ?? '',
() => {
DialogUtils.showTimeDialog(
Get.context!,
isTime: false,
title: '请选择配种日期',
onPositive: (date) => {
state.entity.value.matingDate = date,
logic.calculateDueDate(date),
},
),
}),
],
),
),
......@@ -112,41 +184,30 @@ class BreedingRecordDetailPage extends StatelessWidget {
// },
// ),
}),
getItemView(
'冻精批次',
state.entity.value.frozenSemenBatch ?? '',
() => {
DialogUtils.showInputDialog(
hintText: '输入冻精批次',
onPositive: (text) => {
state.entity.value.frozenSemenBatch = text ?? '',
logic.update(),
}),
}),
],
),
),
Padding(
padding: const EdgeInsets.all(2.0),
child: Row(
children: [
const SizedBox(
width: 10,
),
getItemView(
'备注',
state.entity.value.remark ?? '',
() => {
// DialogUtils.showInputDialog(
// hintText: '输入备注',
// onPositive: (text) => {
// itemDateList[i].remark = text ?? '',
// update(),
// }),
}),
() => {
// DialogUtils.showInputDialog(
// hintText: '输入备注',
// onPositive: (text) => {
// itemDateList[i].remark = text ?? '',
// update(),
// }),
}),
],
),
),
// Padding(
// padding: const EdgeInsets.all(2.0),
// child: Row(
// children: [
// const SizedBox(
// width: 10,
// ),
// ],
// ),
// ),
const SizedBox(
height: 5,
),
......
......@@ -20,7 +20,10 @@ class BreedingRecordListPage extends StatelessWidget {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: const Text('配种列表'),
title: const Text('配种列表',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
......
......@@ -38,7 +38,7 @@ class BreedingRecordLogic extends GetxController {
} else {
///如果没有配种记录,先要查询一下
if (state.cattleResumeEntity != null) {
queryBreedingRecord('', '');
queryBreedingRecord(state.cattleResumeEntity?.registrationNo ?? '', state.cattleResumeEntity?.individualNo ?? '');
}
}
}
......@@ -57,8 +57,7 @@ class BreedingRecordLogic extends GetxController {
if (bre != null) {
copyEntity(bre);
queryBreedingRecordDetail();
} else {
///没有就创建新的
} else { ///没有就创建新的
CattleResumeEntity? cre = await GlobalService.to.isar.cattleResumeEntitys
.filter()
.optional(EmptyUtils.isStrNotEmpty(registrationNo), (q) => q.registrationNoEqualTo(registrationNo))
......@@ -70,6 +69,7 @@ class BreedingRecordLogic extends GetxController {
state.entity.value.cattleresumeId = cre.unid;
state.entity.value.registrationNo = cre.registrationNo;
state.entity.value.individualNo = cre.individualNo;
state.entity.value.deptId = SpHelper.getStorage(Config.SP_DEPT_ID);
update();
} else {
DialogUtils.showWarningDialog('无此标签数据!');
......@@ -89,7 +89,7 @@ class BreedingRecordLogic extends GetxController {
//查询出高频耳标和可视耳标
if (pageData != null) {
for (int i = 0; i < pageData!.length; i++) {
pageData[i].cattleresumeId = state.entity.value.cattleresumeId;
// pageData[i].cattleresumeId = state.entity.value.cattleresumeId;
pageData[i].registrationNo = state.entity.value.registrationNo;
pageData[i].individualNo = state.entity.value.individualNo;
}
......@@ -127,7 +127,9 @@ class BreedingRecordLogic extends GetxController {
if (!RfidPlugin.isInventory) {
RfidPlugin.startInventory((epc, agrs1) {
RfidPlugin.stopInventory();
print('why:epc:$epc');
if (kDebugMode) {
print('why:epc:$epc');
}
RfidPlugin.isInventory = false;
state.entity.value.registrationNo = epc;
state.entity.value.individualNo = '';
......@@ -183,11 +185,13 @@ class BreedingRecordLogic extends GetxController {
padding: const EdgeInsets.all(2.0),
child: Row(
children: [
getDialogItemView(
'配种方式',
await DictUtils.getDictName(
'zxgl_cattlemating_matingStyle', itemDateList[i].matingStyle ?? '')),
getDialogItemView('配种日期', itemDateList[i].matingDate ?? ''),
// getDialogItemView(
// '配种方式',
// await DictUtils.getDictName(
// 'zxgl_cattlemating_matingStyle', itemDateList[i].matingStyle ?? '')),
getDialogItemView('冻精信息', await DictUtils.getDictName(
'zxgl_frozen_semen', itemDateList[i].frozenSemenBatch ?? '')),
getDialogItemView('冻精注册号', itemDateList[i].cattleresumeId ?? ''),
],
),
),
......@@ -195,8 +199,8 @@ class BreedingRecordLogic extends GetxController {
padding: const EdgeInsets.all(2.0),
child: Row(
children: [
getDialogItemView('预产日期', itemDateList[i].dueDate ?? ''),
getDialogItemView('冻精批次', itemDateList[i].frozenSemenBatch ?? ''),
getDialogItemView('其它', itemDateList[i].other ?? ''),
getDialogItemView('配种日期', itemDateList[i].matingDate ?? ''),
],
),
),
......@@ -204,10 +208,18 @@ class BreedingRecordLogic extends GetxController {
padding: const EdgeInsets.all(2.0),
child: Row(
children: [
getDialogItemView('预产日期', itemDateList[i].dueDate ?? ''),
getDialogItemView('备注', itemDateList[i].remark ?? ''),
],
),
),
// Padding(
// padding: const EdgeInsets.all(2.0),
// child: Row(
// children: [
// ],
// ),
// ),
const SizedBox(
height: 5,
),
......@@ -264,6 +276,8 @@ class BreedingRecordLogic extends GetxController {
),
Text(
context,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: const TextStyle(
height: 1.5,
color: Colors.black,
......
......@@ -18,7 +18,10 @@ class BreedingRecordPage extends StatelessWidget {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: const Text('配种记录'),
title: const Text('配种记录',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
......
......@@ -20,7 +20,10 @@ class CattleResumeListPage extends StatelessWidget {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: const Text('基础信息列表'),
title: const Text('基础信息列表',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
......
......@@ -40,7 +40,7 @@ class CattleResumeLogic extends GetxController {
initCamera() {
// 初始化 CameraController
if (Config.cameras[0] != null) {
if (Config.cameras != null && Config.cameras[0] != null) {
Config.controller = CameraController(Config.cameras[0], ResolutionPreset.max);
Config.controller.initialize().then(
(_) {},
......@@ -85,6 +85,16 @@ class CattleResumeLogic extends GetxController {
}
}
forwardBegats() {
if (state.entity.value == null) {
DialogUtils.showToast('请扫描或填写耳标');
return;
}
Map<String, dynamic> params = {};
params.putIfAbsent("entity", () => state.entity.value);
Get.toNamed(AppRoute.BEGATS_RECORD, arguments: params);
}
save() async {
if (await checkRequiredFields()) {
return;
......
......@@ -22,9 +22,26 @@ class CattleResumePage extends StatelessWidget {
state.isCamera = false;
return Scaffold(
appBar: AppBar(
title: const Text('基础信息'),
title: const Text('基础信息',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
Padding(
padding: const EdgeInsets.all(5.0),
child: InkWell(
child: const Center(
child: Text('系谱',
style: TextStyle(
color: Colors.white,
),),
),
onTap: ()=>logic.forwardBegats(),
),
),
],
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
......
......@@ -13,7 +13,10 @@ class HomePage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('首页'),
title: const Text('首页',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
elevation: 10,
......
......@@ -22,7 +22,10 @@ class ImmuneBatchListPage extends StatelessWidget {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: const Text('免疫记录'),
title: const Text('免疫记录',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
......
......@@ -15,7 +15,10 @@ class ImmuneBatchPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('免疫记录'),
title: const Text('免疫记录',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
),
......
import 'package:get/get.dart';
import 'like_search_farmer_logic.dart';
class LikeSearchFarmerBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => LikeSearchFarmerLogic());
}
}
import 'package:get/get.dart';
import 'like_search_farmer_state.dart';
class LikeSearchFarmerLogic extends GetxController {
final LikeSearchFarmerState state = LikeSearchFarmerState();
}
class LikeSearchFarmerState {
LikeSearchFarmerState() {
///Initialize variables
}
}
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'like_search_farmer_logic.dart';
class LikeSearchFarmerPage extends StatelessWidget {
LikeSearchFarmerPage({Key? key}) : super(key: key);
final logic = Get.find<LikeSearchFarmerLogic>();
final state = Get.find<LikeSearchFarmerLogic>().state;
@override
Widget build(BuildContext context) {
return Container();
}
}
......@@ -29,9 +29,16 @@ class LoginLogic extends GetxController {
LoginLogic() {
groupValue = 0.obs;
nameController.text = '13932316000';
nameController.text =SpHelper.getStorage(Config.SP_STR_USERNAME)??'';
passwordController.text =SpHelper.getStorage(Config.SP_STR_PASSWORD)??'';
// nameController.text = '13932316000';
// nameController.text = 'ewei';
passwordController.text = '123456';
// passwordController.text = '123456';
// nameController.text = '13664793087';
// passwordController.text = 'Abgq3087@';
// nameController.text = '15047917803';
// passwordController.text = 'Tpsq7803*';
}
......@@ -95,7 +102,7 @@ class LoginLogic extends GetxController {
})
..onError((msg, code) {
// DialogUtils.showWarningDialog('登录失败:$msg');
DialogUtils.showToast('登录失败');
DialogUtils.showToast('登录失败:$msg');
return;
})
..build();
......@@ -117,8 +124,8 @@ class LoginLogic extends GetxController {
}
await GlobalService.to.isar.writeTxn(() async => {
await GlobalService.to.isar.dictEntitys.putAll(ListUtils.removeNullValues<DictEntity>(response)),
Get.offNamed(AppRoute.MAIN),
});
Get.offNamed(AppRoute.MAIN);
})
..onError((msg, code) {
DialogUtils.showWarningDialog('获取字典失败:$msg');
......
......@@ -21,7 +21,10 @@ class MedicalRecordListPage extends StatelessWidget {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: const Text('诊疗记录'),
title: const Text('诊疗记录',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
......
......@@ -17,7 +17,10 @@ class MedicalRecordPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('诊疗记录'),
title: const Text('诊疗记录',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
),
......
......@@ -12,7 +12,10 @@ class MessageDetailPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('消息详情'),
title: const Text('消息详情',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
),
......
......@@ -14,7 +14,10 @@ class MessageListPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('消息列表'),
title: const Text('消息列表',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
),
......
......@@ -14,7 +14,10 @@ class MessagePage extends StatelessWidget {
logic.getListData();
return Scaffold(
appBar: AppBar(
title: const Text('生产提醒'),
title: const Text('生产提醒',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
),
......
......@@ -19,7 +19,10 @@ class MinePage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('我的'),
title: const Text('我的',
style: TextStyle(
color: Colors.white,
),),
centerTitle: true,
backgroundColor: Colors.blue,
),
......
......@@ -20,7 +20,10 @@ class PerformanceListPage extends StatelessWidget {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: const Text('性能测定列表'),
title: const Text('性能测定列表',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
......
......@@ -18,7 +18,12 @@ class PerformancePage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('性能测定'),
title: const Text(
'性能测定',
style: TextStyle(
color: Colors.white,
),
),
backgroundColor: Colors.blue,
centerTitle: true,
),
......@@ -240,14 +245,14 @@ class PerformancePage extends StatelessWidget {
width: 10,
),
getItemView(
'腰角宽(cm)',
(state.entity.value.waistWidth ?? '').toString(),
'十字部高(cm)',
(state.entity.value.crossHeight ?? '').toString(),
() => {
DialogUtils.showInputDialog(
hintText: '输入牛只腰角宽',
hintText: '输入牛只十字部高度',
isNum: true,
onPositive: (text) => {
state.entity.value.waistWidth = double.tryParse(text ?? '0'),
state.entity.value.crossHeight = double.tryParse(text ?? '0'),
logic.update(),
}),
}),
......@@ -400,13 +405,14 @@ class PerformancePage extends StatelessWidget {
}),
}),
getItemView(
'繁殖成绩',
state.entity.value.breedRes ?? '',
'腰角宽(cm)',
(state.entity.value.waistWidth ?? '').toString(),
() => {
DialogUtils.showInputDialog(
hintText: '输入牛只繁殖成绩',
hintText: '输入牛只腰角宽',
isNum: true,
onPositive: (text) => {
state.entity.value.breedRes = text ?? '',
state.entity.value.waistWidth = double.tryParse(text ?? '0'),
logic.update(),
}),
}),
......@@ -458,6 +464,17 @@ class PerformancePage extends StatelessWidget {
const SizedBox(
width: 10,
),
getItemView(
'繁殖成绩',
state.entity.value.breedRes ?? '',
() => {
DialogUtils.showInputDialog(
hintText: '输入牛只繁殖成绩',
onPositive: (text) => {
state.entity.value.breedRes = text ?? '',
logic.update(),
}),
}),
getItemView(
'备注',
state.entity.value.remark ?? '',
......
......@@ -18,7 +18,10 @@ class SettingPage extends StatelessWidget {
return Scaffold(
appBar: AppBar(
title: const Text('设置'),
title: const Text('设置',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
),
......
......@@ -34,6 +34,8 @@ class SyncLogic extends GetxController {
if (state.isCattleResumeCompleteSync) {
state.dataList[0].count =
await GlobalService.to.isar.cattleResumeEntitys.filter().uploadStatusEqualTo('0').count();
state.dataList[0].allCount =
await GlobalService.to.isar.cattleResumeEntitys.filter().uploadStatusEqualTo('1').count();
state.dataList[0].errorCount =
await GlobalService.to.isar.cattleResumeEntitys.filter().uploadStatusEqualTo('2').count();
state.dataList[0].updateTime = SpHelper.getStorage(Config.SP_CATTLERESUME_UPDATE_TIME);
......@@ -42,6 +44,8 @@ class SyncLogic extends GetxController {
if (state.isPerformanceCompleteSync) {
state.dataList[1].count =
await GlobalService.to.isar.performanceEntitys.filter().uploadStatusEqualTo('0').count();
state.dataList[1].allCount =
await GlobalService.to.isar.performanceEntitys.filter().uploadStatusEqualTo('1').count();
state.dataList[1].errorCount =
await GlobalService.to.isar.performanceEntitys.filter().uploadStatusEqualTo('2').count();
state.dataList[1].updateTime = SpHelper.getStorage(Config.SP_PERFORMANCE_UPDATE_TIME);
......@@ -49,6 +53,8 @@ class SyncLogic extends GetxController {
if (state.isWeightManCompleteSync) {
state.dataList[2].count = await GlobalService.to.isar.weightManEntitys.filter().uploadStatusEqualTo('0').count();
state.dataList[2].allCount =
await GlobalService.to.isar.weightManEntitys.filter().uploadStatusEqualTo('1').count();
state.dataList[2].errorCount =
await GlobalService.to.isar.weightManEntitys.filter().uploadStatusEqualTo('2').count();
state.dataList[2].updateTime = SpHelper.getStorage(Config.SP_WEIGHT_MAN_UPDATE_TIME);
......@@ -57,6 +63,8 @@ class SyncLogic extends GetxController {
if (state.isMedicalRecordCompleteSync) {
state.dataList[3].count =
await GlobalService.to.isar.medicalRecordEntitys.filter().uploadStatusEqualTo('0').count();
state.dataList[3].allCount =
await GlobalService.to.isar.medicalRecordEntitys.filter().uploadStatusEqualTo('1').count();
state.dataList[3].errorCount =
await GlobalService.to.isar.medicalRecordEntitys.filter().uploadStatusEqualTo('2').count();
state.dataList[3].updateTime = SpHelper.getStorage(Config.SP_MEDICAL_RECORD_UPDATE_TIME);
......@@ -65,6 +73,8 @@ class SyncLogic extends GetxController {
if (state.isImmuneBatchCompleteSync) {
state.dataList[4].count =
await GlobalService.to.isar.immuneBatchEntitys.filter().uploadStatusEqualTo('0').count();
state.dataList[4].allCount =
await GlobalService.to.isar.immuneBatchEntitys.filter().uploadStatusEqualTo('1').count();
state.dataList[4].errorCount =
await GlobalService.to.isar.immuneBatchEntitys.filter().uploadStatusEqualTo('2').count();
state.dataList[4].updateTime = SpHelper.getStorage(Config.SP_IMMUNE_BATCH_UPDATE_TIME);
......@@ -73,6 +83,8 @@ class SyncLogic extends GetxController {
if (state.isImmuneBatchDetailCompleteSync) {
state.dataList[5].count =
await GlobalService.to.isar.immuneBatchDetailEntitys.filter().uploadStatusEqualTo('0').count();
state.dataList[5].allCount =
await GlobalService.to.isar.immuneBatchDetailEntitys.filter().uploadStatusEqualTo('1').count();
state.dataList[5].errorCount =
await GlobalService.to.isar.immuneBatchDetailEntitys.filter().uploadStatusEqualTo('2').count();
state.dataList[5].updateTime = SpHelper.getStorage(Config.SP_IMMUNE_BATCH_DETAIL_UPDATE_TIME);
......@@ -81,6 +93,8 @@ class SyncLogic extends GetxController {
if (state.isBreedingRecordCompleteSync) {
state.dataList[6].count =
await GlobalService.to.isar.breedingRecordEntitys.filter().uploadStatusEqualTo('0').count();
state.dataList[6].allCount =
await GlobalService.to.isar.breedingRecordEntitys.filter().uploadStatusEqualTo('1').count();
state.dataList[6].errorCount =
await GlobalService.to.isar.breedingRecordEntitys.filter().uploadStatusEqualTo('2').count();
state.dataList[6].updateTime = SpHelper.getStorage(Config.SP_BREEDING_RECORD_UPDATE_TIME);
......@@ -89,19 +103,30 @@ class SyncLogic extends GetxController {
if (state.isBreedingRecordDetailCompleteSync) {
state.dataList[7].count =
await GlobalService.to.isar.breedingRecordDetailEntitys.filter().uploadStatusEqualTo('0').count();
state.dataList[7].allCount =
await GlobalService.to.isar.breedingRecordDetailEntitys.filter().uploadStatusEqualTo('1').count();
state.dataList[7].errorCount =
await GlobalService.to.isar.breedingRecordDetailEntitys.filter().uploadStatusEqualTo('2').count();
state.dataList[7].updateTime = SpHelper.getStorage(Config.SP_BREEDING_RECORD_DETAIL_UPDATE_TIME);
}
if (state.isCattleResumeCompleteSync &&
state.isPerformanceCompleteSync &&
state.isWeightManCompleteSync &&
state.isMedicalRecordCompleteSync &&
state.isImmuneBatchCompleteSync &&
state.isImmuneBatchDetailCompleteSync &&
state.isBreedingRecordCompleteSync &&
state.isBreedingRecordDetailCompleteSync) {
if (
state.isCattleResumeCompleteSync
&&
state.isPerformanceCompleteSync
&&
state.isWeightManCompleteSync
&&
state.isMedicalRecordCompleteSync
&&
state.isImmuneBatchCompleteSync
&&
state.isImmuneBatchDetailCompleteSync
&&
state.isBreedingRecordCompleteSync
&&
state.isBreedingRecordDetailCompleteSync
) {
DialogUtils.dismissDialog();
}
......@@ -135,11 +160,12 @@ class SyncLogic extends GetxController {
..onResponseList((list) async {
List<String> ids = [];
if (kDebugMode) {
print('接收数量:${list.length}');
print('接收基础信息数量:${list.length}');
}
///保存图片
for (var e in list) {
e!.uploadStatus = '1';
ids.add(e!.unid.toString());
if (e.photo != null && e.photo!.isNotEmpty) {
e.photoPath = await Base64Utils.base64ToFile(e.photo!, e.unid ?? '');
......@@ -246,10 +272,11 @@ class SyncLogic extends GetxController {
..onResponseList((list) async {
List<String> ids = [];
if (kDebugMode) {
print('接收数量:${list.length}');
print('接收性能测定数量:${list.length}');
}
for (var e in list) {
e!.uploadStatus = '1';
ids.add(e!.unid.toString());
///保存数据库
......@@ -349,6 +376,7 @@ class SyncLogic extends GetxController {
}
for (var e in list) {
e!.uploadStatus = '1';
ids.add(e!.unid.toString());
///保存数据库
......@@ -448,6 +476,7 @@ class SyncLogic extends GetxController {
}
for (var e in list) {
e!.uploadStatus = '1';
ids.add(e!.unid.toString());
///保存数据库
......@@ -547,6 +576,7 @@ class SyncLogic extends GetxController {
}
for (var e in list) {
e!.uploadStatus = '1';
ids.add(e!.unid.toString());
///保存数据库
......@@ -646,6 +676,7 @@ class SyncLogic extends GetxController {
}
for (var e in list) {
e!.uploadStatus = '1';
ids.add(e!.unid.toString());
///保存数据库
......@@ -745,6 +776,7 @@ class SyncLogic extends GetxController {
}
for (var e in list) {
e!.uploadStatus = '1';
ids.add(e!.unid.toString());
///保存数据库
......@@ -844,6 +876,7 @@ class SyncLogic extends GetxController {
}
for (var e in list) {
e!.uploadStatus = '1';
ids.add(e!.unid.toString());
///保存数据库
......
......@@ -18,7 +18,10 @@ class SyncPage extends StatelessWidget {
return Scaffold(
appBar: AppBar(
title: const Text('数据同步'),
title: const Text('数据同步',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
......@@ -84,7 +87,7 @@ class SyncPage extends StatelessWidget {
List<Widget> list = [];
for (int i = 0; i < state.dataList.length; i++) {
list.add(ListTile(
title: Text(state.dataList[i].title),
title: Text('${state.dataList[i].title}-${state.dataList[i].allCount}'),
subtitle: GetBuilder<SyncLogic>(builder: (logic) {
return
// Text(
......
......@@ -22,7 +22,10 @@ class WeightManListPage extends StatelessWidget {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: const Text('称重记录'),
title: const Text('称重记录',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
actions: [
......
......@@ -16,7 +16,10 @@ class WeightManPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('称重'),
title: const Text('称重',
style: TextStyle(
color: Colors.white,
),),
backgroundColor: Colors.blue,
centerTitle: true,
),
......
import 'package:anchor_collect_flutter/pages/begats_record/begats_record_view.dart';
import 'package:anchor_collect_flutter/pages/breeding_record/breeding_record_binding.dart';
import 'package:anchor_collect_flutter/pages/breeding_record/breeding_record_detail/breeding_record_detail_binding.dart';
import 'package:anchor_collect_flutter/pages/breeding_record/breeding_record_detail/breeding_record_detail_view.dart';
......@@ -8,6 +9,8 @@ import 'package:anchor_collect_flutter/pages/immune_batch/immune_batch_binding.d
import 'package:anchor_collect_flutter/pages/immune_batch/immune_batch_list/immune_batch_list_binding.dart';
import 'package:anchor_collect_flutter/pages/immune_batch/immune_batch_list/immune_batch_list_view.dart';
import 'package:anchor_collect_flutter/pages/immune_batch/immune_batch_view.dart';
import 'package:anchor_collect_flutter/pages/like_search_farmer/like_search_farmer_binding.dart';
import 'package:anchor_collect_flutter/pages/like_search_farmer/like_search_farmer_view.dart';
import 'package:anchor_collect_flutter/pages/main/main_binding.dart';
import 'package:anchor_collect_flutter/pages/main/main_view.dart';
import 'package:anchor_collect_flutter/pages/medical_record/medical_record_binding.dart';
......@@ -28,6 +31,7 @@ import 'package:anchor_collect_flutter/pages/weight_man/weight_man_list/weight_m
import 'package:anchor_collect_flutter/pages/weight_man/weight_man_list/weight_man_list_view.dart';
import 'package:anchor_collect_flutter/pages/weight_man/weight_man_view.dart';
import 'package:get/get.dart';
import '../pages/begats_record/begats_record_binding.dart';
import '../pages/camera/camera_binding.dart';
import '../pages/camera/camera_view.dart';
import '../pages/cattle_resume/cattle_resume_binding.dart';
......@@ -99,6 +103,11 @@ abstract class AppPages {
page: () => CattleResumePage(),
binding: CattleResumeBinding(),
),
GetPage(
name: AppRoute.BEGATS_RECORD,
page: () => BegatsRecordPage(),
binding: BegatsRecordBinding(),
),
GetPage(
name: AppRoute.PERFORMANCE_LIST,
page: () => PerformanceListPage(),
......@@ -164,5 +173,10 @@ abstract class AppPages {
page: () => SettingPage(),
binding: SettingBinding(),
),
GetPage(
name: AppRoute.LIKE_SEARCH_FARMER,
page: () => LikeSearchFarmerPage(),
binding: LikeSearchFarmerBinding(),
),
];
}
......@@ -29,6 +29,9 @@ abstract class AppRoute {
/// 基础信息
static const CATTLE_RESUME = '/cattle/resume';
/// 系谱
static const BEGATS_RECORD = '/begats/record';
/// 性能测定列表
static const PERFORMANCE_LIST = '/performance/list';
......@@ -65,6 +68,9 @@ abstract class AppRoute {
/// 照相机
static const CAMERA = '/camera';
/// 模糊查询牧户
static const LIKE_SEARCH_FARMER = '/like/search/farmer';
/// 设置
static const SETTING = '/setting';
}
......@@ -23,7 +23,7 @@ class Base64Utils {
try {
Uint8List bytes = base64.decode(photo);
String fullPath = StorageUtils.getPath(unid ?? '');
print("local file full path ${fullPath}");
// print("local file full path ${fullPath}");
File file = File(fullPath);
await file.writeAsBytes(bytes);
} catch (e) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment