jiaPeiManager.m 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. //
  2. // jiaPeiManager.m
  3. // jiaPei
  4. //
  5. // Created by apple on 2016/12/26.
  6. // Copyright © 2016年 JCZ. All rights reserved.
  7. //
  8. #import "jiaPeiManager.h"
  9. #import "AFNetworking.h"
  10. #import "DES3Util.h"
  11. #import "DesUtil.h"
  12. @implementation jiaPeiManager
  13. + (NSDictionary *)getDicWithArray:(NSArray *)array
  14. {
  15. // NSLog(@"数组转字典-----><>%@",array);
  16. NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:array.count];
  17. if (!array) {
  18. return dic;
  19. }
  20. for (NSDictionary *dict in array) {
  21. [dic setValue:[dict.allValues firstObject] forKey:[dict.allKeys firstObject]];
  22. }
  23. return dic;
  24. }
  25. + (NSString *)getURLWithDict:(NSDictionary *)dic urlPre:(NSString *)urlP
  26. {
  27. //生成带有签名的URL
  28. NSString *httpUrl = defaultHttp;
  29. if (!isOfficial) {
  30. httpUrl = defaultHttp2;
  31. }
  32. NSString *urlDefault = defaultHttpUrl;
  33. //公共请求
  34. NSArray *commonArray = @[@"getAppAdsNew", //广告
  35. @"getMyYuyueInfos", //获取自主预约
  36. @"getMessageInfos", //我的系统消息
  37. @"getTeachTypes", //获取日志类型
  38. @"getMyTeachLogs", //获取日志
  39. @"stuXXList", //获取休学记录
  40. @"getMyReserveOrders", //获取订单
  41. // @"uploadReserveComplaints", //获取投诉
  42. @"getOrderComplaintsByClassId" //根据课堂ID和投诉用户ID查询投诉
  43. ];
  44. if ([commonArray containsObject:urlP]) {
  45. urlDefault = defaultCommonUrl;
  46. }
  47. //计时相关
  48. NSArray *trainArray = @[@"getCoachSignForTrain", //获取教练当天签到状态
  49. @"getSignRecords", //获取教练签到记录
  50. @"getCoachSignStuRecords", //获取学员签到列表
  51. @"uploadSignOutOrClassRecord", //签退并上传学时汇总
  52. @"uploadAppTrainSingle", //分钟学时及GPS点上传
  53. @"uploadAppTrainPl", //分钟学时批量上传
  54. @"takePhoto", //学员签到/签退/随机拍照
  55. @"uploadStuSign", //学员签到
  56. @"doTeach", //我要带教
  57. @"saveCoachSignOut", //教练员签退
  58. @"saveCoachSignIn", //教练员签到
  59. @"doDeviceLogOut", //终端注销
  60. @"doDeviceReg", //终端注册
  61. @"getPrice", //培训价格
  62. @"delLogStudent", //霸王签退
  63. @"uploadReserveOrder", //计划生成订单
  64. @"delReserveOrder", //删除计划订单
  65. @"uploadBindStuImei", //学员手机设备绑定
  66. @"getEvaluationCoachList", //教练获得的评价栏目数
  67. @"doComplaint", //学时投诉
  68. @"doEvaluation", //学时评论
  69. @"getTrainFinish", //获取已完成学时
  70. @"getEvaluationList", //查看学时评论
  71. @"getStuSignFlag", //获取当前学员签到状态
  72. @"forceSignOut", //用classid直接汇总
  73. @"uploadMnStuLogin", //模拟计时签到
  74. @"uploadMnSignOut" //模拟计时签退
  75. ];
  76. if ([trainArray containsObject:urlP]) {
  77. urlDefault = defaultTrainUrl;
  78. }
  79. if ([urlP isEqualToString:@"takePhoto"]) {
  80. urlDefault = defaultUploadUrl;
  81. }
  82. NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒
  83. NSString *urlS = @"";
  84. if (dic == nil) {
  85. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&user=ios",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI]];
  86. }else{
  87. //添加key字段
  88. NSMutableString *contentString = [NSMutableString stringWithString:[self getSignStringWithDictionary:dic]];
  89. [contentString appendFormat:@"key=%@", [NSString stringWithFormat:@"%.0f",timeI]];
  90. // NSString *strUrl1 = [contentString stringByReplacingOccurrencesOfString:@" " withString:@""];
  91. // NSString *strUrl2 = [strUrl1 stringByReplacingOccurrencesOfString:@"\t" withString:@""];
  92. // NSString *strUrl3 = [strUrl2 stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  93. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&sign=%@&user=ios",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI],[[contentString md5Encrypt] uppercaseString]];
  94. //NSLog(@"urlS----><>%@----><>%@",strUrl3,urlS);
  95. }
  96. return urlS;
  97. }
  98. + (NSString *)getSignStringWithDictionary:(NSDictionary *)dic
  99. {
  100. NSMutableString *contentString =[NSMutableString string];
  101. NSDictionary* dict = [NSDictionary dictionaryWithDictionary:dic];
  102. NSArray *keys = [dict allKeys];
  103. //按字母顺序排序
  104. NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  105. return [obj1 compare:obj2 options:NSNumericSearch];
  106. }];
  107. //拼接字符串
  108. for (NSString *categoryId in sortedArray) {
  109. if (![categoryId isEqualToString:@"sign"] && ![categoryId isEqualToString:@"timestamp"]){
  110. if([categoryId isEqualToString:@"biz_content"]){
  111. NSError *error = nil;
  112. NSDictionary* bizDict = [dict objectForKey:@"biz_content"];
  113. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bizDict options:NSJSONWritingPrettyPrinted error: &error];
  114. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
  115. NSString* jsonString1 = [[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding];
  116. NSString *jsonString2 = [jsonString1 stringByReplacingOccurrencesOfString:@" : " withString:@":"];
  117. [contentString appendFormat:@"biz_content=%@&",jsonString2];
  118. }else{
  119. [contentString appendFormat:@"%@=%@&", categoryId, [dict valueForKey:categoryId]];
  120. }
  121. }
  122. }
  123. return contentString;
  124. }
  125. //dic > string
  126. + (NSString *)dictionaryToJsonString:(NSDictionary *)dic
  127. {
  128. NSError *parseError = nil;
  129. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
  130. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  131. }
  132. //jsonString > dic
  133. + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
  134. if (jsonString == nil) {
  135. return nil;
  136. }
  137. NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
  138. NSError *err;
  139. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
  140. options:NSJSONReadingMutableContainers
  141. error:&err];
  142. if(err) {
  143. NSLog(@"json解析失败:%@",err);
  144. ShowMsg([NSString stringWithFormat:@"数据解析失败,%@",err]);
  145. return nil;
  146. }
  147. return dic;
  148. }
  149. + (void)requestAnythingWithURL:(NSString *)urlString array:(NSArray *)aAarray data:(NSData *)uplownData completion:(MyBlockType)finishBlock
  150. {
  151. if (uplownData) {//有媒体数据上传的请求
  152. NSString *httpUrl = isOfficial == YES?defaultHttp:defaultHttp2;
  153. NSString *defaultUpload = defaultUploadUrl;
  154. NSString *urlS = [NSString stringWithFormat:@"%@%@%@",httpUrl,defaultUpload,urlString];
  155. [urlS stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  156. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  157. afSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
  158. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  159. afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
  160. afSessionManager.requestSerializer.timeoutInterval = 40;
  161. [afSessionManager POST:urlS parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  162. int k = 0;
  163. for (NSData *uplownData in aAarray) {
  164. NSString *typeString = [Tools typeForImageData:uplownData];
  165. NSString *fileType = [NSString stringWithFormat:@"image.%@",typeString];
  166. NSString *mimeType = [NSString stringWithFormat:@"image/%@",typeString];
  167. k ++;
  168. [formData appendPartWithFileData:uplownData
  169. name:[NSString stringWithFormat:@"photo%d",k]
  170. fileName:fileType
  171. mimeType:mimeType];
  172. }
  173. } progress:^(NSProgress * _Nonnull uploadProgress) {
  174. //NSLog(@"uploadProgress----><>%@-----><>%@",urlS,uploadProgress);
  175. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  176. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  177. options:NSJSONReadingMutableContainers
  178. error:nil];
  179. //请求成功
  180. //NSLog(@"上传图片-----><>%@----><>%@",urlS,dic);
  181. RemoveHUD();
  182. finishBlock(dic);
  183. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  184. //请求失败
  185. NSLog(@"上传---><>%@",error);
  186. RemoveHUD();
  187. //失败的时候 要把失败的事情传输回去
  188. NSDictionary *dic = nil;
  189. finishBlock(dic);
  190. }];
  191. }else{//无媒体数据上传的请求
  192. NSDictionary *dic = [jiaPeiManager getDicWithArray:aAarray];
  193. if (aAarray == nil) {
  194. dic = nil;
  195. }
  196. //生成请求加密后的url
  197. NSString *urlS = [jiaPeiManager getURLWithDict:dic urlPre:urlString];
  198. //@lee-mark
  199. if (![urlString isEqualToString:@"getSchInfoListByTujian"]) {
  200. NSLog(@"发起请求---urlString---><>%@--->\n%@",urlString,dic);
  201. }
  202. //设置请求管理器
  203. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  204. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  205. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  206. afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
  207. afSessionManager.requestSerializer.timeoutInterval = 15;
  208. [afSessionManager POST:urlS parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  209. //请求成功
  210. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  211. options:NSJSONReadingMutableContainers
  212. error:nil];
  213. //@lee-mark
  214. if (![urlString isEqualToString:@"getSchInfoListByTujian"]) {
  215. NSLog(@"请求成功123---urlString---><>%@--->\n%@",urlString,dic);
  216. }
  217. finishBlock(dic);
  218. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  219. //请求失败
  220. NSLog(@"请求失败123----><>%@",error);
  221. RemoveHUD();
  222. //失败的时候 要把失败的事情传输回去
  223. NSDictionary *dic = nil;
  224. finishBlock(dic);
  225. }];
  226. }
  227. }
  228. + (void)requestGetAnythingWithURL:(NSString *)urlString completion:(MyBlockType)finishBlock
  229. {
  230. //生成请求加密后的url
  231. NSString *urlS = [jiaPeiManager getURLWithDict:nil urlPre:urlString];
  232. NSLog(@"-----><>%@--------><>%@",urlString,urlS);
  233. //设置请求管理器
  234. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  235. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  236. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  237. [afSessionManager GET:urlS parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  238. //NSLog(@"请求返回123-------><>%@",responseObject);
  239. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  240. options:NSJSONReadingMutableContainers
  241. error:nil];
  242. //NSLog(@"请求返回123---------><>%@",dic);
  243. finishBlock(dic);
  244. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  245. //请求失败
  246. NSLog(@"请求失败123----><>%@",error);
  247. //失败的时候 要把失败的事情传输回去 @{@"code":@"1",@"body":@"请求失败"}
  248. NSDictionary *dic = nil;
  249. finishBlock(dic);
  250. }];
  251. }
  252. #pragma mark 公共请求
  253. +(void)requestADImage
  254. {
  255. if (![Util connectedToNetWork]) {
  256. NSString *filePath = [Tools getPathWithFileName:@"ads.plist"];
  257. if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
  258. NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
  259. myDelegate.adArray = arr;
  260. }
  261. }
  262. NSMutableArray *arr=[NSMutableArray array];
  263. [arr addPro:@"type" Value:@"5"];
  264. NSString* method = @"getAppAdsNew";
  265. [jiaPeiManager requestAnythingWithURL:method array:arr data:nil completion:^(NSDictionary *root) {
  266. RemoveHUD();
  267. if (!root || [root[@"code"] isEqualToString:@"1"]) {
  268. //如果没广告图片 就从这里获取
  269. NSString *filePath = [Tools getPathWithFileName:@"ads.plist"];
  270. if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
  271. NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
  272. myDelegate.adArray = arr;
  273. }
  274. }else{
  275. //有广告 就更新本地广告
  276. if ([root[@"body"] count] > 0) {
  277. myDelegate.adArray = root[@"body"];
  278. NSString *filePath = [Tools getPathWithFileName:@"ads.plist"];
  279. [root[@"body"] writeToFile:filePath atomically:YES];
  280. }
  281. }
  282. //这个判断是否可以在广告加载钱接收到广告 其实和放另一个地方是一样的效果
  283. NSMutableArray *array = [NSMutableArray array];
  284. for (NSDictionary *dic in myDelegate.adArray) {
  285. if ([dic[@"LOCATION"] isEqualToString:@"1"]) {
  286. [array addObject:dic[@"IMG"]];
  287. }
  288. }
  289. defUser.adPaths = array;
  290. [[NSNotificationCenter defaultCenter] postNotificationName:@"updateAD" object:@"isSuccess"];
  291. }];
  292. }
  293. /**主要是为了更新用户数据.
  294. 比如上传头像后
  295. */
  296. +(void)reLoginWithCompletion:(BlockTypeVo)finishBlcok
  297. {
  298. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
  299. NSMutableArray *arr=[NSMutableArray array];
  300. NSDictionary *udDic = [ud objectForKey:@"jiaPeiLoginTest"];
  301. if ([udDic[@"loginType"] isEqualToString:@"1"]) {
  302. [arr property:defUser.sfzmhm forKey:@"loginCode"];
  303. [arr property:defUser.userDict[@"password"] forKey:@"password"];
  304. [arr property:@"" forKey:@"openId"]; //如果是第三方登录 填写token nickName
  305. [arr property:@"" forKey:@"nickName"]; //如果是第三方登录 填写获取到的昵称
  306. [arr property:@"" forKey:@"photo"]; //如果是第三方登录 填写获取到的照片全路径
  307. [arr property:@"" forKey:@"sex"]; //如果是第三方登录 填写获取到的用户性别
  308. }else{
  309. [arr property:@"" forKey:@"loginCode"];
  310. [arr property:@"" forKey:@"password"];
  311. [arr property:udDic[@"openId"] forKey:@"openId"]; //如果是第三方登录 填写token
  312. [arr property:udDic[@"nickName"] forKey:@"nickName"]; //如果是第三方登录 填写获取到的昵称
  313. [arr property:udDic[@"photo"] forKey:@"photo"]; //如果是第三方登录 填写获取到的照片全路径
  314. [arr property:udDic[@"sex"] forKey:@"sex"]; //如果是第三方登录 填写获取到的用户性别
  315. }
  316. [arr property:udDic[@"loginType"] forKey:@"loginType"];//登录类型
  317. [arr property:@"2" forKey:@"appType"];
  318. NSString *systemName = [[UIDevice currentDevice] systemName];
  319. NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
  320. [arr property:[NSString stringWithFormat:@"%@%@",systemName,systemVersion] forKey:@"systemVersion"];
  321. NSString *identifier = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
  322. NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
  323. [arr property:[NSString stringWithFormat:@"%@%@",identifier,currentVersion] forKey:@"version"];
  324. NSString* method = @"stuLogin";
  325. [jiaPeiManager requestAnythingWithURL:method array:arr data:nil completion:^(NSDictionary *dict) {
  326. RemoveHUD();
  327. //NSLog(@"更新数据-->%@-----%@",arr,dict);
  328. if (!dict) {
  329. return ;
  330. }
  331. if ( [dict[@"code"] isEqualToString:@"1"]) {
  332. return ;
  333. }
  334. if ( [dict[@"code"] isEqualToString:@"0"]) {
  335. }
  336. //更新信息
  337. defUser.userDict = dict[@"body"];
  338. if ([defUser.userDict[@"schInfo"] isKindOfClass:[NSDictionary class]])
  339. {
  340. defUser.userSchDict = defUser.userDict[@"schInfo"];
  341. }else{
  342. defUser.userSchDict = nil;
  343. }
  344. myDelegate.isLogin = YES;
  345. if (finishBlcok) {
  346. finishBlcok();
  347. }
  348. }];
  349. }
  350. @end
  351. void DubugLog(NSString *logString)
  352. {
  353. if (!isOfficial) {
  354. NSLog(@"%@",logString);
  355. }
  356. }