pile_nav_new/lib/pages/pass_track/controller.dart
2024-11-18 14:48:54 +08:00

152 lines
4.6 KiB
Dart

import 'dart:developer';
import 'package:cpnav/pages/setting/setting_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:cpnav/service/base.dart';
import 'package:intl/intl.dart';
import 'package:scence_map/controllers/controller.dart';
import 'package:scence_map/record_entity.dart';
import '../../main.dart';
import '../setting/project/model.dart';
SettingController settingController = Get.find<SettingController>();
class PassTrackController extends GetxController {
final mapController = Get.put(ScenceMapController());
Rx<RecordEntity?> selectedPilePoint = Rx<RecordEntity?>(null);
var updateCount = 0.obs;
var date = "2023-11-1".obs;
RecordEntity? currentPoint;
PassTrackController();
@override
void onInit() async {
super.onInit();
loadSideLine();
loadData();
ever(date, (val) {
loadData();
});
}
loadData() {
// loadBindDevice();
loadRcordList();
}
loadBindDevice() async {
ProjectModel? project = settingController.currentProject.value;
project ??= settingController.getproject();
if (project == null) {
return;
}
String projType = settingController.projType;
var binddevices = await services.getDeviceBind(projType, project.projCode);
for (var device in binddevices) {
var dev = DeviceItem.fromJson(device);
mapController.deviceList[dev.tid] = dev;
}
}
loadSideLine() async {
mapController.sideLinListeMap.clear();
ProjectModel? project = settingController.currentProject.value;
project ??= settingController.getproject();
if (project == null) {
return;
}
String projType = settingController.projType;
var data = await services.getSideLine(project.projCode, projType);
if (data == null) {
return;
}
double maxX = -double.infinity;
double maxY = -double.infinity;
double minX = double.infinity;
double minY = double.infinity;
var sideLineData = data as Map<String, dynamic>;
// var sideLineData = data;
sideLineData.forEach((group, items) {
for (var item in items) {
SideLineItem sideLineItem = SideLineItem.fromJson(item);
var sideLineList = mapController.sideLinListeMap[group];
if (sideLineList == null) {
sideLineList = [];
mapController.sideLinListeMap[group] = sideLineList;
}
sideLineList.add(sideLineItem);
if (sideLineItem.x > maxX) {
maxX = sideLineItem.x;
}
if (sideLineItem.y > maxY) {
maxY = sideLineItem.y;
}
if (sideLineItem.x < minX) {
minX = sideLineItem.x;
}
if (sideLineItem.y < minY) {
minY = sideLineItem.y;
}
}
});
if (maxX != -double.infinity &&
maxY != -double.infinity &&
minX != double.infinity &&
minY != double.infinity) {
mapController.centerXY = Offset((maxX + minX) / 2, (maxY + minY) / 2);
}
mapController.updateCount++;
}
loadRcordList() async {
mapController.recordList.length = 0;
ProjectModel? project = settingController.currentProject.value;
project ??= settingController.getproject();
if (project == null) {
return;
}
String projType = settingController.projType;
List record = await services.getRcordList(
project.orgCode, project.projCode, projType, date.value);
if (record.isNotEmpty) {
for (var i = 0; i < record.length; i++) {
RecordEntity item = RecordEntity.fromJson(record[i]);
if (currentPoint != null && (currentPoint!.tpId == item.tpId)) {
item.selected = true;
}
mapController.recordList.add(item);
}
if (currentPoint == null) {
mapController.centerXY = Offset(
mapController.recordList[mapController.recordList.length - 1].x,
mapController.recordList[mapController.recordList.length - 1].y);
} else {
mapController.centerXY = Offset(currentPoint!.x, currentPoint!.y);
}
//将地图或画布的中心定位到最新记录的位置上
} else {
String now = DateFormat('yyyy-MM-dd').format(DateTime.now());
if ((currentPoint == null && date.value == now) ||
(DateFormat('yyyy-MM-dd').format(currentPoint!.startTime) == now)) {
// log("${currentPoint?.startTime},now:$now");
scaffoldMessengerKey.currentState?.showSnackBar(
SnackBar(
content: Text('提示: ${date.value}暂无施工数据'),
duration: const Duration(seconds: 5),
backgroundColor: const Color.fromARGB(255, 230, 162, 60),
),
);
}
}
mapController.updateCount++;
}
}