jiaPeiManager.m 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  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. NSMutableDictionary *questDic = [NSMutableDictionary dictionaryWithCapacity:array.count];
  16. if (!array) {
  17. return questDic;
  18. }
  19. for (NSDictionary *dict in array) {
  20. //其实这个判断跟自定义addpro里面重复了,但是鉴于项目有些参数的添加没有使用addpro过滤。所以此处再次判断
  21. if (dict && dict.allValues.count != 0) {
  22. [questDic setValue:[dict.allValues firstObject] forKey:[dict.allKeys firstObject]];
  23. }
  24. }
  25. return questDic;
  26. }
  27. + (NSString *)getURLWithDict:(NSDictionary *)dic urlPre:(NSString *)urlP
  28. {
  29. BOOL isOnline = isOfficial;
  30. //生成带有签名的URL
  31. NSString *httpUrl = defaultHttp;
  32. if (!isOnline) {
  33. httpUrl = defaultHttp2;
  34. }
  35. //公共请求
  36. NSArray *commonArray = @[@"getAppAdsNew", //广告
  37. @"getMyYuyueInfos", //获取自主预约
  38. @"getMessageInfos", //我的系统消息
  39. @"getTeachTypes", //获取日志类型
  40. @"getMyTeachLogs", //获取日志
  41. @"stuXXList", //获取休学记录
  42. @"getMyReserveOrders", //获取订单
  43. // @"uploadReserveComplaints", //获取投诉
  44. @"getOrderComplaintsByClassId" //根据课堂ID和投诉用户ID查询投诉
  45. ];
  46. //计时相关
  47. NSArray *trainArray = @[@"getCoachSignForTrain", //获取教练当天签到状态
  48. @"getSignRecords", //获取教练签到记录
  49. @"getCoachSignStuRecords", //获取学员签到列表
  50. @"uploadSignOutOrClassRecord", //签退并上传学时汇总
  51. @"uploadAppTrainSingle", //分钟学时及GPS点上传
  52. @"uploadAppTrainPl", //分钟学时批量上传
  53. @"takePhoto", //学员签到/签退/随机拍照
  54. @"uploadStuSign", //学员签到
  55. @"doTeach", //我要带教
  56. @"saveCoachSignOut", //教练员签退
  57. @"saveCoachSignIn", //教练员签到
  58. @"doDeviceLogOut", //终端注销
  59. @"doDeviceReg", //终端注册
  60. @"getPrice", //培训价格
  61. @"delLogStudent", //霸王签退
  62. @"uploadReserveOrder", //计划生成订单
  63. @"delReserveOrder", //删除计划订单
  64. @"uploadBindStuImei", //学员手机设备绑定
  65. @"getEvaluationCoachList", //教练获得的评价栏目数
  66. @"doComplaint", //学时投诉
  67. @"doEvaluation", //学时评论
  68. @"getTrainFinish", //获取已完成学时
  69. @"getEvaluationList", //查看学时评论
  70. @"getStuSignFlag", //获取当前学员签到状态
  71. @"forceSignOut", //用classid直接汇总
  72. @"uploadMnStuLogin", //模拟计时签到
  73. @"uploadMnSignOut", //模拟计时签退
  74. @"getStudentTrack", //查询轨迹
  75. @"getStudentTrainCheck", //学时确认状态
  76. @"updateStudentTrainCheck", //确认学时
  77. @"getSchPlaces", //查询驾校训练点信息
  78. @"getSchPlaceCoachs", //查询训练场下所有教练
  79. @"getStudentTrainInfos", //终端带教信息
  80. @"getTrainRecordMins" //获取分钟学时
  81. ];
  82. //辽宁模拟相关
  83. NSArray *lnMnTrainArray = @[@"getStuCardIdOrBluetooth", //根据学员ID获取证件号物理ID和蓝牙名称
  84. @"face2face", //签到人脸比对
  85. @"uploadTrainMinPl", //分钟学时批量上传
  86. @"uploadMnqSignOut", //签退并上传学时汇总
  87. @"upgradesVersion", //模拟设备升级
  88. @"faceComparison" //模拟计时过程验证
  89. ];
  90. /// webservice相关接口
  91. NSArray *lnwebserviceApiArray = @[@"studentQrcode", // 集中式理论
  92. @"getZxInfoByStudent", // 获取学员转校信息记录
  93. @"updZxInfoState", // 学员APP确认转校信息
  94. @"face2faceTheory", // 课堂人脸比对
  95. @"getQgCode", // 测试获取教练的二维码
  96. @"getStuProtocol", // 获取学员合同
  97. @"face2faceJykh" // 大车人脸比对
  98. ];
  99. /// webservice相关接口
  100. NSArray *lnwebserviceEduArray = @[@"checkEduStu", // 验证学员是否有权限训练远程教育接口
  101. @"getAppAnnouncement", // 获取公告
  102. @"getAppAnnouncement2", // 获取硬性公告
  103. @"getAppCompetence",
  104. @"uploadPhotoLog", // 远程教育调用摄像头做记录
  105. ];
  106. // 远程理论计时
  107. NSArray *educationArr = @[@"getCurrentTime", // 获取当前时间
  108. @"uploadEduSignIn", // 远程理论签到
  109. @"uploadEduPic", // 远程理论拍照上传
  110. @"uploadEduSignOut", // 远程理论签退
  111. @"getTheoryStatus", // 获取理论签到状态
  112. @"edufaceToface" // 远程理论人脸比对
  113. ];
  114. NSString *urlDefault = isOfficial? defaultHttpUrl : defaultHttpUrl2;
  115. if ([commonArray containsObject:urlP]) {
  116. urlDefault = isOfficial? defaultCommonUrl : defaultCommonUrl2;
  117. }else if ([trainArray containsObject:urlP]) {
  118. urlDefault = isOfficial? defaultTrainUrl : defaultTrainUrl2;
  119. }else if ([urlP isEqualToString:@"takePhoto"]) {
  120. urlDefault = isOfficial? defaultUploadUrl : defaultUploadUrl2;
  121. }else if ([lnMnTrainArray containsObject:urlP]) {//模拟训练人脸比对
  122. urlDefault = isOfficial? defaultLnsimulator : defaultLnsimulator2;
  123. }else if ([lnwebserviceApiArray containsObject:urlP]) {
  124. urlDefault = isOfficial? lnwebserviceApi : lnwebserviceApi2;
  125. }else if ([lnwebserviceEduArray containsObject:urlP]) {
  126. if (!isOnline) {
  127. httpUrl = defaultHttp3;
  128. }
  129. urlDefault = isOfficial? lnwebserviceEdu : lnwebserviceEdu2;
  130. } else if ([educationArr containsObject:urlP]) {
  131. urlDefault = defaultEducation;
  132. }
  133. if (!isOnline) {
  134. urlDefault = [urlDefault stringByReplacingOccurrencesOfString:@"appservice" withString:@"lnappservice"];
  135. }
  136. NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒
  137. NSString *urlS = @"";
  138. if (dic == nil) {
  139. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&user=ios&v=ln",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI]];
  140. }else{
  141. //添加key字段
  142. NSMutableString *contentString = [NSMutableString stringWithString:[self getSignStringWithDictionary:dic]];
  143. [contentString appendFormat:@"key=%@", [NSString stringWithFormat:@"%.0f",timeI]];
  144. // NSString *strUrl1 = [contentString stringByReplacingOccurrencesOfString:@" " withString:@""];
  145. // NSString *strUrl2 = [strUrl1 stringByReplacingOccurrencesOfString:@"\t" withString:@""];
  146. // NSString *strUrl3 = [strUrl1 stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  147. urlS = [NSString stringWithFormat:@"%@%@%@?ts=%@&sign=%@&user=ios&v=ln",httpUrl,urlDefault,urlP,[NSString stringWithFormat:@"%.0f",timeI],[[contentString md5Encrypt] uppercaseString]];
  148. //NSLog(@"urlS----><>%@----><>%@",strUrl3,urlS);
  149. }
  150. return urlS;
  151. }
  152. + (NSString *)getSignStringWithDictionary:(NSDictionary *)dic
  153. {
  154. NSMutableString *contentString =[NSMutableString string];
  155. NSDictionary* dict = [NSDictionary dictionaryWithDictionary:dic];
  156. NSArray *keys = [dict allKeys];
  157. //按字母顺序排序
  158. NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  159. return [obj1 compare:obj2 options:NSNumericSearch];
  160. }];
  161. //拼接字符串
  162. for (NSString *categoryId in sortedArray) {
  163. if (![categoryId isEqualToString:@"sign"] && ![categoryId isEqualToString:@"timestamp"]){
  164. if([categoryId isEqualToString:@"biz_content"]){
  165. NSError *error = nil;
  166. NSDictionary* bizDict = [dict objectForKey:@"biz_content"];
  167. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bizDict options:NSJSONWritingPrettyPrinted error: &error];
  168. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
  169. NSString* jsonString1 = [[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding];
  170. NSString *jsonString2 = [jsonString1 stringByReplacingOccurrencesOfString:@" : " withString:@":"];
  171. [contentString appendFormat:@"biz_content=%@&",jsonString2];
  172. }else{
  173. [contentString appendFormat:@"%@=%@&", categoryId, [dict valueForKey:categoryId]];
  174. }
  175. }
  176. }
  177. return contentString;
  178. }
  179. //dic > string
  180. + (NSString *)dictionaryToJsonString:(NSDictionary *)dic
  181. {
  182. NSError *parseError = nil;
  183. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
  184. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  185. }
  186. //jsonString > dic
  187. + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
  188. if (jsonString == nil) {
  189. return nil;
  190. }
  191. NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
  192. NSError *err;
  193. if (jsonData == nil) {
  194. return nil;
  195. }
  196. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
  197. options:NSJSONReadingMutableContainers
  198. error:&err];
  199. if(err) {
  200. // NSLog(@"json解析失败:%@",err);
  201. ShowMsg([NSString stringWithFormat:@"数据解析失败,%@",err]);
  202. return nil;
  203. }
  204. return dic;
  205. }
  206. + (void)requestAnythingWithURL:(NSString *)urlString array:(NSArray *)aAarray data:(NSData *)uplownData completion:(MyBlockType)finishBlock
  207. {
  208. if (uplownData) {//有媒体数据上传的请求
  209. NSString *httpUrl = isOfficial == YES?defaultHttp:defaultHttp2;
  210. NSString *defaultUpload = defaultUploadUrl;
  211. NSString *urlS = [NSString stringWithFormat:@"%@%@%@",httpUrl,defaultUpload,urlString];
  212. if (!isOfficial) {
  213. urlS = [urlS stringByReplacingOccurrencesOfString:@"appservice" withString:@"lnappservice"];
  214. }
  215. // [urlS stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  216. [urlS stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  217. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  218. afSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
  219. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  220. afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
  221. afSessionManager.requestSerializer.timeoutInterval = 40;
  222. [afSessionManager POST:urlS parameters:nil headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  223. int k = 0;
  224. for (NSData *uplownData in aAarray) {
  225. NSString *typeString = [Tools typeForImageData:uplownData];
  226. NSString *fileType = [NSString stringWithFormat:@"image.%@",typeString];
  227. NSString *mimeType = [NSString stringWithFormat:@"image/%@",typeString];
  228. k ++;
  229. [formData appendPartWithFileData:uplownData
  230. name:[NSString stringWithFormat:@"photo%d",k]
  231. fileName:fileType
  232. mimeType:mimeType];
  233. }
  234. } progress:^(NSProgress * _Nonnull uploadProgress) {
  235. //NSLog(@"uploadProgress----><>%@-----><>%@",urlS,uploadProgress);
  236. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  237. if (responseObject == nil) {
  238. NSDictionary *dic = nil;
  239. finishBlock(dic);
  240. return;
  241. }
  242. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  243. options:NSJSONReadingMutableContainers
  244. error:nil];
  245. //请求成功
  246. NSLog(@"上传图片-----><>%@----><>%@",urlS,dic);
  247. finishBlock(dic);
  248. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  249. //请求失败
  250. NSLog(@"上传---><>%@",error);
  251. //失败的时候 要把失败的事情传输回去
  252. NSDictionary *dic = nil;
  253. finishBlock(dic);
  254. }];
  255. }else{//无媒体数据上传的请求
  256. NSDictionary *dic = [jiaPeiManager getDicWithArray:aAarray];
  257. if (aAarray == nil) {
  258. dic = nil;
  259. }
  260. //生成请求加密后的url
  261. NSString *urlS = [jiaPeiManager getURLWithDict:dic urlPre:urlString];
  262. if (![urlString isEqualToString:@"getSchInfoListByTujian"]) {
  263. NSLog(@"发起请求---urlString---><>%@--->\n%@",urlS,dic);
  264. }
  265. //设置请求管理器
  266. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  267. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  268. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  269. afSessionManager.responseSerializer.acceptableContentTypes = [afSessionManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
  270. afSessionManager.requestSerializer.timeoutInterval = 15;
  271. //如果是人脸比对 增加了十秒超时延时
  272. if ([urlString isEqualToString:@"face2face"] || [urlS isEqualToString:@"faceComparison"]) {
  273. afSessionManager.requestSerializer.timeoutInterval = 25;
  274. }
  275. [afSessionManager POST:urlS parameters:dic headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  276. //请求成功
  277. if (responseObject == nil) {
  278. NSDictionary *dic = nil;
  279. finishBlock(dic);
  280. return;
  281. }
  282. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  283. options:NSJSONReadingMutableContainers
  284. error:nil];
  285. if (![urlString isEqualToString:@"getSchInfoListByTujian"]) {
  286. NSLog(@"请求成功123---urlString---><>%@--->\n%@",urlString,dic);
  287. }
  288. //鉴于项目里所有接口都没有处理 =-1 的情况,而服务器据说每个接口又有。就在这里统一处理了
  289. //项目里大部分地方都没有按==0判定成功处理。都是判定了几个异常状态(常见的1,2)然后直接认定成功了
  290. if ([dic[@"code"] isEqualToString:@"-1"]) {//数据异常
  291. [dic setValue:@"1" forKey:@"code"];
  292. }
  293. finishBlock(dic);
  294. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  295. if ([error.localizedDescription isEqualToString:@"The request timed out."]) {
  296. finishBlock(nil);
  297. //,@"请求超时"
  298. NSLog(@"请求超时----><>%@",error);
  299. }else{
  300. //请求失败
  301. NSLog(@"请求失败123----><>%@",error);
  302. //失败的时候 要把失败的事情传输回去
  303. NSDictionary *dic = nil;
  304. finishBlock(dic);
  305. }
  306. }];
  307. }
  308. }
  309. + (void)requestGetAnythingWithURL:(NSString *)urlString completion:(MyBlockType)finishBlock
  310. {
  311. //生成请求加密后的url
  312. NSString *urlS = [jiaPeiManager getURLWithDict:nil urlPre:urlString];
  313. // NSLog(@"-----><>%@--------><>%@",urlString,urlS);
  314. //设置请求管理器
  315. AFHTTPSessionManager *afSessionManager = [AFHTTPSessionManager manager];
  316. afSessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
  317. afSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
  318. [afSessionManager GET:urlS parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  319. //NSLog(@"请求返回123-------><>%@",responseObject);
  320. if (responseObject == nil) {
  321. NSDictionary *dic = nil;
  322. finishBlock(dic);
  323. return;
  324. }
  325. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
  326. options:NSJSONReadingMutableContainers
  327. error:nil];
  328. NSLog(@"请求返回123---------><>%@",dic);
  329. finishBlock(dic);
  330. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  331. //请求失败
  332. NSLog(@"请求失败123----><>%@",error);
  333. //失败的时候 要把失败的事情传输回去 @{@"code":@"1",@"body":@"请求失败"}
  334. NSDictionary *dic = nil;
  335. finishBlock(dic);
  336. }];
  337. }
  338. #pragma mark 公共请求
  339. +(void)requestADImage
  340. {
  341. if (![Util connectedToNetWork]) {
  342. NSString *filePath = [Tools getPathWithFileName:@"ads.plist"];
  343. if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
  344. NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
  345. myDelegate.adArray = arr;
  346. }
  347. }
  348. NSMutableArray *arr=[NSMutableArray array];
  349. [arr addPro:@"type" Value:@"4"];
  350. NSString* method = @"getAppAdsNew";
  351. [jiaPeiManager requestAnythingWithURL:method array:arr data:nil completion:^(NSDictionary *root) {
  352. if (!root || [root[@"code"] isEqualToString:@"1"]) {
  353. //如果没广告图片 就从这里获取
  354. NSString *filePath = [Tools getPathWithFileName:@"ads.plist"];
  355. if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
  356. NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
  357. myDelegate.adArray = arr;
  358. }
  359. }else{
  360. //有广告 就更新本地广告
  361. if ([root[@"body"] count] > 0) {
  362. myDelegate.adArray = root[@"body"];
  363. NSString *filePath = [Tools getPathWithFileName:@"ads.plist"];
  364. [root[@"body"] writeToFile:filePath atomically:YES];
  365. }
  366. }
  367. //这个判断是否可以在广告加载钱接收到广告 其实和放另一个地方是一样的效果
  368. NSMutableArray *array = [NSMutableArray array];
  369. for (NSDictionary *dic in myDelegate.adArray) {
  370. if ([dic[@"LOCATION"] isEqualToString:@"1"]) {
  371. [array addObject:dic[@"IMG"]];
  372. }
  373. }
  374. defUser.adPaths = array;
  375. [[NSNotificationCenter defaultCenter] postNotificationName:@"updateAD" object:@"isSuccess"];
  376. }];
  377. }
  378. @end