CloudStorageDB.m 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  1. //
  2. // CloudStorageDB.m
  3. // zhuxun
  4. //
  5. // Created by winsoft on 17/6/22.
  6. //
  7. //
  8. #import "CloudStorageDB.h"
  9. #import "DBOperation.h"
  10. #import <MagicalRecord/MagicalRecord.h>
  11. #import <MJExtension/MJExtension.h>
  12. #import "DBConfigureCenter.h"
  13. #import <objc/runtime.h>
  14. @interface CloudStorageDB()
  15. @property (nonatomic , strong) DBOperation *dbOperation;
  16. @end
  17. @implementation CloudStorageDB
  18. static CloudStorageDB *cloudStorageDB;
  19. + (instancetype)shareInstance
  20. {
  21. static dispatch_once_t onceToken;
  22. dispatch_once(&onceToken, ^{
  23. cloudStorageDB = [[self alloc] init];
  24. });
  25. return cloudStorageDB;
  26. }
  27. - (instancetype)init
  28. {
  29. if (self = [super init]) {
  30. NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
  31. // app名称
  32. NSString *app_Name = [infoDictionary objectForKey:@"CFBundleName"];
  33. NSString *appSuportPath = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) objectAtIndex:0];
  34. BOOL isDirectory_appSuportPath = YES;
  35. NSError *error;
  36. NSString *localPath = [appSuportPath stringByAppendingPathComponent:app_Name];
  37. [DBConfigureCenter createCacheDirectory:localPath];
  38. //查无则创建文件夹 已移入 DBConfigureCenter createCacheDirctory
  39. // BOOL existsDirectory = [[NSFileManager defaultManager]fileExistsAtPath:localPath isDirectory:&isDirectory_appSuportPath];
  40. // if (!existsDirectory) {
  41. // [[NSFileManager defaultManager]createDirectoryAtPath:localPath withIntermediateDirectories:YES attributes:nil error:&error];
  42. //
  43. // }
  44. NSString *path = [NSString stringWithFormat:@"%@/%@_cloudStorageDisk.sqlite",localPath,Login_Name];
  45. //BOOL existsDBfile = [[NSFileManager defaultManager]fileExistsAtPath:appSuportPath isDirectory:(BOOL*)NO];
  46. //创建表
  47. self.dbOperation = [DBOperation dbOperationWithPath:path];
  48. [self.dbOperation creatDBWithTableName:cacheFileList dbModelClass:[CSFileModel class] Path:path autoUpgrade:YES uniqueCloumName:@"sid"];
  49. [self.dbOperation creatDBWithTableName:downTransFileList dbModelClass:[CSFileDownUpModel class] Path:path autoUpgrade:YES uniqueCloumName:@"downUpUUID"];
  50. [self.dbOperation creatDBWithTableName:upTransFileList dbModelClass:[CSFileDownUpModel class] Path:path autoUpgrade:YES uniqueCloumName:@"downUpUUID"];
  51. }
  52. return self;
  53. }
  54. //- (instancetype)init
  55. //{
  56. // if (self = [super init]) {
  57. //
  58. //
  59. // NSString *localPath = [NSPersistentStore MR_defaultLocalStoreUrl].absoluteString.stringByDeletingLastPathComponent;
  60. //
  61. // NSString *path = [NSString stringWithFormat:@"%@/%@_cloudStorageDisk.sqlite",localPath,Login_Name];
  62. // NSFileManager *filemanager = [NSFileManager defaultManager];
  63. //
  64. // NSString *libraryPathstr = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
  65. // NSString *applicationsupportdir = [libraryPathstr stringByAppendingString:@"/Application Support"];
  66. //
  67. // NSError *error;
  68. // BOOL resultlocalpath = [filemanager createDirectoryAtPath:applicationsupportdir withIntermediateDirectories:YES attributes:nil error:&error];
  69. // NSString *dbpath =
  70. // //创建表
  71. // self.dbOperation = [DBOperation dbOperationWithPath:path];
  72. //
  73. // [self.dbOperation creatDBWithTableName:cacheFileList dbModelClass:[CSFileModel class] Path:path autoUpgrade:YES uniqueCloumName:@"sid"];
  74. //
  75. // [self.dbOperation creatDBWithTableName:downTransFileList dbModelClass:[CSFileDownUpModel class] Path:path autoUpgrade:YES uniqueCloumName:@"downUpUUID"];
  76. //
  77. // [self.dbOperation creatDBWithTableName:upTransFileList dbModelClass:[CSFileDownUpModel class] Path:path autoUpgrade:YES uniqueCloumName:@"downUpUUID"];
  78. //
  79. // }
  80. //
  81. // return self;
  82. //}
  83. //建立索引
  84. - (void)createIndexForTableName:(NSString *)name indexCloums:(NSArray<NSArray*> *)indexCloums
  85. {
  86. for (NSString *cloum in indexCloums) {
  87. NSString *sql = [NSString stringWithFormat:@"create index %@_%@ on %@(%@)",name,cloum,name,cloum];
  88. [self.dbOperation addDataToDBWithSQL:sql];
  89. }
  90. }
  91. - (void)addcsFilestoDB:(NSArray *)csFilesArray
  92. {
  93. [self.dbOperation addDatasDBWithTableName:cacheFileList models:csFilesArray];
  94. }
  95. //增加一条数据到数据库中
  96. - (void)addcsFiletoDB:(CSFileModel *)csFile
  97. {
  98. [self.dbOperation addDataDBWithTableName:cacheFileList model:csFile];
  99. }
  100. - (void)addCSDownUpFileToDB:(CSFileDownUpModel *)csDownUpFile
  101. {
  102. if (!csDownUpFile.pid) {
  103. csDownUpFile.pid = @"0";
  104. }
  105. //外部调用前请自身判断是否由相同的数据存在.
  106. if (csDownUpFile.downUpType == DownUpModelDown) {
  107. [self.dbOperation addDataDBWithTableName:downTransFileList model:csDownUpFile];
  108. }else [self.dbOperation addDataDBWithTableName:upTransFileList model:csDownUpFile];
  109. }
  110. - (void)addCSDownUpFilesToDB:(NSArray *)csDownUpFileToDBArray downUpModel:(DownUpModel)downUpModel
  111. {
  112. NSString *tableName = nil;
  113. if (downUpModel == DownUpModelDown) {
  114. tableName = downTransFileList;
  115. }else tableName = upTransFileList;
  116. [self.dbOperation addDatasDBWithTableName:tableName models:csDownUpFileToDBArray];
  117. }
  118. - (void)updateCloudFileToDB:(CSFileModel *)csFile
  119. {
  120. }
  121. #pragma mark -- 2017-07-26 文件迁移 serverFullPath未处理 --sql
  122. - (void)updateCSFilestoDB:(NSArray *)csFileSids targetid:(NSString *)pid{
  123. NSMutableString * pidsstring = [NSMutableString string];
  124. NSUInteger idx = 0;
  125. NSUInteger arraycount = csFileSids.count;
  126. for (NSString *str in csFileSids) {
  127. [pidsstring appendString:[NSString stringWithFormat:@"'%@'",str]];
  128. idx++;
  129. if (idx<arraycount) {
  130. [pidsstring appendString:@","];
  131. }
  132. }
  133. //未处理 serverFullPath
  134. NSString *sql = [NSString stringWithFormat:@"UPDATE cacheFileList set pid = %@ where sid in (%@)",pid,pidsstring];
  135. [self.dbOperation addDataToDBWithSQL:sql];
  136. }
  137. - (void)getAllCloudFilesWithPid:(NSString *)pid resultBlock:(void(^)(NSArray *result))resultBlock
  138. {
  139. NSString *sql = [NSString stringWithFormat:@"select * from cacheFileList where pid = '%@'",pid];
  140. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  141. //dict array;
  142. NSArray *modelArray = [CSFileModel mj_objectArrayWithKeyValuesArray:array];
  143. resultBlock(modelArray);
  144. }];
  145. }
  146. //isFile
  147. - (void)getFileModelWithFileMD5:(NSString *)md5 resultBlock:(void(^)(CSFileModel *csFileModel))resultBlock
  148. {
  149. NSString *sql = [NSString stringWithFormat:@"select * from cacheFileList where md5 = '%@'",md5];
  150. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  151. //dict array;
  152. NSArray *modelArray = [CSFileModel mj_objectArrayWithKeyValuesArray:array];
  153. if (modelArray.count) {
  154. resultBlock(modelArray[0]);
  155. }else resultBlock(nil);
  156. }];
  157. }
  158. //isDir
  159. - (void)getFileModelWithFileID:(NSString *)ID resultBlock:(void(^)(CSFileModel *csFileModel))resultBlock
  160. {
  161. NSString *sql = [NSString stringWithFormat:@"select * from cacheFileList where sid = '%@'",ID];
  162. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  163. //dict array;
  164. NSArray *modelArray = [CSFileModel mj_objectArrayWithKeyValuesArray:array];
  165. if (modelArray.count) {
  166. resultBlock(modelArray[0]);
  167. }else resultBlock(nil);
  168. }];
  169. }
  170. - (void)getCSDownUpFileWithMD5:(NSString *)md5 downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(NSArray *csFileModels))resultBlock
  171. {
  172. NSString *sql = downUpModel == DownUpModelDown?[NSString stringWithFormat:@"select * from downTransFileList where md5 = '%@'",md5]:[NSString stringWithFormat:@"select * from upTransFileList where md5 = '%@'",md5];
  173. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  174. //dict array;
  175. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  176. if (modelArray.count) {
  177. resultBlock(modelArray);
  178. }else resultBlock(nil);
  179. }];
  180. }
  181. - (void)getCSDownUpFileWithMD5:(NSString *)md5 pid:(NSString *)pid name:(NSString *)name downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(CSFileDownUpModel *csFileModel))resultBlock
  182. {
  183. NSString *sql = downUpModel == DownUpModelDown?[NSString stringWithFormat:@"select * from downTransFileList where md5 = '%@' and pid = '%@' and name = '%@'",md5,pid,name]:[NSString stringWithFormat:@"select * from upTransFileList where md5 = '%@' and pid = '%@' and name = '%@'",md5,pid,name];
  184. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  185. //dict array;
  186. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  187. if (modelArray.count) {
  188. resultBlock(modelArray[0]);
  189. }else resultBlock(nil);
  190. }];
  191. }
  192. - (void)getCSDownUpFileWithUUID:(NSString *)downUpUUID downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(CSFileDownUpModel *csFileModel))resultBlock
  193. {
  194. NSString *tableName = nil;
  195. tableName = (downUpModel == DownUpModelDown)?downTransFileList:upTransFileList;
  196. NSString *sql = [NSString stringWithFormat:@"select * from %@ where downUpUUID = '%@'",tableName,downUpUUID];
  197. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  198. //dict array;
  199. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  200. if (modelArray.count) {
  201. resultBlock(modelArray[0]);
  202. }else resultBlock(nil);
  203. }];
  204. }
  205. - (void)getCSDownUpFilesWithUUIDs:(NSArray *)downUpUUIDs downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(NSArray *csFileModels))resultBlock
  206. {
  207. NSString *strUUIDs = [downUpUUIDs componentsJoinedByString:@","];
  208. NSString *tableName = (downUpModel == DownUpModelDown)?downTransFileList:upTransFileList;
  209. NSString *sql = [NSString stringWithFormat:@"select * from %@ where downUpUUID in (%@)",tableName,strUUIDs];
  210. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  211. //dict array;
  212. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  213. if (modelArray.count) {
  214. resultBlock(modelArray);
  215. }else resultBlock(nil);
  216. }];
  217. }
  218. - (void)getCSDownUpFileSameNameDifMd5WithMD5:(NSString *)md5 name:(NSString *)name localPath:(NSString *)localPath downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(NSInteger sameNameFileCount))resultBlock
  219. {
  220. NSString *tableName = nil;
  221. tableName = (downUpModel == DownUpModelDown)?downTransFileList:upTransFileList;
  222. // and localRootPath = '%@' ,localPath
  223. NSString *sql = [NSString stringWithFormat:@"select * from %@ where md5 != '%@' and name = '%@' and localRootPath = '%@'",tableName ,md5,name,localPath];
  224. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  225. //dict array;
  226. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  227. resultBlock(modelArray.count);
  228. }];
  229. }
  230. - (void)getProcessCSDownUpFileWithMD5:(NSString *)md5 name:(NSString *)name downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(NSArray *downUpModels))resultBlock
  231. {
  232. NSString *sql = downUpModel == DownUpModelDown?[NSString stringWithFormat:@"select * from downTransFileList where md5 != '%@' and name = '%@' and (downUpStatus = %d OR downUpStatus = %d)",md5,name,DownUpStatusWait,DownUpStatusDoing]:[NSString stringWithFormat:@"select * from upTransFileList where md5 != '%@' and name = '%@' and (downUpStatus = %d OR downUpStatus = %d)",md5,name,DownUpStatusWait,DownUpStatusDoing];
  233. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  234. //dict array;
  235. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  236. if (modelArray.count) {
  237. resultBlock(modelArray);
  238. }else resultBlock(nil);
  239. }];
  240. }
  241. - (void)getAllProcessOrWaitFileWithResultBlock:(void(^)(NSArray *downModels,NSArray *upModels))resultBlock;
  242. {
  243. NSString *sql = [NSString stringWithFormat:@"select * from %@ where downUpStatus <= %d and isdir = 0 order by downUpStatus desc",upTransFileList,DownUpStatusDoing];
  244. NSString *sql2 = [NSString stringWithFormat:@"select * from %@ where downUpStatus <= %d and isdir = 0 order by downUpStatus desc",downTransFileList,DownUpStatusDoing];
  245. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  246. //dict array;
  247. NSArray *upModels = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  248. [self.dbOperation quaryDBbySQL:sql2 result:^(NSMutableArray *array) {
  249. //dict array;
  250. NSArray *downModels = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  251. if (resultBlock) {
  252. resultBlock(downModels, upModels);
  253. }
  254. }];
  255. }];
  256. }
  257. - (void)getAllCSDownUpFilesFoldersWithPid:(NSString *)pid isdir:(NSInteger)isDir downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(NSArray *downUpModels))resultBlock
  258. {
  259. /*
  260. select * from downTransFileList where pid= 'pid'
  261. union all
  262. select a.sid,a.pid,a.downUpUUID as Level from downTransFileList a
  263. inner join downTransFileList b on a.sid=b.pid
  264. inner join
  265. (
  266. select ParentID from tblCity group by ParentID
  267. ) c on a.ParentID=c.ParentID
  268. */
  269. //@"WITH RECURSIVE result(pid,sid) AS(SELECT * FROM %@ WHERE pid='%@' UNION SELECT a.sid,a.pid FROM %@ a,result b WHERE b.sid = a.pid)SELECT * from result"//[DBConfigureCenter getKeysArrayStrWithClassName:[CSFileDownUpModel class]]
  270. NSString *tableName = (downUpModel == DownUpModelDown?downTransFileList:upTransFileList);
  271. NSString *sql = [NSString stringWithFormat:@"WITH RECURSIVE result(%@) AS(SELECT * FROM %@ WHERE pid='%@' UNION SELECT a.* FROM %@ a,result b WHERE b.sid = a.pid)SELECT * from result",[DBConfigureCenter getKeysArrayStrWithClassName:[CSFileDownUpModel class]],tableName,pid,tableName];
  272. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  273. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  274. NSMutableArray *tempArray = [NSMutableArray array];
  275. for (CSFileDownUpModel *csFileDownUpModel in modelArray) {
  276. if (isDir == 0 && !csFileDownUpModel.isdir) {
  277. [tempArray addObject:csFileDownUpModel];
  278. }else if (isDir == 1 && csFileDownUpModel.isdir)
  279. {
  280. [tempArray addObject:csFileDownUpModel];
  281. }else if(isDir == 2)
  282. {
  283. [tempArray addObject:csFileDownUpModel];
  284. }
  285. }
  286. if (tempArray.count) {
  287. resultBlock(tempArray);
  288. }else resultBlock(nil);
  289. }];
  290. }
  291. - (void)judgeFileFolderDownUpResultWithWithPid:(NSString *)pid downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(DownUpStatus downUpStatus, NSArray *totalDownUpFileModels))resultBlock
  292. {
  293. NSString *tableName = (downUpModel == DownUpModelDown?downTransFileList:upTransFileList);
  294. NSString *sql = [NSString stringWithFormat:@"WITH RECURSIVE result(%@) AS(SELECT * FROM %@ WHERE pid='%@' UNION SELECT a.* FROM %@ a,result b WHERE b.sid = a.pid)SELECT * from result",[DBConfigureCenter getKeysArrayStrWithClassName:[CSFileDownUpModel class]],tableName,pid,tableName];
  295. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  296. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  297. DownUpStatus fileFolderStatus = DownUpStatusSuccess;
  298. NSArray *tempArray = [modelArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"isdir = 0"]];
  299. //还不如统计多个呢.
  300. NSInteger successNum = 0;
  301. NSInteger faiureNum = 0;
  302. NSInteger doingNum = 0;
  303. NSInteger waitNum = 0;
  304. NSInteger pauseNum = 0;
  305. //暂停条件,不存在doing和wating下,只有pause和success,faiure.
  306. for (CSFileDownUpModel *csFileDownUpModel in tempArray) {
  307. if (csFileDownUpModel.downUpStatus == DownUpStatusSuccess) {
  308. successNum ++;
  309. }else if (csFileDownUpModel.downUpStatus == DownUpStatusFailure)
  310. {
  311. faiureNum ++;
  312. }else if (csFileDownUpModel.downUpStatus == DownUpStatusDoing)
  313. {
  314. doingNum ++;
  315. }else if (csFileDownUpModel.downUpStatus == DownUpStatusWait)
  316. {
  317. waitNum ++;
  318. }else if (csFileDownUpModel.downUpStatus == DownUpStatusPause)
  319. {
  320. pauseNum ++;
  321. }
  322. }
  323. if (successNum == tempArray.count) {
  324. fileFolderStatus = DownUpStatusSuccess;
  325. }else if (faiureNum == tempArray.count)
  326. {
  327. fileFolderStatus = DownUpStatusFailure;
  328. }else if (pauseNum && !doingNum && ! waitNum)
  329. {
  330. fileFolderStatus = DownUpStatusPause;
  331. }else if (waitNum == tempArray.count)
  332. {
  333. fileFolderStatus = DownUpStatusWait;
  334. }else fileFolderStatus = DownUpStatusDoing;
  335. resultBlock(fileFolderStatus,tempArray);
  336. }];
  337. }
  338. - (void)getFolderFilesDownUpStatusWithPid:(NSString *)pid downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(DownUpStatus downUpStatus))resultBlock
  339. {
  340. NSString *tableName = (downUpModel == DownUpModelDown?downTransFileList:upTransFileList);
  341. NSString *sql = sql = [NSString stringWithFormat:@"WITH RECURSIVE result(%@) AS(SELECT * FROM %@ WHERE pid='%@' and isdir = 0 UNION SELECT a.* FROM %@ a,result b WHERE b.sid = a.pid)SELECT * from result",[DBConfigureCenter getKeysArrayStrWithClassName:[CSFileDownUpModel class]],tableName,pid,tableName];
  342. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  343. #warning 2017-07-06
  344. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  345. BOOL result = YES;
  346. for (CSFileDownUpModel *csFileDownUpModel in modelArray) {
  347. if (csFileDownUpModel.downUpStatus != DownUpStatusSuccess) {
  348. result = NO;
  349. }
  350. }
  351. if (result) {
  352. resultBlock(DownUpStatusSuccess);
  353. }else resultBlock(DownUpStatusDoing);
  354. }];
  355. }
  356. - (void)getCSDownUpFolderWithID:(NSString *)sid isdir:(BOOL)isdir name:(NSString *)name category:(NSInteger)category downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(CSFileDownUpModel *csFileModel))resultBlock
  357. {
  358. NSString *sql = downUpModel == DownUpModelDown?[NSString stringWithFormat:@"select * from downTransFileList where sid = '%@' and name = '%@' and isdir = %d and file_category = %ld",sid,name,isdir,category]:[NSString stringWithFormat:@"select * from upTransFileList where sid != '%@' and name = '%@' and isdir = %d and file_category = %ld",sid,name,isdir,category];
  359. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  360. //dict array;
  361. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  362. if (modelArray.count) {
  363. resultBlock(modelArray[0]);
  364. }else resultBlock(nil);
  365. }];
  366. }
  367. - (void)getCSDownUpFolderAndSetSameStatusWithID:(NSString *)sid downUpModel:(DownUpModel)downUpModel
  368. {
  369. NSString *sql = downUpModel == DownUpModelDown?[NSString stringWithFormat:@"select * from downTransFileList where sid = '%@' and downUpStatus = %d",sid,DownUpStatusSuccess]:[NSString stringWithFormat:@"select * from upTransFileList where sid != '%@' and downUpStatus = %d",sid,DownUpStatusSuccess];
  370. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  371. //dict array;
  372. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  373. if (modelArray.count) {
  374. CSFileDownUpModel *csFileDownUpModel = modelArray[0];
  375. NSString *sql = [NSString stringWithFormat:@"update %@ set downUpStatus = %d where sid = '%@'",csFileDownUpModel.downUpType == DownUpModelDown?downTransFileList:upTransFileList,csFileDownUpModel.downUpStatus,csFileDownUpModel.sid];
  376. [self.dbOperation addDataToDBWithSQL:sql];
  377. }
  378. }];
  379. }
  380. //+ (void)getCSDownUpFileWithMD5:(NSString *)md5 filename:(NSString *)filename downUpModel:(DownUpModel)downUpModel resultBlock:(void(^)(CSFileDownUpModel *csFileModel))resultBlock
  381. //{
  382. // NSString *sql = downUpModel == DownUpModelDown?[NSString stringWithFormat:@"select * from downTransFileList where md5 = '%@' and name = '%@'",md5,filename]:[NSString stringWithFormat:@"select * from upTransFileList where md5 = '%@' and name = '%@'",md5,filename];
  383. // [DBOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  384. //
  385. // //dict array;
  386. // NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  387. //
  388. // if (modelArray.count) {
  389. // resultBlock(modelArray[0]);
  390. // }else resultBlock(nil);
  391. //
  392. // }];
  393. //}
  394. - (void)getSubFileFolderDownFileWithPid:(NSString *)pid ResultBlock:(void(^)(NSArray *result))resultBlock
  395. {
  396. NSString *sql = [NSString stringWithFormat:@"select * from %@ where pid = '%@'",downTransFileList,pid];
  397. #warning 是否加入file_category != 0
  398. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  399. //dict array;
  400. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  401. if (modelArray.count) {
  402. resultBlock(modelArray);
  403. }else resultBlock(nil);
  404. }];
  405. }
  406. - (void)getSubFileFolderDownSuccessFileWithPid:(NSString *)pid ResultBlock:(void(^)(NSArray *result))resultBlock
  407. {
  408. //文件and 子文件都成功的文件夹
  409. //先获取所有目标的文件和文件夹,再进行文件夹的判断.
  410. NSString *sql = [NSString stringWithFormat:@"select * from %@ where (downUpStatus = %d and pid = '%@' and isdir = 0) or (pid = '%@' and isdir = 1)",downTransFileList,DownUpStatusSuccess,pid,pid];
  411. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  412. //dict array;
  413. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  414. NSMutableArray *tempArray = [NSMutableArray array];
  415. for (CSFileDownUpModel *csFileDownUpModel in modelArray) {
  416. if (!csFileDownUpModel.isdir) {
  417. [tempArray addObject:csFileDownUpModel];
  418. }else{
  419. [self judgeFileFolderDownUpResultWithWithPid:csFileDownUpModel.sid downUpModel:csFileDownUpModel.downUpType resultBlock:^(DownUpStatus downUpStatus, NSArray *totalSubFileModels) {
  420. if (downUpStatus == DownUpStatusSuccess) {
  421. csFileDownUpModel.subFileDownUpModels = totalSubFileModels;
  422. //success 动态调整.
  423. csFileDownUpModel.downUpStatus = DownUpStatusSuccess;
  424. [tempArray addObject:csFileDownUpModel];
  425. }
  426. }];
  427. }
  428. }
  429. if (tempArray.count) {
  430. resultBlock(tempArray);
  431. }else resultBlock(nil);
  432. }];
  433. }
  434. - (void)getSubFileFolderDownUnFinishedFileWithPid:(NSString *)pid ResultBlock:(void(^)(NSArray *result))resultBlock
  435. {
  436. NSString * sql = [NSString stringWithFormat:@"select * from %@ where (downUpStatus != %d and pid = '%@' and isdir = 0) or (pid = '%@' and isdir = 1)",downTransFileList,DownUpStatusSuccess,pid,pid];;
  437. //[NSString stringWithFormat:@"select * from %@ where (downUpStatus != %d and pid = '%@')",downTransFileList,DownUpStatusSuccess,pid];
  438. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  439. //dict array;
  440. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  441. NSMutableArray *tempArray = [NSMutableArray array];
  442. for (CSFileDownUpModel *csFileDownUpModel in modelArray) {
  443. if (!csFileDownUpModel.isdir) {
  444. [tempArray addObject:csFileDownUpModel];
  445. }else{
  446. [self judgeFileFolderDownUpResultWithWithPid:csFileDownUpModel.sid downUpModel:csFileDownUpModel.downUpType resultBlock:^(DownUpStatus downUpStatus,NSArray *totalSubFileModels) {
  447. if (downUpStatus != DownUpStatusSuccess) {
  448. csFileDownUpModel.subFileDownUpModels = totalSubFileModels;
  449. csFileDownUpModel.downUpStatus = downUpStatus;
  450. [tempArray addObject:csFileDownUpModel];
  451. }
  452. }];
  453. }
  454. }
  455. if (tempArray.count) {
  456. resultBlock(tempArray);
  457. }else resultBlock(nil);
  458. }];
  459. }
  460. - (void)getSubFileFolderUpFileWithPid:(NSString *)pid ResultBlock:(void(^)(NSArray *result))resultBlock
  461. {
  462. NSString *sql = nil;
  463. if (!pid || [pid isEqualToString:@"0"]) {
  464. sql = [NSString stringWithFormat:@"select * from %@ where file_category = 0",upTransFileList];
  465. }else sql = [NSString stringWithFormat:@"select * from %@ where pid = '%@'",upTransFileList,pid];
  466. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  467. //dict array;
  468. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  469. if (modelArray.count) {
  470. resultBlock(modelArray);
  471. }else resultBlock(nil);
  472. }];
  473. }
  474. - (void)getSubFileFolderUpSuccessFileWithPid:(NSString *)pid ResultBlock:(void(^)(NSArray *result))resultBlock
  475. {
  476. NSString *sql = nil;
  477. if (!pid || [pid isEqualToString:@"0"]) {
  478. sql = [NSString stringWithFormat:@"select * from %@ where downUpStatus = %d and file_category = 0",upTransFileList,DownUpStatusSuccess];
  479. }else sql = [NSString stringWithFormat:@"select * from %@ where downUpStatus = %d and pid = '%@'",upTransFileList,DownUpStatusSuccess,pid];
  480. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  481. //dict array;
  482. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  483. if (modelArray.count) {
  484. resultBlock(modelArray);
  485. }else resultBlock(nil);
  486. }];
  487. }
  488. - (void)getSubFileFolderUpUnFinishedFileWithPid:(NSString *)pid ResultBlock:(void(^)(NSArray *result))resultBlock
  489. {
  490. NSString *sql = nil;
  491. if (!pid || [pid isEqualToString:@"0"]) {
  492. sql = [NSString stringWithFormat:@"select * from %@ where downUpStatus != %d and file_category = 0",upTransFileList,DownUpStatusSuccess];
  493. }else sql = [NSString stringWithFormat:@"select * from %@ where downUpStatus != %d and pid = '%@'",upTransFileList,DownUpStatusSuccess,pid];
  494. [self.dbOperation quaryDBbySQL:sql result:^(NSMutableArray *array) {
  495. // 排序doing的在前.
  496. //dict array;
  497. NSArray *modelArray = [CSFileDownUpModel mj_objectArrayWithKeyValuesArray:array];
  498. if (modelArray.count) {
  499. resultBlock(modelArray);
  500. }else resultBlock(nil);
  501. }];
  502. }
  503. - (void)deleteCSFileToDB:(CSFileModel *)csFile
  504. {
  505. }
  506. - (void)deleteCSDownUpFiles:(NSArray *)csFiles downUpType:(DownUpModel)downUpModel ResultBlock:(void(^)(NSArray *fileResult))resultBlock;
  507. {
  508. NSMutableArray *tempAllFilesArray = [NSMutableArray array];
  509. NSMutableArray *tempUUIDsSqlArray =[NSMutableArray array];
  510. NSString *tableName = (downUpModel == DownUpModelDown?downTransFileList:upTransFileList);
  511. for (CSFileDownUpModel *downUpFileModel in csFiles) {
  512. [tempAllFilesArray addObject:downUpFileModel];
  513. if (downUpFileModel.isdir) {
  514. [self getAllCSDownUpFilesFoldersWithPid:downUpFileModel.sid isdir:2 downUpModel:downUpFileModel.downUpType resultBlock:^(NSArray *downUpModels) {
  515. [tempAllFilesArray addObjectsFromArray:downUpModels];
  516. }];
  517. }
  518. }
  519. for (CSFileDownUpModel *csFileDownUpModel in tempAllFilesArray) {
  520. NSString *sql = [NSString stringWithFormat:@"delete from %@ where downUpUUID = '%@'",tableName,csFileDownUpModel.downUpUUID];
  521. [tempUUIDsSqlArray addObject:sql];
  522. }
  523. [self.dbOperation addDatasToDBWithSQLs:tempUUIDsSqlArray];
  524. if (resultBlock) {
  525. resultBlock(tempAllFilesArray);
  526. }
  527. }
  528. - (void)updateCSFiletoDB:(CSFileModel *)csFile
  529. {
  530. }
  531. - (void)updateCSDownUpFileStatusWithCSFileDownUpModel:(CSFileDownUpModel *)csFileDownUpModel
  532. {
  533. #warning md5 和name相同的文件,则会全部更新
  534. NSString *sql = nil;
  535. if (!csFileDownUpModel.isdir) {
  536. if (csFileDownUpModel.localRootPath) {
  537. sql = [NSString stringWithFormat:@"update %@ set downUpStatus = %d,downUpSize = %ld, localRootPath = '%@' where md5 = '%@' and name = '%@';",csFileDownUpModel.downUpType == DownUpModelDown?downTransFileList:upTransFileList,csFileDownUpModel.downUpStatus,csFileDownUpModel.downUpSize,csFileDownUpModel.localRootPath,csFileDownUpModel.md5,csFileDownUpModel.name];
  538. }else sql = [NSString stringWithFormat:@"update %@ set downUpStatus = %d,downUpSize = %ld where md5 = '%@' and name = '%@';",csFileDownUpModel.downUpType == DownUpModelDown?downTransFileList:upTransFileList,csFileDownUpModel.downUpStatus,csFileDownUpModel.downUpSize,csFileDownUpModel.md5,csFileDownUpModel.name];
  539. }else{
  540. sql = [NSString stringWithFormat:@"update %@ set downUpStatus = %d where sid = '%@'",csFileDownUpModel.downUpType == DownUpModelDown?downTransFileList:upTransFileList,csFileDownUpModel.downUpStatus,csFileDownUpModel.sid];
  541. }
  542. [self.dbOperation addDataToDBWithSQL:sql];
  543. //同时更新relationlist,如果downupsize不断累加=size-> 累加到父节点上.
  544. //获取父节点,如果父节点
  545. }
  546. - (void)updateCSDownUpFileStatusWithCSFileDownUpModels:(NSArray *)csFileDownUpModels downUpType:(DownUpModel)downUpType downUpStatus:(DownUpStatus)downUpStatus
  547. {
  548. NSString *tableName = (downUpType == DownUpModelDown?downTransFileList:upTransFileList);
  549. NSMutableArray *sqlsArray = [NSMutableArray array];
  550. for (CSFileDownUpModel *csFileDownUpModel in csFileDownUpModels) {
  551. NSString *sql = nil;
  552. if (csFileDownUpModel.isdir) {
  553. sql = [NSString stringWithFormat:@"UPDATE %@ set downUpStatus = %d where downUpUUID = '%@'",tableName,downUpStatus,csFileDownUpModel.downUpUUID];
  554. }else{
  555. sql = [NSString stringWithFormat:@"UPDATE %@ set downUpStatus = %d where md5 = '%@' and name = '%@'",tableName,downUpStatus,csFileDownUpModel.md5,csFileDownUpModel.name];
  556. }
  557. [sqlsArray addObject:sql];
  558. }
  559. [self.dbOperation addDatasToDBWithSQLs:sqlsArray];
  560. }
  561. - (void)updateCSDownUpFileIDWithCSFileDownUpModel:(CSFileDownUpModel *)csFileDownUpModel sid:(NSString *)sid
  562. {
  563. NSString *sql = [NSString stringWithFormat:@"update %@ set sid = '%@' where downUpUUID = '%@';",csFileDownUpModel.downUpType == DownUpModelDown?downTransFileList:upTransFileList,sid,csFileDownUpModel.downUpUUID];
  564. [self.dbOperation addDataToDBWithSQL:sql];
  565. }
  566. - (void)updateCSDownUpFileLocalPathWithCSFileDownUpModel:(CSFileDownUpModel *)csFileDownUpModel newLocalPath:(NSString *)newLocalPath
  567. {
  568. NSString *sql = [NSString stringWithFormat:@"update %@ set localRootPath = '%@' where downUpUUID = '%@';",csFileDownUpModel.downUpType == DownUpModelDown?downTransFileList:upTransFileList,newLocalPath,csFileDownUpModel.downUpUUID];
  569. [self.dbOperation addDataToDBWithSQL:sql];
  570. }
  571. - (void)updateDataDBWithTableName:(NSString *)tableName model:(id)model whereSql:(NSString *)whereSql
  572. {
  573. /*
  574. UPDATE table_name
  575. SET column1 = value1, column2 = value2...., columnN = valueN
  576. WHERE [condition];
  577. */
  578. // sqlite> UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
  579. }
  580. - (void)deleteDataDBWIthTableName:(NSString *)tableName whereSql:(NSString *)whereSql
  581. {
  582. //if wheresql = nil, clear all table
  583. // sqlite> DELETE FROM COMPANY WHERE SQL;
  584. }
  585. @end