RQPTObjectMolule.m 34 KB

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