You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

344 lines
13 KiB

//
// TrackViewController.m
// watch
//
// Created by xTT on 2017/7/13.
// Copyright © 2017xTT. All rights reserved.
//
#import "TrackViewController.h"
#import "NewTrackMsgCell.h"
//高德
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
@interface TrackViewController ()<AMapSearchDelegate,DZNEmptyDataSetSource,DZNEmptyDataSetDelegate>
@property (nonatomic, strong) AMapSearchAPI *searchAPI;
/**
这个是逆地理位置编码的请求的列表 和 LocateModel 对应
*/
@property (nonatomic, strong) NSMutableArray *AMapSearchList;
/**
需要上传的 解析完的 坐标点的 参数
*/
@property (nonatomic, strong) NSMutableArray *shouldUpdateLocateAddressList;
/**
需要上传的定位点的ID 集合列表
*/
@property (nonatomic, strong) NSMutableArray *shouldUpdateIDList;
@end
@implementation TrackViewController
-(NSMutableArray *)shouldUpdateIDList{
if(!_shouldUpdateIDList){
_shouldUpdateIDList = [NSMutableArray array];
}
return _shouldUpdateIDList;
}
-(NSMutableArray *)shouldUpdateLocateAddressList{
if(!_shouldUpdateLocateAddressList){
_shouldUpdateLocateAddressList = [NSMutableArray array];
}
return _shouldUpdateLocateAddressList;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.zx_hideBaseNavBar = YES;
//self.emptyText = @"暂无历史轨迹";
[self.myTableView registerNib:[UINib nibWithNibName:@"NewTrackMsgCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"NewTrackMsgCellID"];
//去线
self.myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.myTableView.mj_footer beginRefreshing];
self.myTableView.emptyDataSetSource = self;
self.myTableView.emptyDataSetDelegate = self;
//self.myTableView.estimatedRowHeight = 70;
self.view.backgroundColor = self.myTableView.backgroundColor;
//初始化 定位解析
self.searchAPI = [[AMapSearchAPI alloc] init];
self.searchAPI.delegate = self;
[self setUI];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
}
-(void)setUI{
Device * mainDevice = cUser.cDevice;
UIImage * defaImage ;
// self.headCollectionView.backgroundColor = [UICommon setGradientBackgroundColor:RGBA(255, 239, 232, 1) Color2:RGBA(255, 255, 255, 1) Width:ScreenWidth-30 Height:72];
[self.headCollectionView.layer addSublayer:[UICommon setGradualChangingColor:self.headCollectionView fromColor:RGBA(255, 239, 232, 1) toColor:RGBA(255, 255, 255, 1)]];
if([mainDevice.sex isEqualToString:@"girl"]){
//
defaImage = [myHelper getImageWithName: @"icon_girl_head_portrait_1"];
}else{
//
defaImage = [myHelper getImageWithName: @"icon_boy_head_portrait_1"];
}
//self.deviceImageView = [UIImageView new];
[self.headCollectionView addSubview:self.deviceImageView];
[self.headCollectionView addSubview:self.nameLabel];
[self.headCollectionView addSubview:self.allCountTrackLabel];
[self.headCollectionView addSubview:self.delectBtn];
[self.deviceImageView sd_setImageWithURL:[NSURL URLWithString:mainDevice.avator] placeholderImage:defaImage];
self.deviceImageView.layer.borderWidth = 1.5;
self.deviceImageView.layer.borderColor = KKWhiteColorColor.CGColor;
self.deviceImageView.layer.cornerRadius = self.deviceImageView.height/2;
self.deviceImageView.layer.masksToBounds = YES;
self.nameLabel.textColor = KKGrey153;
self.nameLabel.font = Font_(12);
self.nameLabel.text = mainDevice.name;
self.allCountTrackLabel.text = @"";
[self.delectBtn addTarget:self action:@selector(delectAction:) forControlEvents:UIControlEventTouchUpInside];
[UICommon ui_uiViewFillet:self.headCollectionView.bounds Viewdirection:PYUIdirectionTop toView:self.headCollectionView sizeMake:12];
}
- (void)delectAction:(UIButton*)sender{
WEAKSELF
CommonPopView *popView = [CommonPopView new];
[popView subPopView:popViewType_ycgj PopTitle:@"提示" PopText:@"确定删除轨迹?" okTouchBlock:^{
[Track delectTrackWithDailyIds:@[self.infoTrack.id] success:^(id responseObject) {
[weakSelf.myDataSource removeAllObjects];
[weakSelf.myTableView reloadData];
weakSelf.headCollectionView.hidden = YES;
weakSelf.infoTrack = nil;
//显示 无数据
if(weakSelf.delectBlockCall){
weakSelf.delectBlockCall();
}
xLog(@"删除轨迹点成功");
} failure:^{
xLog(@"删除轨迹点失败");
} ];
}];
}
- (void)loadWithInfoTrack:(Track*)track Back:(BlockCall)blockCall{
// [self.view getViewController]
if(!track){
self.headCollectionView.hidden = YES;
[self.myDataSource removeAllObjects];
[self.myTableView reloadData];
if(blockCall){
blockCall();
}
return;
}else{
self.headCollectionView.hidden = NO;
}
self.infoTrack = track;
NSString *tmp = [NSString stringWithFormat:@"%ld条轨迹",(long)track.amount.integerValue];
NSInteger lenght = tmp.length;
NSMutableAttributedString *att = [[NSMutableAttributedString alloc] initWithString:tmp];
[att addAttribute:NSForegroundColorAttributeName
value:mainColor
range:NSMakeRange(0,lenght-3)];
self.allCountTrackLabel.attributedText = att;
if(self.AMapSearchList){
[self.AMapSearchList removeAllObjects];
self.AMapSearchList = nil;
}
self.AMapSearchList = [NSMutableArray array];
WEAKSELF
[track getTrackInfoSuccess:^(NSMutableArray *arr) {
NSArray *tempArr = [arr copy];
[weakSelf.shouldUpdateIDList removeAllObjects];
for (int i=0; i<tempArr.count; i++) {
Locate * model = tempArr[i];
AMapReGeocodeSearchRequest *regeo = [[AMapReGeocodeSearchRequest alloc] init];
regeo.location = [AMapGeoPoint locationWithLatitude:[model.lat floatValue] longitude:[model.lon floatValue]];
[weakSelf.AMapSearchList addObject:regeo];
if ((model.address && model.address.length == 0 )|| model.address == nil){
[weakSelf.shouldUpdateIDList addObject:model.id];
}
}
[weakSelf.myDataSource removeAllObjects];
[weakSelf.myDataSource addObjectsFromArray:@[tempArr]];
[weakSelf.myTableView reloadData];
if(blockCall){
blockCall();
}
} failure:^(NSError *error){
if (!error) {
}
if(blockCall){
blockCall();
}
}];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
Locate *locate = self.myDataSource[indexPath.section][indexPath.row];
CGFloat hh = [self getCellheight:locate];
if (self.AMapSearchList.count > 0) {
AMapReGeocodeSearchRequest *regeo = self.AMapSearchList[indexPath.row];
if( (locate.address && locate.address.length == 0 )|| locate.address == nil){
[self.searchAPI AMapReGoecodeSearch:regeo];
}
}
NSString *dateStr = [myHelper getDateFormatWithStr:@"HH:mm"
date:[NSDate dateWithTimeIntervalSince1970:[locate.timestamp doubleValue]]];
// MARK: 增加停留时间 add by lsz 2021-06-24
long seconds = [locate.endtime integerValue] - [locate.timestamp integerValue];
NSString *stayTime = [self secondToTime:seconds];
NewTrackMsgCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewTrackMsgCellID" forIndexPath:indexPath];
if([self.myDataSource[indexPath.section] count] -1 == indexPath.row)
[UICommon ui_uiViewFillet:cell.bounds Viewdirection:PYUIdirectionBotton toView:cell sizeMake:12];
if([self.myDataSource[indexPath.section] count] == 1)
{
//,不绘制虚线
[cell setIconType:0 WithAddress:locate.address WithTime:dateStr CanShapeToView:NO StayTime:stayTime Cellheight:hh];
return cell;
}
if(indexPath.section == 0)
{
if (indexPath.row == 0)
{
[cell setIconType:2 WithAddress:locate.address WithTime:dateStr CanShapeToView:YES StayTime:stayTime Cellheight:hh];
}
else if([self.myDataSource[indexPath.section] count] -1 == indexPath.row)
{
[cell setIconType:0 WithAddress:locate.address WithTime:dateStr CanShapeToView:YES StayTime:stayTime Cellheight:hh];
}
else
{
[cell setIconType:1 WithAddress:locate.address WithTime:dateStr CanShapeToView:YES StayTime:stayTime Cellheight:hh];
}
}
return cell;
}
- (NSString *)secondToTime:(long)seconds {
long days = seconds/86400;
seconds = seconds%86400;
long hours = seconds/3600;
seconds = seconds%3600;
long minutes = ceil(seconds/60.0);
seconds = seconds%60;
if (days > 0) {
return [NSString stringWithFormat:@"停留 %zd 天 %zd 小时 %zd 分",days,hours,minutes];
} else if (hours > 0) {
return [NSString stringWithFormat:@"停留 %zd 小时 %zd 分",hours,minutes];
} else if(minutes > 0) {
return [NSString stringWithFormat:@"停留 %zd 分",minutes];
} else {
return @"0";
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
Locate *locate = self.myDataSource[indexPath.section][indexPath.row];
return [self getCellheight:locate];
}
/// 获取cell高度(根据内容动态计算)
- (CGFloat)getCellheight:(Locate *)locate
{
CGRect rect = [UICommon GetTextWidth:locate.address ViewHeight:ScreenWidth-32-123 fontSize:FontBold_(14) type:@"h"];
// MARK: 增加停留时间 add by lsz 2021-06-24
long seconds = [locate.endtime integerValue] - [locate.timestamp integerValue];
NSString *stayTime = [self secondToTime:seconds];
CGFloat hh = stayTime.length > 1 ? rect.size.height+20+5+35 : rect.size.height+40;
return hh;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewCellEditingStyleNone;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark ====高德地图位置解析回调====
-(void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response{
if (response.regeocode != nil)
{
NSString *name = response.regeocode.formattedAddress;
//解析response获取地址描述,具体解析见 Demo
// //获取市
// NSString *city = response.regeocode.addressComponent.city;
// NSString *province = response.regeocode.addressComponent.province;
// if(city && city.length>0){
// name = [name componentsSeparatedByString:city].lastObject;
// if([city isEqualToString:province]){
// //直辖市
// name = [NSString stringWithFormat:@"%@ %@",name,city];
// }else{
// //普通市
// name = [NSString stringWithFormat:@"%@ %@ %@",name,city,province];
// }
// }
if(self.AMapSearchList.count > 0){
NSInteger index = [self.AMapSearchList indexOfObject:request];
if(index != NSNotFound &&
self.myDataSource.count > 0 &&
index < [self.myDataSource[0] count]){
Locate * indexModel = self.myDataSource[0][index];
if([self.shouldUpdateIDList containsObject:indexModel.id]){
indexModel.address = name;
NSMutableDictionary *param = [NSMutableDictionary dictionary];
[param setValue:indexModel.id forKey:@"locationId"];
[param setValue:name forKey:@"address"];
[self.shouldUpdateLocateAddressList addObject:param];
[self.myTableView reloadData];
}
if (self.shouldUpdateLocateAddressList.count == self.shouldUpdateIDList.count){
//上传某天定位点 的 解析位置数据
WEAKSELF
[self.infoTrack postLocationsAddress:self.shouldUpdateLocateAddressList success:^(id responseObject) {
xLog(@"APP解析的 位置上传成功");
[weakSelf.shouldUpdateLocateAddressList removeAllObjects];
[weakSelf.shouldUpdateIDList removeAllObjects];
} failure:^{
[weakSelf.shouldUpdateLocateAddressList removeAllObjects];
[weakSelf.shouldUpdateIDList removeAllObjects];
xLog(@"APP解析的 位置上传失败");
}];
}
}
}
}
}
@end