RQPTObjectMolule.m 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. //
  2. // RQPTObjectMolule.m
  3. // jiaPei
  4. //
  5. // Created by 张嵘 on 2022/4/8.
  6. // Copyright © 2022 JCZ. All rights reserved.
  7. //
  8. #import "RQPTObjectMolule.h"
  9. #import "MapManager.h"
  10. typedef NS_ENUM(NSInteger, RQQRCodeType) {
  11. /// 无
  12. RQQRCodeType_NO = 0,
  13. /// 莆田门禁
  14. RQQRCodeType_PTMJ = 1,
  15. /// 莆田实操
  16. RQQRCodeType_PTSC = 2,
  17. /// 浙江模拟
  18. RQQRCodeType_ZJJP = 3,
  19. };
  20. @interface RQPTObjectMolule ()
  21. @property (nonatomic, readwrite, assign) RQQRCodeType rqQRCodeType;
  22. @property (nonatomic, readwrite, assign) BOOL isShowChooseSubject;
  23. @end
  24. @implementation RQPTObjectMolule
  25. static id rq_ptObjectModule = nil;
  26. #pragma mark - init
  27. + (instancetype)sharedInstance {
  28. static dispatch_once_t onceToken;
  29. dispatch_once(&onceToken, ^{
  30. rq_ptObjectModule = [[self alloc] init];
  31. });
  32. return rq_ptObjectModule;
  33. }
  34. - (instancetype)init {
  35. if (self = [super init]) {
  36. }
  37. return self;
  38. }
  39. #pragma mark - PublicMethods
  40. // 扫码验证
  41. - (void)uploadScanCodeVerifyWithQRCodeResultStr:(NSString *)resultStr resultBlock:(void (^)(BOOL isSuccess))resultBlock {
  42. _rqQRCodeType = RQQRCodeType_NO;
  43. @weakify(self)
  44. if (![Util connectedToNetWork]) {
  45. showMsgUnconnect();
  46. resultBlock(NO);
  47. return;
  48. }
  49. if ([resultStr containsString:@"#DECODE#"] && resultStr.length > 8) {
  50. ///程序内某些验证
  51. NSString *testString = [DES3Util decrypt:[resultStr substringFromIndex:8]];
  52. NSLog(@"\n原完整内容: %@ \n解密后: #DECODE#%@",resultStr,testString);
  53. // testString = @"#LNJP#huizhi@@BFEBFBFF000206A7@@1530258491165";
  54. if (testString == nil) {
  55. [RQ_SHARE_FUNCTION showAlertWithMessage:@"二维码内容格式错误(#DECODE#+异常字符串)" completion:nil];
  56. return;
  57. }
  58. //#DECODE##JSJP#PTMJ@@13503005883@@1611296660969@@119.206163@@26.03922@@1@@3503090060
  59. NSArray *array;
  60. if ([testString containsString:@"#JSJP#PTMJ"]) {
  61. ///莆田门禁入场/离场
  62. array = [testString componentsSeparatedByString:@"@@"];
  63. testString = [testString substringFromIndex:6];
  64. _rqQRCodeType = RQQRCodeType_PTMJ;
  65. /// 二维码明文
  66. /// #JSJP#PTMJ@@SIM卡号@@kind@@regionId@@1611042927509@@119.2065@@26.038985
  67. } else if ([testString containsString:@"#JSJP#PTSC"]) {
  68. ///莆田实操签到/签退
  69. array = [testString componentsSeparatedByString:@"@@"];
  70. testString = [testString substringFromIndex:6];
  71. _rqQRCodeType = RQQRCodeType_PTSC;
  72. /// 二维码明文
  73. /// #JSJP#PTSC@@13503003479@@1649213031058@@26.038049@@119.206105@@3@@1649212908@@17@@0@@2022-04-06 10:43:51@@0.0@@184.86@@3346341302335557
  74. /// //SIM,//时间戳,//纬度,//经度,//当前科目,//课堂classid,//扫码类型,//卫星定位速度,//GPS时间,//行驶记录速度,//方向 //学员编号 //是否开启水印 //车牌号 //教练名称
  75. } else if ([testString containsString:@"#ZJJP#"]) {
  76. testString = [testString substringFromIndex:6];
  77. array = [testString componentsSeparatedByString:@"@@"];
  78. _rqQRCodeType = RQQRCodeType_ZJJP;
  79. /// 二维码明文
  80. ///#ZJJP#12345678909@@1@@3310@@1677132394000
  81. ///#ZJJP#SIM卡号@@类型@@地区编号@@时间戳 (类型:1签到 2签退 3过程)
  82. }
  83. __block NSString *ptSubjectStr;
  84. if (_rqQRCodeType == RQQRCodeType_PTSC && !RQObjectIsNil(array[5]) && !RQObjectIsNil(array[7])) {
  85. ptSubjectStr = array[5];
  86. NSString *trainTypeStr = array[7];
  87. if ([trainTypeStr isEqualToString:@"17"]) {
  88. if ([ptSubjectStr isEqualToString:@"5"] || RQStringIsEmpty(ptSubjectStr)) {
  89. NSMutableArray *editArr = array.mutableCopy;
  90. [RQ_ALERTVIEW_MANAGER showAlertWithTitle:@"温馨提示" message:@"请选择培训科目" confirmTitleOne:@"科目二" confirmTitleTwo:@"科目三" cancelTitle:@"取消" confirmOneAction:^{
  91. @strongify(self)
  92. RQ_PT_Object_Module.ptSubjectStr = @"2";
  93. [editArr replaceObjectAtIndex:5 withObject:RQ_PT_Object_Module.ptSubjectStr];
  94. [self postUploadScanCodeVerifyWithCodeArr:editArr.copy resultBlock:resultBlock];
  95. } confirmTwoAction:^{
  96. @strongify(self)
  97. RQ_PT_Object_Module.ptSubjectStr = @"3";
  98. [editArr replaceObjectAtIndex:5 withObject:RQ_PT_Object_Module.ptSubjectStr];
  99. [self postUploadScanCodeVerifyWithCodeArr:editArr.copy resultBlock:resultBlock];
  100. } cancleAction:^{
  101. resultBlock(NO);
  102. }];
  103. } else if ([ptSubjectStr isEqualToString:@"3"] || [ptSubjectStr isEqualToString:@"2"]) {
  104. RQ_PT_Object_Module.ptSubjectStr = ptSubjectStr;
  105. [self postUploadScanCodeVerifyWithCodeArr:array resultBlock:resultBlock];
  106. } else {
  107. [NSObject rq_showAlertViewWithTitle:@"温馨提示" message:@"无训练阶段相关参数" confirmTitle:@"确定"];
  108. resultBlock(NO);
  109. }
  110. } else if ([trainTypeStr isEqualToString:@"19"]) {
  111. if (RQStringIsNotEmpty(RQ_PT_Object_Module.ptSubjectStr)) {
  112. NSMutableArray *editArr = array.mutableCopy;
  113. [editArr replaceObjectAtIndex:5 withObject:RQ_PT_Object_Module.ptSubjectStr];
  114. [self postUploadScanCodeVerifyWithCodeArr:editArr.copy resultBlock:resultBlock];
  115. } else {
  116. [self postUploadScanCodeVerifyWithCodeArr:array resultBlock:resultBlock];
  117. }
  118. } else {
  119. [self postUploadScanCodeVerifyWithCodeArr:array resultBlock:resultBlock];
  120. }
  121. } else if (_rqQRCodeType == RQQRCodeType_ZJJP && !RQObjectIsNil(array[1])) {
  122. NSString *type = array[1];
  123. if ([type isEqualToString:@"1"]) {
  124. /// 如果是签到需要传科目
  125. if (!self.isShowChooseSubject) {
  126. self.isShowChooseSubject = YES;
  127. [RQ_ALERTVIEW_MANAGER showAlertWithTitle:@"温馨提示" message:@"请选择培训科目" confirmTitleOne:@"科目二" confirmTitleTwo:@"科目三" cancelTitle:@"取消" confirmOneAction:^{
  128. @strongify(self)
  129. RQ_PT_Object_Module.zjSubjectStr = @"2";
  130. [self zjmnWithArr:array];
  131. self.isShowChooseSubject = NO;
  132. } confirmTwoAction:^{
  133. @strongify(self)
  134. RQ_PT_Object_Module.zjSubjectStr = @"3";
  135. [self zjmnWithArr:array];
  136. self.isShowChooseSubject = NO;
  137. } cancleAction:^{
  138. @strongify(self)
  139. self.isShowChooseSubject = NO;
  140. }];
  141. }
  142. } else {
  143. /// 签退的时候科目传空字符
  144. RQ_PT_Object_Module.zjSubjectStr = @"";
  145. [self zjmnWithArr:array];
  146. }
  147. } else {
  148. [self postUploadScanCodeVerifyWithCodeArr:array resultBlock:resultBlock];
  149. }
  150. } else {
  151. NSString *testString = [DES3Util decrypt:resultStr];
  152. NSLog(@"%@",testString);
  153. }
  154. }
  155. - (void)zjmnWithArr:(NSArray *)array {
  156. @weakify(self)
  157. [[RACScheduler mainThreadScheduler] afterDelay:0.5 schedule:^{
  158. [RQ_CHECKBODY_MANAGER beginCheckBodyWithCheckNum:0 checkBodyType:RQCheckBodyType_PTSC waterMarkArr:@[] completeBlock:^(BOOL success, NSDictionary * _Nullable dic) {
  159. @strongify(self)
  160. if (success) {
  161. [self face2faceWithQRCodeType:_rqQRCodeType rqCodeArr:array photo:dic[@"normalImg"] resultBlock:^(BOOL isSuccess, id a) {
  162. @strongify(self)
  163. if (isSuccess) {
  164. if (!RQObjectIsNil(a)) {
  165. NSDictionary *dic = a;
  166. NSString *str = dic[@"body"];
  167. if (RQStringIsNotEmpty(str)) {
  168. NSMutableArray *uploadTrainFileMnArr = [NSMutableArray array];
  169. [uploadTrainFileMnArr addPro:@"objid" Value:RQ_USER_MANAGER.currentUser.outId];///学员ID
  170. [uploadTrainFileMnArr addPro:@"dqbh" Value:RQ_USER_MANAGER.currentUser.city];///地区编号
  171. [uploadTrainFileMnArr addPro:@"sim" Value:array[0]];///SIM卡号
  172. [uploadTrainFileMnArr addPro:@"event" Value:array[1]];///扫码类型:1 签到 2签退 3培训过程
  173. [uploadTrainFileMnArr addPro:@"classId" Value:@""];///課堂ID
  174. [uploadTrainFileMnArr addPro:@"photo"
  175. Value:str];
  176. NSInteger timeStamp = [RQ_SHARE_FUNCTION getTimeStampWithDate:[NSDate date]];
  177. NSString *timeStampStr = [NSString stringWithFormat:@"%@",[NSNumber numberWithInteger:timeStamp]];
  178. if (timeStampStr.length < 10) {
  179. timeStampStr = [NSString stringWithFormat:@"%@",[NSNumber numberWithInteger:[NSString rq_randomNumberWithFrom:1647311377 to:9999999999]]];
  180. } else if (timeStampStr.length > 10) {
  181. timeStampStr = [timeStampStr substringFromIndex:timeStampStr.length - 10];
  182. }
  183. [uploadTrainFileMnArr addPro:@"picno" Value:timeStampStr];///照片编号
  184. NSString *type = array[1];
  185. if ([type isEqualToString:@"1"]) {
  186. /// 签到的时候先签到后上传图片
  187. [self uploadZjmnLoginWithArray:array resultBlock:^(BOOL isSuccess) {
  188. @strongify(self)
  189. if (isSuccess) {
  190. [self uploadTrainFileMnWithArray:uploadTrainFileMnArr.copy resultBlock:^(BOOL isSuccess) {
  191. }];
  192. }
  193. }];
  194. } else {
  195. /// 签退的时候先上传图片后签退
  196. [self uploadTrainFileMnWithArray:uploadTrainFileMnArr.copy resultBlock:^(BOOL isSuccess) {
  197. @strongify(self)
  198. if (isSuccess) {
  199. [self uploadZjmnLoginWithArray:array resultBlock:^(BOOL isSuccess) {
  200. if (isSuccess) {
  201. NSLog(@"签退成功");
  202. }
  203. }];
  204. } else {
  205. }
  206. }];
  207. }
  208. }
  209. }
  210. }
  211. }];
  212. }
  213. }];
  214. }];
  215. }
  216. - (void)postUploadScanCodeVerifyWithCodeArr:(NSArray *)array resultBlock:(void (^)(BOOL isSuccess))resultBlock {
  217. [MBProgressHUD rq_showProgressHUD:@"正在获取当前位置..."];
  218. [RQ_MAP_MANAGER updateLocationWithCompleteBlock:^(BOOL success, CLLocation * _Nonnull location, BMKLocation * _Nullable bmkLocation) {
  219. [MBProgressHUD rq_hideHUD];
  220. if (success) {
  221. NSString *method = @"uploadScanCodeVerify";
  222. NSInteger faceNum = RQPuTianFaceNum;
  223. NSMutableArray *arr = [NSMutableArray array];
  224. NSArray *waterMaekArr = @[];
  225. [arr addPro:@"stuid" Value:RQ_USER_MANAGER.currentUser.outId];///学员ID
  226. [arr addPro:@"dqbh" Value:RQ_USER_MANAGER.currentUser.city];///地区编号
  227. [arr addPro:@"lng" Value:[NSString stringWithFormat:@"%f",location.coordinate.longitude]];///手机经度
  228. [arr addPro:@"lat" Value:[NSString stringWithFormat:@"%f",location.coordinate.latitude]];///手机纬度
  229. if (_rqQRCodeType == RQQRCodeType_PTMJ) {
  230. [arr addPro:@"kind" Value:array[5]];///扫码类型:1 :入场; 2:离场
  231. [arr addPro:@"sim" Value:array[1]];///SIM卡号
  232. [arr addPro:@"regionId" Value:array[6]];///场地ID
  233. [arr addPro:@"timestamp" Value:array[2]];///时间戳
  234. [arr addPro:@"devlng" Value:array[3]];///设备经度
  235. [arr addPro:@"devlat" Value:array[4]];///设备纬度
  236. method = @"uploadScanCodeVerify";
  237. faceNum = RQPuTianFaceNum;
  238. } else if (_rqQRCodeType == RQQRCodeType_PTSC) {
  239. [arr addPro:@"stunum" Value:array[12]];///学员编号
  240. [arr addPro:@"subject" Value:array[5]];///当前扫码训练阶段
  241. [arr addPro:@"imei" Value:[FCUUID uuidForDevice]];///唯一识别号
  242. [arr addPro:@"event" Value:array[7]];///扫码类型:17 签到 19签退
  243. [arr addPro:@"sim" Value:array[1]];///SIM卡号
  244. [arr addPro:@"timestamp" Value:array[2]];///时间戳
  245. [arr addPro:@"devlng" Value:array[4]];///设备经度
  246. [arr addPro:@"devlat" Value:array[3]];///设备纬度
  247. method = @"uploadScCodeVerify";
  248. faceNum = 3;
  249. BOOL isOpenWater = array.count > 14? (RQObjectIsNil(array[13])? NO : ![[NSNumber numberWithString:array[13]] boolValue]) : NO;
  250. waterMaekArr = isOpenWater? @[[NSDate rq_currentTimestamp],
  251. [NSString stringWithFormat:@"经纬度:%@,%@",[NSString stringWithFormat:@"%f",location.coordinate.longitude],[NSString stringWithFormat:@"%f",location.coordinate.latitude]],
  252. [NSString stringWithFormat:@"教练姓名:%@",[NSString stringWithFormat:@"%@",array[15]]],
  253. [NSString stringWithFormat:@"学员姓名:%@",[NSString stringWithFormat:@"%@",RQStringIsNotEmpty(RQ_USER_MANAGER.currentUser.userName)? RQ_USER_MANAGER.currentUser.userName : @""]],
  254. [NSString stringWithFormat:@"车牌号:%@",[NSString stringWithFormat:@"%@",array[14]]],
  255. [NSString stringWithFormat:@"驾校:%@",[NSString stringWithFormat:@"%@",RQStringIsNotEmpty(RQ_USER_MANAGER.currentUser.schInfo.name)? RQ_USER_MANAGER.currentUser.schInfo.name : @""]],
  256. [NSString stringWithFormat:@"车速:%@km/h",[NSString stringWithFormat:@"%@",array[10]]],
  257. ] : @[];
  258. }
  259. [MBProgressHUD rq_showProgressHUD:@"验证中..."];
  260. [jiaPeiManager requestAnythingWithURL:method array:arr data:nil completion:^(NSDictionary * root) {
  261. [MBProgressHUD rq_hideHUD];
  262. if (!root) {
  263. resultBlock(NO);
  264. [RQ_SHARE_FUNCTION showAlertWithMessage:@"操作失败,请重试!" completion:nil];
  265. [Tools playAudioWithString:@"操作失败,请重试!"];
  266. return;
  267. }
  268. if ([root[@"code"] integerValue] == 0) {
  269. dispatch_async(dispatch_get_main_queue(), ^{
  270. [RQ_CHECKBODY_MANAGER beginCheckBodyWithCheckNum:faceNum checkBodyType:RQCheckBodyType_PTSC waterMarkArr:waterMaekArr completeBlock:^(BOOL success, NSDictionary * _Nullable dic) {
  271. if (success) {
  272. [self face2faceWithQRCodeType:_rqQRCodeType rqCodeArr:array photo:dic[@"normalImg"] resultBlock:^(BOOL isSuccess, id a) {
  273. resultBlock(isSuccess);
  274. }];
  275. }
  276. }];
  277. });
  278. } else {
  279. resultBlock(NO);
  280. if ([root[@"body"] isKindOfClass:[NSString class]] && ![root[@"body"] isEqualToString:@""]) {
  281. [Tools playAudioWithString:root[@"body"]];
  282. [RQ_SHARE_FUNCTION showAlertWithMessage:root[@"body"] completion:nil];
  283. [Bugly reportException:[NSException exceptionWithName:[NSString stringWithFormat:@"uploadScCodeVerify---%@",root[@"body"]] reason:[arr jsonStringEncoded] userInfo:[RQ_USER_MANAGER.currentUser dictionaryValue]]];
  284. } else {
  285. [RQ_SHARE_FUNCTION showAlertWithMessage:@"操作失败,请重试!" completion:nil];
  286. [Tools playAudioWithString:@"操作失败,请重试!"];
  287. }
  288. }
  289. }];
  290. } else {
  291. resultBlock(NO);
  292. [RQ_SHARE_FUNCTION showAlertWithMessage:@"定位失败!" completion:nil];
  293. }
  294. }];
  295. }
  296. #pragma mark - PrivateMethods
  297. - (void)face2faceWithQRCodeType:(RQQRCodeType)rqCodeType rqCodeArr:(NSArray *)rqCodeArr photo:(NSString *)photoStr resultBlock:(void (^)(BOOL isSuccess , __nullable id a))resultBlock {
  298. @weakify(self)
  299. if (![Util connectedToNetWork]) {
  300. showMsgUnconnect();
  301. resultBlock(NO, nil);
  302. return;
  303. }
  304. if ([photoStr isEqualToString:@"(null)"] || [photoStr isEqualToString:@""]) {
  305. resultBlock(NO, nil);
  306. return;
  307. }
  308. [MBProgressHUD rq_showProgressHUD:@"正在获取当前位置..."];
  309. [RQ_MAP_MANAGER updateLocationWithCompleteBlock:^(BOOL success, CLLocation * _Nonnull location, BMKLocation * _Nullable bmkLocation) {
  310. [MBProgressHUD rq_hideHUD];
  311. if (success) {
  312. NSString *method;
  313. NSTimeInterval timeI = [[NSDate date] timeIntervalSince1970] * 1000;//获取时间戳 单位:s *1000毫秒
  314. NSInteger timeInt = [NSString stringWithFormat:@"%.0f",timeI].integerValue;
  315. NSString *currentTimeStr = [NSString stringWithFormat:@"%ld",timeInt];
  316. if (currentTimeStr.length > 10) {
  317. currentTimeStr = [currentTimeStr substringFromIndex:currentTimeStr.length - 10];
  318. }
  319. NSMutableArray *arr = [NSMutableArray array];
  320. [arr addPro:@"objid" Value:RQ_USER_MANAGER.currentUser.outId];///学员ID或教练ID
  321. [arr addPro:@"dqbh" Value:RQ_USER_MANAGER.currentUser.city];///地区编号
  322. [arr addPro:@"photo" Value:photoStr? : @""];///照片Base64数据
  323. if (rqCodeType == RQQRCodeType_PTMJ) {
  324. method = @"mjFace2face";
  325. [arr addPro:@"type" Value:@"1"];///拍照类型:1 :学员; 2:教练
  326. [arr addPro:@"kind" Value:rqCodeArr[5]];///扫码类型:1 :入场; 2:离场
  327. [arr addPro:@"sim" Value:rqCodeArr[1]];///SIM卡号
  328. [arr addPro:@"regionId" Value:rqCodeArr[6]];///场地ID
  329. [arr addPro:@"lng" Value:[NSString stringWithFormat:@"%f",location.coordinate.longitude]];///手机经度
  330. [arr addPro:@"lat" Value:[NSString stringWithFormat:@"%f",location.coordinate.latitude]];///手机纬度
  331. method = @"mjFace2face";
  332. } else if (rqCodeType == RQQRCodeType_PTSC) {
  333. method = @"mjFace2face";
  334. [arr addPro:@"type" Value:@"1"];///拍照类型:1 :学员; 2:教练
  335. [arr addPro:@"classId" Value:rqCodeArr[6]];///课堂ID
  336. [arr addPro:@"subject" Value:rqCodeArr[5]];///当前扫码训练阶段
  337. [arr addPro:@"imei" Value:[FCUUID uuidForDevice]];///唯一识别号
  338. [arr addPro:@"event" Value:rqCodeArr[7]];///扫码类型:17 签到 19签退
  339. [arr addPro:@"sim" Value:rqCodeArr[1]];///SIM卡号
  340. [arr addPro:@"speed" Value:rqCodeArr[8]];///卫星定位速度
  341. [arr addPro:@"gpstime" Value:rqCodeArr[9]];///GPS时间
  342. [arr addPro:@"drispeed" Value:rqCodeArr[10]];///行驶记录速度
  343. [arr addPro:@"direction" Value:rqCodeArr[11]];///卫星定位速度
  344. [arr addPro:@"picno" Value:currentTimeStr];///照片编号
  345. [arr addPro:@"lng" Value:[[NSString stringWithFormat:@"%@",rqCodeArr[4]] stringByReplacingOccurrencesOfString:@"." withString:@""]];///设备经度
  346. [arr addPro:@"lat" Value:[[NSString stringWithFormat:@"%@",rqCodeArr[3]] stringByReplacingOccurrencesOfString:@"." withString:@""]];///设备纬度
  347. method = @"scFace2face";
  348. } else if (rqCodeType == RQQRCodeType_ZJJP) {
  349. method = @"zjFace2face";
  350. [arr addPro:@"sim" Value:rqCodeArr[0]];///SIM卡号
  351. [arr addPro:@"event" Value:rqCodeArr[1]];///扫码类型:1 签到 2签退 3培训过程
  352. } else {
  353. method = @"mjFace2face";
  354. [arr addPro:@"type" Value:@"1"];///拍照类型:1 :学员; 2:教练
  355. }
  356. [MBProgressHUD rq_showProgressHUD:@"验证中..."];
  357. [jiaPeiManager requestAnythingWithURL:method array:arr data:nil completion:^(NSDictionary * root) {
  358. @strongify(self)
  359. [MBProgressHUD rq_hideHUD];
  360. if (!root) {
  361. resultBlock(NO, nil);
  362. [RQ_SHARE_FUNCTION showAlertWithMessage:@"操作失败,请重试!" completion:nil];
  363. [Tools playAudioWithString:@"操作失败,请重试!"];
  364. return;
  365. }
  366. if ([root[@"code"] integerValue] == 0) {
  367. resultBlock(YES, root);
  368. if ([root[@"body"] isKindOfClass:[NSString class]] && ![root[@"body"] isEqualToString:@""]) {
  369. if (self.rqQRCodeType == RQQRCodeType_ZJJP) {
  370. } else {
  371. [Tools playAudioWithString:root[@"body"]];
  372. [RQ_SHARE_FUNCTION showAlertWithMessage:root[@"body"] completion:nil];
  373. }
  374. } else {
  375. if (self.rqQRCodeType == RQQRCodeType_PTSC) {
  376. NSString *message = @"操作成功!";
  377. if ([rqCodeArr[7] integerValue] == 17) {
  378. message = @"扫码签到成功!等待设备响应!";
  379. } else if ([rqCodeArr[7] integerValue] == 19) {
  380. message = @"扫码签退成功!等待设备响应!";
  381. }
  382. [RQ_SHARE_FUNCTION showAlertWithMessage:message completion:nil];
  383. [Tools playAudioWithString:message];
  384. } else if (self.rqQRCodeType == RQQRCodeType_ZJJP) {
  385. } else {
  386. [RQ_SHARE_FUNCTION showAlertWithMessage:@"操作成功!" completion:nil];
  387. [Tools playAudioWithString:@"操作成功!"];
  388. }
  389. }
  390. } else {
  391. resultBlock(NO, nil);
  392. if ([root[@"body"] isKindOfClass:[NSString class]] && ![root[@"body"] isEqualToString:@""]) {
  393. [Tools playAudioWithString:root[@"body"]];
  394. [RQ_SHARE_FUNCTION showAlertWithMessage:root[@"body"] completion:nil];
  395. } else {
  396. [RQ_SHARE_FUNCTION showAlertWithMessage:@"操作失败,请重试!" completion:nil];
  397. [Tools playAudioWithString:@"操作失败,请重试!"];
  398. }
  399. }
  400. }];
  401. } else {
  402. resultBlock(NO, nil);
  403. [RQ_SHARE_FUNCTION showAlertWithMessage:@"定位失败!" completion:nil];
  404. }
  405. }];
  406. }
  407. - (void)uploadZjmnLoginWithArray:(NSArray *)array resultBlock:(void (^)(BOOL isSuccess))resultBlock {
  408. if (![Util connectedToNetWork]) {
  409. showMsgUnconnect();
  410. resultBlock(NO);
  411. return;
  412. }
  413. NSString *trainTypeStr = array[1];
  414. NSInteger timeStamp = [RQ_SHARE_FUNCTION getTimeStampWithDate:[NSDate date]];
  415. NSString *timeStampStr = [NSString stringWithFormat:@"%@",[NSNumber numberWithInteger:timeStamp]];
  416. NSString *classIdStr = timeStampStr;
  417. if (classIdStr.length < 10) {
  418. /// 如果生成时间戳错误 用一个随机十位数代替
  419. classIdStr = [NSString stringWithFormat:@"%@",[NSNumber numberWithInteger:[NSString rq_randomNumberWithFrom:1647311377 to:9999999999]]];
  420. } else if (classIdStr.length > 10) {
  421. classIdStr = [classIdStr substringFromIndex:classIdStr.length - 10];
  422. }
  423. if ([trainTypeStr isEqualToString:@"1"]) {
  424. [QMUITips showLoading:@"签到中..." inView:DefaultTipsParentView];
  425. // [MBProgressHUD rq_showProgressHUD:@"签到中..."];
  426. } else if ([trainTypeStr isEqualToString:@"2"]) {
  427. // [MBProgressHUD rq_showProgressHUD:@"签退中..."];
  428. [QMUITips showLoading:@"签退中..." inView:DefaultTipsParentView];
  429. classIdStr = @"";
  430. }
  431. NSString *method = @"uploadZjmnLogin";
  432. NSMutableArray *arr = [NSMutableArray array];
  433. [arr addPro:@"stuid" Value:RQ_USER_MANAGER.currentUser.outId];///学员ID
  434. [arr addPro:@"dqbh" Value:RQ_USER_MANAGER.currentUser.city];///地区编号
  435. [arr addPro:@"sim" Value:array[0]];///SIM卡号
  436. [arr addPro:@"event" Value:array[1]];///扫码类型:1 签到 2签退 3培训过程
  437. [arr addPro:@"subject" Value:RQ_PT_Object_Module.zjSubjectStr];///当前扫码训练阶段
  438. [arr addPro:@"classId" Value:classIdStr];///課堂ID
  439. [arr addPro:@"timestamp" Value:array[3]];///时间戳
  440. if (array.count > 4) {
  441. [arr addPro:@"trainModel" Value:array[4]];/// 2 普通模拟 8考核模拟
  442. }
  443. ///
  444. [jiaPeiManager requestAnythingWithURL:method array:arr data:nil completion:^(NSDictionary * root) {
  445. // [MBProgressHUD rq_hideHUD];
  446. [QMUITips hideAllTips];
  447. if (!root) {
  448. resultBlock(NO);
  449. [QMUITips showError:@"操作失败,请重试!"];
  450. // [RQ_SHARE_FUNCTION showAlertWithMessage:@"操作失败,请重试!" completion:nil];
  451. [Tools playAudioWithString:@"操作失败,请重试!"];
  452. return;
  453. }
  454. if ([root[@"code"] integerValue] == 0) {
  455. resultBlock(YES);
  456. if ([root[@"body"] isKindOfClass:[NSString class]] && ![root[@"body"] isEqualToString:@""]) {
  457. [Tools playAudioWithString:root[@"body"]];
  458. [QMUITips showSucceed:root[@"body"]];
  459. // [RQ_SHARE_FUNCTION showAlertWithMessage:root[@"body"] completion:nil];
  460. } else {
  461. [QMUITips showError:@"操作成功!"];
  462. // [RQ_SHARE_FUNCTION showAlertWithMessage:@"操作成功!" completion:nil];
  463. [Tools playAudioWithString:@"操作成功!"];
  464. }
  465. } else {
  466. resultBlock(NO);
  467. if ([root[@"body"] isKindOfClass:[NSString class]] && ![root[@"body"] isEqualToString:@""]) {
  468. [Tools playAudioWithString:root[@"body"]];
  469. // [RQ_SHARE_FUNCTION showAlertWithMessage:root[@"body"] completion:nil];
  470. [QMUITips showError:root[@"body"]];
  471. } else {
  472. [QMUITips showError:@"操作失败,请重试!"];
  473. // [RQ_SHARE_FUNCTION showAlertWithMessage:@"操作失败,请重试!" completion:nil];
  474. [Tools playAudioWithString:@"操作失败,请重试!"];
  475. }
  476. }
  477. }];
  478. }
  479. - (void)uploadTrainFileMnWithArray:(NSArray *)array resultBlock:(void (^)(BOOL isSuccess))resultBlock {
  480. if (![Util connectedToNetWork]) {
  481. resultBlock(NO);
  482. showMsgUnconnect();
  483. return;
  484. }
  485. NSString *method = @"uploadTrainFileMn";
  486. [jiaPeiManager requestAnythingWithURL:method array:array data:nil completion:^(NSDictionary * root) {
  487. if (!root) {
  488. resultBlock(NO);
  489. [RQ_SHARE_FUNCTION showAlertWithMessage:@"上传失败,请重试!" completion:nil];
  490. [Tools playAudioWithString:@"上传失败,请重试!"];
  491. return;
  492. }
  493. if ([root[@"code"] integerValue] == 0) {
  494. resultBlock(YES);
  495. } else {
  496. resultBlock(NO);
  497. if ([root[@"body"] isKindOfClass:[NSString class]] && ![root[@"body"] isEqualToString:@""]) {
  498. [Tools playAudioWithString:root[@"body"]];
  499. [RQ_SHARE_FUNCTION showAlertWithMessage:root[@"body"] completion:nil];
  500. }
  501. }
  502. }];
  503. }
  504. - (NSString *)ptSubjectStr {
  505. NSString *key = [NSString stringWithFormat:@"ptSubjectStr-%@",RQ_USER_MANAGER.currentUser.stuNum];
  506. id object = [self getObjectWithKey:key];
  507. if (RQObjectIsNil(object)) {
  508. return @"";
  509. } else {
  510. NSString *myPtSubjectStr = (NSString *)object;
  511. return myPtSubjectStr;
  512. }
  513. }
  514. - (void)setPtSubjectStr:(NSString *)ptSubjectStr {
  515. NSString *key = [NSString stringWithFormat:@"ptSubjectStr-%@",RQ_USER_MANAGER.currentUser.stuNum];
  516. [self saveObjectWithObject:ptSubjectStr ForKey:key];
  517. }
  518. - (NSString *)zjSubjectStr {
  519. NSString *key = [NSString stringWithFormat:@"zjSubjectStr-%@",RQ_USER_MANAGER.currentUser.stuNum];
  520. id object = [self getObjectWithKey:key];
  521. if (RQObjectIsNil(object)) {
  522. return @"";
  523. } else {
  524. NSString *myZjSubjectStr = (NSString *)object;
  525. return myZjSubjectStr;
  526. }
  527. }
  528. - (void)setZjSubjectStr:(NSString *)zjSubjectStr {
  529. NSString *key = [NSString stringWithFormat:@"zjSubjectStr-%@",RQ_USER_MANAGER.currentUser.stuNum];
  530. [self saveObjectWithObject:zjSubjectStr ForKey:key];
  531. }
  532. - (void)saveObjectWithObject:(id)object ForKey:(NSString* )key {
  533. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
  534. if (!object) {
  535. [ud removeObjectForKey:key];
  536. }else{
  537. [ud setObject:object forKey:key];
  538. }
  539. [ud synchronize];
  540. }
  541. - (id)getObjectWithKey:(NSString *)key {
  542. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
  543. return [ud objectForKey:key];
  544. }
  545. @end