nasUploadFileManager.m 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  1. //
  2. // nasUploadFileManager.m
  3. // 双子星云手机
  4. //
  5. // Created by xd h on 2024/8/7.
  6. //
  7. #import "nasUploadFileManager.h"
  8. #import "nasUploadManager.h"
  9. @implementation nasUploadFileManager
  10. + (instancetype)shareInstance {
  11. static nasUploadFileManager *_instance;
  12. static dispatch_once_t onceToken;
  13. dispatch_once(&onceToken, ^{
  14. _instance = [[self alloc] init];
  15. });
  16. return _instance;
  17. }
  18. - (id)init
  19. {
  20. self = [super init];
  21. if (self) {
  22. [self initManager];
  23. }
  24. return self;
  25. }
  26. - (void)initManager
  27. {
  28. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(uploadTaskFinishedNoti:) name:nasUploadTaskExeEnd object:nil];
  29. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(uploadTaskErrorNoti:) name:nasUploadTaskExeError object:nil];
  30. }
  31. #pragma mark 读取数据库数据
  32. - (void)getDataInDatabaseFun:(BOOL)isReGet complete:(custom_complete_Arr)complete
  33. {
  34. if(_databaseArr && _databaseArr.count == 3 && !isReGet){
  35. complete(_databaseArr);
  36. return;
  37. }
  38. if(!_databaseArr)
  39. {
  40. _databaseArr = [NSMutableArray new];
  41. }
  42. //KWeakSelf
  43. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
  44. // NSLock *lock = [NSLock new];
  45. // [lock lock];
  46. HLog(@"begin bg_findAsync");
  47. [uploadFileDataModel bg_findAsync:nasUpLoadFile_tableName limit:0 orderBy:nil desc:YES complete:^(NSArray * _Nullable array) {
  48. HLog(@"end bg_findAsync");
  49. NSMutableArray *failArr = [NSMutableArray new];
  50. NSMutableArray *doneArr = [NSMutableArray new];
  51. NSMutableArray *otherArr = [NSMutableArray new];
  52. for (uploadFileDataModel * curModel in array) {
  53. //图片 和视频 还原
  54. if(curModel.curUploadFileType == uploadFileTypeImage){
  55. }
  56. else if(curModel.curUploadFileType == uploadFileTypeVideo){
  57. if(curModel.curUploadStateType != uploadStateDone){
  58. }
  59. }
  60. if(curModel.curUploadStateType == uploadStateFail){
  61. [failArr addObject:curModel];
  62. }
  63. else if(curModel.curUploadStateType == uploadStateDone){
  64. [doneArr addObject:curModel];
  65. }
  66. else{
  67. [otherArr addObject:curModel];
  68. }
  69. }
  70. NSLock *lock = [NSLock new];
  71. [lock lock];
  72. NSMutableArray *newArr = [NSMutableArray new];
  73. [newArr addObject:otherArr];
  74. [newArr addObject:doneArr];
  75. [newArr addObject:failArr];
  76. self->_databaseArr = newArr;
  77. [lock unlock];
  78. complete(self->_databaseArr);
  79. }];
  80. // [lock unlock];
  81. });
  82. }
  83. //把TZAssetModel 转成 我们需要上传的model
  84. - (void)handlTZAssetModelToUploadFileDataFunBy:(NSMutableArray*)indexPathsForSelectedItems complete:(custom_complete_Arr)complete
  85. {
  86. if(!indexPathsForSelectedItems && indexPathsForSelectedItems.count == 0){
  87. complete(_databaseArr);
  88. return;
  89. }
  90. if(ksharedAppDelegate.DisabledFileTransferType){
  91. if(ksharedAppDelegate.isImageNewFor130){
  92. [[iToast makeText:NSLocalizedString(@"File_Transfer_Disable_tip",nil)] show];
  93. }
  94. else{
  95. [[iToast makeText:NSLocalizedString(@"File_Transfer_Disable_tip2",nil)] show];
  96. }
  97. complete(_databaseArr);
  98. return;
  99. }
  100. _isNewAddTaskType = YES;
  101. self.curUploadModelNumbers = indexPathsForSelectedItems.count;
  102. NSMutableArray *newUploadTaskArr = [NSMutableArray new];
  103. NSLock *lock = [NSLock new];
  104. for (TZAssetModel * model in indexPathsForSelectedItems) {
  105. uploadFileDataModel * curModel = [uploadFileDataModel new];
  106. curModel.asset = model.asset;
  107. curModel.localIdentifier = model.asset.localIdentifier;
  108. BOOL isRepeatingTasksType = NO;
  109. [lock lock];
  110. //查询上传任务是否存在
  111. if(_databaseArr && _databaseArr.count == 3 ){
  112. NSMutableArray *uploadingArr = [[NSMutableArray alloc] initWithArray:_databaseArr[0]];
  113. for (uploadFileDataModel *preModel in uploadingArr) {
  114. if([preModel.localIdentifier isEqualToString:curModel.localIdentifier]){
  115. isRepeatingTasksType = YES;
  116. break;
  117. }
  118. }
  119. }
  120. [lock unlock];
  121. if(isRepeatingTasksType){
  122. continue;
  123. }
  124. NSString * uploadDefaultPath = [HWDataManager getStringWithKey:stringKeyAddSn(Const_photo_upload_default_path)];
  125. if(!uploadDefaultPath || uploadDefaultPath.length == 0){
  126. [HWDataManager setStringWithKey:stringKeyAddSn(Const_photo_upload_default_path) value:Const_default_upload_path];
  127. uploadDefaultPath = Const_default_upload_path;
  128. }
  129. //判断最后一个是否是/
  130. NSString *lastStr= [uploadDefaultPath substringFromIndex:uploadDefaultPath.length-1];
  131. if(![lastStr isEqualToString:@"/"]){
  132. uploadDefaultPath = [[NSString alloc] initWithFormat:@"%@/",uploadDefaultPath];
  133. }
  134. //NSString*savePath = [[NSString alloc] initWithFormat:@"%@%@",uploadDefaultPath,filePath];
  135. curModel.savePath = uploadDefaultPath;
  136. // curModel.imageData = model.imageData;
  137. // curModel.videoData = model.videoData;
  138. curModel.filename = [model.asset valueForKey:@"filename"];
  139. //curModel.curUploadStateType = uploadStateWait;
  140. curModel.curUploadStateType = uploadStateUploading;
  141. if(model.type == TZAssetModelMediaTypeVideo){
  142. curModel.curUploadFileType = uploadFileTypeVideo;
  143. [cachesFileManager getFileNameWithContent:curModel.videoData fileName:curModel.filename type:uploadFileTypeVideo];
  144. //curModel.totalBytes = [model.videoData length];
  145. curModel.totalBytes = model.totalBytes;
  146. curModel.videoData = [NSData new];//视频文件存储到文件后内存清空
  147. NSString *imgName1 = [curModel.filename stringByReplacingOccurrencesOfString:@"." withString:@"_"];
  148. curModel.videoFirstImageName = [[NSString alloc] initWithFormat:@"%@.png",imgName1];
  149. //第一帧图片
  150. [[PHImageManager defaultManager] requestImageDataForAsset:curModel.asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
  151. // 直接得到最终的 NSData 数据
  152. if (imageData) {
  153. curModel.imageData = imageData;
  154. [cachesFileManager getFileNameWithContent:curModel.imageData fileName:curModel.videoFirstImageName type:uploadFileTypeImage];
  155. }
  156. }];
  157. }
  158. else{
  159. curModel.curUploadFileType = uploadFileTypeImage;
  160. curModel.totalBytes = model.totalBytes;
  161. if(curModel.imageData)
  162. {
  163. [cachesFileManager getFileNameWithContent:curModel.imageData fileName:curModel.filename type:uploadFileTypeImage];
  164. curModel.imageData = nil;
  165. }
  166. else{
  167. }
  168. }
  169. //保存到数据库
  170. curModel.bg_tableName = nasUpLoadFile_tableName;
  171. [newUploadTaskArr addObject:curModel];
  172. }
  173. KWeakSelf
  174. if(newUploadTaskArr.count == 0){
  175. [self getDataInDatabaseFun:YES complete:^(NSMutableArray * _Nonnull Arr) {
  176. complete(Arr);
  177. [weakSelf handleUploadFileModelBg_idFun:Arr];
  178. }];
  179. }
  180. else{
  181. [uploadFileDataModel bg_saveOrUpdateArrayAsync:newUploadTaskArr complete:^(BOOL isSuccess) {
  182. [weakSelf getDataInDatabaseFun:YES complete:^(NSMutableArray * _Nonnull Arr) {
  183. complete(Arr);
  184. [weakSelf handleUploadFileModelBg_idFun:Arr];
  185. }];
  186. }];
  187. }
  188. }
  189. #pragma mark 处理当前的model 加上bg_id
  190. - (void)handleUploadFileModelBg_idFun:(NSMutableArray*)totalArr
  191. {
  192. if(!totalArr || totalArr.count != 3){
  193. return;
  194. }
  195. NSMutableArray* uploadTaskArr = [NSMutableArray arrayWithArray:totalArr[0]];
  196. //多任务同时进行模式
  197. if(uploadTaskArr.count >0){
  198. [[nasMixUploadManager shareManager] addUploadWithModels:uploadTaskArr];
  199. }
  200. }
  201. #pragma mark 上传完成
  202. - (void)uploadTaskFinishedNoti:(NSNotification *)notification
  203. {
  204. uploadFileDataModel *model = notification.object;
  205. if(!model)return;
  206. model.curUploadStateType = uploadStateDone;
  207. [self nasUploadFileChangeingOneFileFunBy:model];
  208. [self deleteCacheDataBy:model];
  209. }
  210. #pragma mark 上传失败
  211. - (void)uploadTaskErrorNoti:(NSNotification *)notification
  212. {
  213. uploadFileDataModel *model = notification.object;
  214. if(!model)return;
  215. model.curUploadStateType = uploadStateFail;
  216. [self nasUploadFileChangeingOneFileFunBy:model];
  217. [self deleteCacheDataBy:model];
  218. }
  219. #pragma mark 上传完成 清理缓存
  220. - (void)deleteCacheDataBy:(uploadFileDataModel*)uploadFileDataMod
  221. {
  222. HLog(@"上传--清理缓存")
  223. uploadFileDataMod.imageData = nil;
  224. uploadFileDataMod.videoData = nil;
  225. if(uploadFileDataMod.curUploadFileType == uploadFileTypeVideo){
  226. [cachesFileManager removeItemAtPath:uploadFileDataMod.filename type:uploadFileTypeVideo error:nil];
  227. }
  228. uploadFileDataMod = nil;
  229. }
  230. #pragma mark 更新数据状态
  231. - (void)nasUploadFileChangeingOneFileFunBy:(uploadFileDataModel*)dataModel
  232. {
  233. //test code
  234. //return;
  235. HLog(@"更新数据状态")
  236. if(dataModel.curUploadStateType == uploadStateDone){
  237. [self handleDatabaseArrDeleteObjectInUploading:dataModel];
  238. [self handleDatabaseArrAddObjectInDone:dataModel];
  239. }
  240. else if(dataModel.curUploadStateType == uploadStateFail){
  241. if (!_databaseArr || _databaseArr.count != 3) {
  242. return;
  243. }
  244. //删除操作导致的失败
  245. NSMutableArray *ingArr = _databaseArr[0];
  246. NSInteger count = ingArr.count;
  247. if(count == 0){
  248. return;
  249. }
  250. [self handleDatabaseArrDeleteObjectInUploading:dataModel];
  251. [self handleDatabaseArrAddObjectInFail:dataModel];
  252. }
  253. dataModel.bg_tableName = nasUpLoadFile_tableName;
  254. [dataModel bg_saveOrUpdateAsync:^(BOOL isSuccess) {
  255. HLog(@"%@ 写入 %@", dataModel.filename, isSuccess ? @"成功":@"失败");
  256. }];
  257. if(!_isSuspendType || dataModel.curUploadStateType != uploadStateSuspend){
  258. HLog(@"nasUploadFileChangeingOneFileFunBy uploadFileRefreshNotification")
  259. [[NSNotificationCenter defaultCenter] postNotificationName:uploadFileRefreshNotification object:dataModel];
  260. }
  261. }
  262. #pragma mark 删除上传中的任务
  263. - (void)handleDatabaseArrDeleteObjectInUploading:(uploadFileDataModel*)model
  264. {
  265. HLog(@"删除上传中的任务")
  266. NSLock *lock = [NSLock new];
  267. [lock lock];
  268. if(_databaseArr && _databaseArr.count == 3 ){
  269. NSMutableArray *ingArr = _databaseArr[0];
  270. NSInteger count = ingArr.count;
  271. [ingArr removeObject:model];
  272. NSInteger atferDelCount = ingArr.count;
  273. if(count == atferDelCount){
  274. HLog(@"删除上传中的任务 异常 需要遍历 开始")
  275. for (couldPhoneFileModel*preModel in ingArr) {
  276. if(preModel.bg_id.integerValue == model.bg_id.integerValue){
  277. [ingArr removeObject:preModel];
  278. break;
  279. }
  280. }
  281. HLog(@"删除上传中的任务 异常 需要遍历 结束")
  282. }
  283. }
  284. [lock unlock];
  285. }
  286. #pragma mark 添加任务到上传完成
  287. - (void)handleDatabaseArrAddObjectInDone:(uploadFileDataModel*)model
  288. {
  289. HLog(@"添加任务到上传完成")
  290. NSLock *lock = [NSLock new];
  291. [lock lock];
  292. if(_databaseArr && _databaseArr.count == 3 ){
  293. NSMutableArray *doneArr = _databaseArr[1];
  294. if(model){
  295. [doneArr insertObject:model atIndex:0];
  296. }
  297. }
  298. [lock unlock];
  299. }
  300. #pragma mark 添加任务到上传失败
  301. - (void)handleDatabaseArrAddObjectInFail:(uploadFileDataModel*)model
  302. {
  303. HLog(@"添加任务到上传失败")
  304. NSLock *lock = [NSLock new];
  305. [lock lock];
  306. if(_databaseArr && _databaseArr.count == 3 ){
  307. NSMutableArray *failArr = _databaseArr[2];
  308. if(model){
  309. [failArr insertObject:model atIndex:0];
  310. }
  311. }
  312. [lock unlock];
  313. }
  314. #pragma mark 上传完成所有任务
  315. - (void)didUploadAllTaskDoneFun
  316. {
  317. //self->_isUploadIngType = NO;
  318. [[NSNotificationCenter defaultCenter] postNotificationName:uploadFileAllTaskDoneNotification object:nil];
  319. }
  320. #pragma mark 删除内存数据记录
  321. - (void)handleDatabaseArrByDelete:(uploadFileDataModel*)delModel
  322. {
  323. if(_databaseArr && _databaseArr.count == 3 ){
  324. NSMutableArray *uploadingArr = nil;
  325. if(delModel.curUploadStateType == uploadStateUploading
  326. ||delModel.curUploadStateType == uploadStateSuspend
  327. ||delModel.curUploadStateType == uploadStateWait){
  328. uploadingArr = _databaseArr[0];
  329. }
  330. else if(delModel.curUploadStateType == uploadStateDone)
  331. {
  332. uploadingArr = _databaseArr[1];
  333. }
  334. else{
  335. uploadingArr = _databaseArr[2];
  336. }
  337. [uploadingArr removeObject:delModel];
  338. }
  339. }
  340. #pragma mark 删除本地数据库记录
  341. - (void)deleteUploadFileRecordBy:(NSMutableArray *)delArr withDelCache:(BOOL)isDelCache complete:(custom_complete_B)complete
  342. {
  343. //
  344. BOOL isDelUploadingModel = NO;
  345. NSMutableArray *curDelArr = [NSMutableArray arrayWithArray:delArr];
  346. for (uploadFileDataModel *uploadFileDataMod in curDelArr) {
  347. //1.删除数据库
  348. NSMutableString* where = [[NSMutableString alloc] initWithString:@"where "];
  349. NSString *curStr = [NSString stringWithFormat:@"%@=%@ ",bg_sqlKey(@"bg_id"),bg_sqlValue(uploadFileDataMod.bg_id)];
  350. [where appendString:curStr];
  351. //isSuc = [uploadFileDataModel bg_delete:nasUpLoadFile_tableName where:where];
  352. [uploadFileDataModel bg_deleteAsync:nasUpLoadFile_tableName where:where complete:^(BOOL isSuccess) {
  353. if(isSuccess){
  354. }
  355. }];
  356. // 2.删除内存数据
  357. [self handleDatabaseArrByDelete:uploadFileDataMod];
  358. //3.删除缓存的本地数据
  359. if(isDelCache){
  360. //判断是否可以删除本地缓存
  361. if(_databaseArr && _databaseArr.count == 3 ){
  362. NSMutableArray *uploadingArr = _databaseArr[0];
  363. NSMutableArray *uploadDoneArr = _databaseArr[1];
  364. NSMutableArray *uploadFailArr = _databaseArr[2];
  365. BOOL isNeedDel = YES;
  366. for (uploadFileDataModel *baseUploadFileDataMod in uploadingArr) {
  367. if([uploadFileDataMod.filename isEqualToString:baseUploadFileDataMod.filename] ){
  368. isNeedDel = NO;
  369. break;
  370. }
  371. }
  372. if(isNeedDel){
  373. for (uploadFileDataModel *baseUploadFileDataMod in uploadDoneArr) {
  374. if([uploadFileDataMod.filename isEqualToString:baseUploadFileDataMod.filename] ){
  375. isNeedDel = NO;
  376. break;
  377. }
  378. }
  379. }
  380. if(isNeedDel){
  381. for (uploadFileDataModel *baseUploadFileDataMod in uploadFailArr) {
  382. if([uploadFileDataMod.filename isEqualToString:baseUploadFileDataMod.filename] ){
  383. isNeedDel = NO;
  384. break;
  385. }
  386. }
  387. }
  388. if(isNeedDel){
  389. if(uploadFileDataMod.curUploadFileType == uploadFileTypeVideo){
  390. [cachesFileManager removeItemAtPath:uploadFileDataMod.videoFirstImageName type:uploadFileTypeImage error:nil];
  391. [cachesFileManager removeItemAtPath:uploadFileDataMod.filename type:uploadFileTypeVideo error:nil];
  392. }
  393. else{
  394. [cachesFileManager removeItemAtPath:uploadFileDataMod.filename type:uploadFileTypeImage error:nil];
  395. }
  396. }
  397. }
  398. }
  399. if(!isDelCache){//上传报云机已经存在文件了 查询本地是否有任务记录
  400. [self handleRetryUploadAndDelRecordFun:uploadFileDataMod];
  401. }
  402. //是否在删除上传中的任务
  403. if(uploadFileDataMod.curUploadStateType == uploadStateUploading){
  404. [[nasMixUploadManager shareManager] cancelUploadTaskFunWith:uploadFileDataMod];
  405. }
  406. }
  407. uploadFileDataModel *RefreshUploadFileDataMod = nil;
  408. if(delArr.count >= 1){
  409. RefreshUploadFileDataMod = delArr.firstObject;
  410. }
  411. [[NSNotificationCenter defaultCenter] postNotificationName:uploadFileRefreshNotification object:RefreshUploadFileDataMod];
  412. complete(YES);
  413. }
  414. #pragma mark 处理重复上传文件的问题
  415. - (void)handleRetryUploadAndDelRecordFun:(uploadFileDataModel *)uploadFileDataMod
  416. {
  417. NSLock *lock = [NSLock new];
  418. [lock lock];
  419. if (!_databaseArr || _databaseArr.count != 3) {
  420. return;
  421. }
  422. NSMutableArray * doneArr = _databaseArr[1];
  423. NSMutableArray * failArr = _databaseArr[2];
  424. BOOL isNeedDelType = YES;
  425. for (uploadFileDataModel *doneModel in doneArr) {
  426. if([doneModel.localIdentifier isEqualToString:uploadFileDataMod.localIdentifier]){
  427. isNeedDelType = NO;
  428. break;
  429. }
  430. }
  431. if(isNeedDelType){
  432. for (uploadFileDataModel *failModel in failArr) {
  433. if([failModel.localIdentifier isEqualToString:uploadFileDataMod.localIdentifier]){
  434. isNeedDelType = NO;
  435. break;
  436. }
  437. }
  438. }
  439. if(isNeedDelType){
  440. if(uploadFileDataMod.curUploadFileType == uploadFileTypeVideo){
  441. [cachesFileManager removeItemAtPath:uploadFileDataMod.videoFirstImageName type:uploadFileTypeImage error:nil];
  442. [cachesFileManager removeItemAtPath:uploadFileDataMod.filename type:uploadFileTypeVideo error:nil];
  443. }
  444. else{
  445. [cachesFileManager removeItemAtPath:uploadFileDataMod.filename type:uploadFileTypeImage error:nil];
  446. }
  447. }
  448. else{//视频文件是要删除的
  449. if(uploadFileDataMod.curUploadFileType == uploadFileTypeVideo){
  450. [cachesFileManager removeItemAtPath:uploadFileDataMod.filename type:uploadFileTypeVideo error:nil];
  451. }
  452. }
  453. [lock unlock];
  454. }
  455. - (void)checkHadUploadTaskWithComplete:(custom_complete_B)complete
  456. {
  457. [self getDataInDatabaseFun:NO complete:^(NSMutableArray * _Nonnull Arr) {
  458. mainBlock(^{
  459. if(!Arr || Arr.count != 3){
  460. complete(NO);
  461. }
  462. else{
  463. NSArray *firstArr = Arr[0];
  464. if(firstArr.count >0){
  465. complete(YES);
  466. }
  467. else{
  468. complete(NO);
  469. }
  470. }
  471. });
  472. }];
  473. }
  474. //文件重新上传
  475. - (void)reUploadFileFunBy:(NSMutableArray*)Arr withAll:(BOOL)isAllType
  476. {
  477. if(!Arr || Arr.count == 0){
  478. return;
  479. }
  480. //1.修改状态从失败改为上传中
  481. for (uploadFileDataModel * model in Arr) {
  482. model.curUploadStateType = uploadStateUploading;
  483. //修改已经读取的内存数据
  484. NSMutableArray * failArr = _databaseArr[2];
  485. for (uploadFileDataModel * failModel in failArr) {
  486. if(model.bg_id.integerValue == failModel.bg_id.integerValue){
  487. [failArr removeObject:failModel];
  488. break;
  489. }
  490. }
  491. }
  492. //2、保存到数控库
  493. [uploadFileDataModel bg_saveOrUpdateArrayAsync:Arr complete:^(BOOL isSuccess) {
  494. }];
  495. //重新开始上传
  496. [[nasMixUploadManager shareManager] addUploadWithModels:Arr];
  497. }
  498. //暂停上传 当 isSuspendAll为NO时候 传指定暂停哪一个
  499. - (void)suspendUploadFileFun:(BOOL)isSuspendAll withModel:(uploadFileDataModel*)model
  500. {
  501. //[[nasUploadManager shareInstance] cancelUploadTaskFun];
  502. if (isSuspendAll) {
  503. [[nasMixUploadManager shareManager] cancelUploadAllTaskFun];
  504. }
  505. else{
  506. [[nasMixUploadManager shareManager] cancelUploadTaskFunWith:model];
  507. }
  508. [self suspendUploadingTaskBy:isSuspendAll withModel:model];
  509. }
  510. #pragma mark 暂停任务
  511. - (void)suspendUploadingTaskBy:(BOOL)isDeleteAll withModel:(uploadFileDataModel*)model
  512. {
  513. NSMutableArray *uploadingArr = [NSMutableArray new];
  514. if(!isDeleteAll){
  515. if(model){
  516. model.curUploadStateType = uploadStateSuspend;
  517. [uploadingArr addObject:model];
  518. }
  519. }
  520. else
  521. {
  522. if (!_databaseArr || _databaseArr.count != 3) {
  523. return;
  524. }
  525. uploadingArr = _databaseArr[0];
  526. for (uploadFileDataModel*preModel in uploadingArr) {
  527. preModel.curUploadStateType = uploadStateSuspend;
  528. }
  529. }
  530. if(uploadingArr.count > 0){
  531. //更新数据库
  532. [uploadFileDataModel bg_saveOrUpdateArrayAsync:uploadingArr complete:^(BOOL isSuccess) {
  533. }];
  534. }
  535. }
  536. @end