GroupTableController.m 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. //
  2. // GroupTableControllerTableViewController.m
  3. // whosay
  4. //
  5. // Created by Fenix Wang on 2017/5/22.
  6. // Copyright © 2017年 DashGame. All rights reserved.
  7. //
  8. #import "GroupTableController.h"
  9. #import "NIMSDK/NIMSDK.h"
  10. #import "User.h"
  11. #import "GroupTableViewCell.h"
  12. #import "NIMSDK/NIMSDK.h"
  13. #import "NTESSessionViewController.h"
  14. #import "SVProgressHUD.h"
  15. #import <CoreLocation/CoreLocation.h>
  16. #import "AFNetworking/AFNetworking.h"
  17. #import "GroupMoreTableViewController.h"
  18. @interface GroupTableController () <CLLocationManagerDelegate>
  19. @property (nonatomic, strong) NSMutableArray *groupArr;
  20. @property(strong, nonatomic) CLLocationManager *locationManager;
  21. @end
  22. @implementation GroupTableController
  23. - (void)viewDidLoad {
  24. [super viewDidLoad];
  25. self.locationManager = [[CLLocationManager alloc] init];
  26. self.locationManager.delegate = self;
  27. self.locationManager.distanceFilter = 1.0;
  28. self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
  29. if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
  30. {
  31. [self.locationManager requestAlwaysAuthorization]; // 永久授权
  32. [self.locationManager requestWhenInUseAuthorization]; //使用中授权
  33. }
  34. [self.locationManager startUpdatingLocation];
  35. NSLog(@"check user data is saved %@", [User sharedInfo].mobile);
  36. }
  37. - (void)didReceiveMemoryWarning {
  38. [super didReceiveMemoryWarning];
  39. // Dispose of any resources that can be recreated.
  40. }
  41. -(void) viewWillAppear:(BOOL)animated{
  42. [super viewWillAppear:animated];
  43. NSLog(@"viewWillAppear %@", [User sharedInfo].mobile);
  44. UINavigationItem *navItem = self.parentViewController.navigationItem;
  45. navItem.title = @"群组";
  46. User *user = [User sharedInfo];
  47. NSString *title = @"请重试定位";
  48. if(![user.district isEqualToString:@""])
  49. {
  50. if([user.city isEqualToString:user.district])
  51. title = user.city;
  52. else
  53. title = [NSString stringWithFormat:@"%@%@", user.city, user.district];
  54. if(title.length > 6)
  55. {
  56. title = [NSString stringWithFormat:@"%@%@", [title substringWithRange:NSMakeRange(0, 6)], @"..."];
  57. }
  58. }
  59. UIButton *localBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  60. [localBtn setTitle:title forState:UIControlStateNormal];
  61. [localBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  62. [localBtn addTarget:self action:@selector(relocaltion) forControlEvents:UIControlEventTouchUpInside];
  63. [localBtn setImage:[UIImage imageNamed:@"交易帖_03 (4)"] forState:UIControlStateNormal];
  64. localBtn.imageEdgeInsets = UIEdgeInsetsMake(2, -5, 2, 5);
  65. localBtn.titleLabel.font = [UIFont systemFontOfSize: 15.0];
  66. [localBtn sizeToFit];
  67. UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
  68. spacer.width = -5;
  69. UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:localBtn];
  70. [navItem setLeftBarButtonItems:@[spacer, leftItem]];
  71. UIButton *createBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  72. [createBtn setTitle:@"创建" forState:UIControlStateNormal];
  73. [createBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  74. [createBtn addTarget:self action:@selector(createGroup:) forControlEvents:UIControlEventTouchUpInside];
  75. [createBtn sizeToFit];
  76. UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithCustomView:createBtn];
  77. [navItem setRightBarButtonItems:@[rightItem]];
  78. if(!self.groupArr)
  79. [self setDataList];
  80. if(user.districtRoomId && user.firstTimeJoin == YES)
  81. {
  82. user.firstTimeJoin = NO;
  83. [self startTeamChat:user.districtRoomId];
  84. }
  85. else
  86. {
  87. user.firstTimeJoin = NO;
  88. }
  89. }
  90. - (void) viewDidAppear:(BOOL)animated{
  91. [super viewDidAppear:animated];
  92. NSLog(@"viewDidAppear %@", [User sharedInfo].mobile);
  93. if([User sharedInfo].newCreateTeamId > 0)
  94. {
  95. [SVProgressHUD dismiss];
  96. [self gotoTeamChat:[NSString stringWithFormat:@"%d", [User sharedInfo].newCreateTeamId]];
  97. [User sharedInfo].newCreateTeamId = 0;
  98. }
  99. else
  100. {
  101. [self setDataList];
  102. [self.tableView reloadData];
  103. }
  104. }
  105. - (void) setDataList{
  106. NSMutableArray *myTeams = [[NSMutableArray alloc] init];
  107. User *user = [User sharedInfo];
  108. NIMTeam *team = [[[NIMSDK sharedSDK] teamManager] teamById:user.countryRoomId];
  109. NSString *desc = [NSString stringWithFormat:@"%ld%@", (long)team.memberNumber, @"人热聊中"];
  110. NSDictionary *county = @{@"cid":@"Group", @"name":@"国家群", @"desc":desc, @"sid":user.countryRoomId, @"avatar":@""};
  111. [myTeams addObject:county];
  112. if(![user.provinceRoomId isEqualToString:@""] && user.provinceRoomId != nil)
  113. {
  114. NIMTeam *team = [[[NIMSDK sharedSDK] teamManager] teamById:user.provinceRoomId];
  115. NSString *desc = [NSString stringWithFormat:@"%ld%@", (long)team.memberNumber, @"人热聊中"];
  116. NSString *sid = user.provinceRoomId;
  117. [myTeams addObject:@{@"cid":@"Group", @"name":user.province, @"desc":desc, @"sid":sid, @"avatar":@""}];
  118. }
  119. if(![user.cityRoomId isEqualToString:@""] && user.cityRoomId != nil && ![user.cityRoomId isEqualToString:user.provinceRoomId])
  120. {
  121. NIMTeam *team = [[[NIMSDK sharedSDK] teamManager] teamById:user.cityRoomId];
  122. NSString *desc = [NSString stringWithFormat:@"%ld%@", (long)team.memberNumber, @"人热聊中"];
  123. NSString *sid = user.cityRoomId;
  124. [myTeams addObject:@{@"cid":@"Group", @"name":user.city, @"desc":desc, @"sid":sid, @"avatar":@""}];
  125. }
  126. if(![user.districtRoomId isEqualToString:@""] && user.districtRoomId != nil && ![user.districtRoomId isEqualToString:user.cityRoomId])
  127. {
  128. NIMTeam *team = [[[NIMSDK sharedSDK] teamManager] teamById:user.districtRoomId];
  129. NSString *name = [NSString stringWithFormat:@"%@", user.district];
  130. NSString *desc = [NSString stringWithFormat:@"%ld%@", (long)team.memberNumber, @"人热聊中"];
  131. NSString *sid = user.districtRoomId;
  132. [myTeams addObject:@{@"cid":@"Group", @"name":name, @"desc":desc, @"sid":sid, @"avatar":@""}];
  133. }
  134. NSDictionary *more = @{@"cid":@"More"};
  135. NSDictionary *split = @{@"cid":@"Split"};
  136. NSDictionary *near = @{@"cid":@"Near"};
  137. NSDictionary *act = @{@"cid":@"Activity"};
  138. [myTeams addObjectsFromArray:@[more, split, near, act]];
  139. NSArray<NIMTeam *> *allMyTeams = [[NIMSDK sharedSDK] teamManager].allMyTeams;
  140. for(int i = 0; i < allMyTeams.count; i++ )
  141. {
  142. NIMTeam *team = [allMyTeams objectAtIndex:i];
  143. NSString *name = team.teamName == nil ? @"" : team.teamName;
  144. NSString *desc = [NSString stringWithFormat:@"%ld人热聊中", (long)team.memberNumber];
  145. NSString *sid = team.teamId;
  146. NSString *avatar = team.avatarUrl ? team.avatarUrl : @"";
  147. NSDictionary *teamData = @{@"cid":@"Group", @"name":name, @"desc":desc, @"sid":sid, @"avatar":avatar};
  148. [myTeams addObject:teamData];
  149. }
  150. self.groupArr = myTeams;
  151. }
  152. #pragma mark - Table view data source
  153. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  154. return 1;
  155. }
  156. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  157. return self.groupArr.count;
  158. }
  159. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  160. NSDictionary *cellData = [self.groupArr objectAtIndex:indexPath.row];
  161. NSString *cid = [cellData valueForKey:@"cid"];
  162. if([cid isEqualToString:@"Group"])
  163. return 80;
  164. else if([cid isEqualToString:@"More"])
  165. return 50;
  166. else if([cid isEqualToString:@"Split"])
  167. return 10;
  168. else if([cid isEqualToString:@"Near"])
  169. return 60;
  170. else if([cid isEqualToString:@"Activity"])
  171. return 40;
  172. return 0;
  173. }
  174. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  175. NSDictionary *cellData = [self.groupArr objectAtIndex:indexPath.row];
  176. NSString *cid = [cellData valueForKey:@"cid"];
  177. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cid forIndexPath:indexPath];
  178. if([cid isEqualToString:@"Group"])
  179. {
  180. GroupTableViewCell *groupCell = (GroupTableViewCell *)cell;
  181. [groupCell setData:cellData];
  182. }
  183. return cell;
  184. }
  185. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  186. {
  187. NSDictionary *cellData = [self.groupArr objectAtIndex:indexPath.row];
  188. NSString *cid = [cellData valueForKey:@"cid"];
  189. if([cid isEqualToString:@"Group"])
  190. {
  191. NSString *sid = [cellData objectForKey:@"sid"];
  192. if([sid isEqualToString:@""])
  193. {
  194. }
  195. else{
  196. [self gotoTeamChat:sid];
  197. }
  198. }
  199. else if([cid isEqualToString:@"More"])
  200. {
  201. if([User sharedInfo].province != nil)
  202. {
  203. UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
  204. GroupMoreTableViewController *next = (GroupMoreTableViewController *)[board instantiateViewControllerWithIdentifier:@"GroupMore"];
  205. [next showAllDistrict];
  206. [self.navigationController pushViewController:next animated:YES];
  207. }
  208. }
  209. else if([cid isEqualToString:@"Near"])
  210. {
  211. if([User sharedInfo].longitude != 0)
  212. {
  213. UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
  214. GroupMoreTableViewController *next = (GroupMoreTableViewController *)[board instantiateViewControllerWithIdentifier:@"GroupMore"];
  215. [next showNear:1];
  216. [self.navigationController pushViewController:next animated:YES];
  217. }
  218. }
  219. }
  220. /*
  221. // Override to support conditional editing of the table view.
  222. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
  223. // Return NO if you do not want the specified item to be editable.
  224. return YES;
  225. }
  226. */
  227. /*
  228. // Override to support editing the table view.
  229. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  230. if (editingStyle == UITableViewCellEditingStyleDelete) {
  231. // Delete the row from the data source
  232. [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
  233. } else if (editingStyle == UITableViewCellEditingStyleInsert) {
  234. // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
  235. }
  236. }
  237. */
  238. /*
  239. // Override to support rearranging the table view.
  240. - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
  241. }
  242. */
  243. /*
  244. // Override to support conditional rearranging of the table view.
  245. - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
  246. // Return NO if you do not want the item to be re-orderable.
  247. return YES;
  248. }
  249. */
  250. /*
  251. #pragma mark - Navigation
  252. // In a storyboard-based application, you will often want to do a little preparation before navigation
  253. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  254. // Get the new view controller using [segue destinationViewController].
  255. // Pass the selected object to the new view controller.
  256. }
  257. */
  258. - (IBAction)createGroup:(id)sender {
  259. [self performSegueWithIdentifier:@"createGroup" sender:self];
  260. }
  261. - (void)gotoTeamChat:(NSString *)teamId{
  262. if([[NIMSDK sharedSDK].teamManager isMyTeam:teamId])
  263. {
  264. [self startTeamChat:teamId];
  265. }
  266. else
  267. {
  268. [[NIMSDK sharedSDK].teamManager applyToTeam:teamId message:@"" completion:^(NSError * _Nullable error, NIMTeamApplyStatus applyStatus) {
  269. NSLog(@"applyToTeam error %@", error);
  270. if(!error && applyStatus == NIMTeamApplyStatusAlreadyInTeam)
  271. {
  272. [self startTeamChat:teamId];
  273. }
  274. }];
  275. }
  276. }
  277. - (void)startTeamChat:(NSString *)teamId
  278. {
  279. NIMSession *session = [NIMSession session:teamId type:NIMSessionTypeTeam];
  280. NTESSessionViewController *vc = [[NTESSessionViewController alloc] initWithSession:session];
  281. [self.navigationController pushViewController:vc animated:YES];
  282. }
  283. - (void)relocaltion{
  284. [self performSegueWithIdentifier:@"cityPicker" sender:self];
  285. }
  286. - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
  287. {
  288. [self.locationManager stopUpdatingLocation];
  289. NSLog(@"经度:%f", newLocation.coordinate.longitude);
  290. NSLog(@"纬度:%f", newLocation.coordinate.latitude);
  291. NSLog(@"速度:%f 米/秒", newLocation.speed);
  292. CLGeocoder * geocoder = [[CLGeocoder alloc] init];
  293. [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
  294. NSDictionary *locationInfo = [[NSDictionary alloc]init];
  295. for (CLPlacemark * placemark in placemarks) {
  296. locationInfo = [placemark addressDictionary];
  297. }
  298. NSLog(@"%@",locationInfo);
  299. }];
  300. User *user = [User sharedInfo];
  301. if(user.latitude != newLocation.coordinate.latitude || user.longitude != newLocation.coordinate.longitude)
  302. {
  303. user.longitude = newLocation.coordinate.longitude;
  304. user.latitude = newLocation.coordinate.latitude;
  305. [self coordinate2Location];
  306. }
  307. }
  308. - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
  309. {
  310. NSLog(@"localtion error %@", error);
  311. }
  312. - (void)coordinate2Location
  313. {
  314. User *user = [User sharedInfo];
  315. NSDictionary *parameters = @{@"id":[NSString stringWithFormat:@"%d", user.userId],
  316. @"longitude":[NSString stringWithFormat:@"%F", user.longitude],
  317. @"latitude":[NSString stringWithFormat:@"%F", user.latitude]
  318. };
  319. NSString *urlString = @"http://whosay.dashgame.com/index.php?m=who&c=index&a=coordinate_2_location";
  320. //请求的managers
  321. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  322. manager.responseSerializer = [AFJSONResponseSerializer new];
  323. manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
  324. __weak typeof(self) wself = self;
  325. NSLog(@"%@", parameters);
  326. //请求的方式:POST
  327. [manager POST:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
  328. [SVProgressHUD dismiss];
  329. NSLog(@"请求成功,服务器返回的信息%@", responseObject);
  330. NSDictionary * dic = responseObject;
  331. int code = [[dic valueForKey:@"c"] intValue];
  332. NSDictionary *data = (NSDictionary *)[dic objectForKey:@"d"];
  333. NSLog(@"Json解析结果 = %d %@", code, data);
  334. if(code == 0 && ([user.provinceRoomId isEqualToString:@""] || user.provinceRoomId == nil))
  335. {
  336. if([data objectForKey:@"province"])
  337. user.province = [data objectForKey:@"province"];
  338. if([data objectForKey:@"city"])
  339. user.city = [data objectForKey:@"city"];
  340. if([data objectForKey:@"district"])
  341. user.district = [data objectForKey:@"district"];
  342. if([data objectForKey:@"province_room_id"])
  343. user.provinceRoomId = [data objectForKey:@"province_room_id"];
  344. if([data objectForKey:@"city_room_id"])
  345. user.cityRoomId = [data objectForKey:@"city_room_id"];
  346. if([data objectForKey:@"district_room_id"])
  347. user.districtRoomId = [data objectForKey:@"district_room_id"];
  348. [wself setDataList];
  349. [wself.tableView reloadData];
  350. }
  351. } failure:^(NSURLSessionDataTask *task, NSError * error) {
  352. [SVProgressHUD dismiss];
  353. NSLog(@"请求失败,服务器返回的错误信息%@",error);
  354. }];
  355. }
  356. @end