jiaPeiManager.m 21 KB

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