152 lines
4.6 KiB
Dart
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++;
|
|
}
|
|
}
|