InitializeLogic.php 39KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050
  1. <?php
  2. /**
  3. * 初始化逻辑类
  4. *
  5. * @author qifan
  6. * @date 2020-01-05
  7. */
  8. namespace app\admin\logic;
  9. use think\Db;
  10. use think\Exception;
  11. class InitializeLogic
  12. {
  13. public $log = '操作成功!';
  14. # 值为false时,终止其他方法的操作
  15. private $status = true;
  16. /**
  17. * 重置数据
  18. *
  19. * @param $param
  20. * @return bool
  21. */
  22. public function update($param)
  23. {
  24. # 设置脚本执行时间和内存
  25. ini_set('max_execution_time', 0);
  26. ini_set('memory_limit', '256M');
  27. # 重置单个或多个模块
  28. foreach ($param AS $key => $value) {
  29. if ($value == 'crm' && $this->status) $this->resetCustomerManagementData(); # 重置客户管理数据
  30. if ($value == 'taskExamine' && $this->status) $this->resetTaskExamineData(); # 重置任务/审批数据
  31. if ($value == 'log' && $this->status) $this->resetDailyRecordData(); # 重置日志数据
  32. if ($value == 'project' && $this->status) $this->resetProjectManagementData(); # 重置项目管理数据
  33. if ($value == 'calendar' && $this->status) $this->resetCalendarData(); # 重置日历数据
  34. }
  35. return true;
  36. }
  37. /**
  38. * 验证密码
  39. *
  40. * @param $userId
  41. * @param $password
  42. * @return bool
  43. * @throws \think\db\exception\DataNotFoundException
  44. * @throws \think\db\exception\ModelNotFoundException
  45. * @throws \think\exception\DbException
  46. */
  47. public function verification($userId, $password)
  48. {
  49. $userInfo = Db::name('admin_user')->field(['password', 'salt'])->where('id', $userId)->find();
  50. return user_md5($password, $userInfo['salt']) == $userInfo['password'];
  51. }
  52. /**
  53. * 重置客户管理数据
  54. */
  55. private function resetCustomerManagementData()
  56. {
  57. # 表前缀
  58. $prefix = config('database.prefix');
  59. # 文件数组
  60. $files = [];
  61. # 启动事务
  62. Db::startTrans();
  63. try {
  64. # ------ 重置产品数据START ------ #
  65. # 获取产品附件ID
  66. $productFileIds = Db::name('crm_product_file')->column('file_id');
  67. # 查询产品文件数据
  68. $productFileInfo = $this->getFileList($productFileIds);
  69. # 获取产品图和产品详情图附件ID
  70. $productDetailsIds = [];
  71. $productDetailFiles = Db::name('crm_product')->field(['cover_images', 'details_images'])->select();
  72. foreach ($productDetailFiles AS $key => $value) {
  73. if (!empty($value['cover_images'])) $productDetailsIds = array_merge($productDetailsIds, explode(',', $value['cover_images']));
  74. if (!empty($value['details_images'])) $productDetailsIds = array_merge($productDetailsIds, explode(',', $value['details_images']));
  75. }
  76. # 合并附件ID数据
  77. $productFileIds = array_merge($productFileIds, $productDetailsIds);
  78. # 获取产品图和产品详情图文件数据
  79. $productDetailsFiles = $this->getFileList($productDetailsIds);
  80. # 合并附件数据
  81. $files = array_merge($files, $productDetailsFiles);
  82. $files = array_merge($files, $productFileInfo);
  83. # 删除产品分类表
  84. Db::name('crm_product_category')->where(['category_id' => ['neq', 1]])->delete();
  85. # 重置产品分类自增ID
  86. Db::query("ALTER TABLE ".$prefix."crm_product_category AUTO_INCREMENT = 1");
  87. # 清除产品附件关联数据并重置自增ID
  88. Db::query("TRUNCATE TABLE ".$prefix."crm_product_file");
  89. # 删除产品附件
  90. Db::name('admin_file')->whereIn('file_id', $productFileIds)->delete();
  91. # 清除产品表数据并重置自增ID
  92. Db::query("TRUNCATE TABLE ".$prefix."crm_product");
  93. # ------ 重置产品数据 END ------ #
  94. # ------ 重置回访数据 START ------ #
  95. # 获取回访附件ID
  96. $visitFileIds = Db::name('crm_visit_file')->column('file_id');
  97. # 查询回访文件数据
  98. $visitFileInfo = $this->getFileList($visitFileIds);
  99. # 合并附件数据
  100. $files = array_merge($files, $visitFileInfo);
  101. # 清除回访附件关联数据并重置自增ID
  102. Db::query("TRUNCATE TABLE ".$prefix."crm_visit_file");
  103. # 删除回访附件
  104. Db::name('admin_file')->whereIn('file_id', $visitFileIds)->delete();
  105. # 清除回访表数据并重置自增ID
  106. Db::query("TRUNCATE TABLE ".$prefix."crm_visit");
  107. # ------ 重置回访数据 END ------ #
  108. # ------ 重置发票数据 START ------ #
  109. # 获取回访附件ID
  110. $invoiceFileIds = Db::name('crm_invoice_file')->column('file_id');
  111. # 查询回访文件数据
  112. $invoiceFileInfo = $this->getFileList($invoiceFileIds);
  113. # 合并附件数据
  114. $files = array_merge($files, $invoiceFileInfo);
  115. # 清除发票附件关联数据并重置自增ID
  116. Db::query("TRUNCATE TABLE ".$prefix."crm_invoice_file");
  117. # 删除发票附件
  118. Db::name('admin_file')->whereIn('file_id', $invoiceFileIds)->delete();
  119. # 清除发票开户行信息数据并重置自增ID
  120. Db::query("TRUNCATE TABLE ".$prefix."crm_invoice_info");
  121. # 清除发票数据并重置自增ID
  122. Db::query("TRUNCATE TABLE ".$prefix."crm_invoice");
  123. # ------ 重置发票数据 END ------ #
  124. # ------ 重置回款数据 START ------ #
  125. # 获取回款附件ID
  126. $receivablesFileIds = Db::name('crm_receivables_file')->column('file_id');
  127. # 查询回访文件数据
  128. $receivablesFileInfo = $this->getFileList($receivablesFileIds);
  129. # 合并附件数据
  130. $files = array_merge($files, $receivablesFileInfo);
  131. # 清除回款附件关联数据并重置自增ID
  132. Db::query("TRUNCATE TABLE ".$prefix."crm_receivables_file");
  133. # 删除回款附件
  134. Db::name('admin_file')->whereIn('file_id', $receivablesFileIds)->delete();
  135. # 清除回款计划数据并重置自增ID
  136. Db::query("TRUNCATE TABLE ".$prefix."crm_receivables_plan");
  137. # 清除回款数据并重置自增ID
  138. Db::query("TRUNCATE TABLE ".$prefix."crm_receivables");
  139. # ------ 重置回款数据 END ------ #
  140. # ------ 重置合同数据 START ------ #
  141. # 获取合同附件ID
  142. $contractFileIds = Db::name('crm_contract_file')->column('file_id');
  143. # 查询合同文件数据
  144. $contractFileInfo = $this->getFileList($contractFileIds);
  145. # 合并附件数据
  146. $files = array_merge($files, $contractFileInfo);
  147. # 清除合同附件关联数据并重置自增ID
  148. Db::query("TRUNCATE TABLE ".$prefix."crm_contract_file");
  149. # 删除合同附件
  150. Db::name('admin_file')->whereIn('file_id', $contractFileIds)->delete();
  151. # 删除合同产品关联数据并重置自增ID
  152. Db::query("TRUNCATE TABLE ".$prefix."crm_contract_product");
  153. # 删除合同数据并重置自增ID
  154. Db::query("TRUNCATE TABLE ".$prefix."crm_contract");
  155. # ------ 重置合同数据 END ------ #
  156. # ------ 重置商机数据 START ------ #
  157. # 获取商机附件ID
  158. $businessFileIds = Db::name('crm_business_file')->column('file_id');
  159. # 查询商机文件数据
  160. $businessFileInfo = $this->getFileList($businessFileIds);
  161. # 合并附件数据
  162. $files = array_merge($files, $businessFileInfo);
  163. # 清除商机附件关联数据并重置自增ID
  164. Db::query("TRUNCATE TABLE ".$prefix."crm_business_file");
  165. # 删除商机附件
  166. Db::name('admin_file')->whereIn('file_id', $businessFileIds)->delete();
  167. # 清除商机日志数据并重置自增ID
  168. Db::query("TRUNCATE TABLE ".$prefix."crm_business_log");
  169. # 清除商机产品关系数据并重置自增ID
  170. Db::query("TRUNCATE TABLE ".$prefix."crm_business_product");
  171. # 删除商机状态组类别数据
  172. Db::name('crm_business_type')->where(['type_id' => ['neq', 1]])->delete();
  173. # 重置商机状态组类别自增ID
  174. Db::query("ALTER TABLE ".$prefix."crm_business_type AUTO_INCREMENT = 1");
  175. # 删除商机状态数据
  176. Db::name('crm_business_status')->where(['type_id' => ['gt', 1]])->delete();
  177. # 重置商机状态自增ID
  178. Db::query("ALTER TABLE ".$prefix."crm_business_status AUTO_INCREMENT = 1");
  179. # 删除商机数据并重置自增ID
  180. Db::query("TRUNCATE TABLE ".$prefix."crm_business");
  181. # ------ 重置商机数据 END ------ #
  182. # ------ 重置联系人数据 START ------ #
  183. # 获取联系人附件ID
  184. $contactsFileIds = Db::name('crm_contacts_file')->column('file_id');
  185. # 查询联系人文件数据
  186. $contactsFileInfo = $this->getFileList($contactsFileIds);
  187. # 合并附件数据
  188. $files = array_merge($files, $contactsFileInfo);
  189. # 清除联系人附件关联数据并重置自增ID
  190. Db::query("TRUNCATE TABLE ".$prefix."crm_contacts_file");
  191. # 删除联系人附件
  192. Db::name('admin_file')->whereIn('file_id', $contactsFileIds)->delete();
  193. # 清除联系人商机关联数据并重置自增ID
  194. Db::query("TRUNCATE TABLE ".$prefix."crm_contacts_business");
  195. # 清除联系人数据并重置自增ID
  196. Db::query("TRUNCATE TABLE ".$prefix."crm_contacts");
  197. # ------ 重置联系人数据 END ------ #
  198. # ------ 重置客户数据 START ------ #
  199. # 获取客户附件ID
  200. $customerFileIds = Db::name('crm_customer_file')->column('file_id');
  201. # 查询联系人文件数据
  202. $customerFileInfo = $this->getFileList($customerFileIds);
  203. # 合并附件数据
  204. $files = array_merge($files, $customerFileInfo);
  205. # 清除客户附件关联数据并重置自增ID
  206. Db::query("TRUNCATE TABLE ".$prefix."crm_customer_file");
  207. # 删除客户附件
  208. Db::name('admin_file')->whereIn('file_id', $customerFileIds)->delete();
  209. # 清除客户数据并重置自增ID
  210. Db::query("TRUNCATE TABLE ".$prefix."crm_customer");
  211. # ------ 重置客户数据 END ------ #
  212. # ------ 重置线索数据 START ------ #
  213. # 获取线索附件ID
  214. $leadsFileIds = Db::name('crm_leads_file')->column('file_id');
  215. # 查询线索文件数据
  216. $leadsFileInfo = $this->getFileList($leadsFileIds);
  217. # 合并附件数据
  218. $files = array_merge($files, $leadsFileInfo);
  219. # 清除线索附件关联数据并重置自增ID
  220. Db::query("TRUNCATE TABLE ".$prefix."crm_leads_file");
  221. # 删除线索附件
  222. Db::name('admin_file')->whereIn('file_id', $leadsFileIds)->delete();
  223. # 清除线索数据并重置自增ID
  224. Db::query("TRUNCATE TABLE ".$prefix."crm_leads");
  225. # ------ 重置线索数据 END ------ #
  226. # ------ 重置附件表自增ID START ------ #
  227. Db::query("ALTER TABLE ".$prefix."admin_file AUTO_INCREMENT = 1");
  228. # ------ 重置附件表自增ID END ------ #
  229. # ------ 清除活动记录中关于客户管理模块的数据 START ------ #
  230. # 获取活动附件ID
  231. $activityFileIds = Db::name('crm_activity_file')->column('file_id');
  232. # 查询活动附件数据
  233. $activityFileInfo = $this->getFileList($activityFileIds);
  234. # 合并附件数据
  235. $files = array_merge($files, $activityFileInfo);
  236. # 清除活动关联附件数据并重置自增ID
  237. Db::query("TRUNCATE TABLE ".$prefix."crm_activity_file");
  238. # 清除活动数据并重置自增ID
  239. Db::query("TRUNCATE TABLE ".$prefix."crm_activity");
  240. # ------ 清除活动记录中关于客户管理模块的数据 END ------ #
  241. # ------ 清除我的关注数据 START ------ #
  242. Db::query("TRUNCATE TABLE ".$prefix."crm_star");
  243. # ------ 清除我的关注数据 END ------ #
  244. # ------ 清除数据操作日志数据 START ------ #
  245. Db::name('admin_operation_log')->where(['module' => ['like', 'crm_%']])->delete();
  246. # ------ 清除数据操作日志数据 END ------ #
  247. # ------ 清除模板打印记录数据 START ------ #
  248. Db::query("TRUNCATE TABLE ".$prefix."crm_customer_config");
  249. # ------ 清除模板打印记录数据 END ------ #
  250. # ------ 清除模板打印记录数据 START ------ #
  251. Db::query("TRUNCATE TABLE ".$prefix."crm_printing_record");
  252. # ------ 清除模板打印记录数据 END ------ #
  253. # ------ 清除导入数据记录表 START ------ #
  254. Db::name('admin_import_record')->where(['type' => ['like', 'crm_%']])->delete();
  255. # ------ 清除导入数据记录表 END ------ #
  256. # ------ 清除字段操作记录表 START ------ #
  257. Db::name('admin_action_record')->where(['types' => ['like', 'crm_%']])->delete();
  258. # ------ 清除字段操作记录表 END ------ #
  259. # ------ 清除数据操作记录表 START ------ #
  260. Db::name('admin_action_log')->where('module_name', 'crm')->delete();
  261. # ------ 清除数据操作记录表 END ------ #
  262. # ------ 清除有关客户模块的审批记录 START ------ #
  263. Db::name('admin_examine_record')->where(['types' => ['like', 'crm_%']])->delete();
  264. # ------ 清除有关客户模块的审批记录 END ------ #
  265. # ------ 清除跟客户模块有关的管理数据表 START ------ #
  266. # 清除项目关联客户模块表并重置字段ID
  267. Db::query("TRUNCATE TABLE ".$prefix."work_relation");
  268. # 清除任务关联客户模块表并重置字段ID
  269. Db::query("TRUNCATE TABLE ".$prefix."task_relation");
  270. # 清除日志关联客户模块表并重置字段ID
  271. Db::query("TRUNCATE TABLE ".$prefix."oa_log_relation");
  272. # 清除审批关联客户模块表并重置字段ID
  273. Db::query("TRUNCATE TABLE ".$prefix."oa_examine_relation");
  274. # 清除日程关联客户模块表并重置字段ID
  275. Db::query("TRUNCATE TABLE ".$prefix."oa_event_relation");
  276. # ------ 清除跟客户模块有关的管理数据表 END ------ #
  277. # ------ 清除自动编号数据 START ------ #
  278. $time = time();
  279. Db::query("TRUNCATE TABLE ".$prefix."crm_number_sequence");
  280. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (1, 1, 1, 'HT', null, null, null, null, ".$time.", 1, null, 0, 1)");
  281. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (2, 2, 2, 'yyyyMMdd', null, null, null, null, ".$time.", 1, null, 0, 1)");
  282. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (3, 3, 3, 1, 1, 1, 1, ".$time.", ".$time.", 1, null, 0, 1)");
  283. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (4, 1, 1, 'HK', null, null, null, null, ".$time.", 1, null, 0, 2)");
  284. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (5, 2, 2, 'yyyyMMdd', null, null, null, null, ".$time.", 1, null, 0, 2)");
  285. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (6, 3, 3, 1, 1, 1, 1, ".$time.", ".$time.", 1, null, 0, 2)");
  286. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (7, 1, 1, 'HF', null, null, null, null, ".$time.", 1, null, 0, 3)");
  287. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (8, 2, 2, 'yyyyMMdd', null, null, null, null, ".$time.", 1, null, 0, 3)");
  288. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (9, 3, 3, 1, 1, 1, 1, ".$time.", ".$time.", 1, null, 0, 3)");
  289. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (10, 1, 2, 'yyyyMMdd', null, null, null, null, ".$time.", 1, null, 0, 4)");
  290. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (11, 2, 1, 'FP', null, null, null, null, ".$time.", 1, null, 0, 4)");
  291. Db::query("INSERT INTO `".$prefix."crm_number_sequence` VALUES (12, 3, 3, 1, 1, 1, 1, ".$time.", ".$time.", 1, null, 0, 4)");
  292. # ------ 清除自动编号数据 END ------ #
  293. # ------ 设置跟进记录常用语 START ------ #
  294. $phrase = ['电话无人接听', '客户无意向', '客户意向度适中,后续继续跟进', '客户意向度较强,成交几率较大'];
  295. $phraseId = db('crm_config')->where('name', 'activity_phrase')->value('id');
  296. if (!empty($phraseId)) {
  297. db('crm_config')->where('id', $phraseId)->update([
  298. 'value' => serialize($phrase)
  299. ]);
  300. } else {
  301. db('crm_config')->insert([
  302. 'name' => 'activity_phrase',
  303. 'value' => serialize($phrase),
  304. 'description' => '跟进记录常用语'
  305. ]);
  306. }
  307. # ------ 设置跟进记录常用语 END ------ #
  308. # ------ 删除审批记录 START ------ #
  309. Db::name('admin_examine_record')->whereLike('types', 'crm%')->delete();
  310. Db::query("ALTER TABLE ".$prefix."admin_examine_record AUTO_INCREMENT = 1");
  311. # ------ 删除审批记录 END ------ #
  312. # ------ 清除消息数据 START ------ #
  313. Db::name('admin_message')->where('module_name', 'crm')->delete();
  314. # ------ 清除消息数据 END ------ #
  315. # ------ 删除附件 START ------ #
  316. if (!empty($files)) {
  317. foreach ($files AS $key => $value) {
  318. unlink($value);
  319. }
  320. }
  321. # ------ 删除附件 START ------ #
  322. # 提交事务
  323. Db::commit();
  324. return true;
  325. } catch (Exception $e) {
  326. # 回滚事务
  327. Db::rollback();
  328. # 将状态设置为false,终止其他方法的操作
  329. $this->status = false;
  330. $this->log = '重置客户管理模块时出错!';
  331. return false;
  332. }
  333. }
  334. /**
  335. * 重置任务审批数据
  336. */
  337. private function resetTaskExamineData()
  338. {
  339. # 表前缀
  340. $prefix = config('database.prefix');
  341. # 文件数组
  342. $files = [];
  343. # 启动事务
  344. Db::startTrans();
  345. try {
  346. # ------ 清除任务数据 START ------ #
  347. // # 获取任务ID
  348. // $taskIds = Db::name('task')->where(['work_id' => ['eq', 0]])->column('task_id');
  349. //
  350. // # 获取任务下关联的附件ID
  351. // $taskFieldIds = Db::name('work_task_file')->whereIn('task_id', $taskIds)->column('file_id');
  352. //
  353. // # 查询活动附件数据
  354. // $taskFileInfo = $this->getFileList($taskFieldIds);
  355. //
  356. // # 合并附件数据
  357. // $files = array_merge($files, $taskFileInfo);
  358. //
  359. // # 删除任务附件关联表
  360. // Db::name('work_task_file')->whereIn('task_id', $taskIds)->delete();
  361. // # 重置自增ID
  362. // Db::query("ALTER TABLE ".$prefix."work_task_file AUTO_INCREMENT = 1");
  363. //
  364. // # 删除附件
  365. // Db::name('admin_file')->whereIn('file_id', $taskFieldIds)->delete();
  366. //
  367. // # 清除任务关联的客户模块数据数据并重置自增ID
  368. // Db::query("TRUNCATE TABLE ".$prefix."task_relation");
  369. //
  370. // # 删除任务log
  371. // Db::name('work_task_log')->whereIn('task_id', $taskIds)->delete();
  372. // # 重置任务log自增ID
  373. // Db::query("ALTER TABLE ".$prefix."work_task_log AUTO_INCREMENT = 1");
  374. //
  375. // # 删除任务
  376. // Db::name('task')->where(['work_id' => ['eq', 0]])->delete();
  377. // # 重置任务自增ID
  378. // Db::query("ALTER TABLE ".$prefix."task AUTO_INCREMENT = 1");
  379. # ------ 清除任务数据 END ------ #
  380. # ------ 清除审批数据 START ------ #
  381. # 获取审批下关联的附件ID
  382. $examineFileIds = Db::name('oa_examine_file')->column('file_id');
  383. # 查询审批附件数据
  384. $examineFileInfo = $this->getFileList($examineFileIds);
  385. # 合并附件数据
  386. $files = array_merge($files, $examineFileInfo);
  387. # 清除审批关联的附件信息并重置自增ID
  388. Db::query("TRUNCATE TABLE ".$prefix."oa_examine_file");
  389. # 获取差旅附件ID
  390. $travelFileId = Db::name('oa_examine_travel_file')->column('file_id');
  391. # 查询差旅附件数据
  392. $travelFileInfo = $this->getFileList($travelFileId);
  393. # 合并附件数据
  394. $files = array_merge($files, $travelFileInfo);
  395. # 清除差旅关联的附件信息并重置自增ID
  396. Db::query("TRUNCATE TABLE ".$prefix."oa_examine_travel_file");
  397. # 删除差率和审批的附件
  398. Db::name('admin_file')->whereIn('file_id', $examineFileIds)->delete();
  399. Db::name('admin_file')->whereIn('file_id', $travelFileId)->delete();
  400. # 删除差旅数据并重置自增ID
  401. Db::query("TRUNCATE TABLE ".$prefix."oa_examine_travel");
  402. # 删除审批关联的客户模块下的数据并重置ID
  403. Db::query("TRUNCATE TABLE ".$prefix."oa_examine_relation");
  404. # 删除审批数据并重置自增ID
  405. Db::query("TRUNCATE TABLE ".$prefix."oa_examine");
  406. # ------ 清除审批数据 END ------ #
  407. # ------ 清除活动中有关审批的数据 START ------ #
  408. # 获取有关审批的活动ID
  409. $activityIds = Db::name('crm_activity')->where('activity_type', 9)->column('activity_id');
  410. # 获取有关审批的附件ID
  411. $activityFileIds = Db::name('crm_activity_file')->whereIn('activity_id', $activityIds)->column('file_id');
  412. # 查询审批附件数据
  413. $activityFileInfo = $this->getFileList($activityFileIds);
  414. # 合并附件数据
  415. $files = array_merge($files, $activityFileInfo);
  416. # 删除有关审批的附件关联记录
  417. Db::name('crm_activity_file')->whereIn('activity_id', $activityIds)->delete();
  418. # 重置自增ID
  419. Db::query("ALTER TABLE ".$prefix."crm_activity_file AUTO_INCREMENT = 1");
  420. # 删除有关审批的活动记录
  421. Db::name('crm_activity')->where('activity_type', 9)->delete();
  422. # 重置自增ID
  423. Db::query("ALTER TABLE ".$prefix."crm_activity AUTO_INCREMENT = 1");
  424. # ------ 清除活动中有关审批的数据 END ------ #
  425. # ------ 清除有关审批的数据操作记录 START ------ #
  426. Db::name('admin_action_log')->where('module_name', 'oa')->where('controller_name', 'examine')->delete();
  427. Db::query("ALTER TABLE ".$prefix."admin_action_log AUTO_INCREMENT = 1");
  428. # ------ 清除活动中有关审批的数据 END ------ #
  429. # ------ 清除有关任务的数据操作记录 START ------ #
  430. // Db::name('admin_action_log')->where('module_name', 'oa')->where('controller_name', 'task')->delete();
  431. // Db::query("ALTER TABLE ".$prefix."admin_action_log AUTO_INCREMENT = 1");
  432. # ------ 清除有关任务的数据操作记录 END ------ #
  433. # ------ 清除审批日志 START ------ #
  434. Db::name('admin_examine_record')->where('types', 'oa_examine')->delete();
  435. Db::query("ALTER TABLE ".$prefix."admin_examine_record AUTO_INCREMENT = 1");
  436. # ------ 清除审批日志 END ------ #
  437. # ------ 清除任务和审批操作记录 START ------ #
  438. // Db::name('admin_operation_log')->where('module', 'oa_task')->delete();
  439. Db::name('admin_operation_log')->where('module', 'oa_examine')->delete();
  440. Db::query("ALTER TABLE ".$prefix."admin_operation_log AUTO_INCREMENT = 1");
  441. # ------ 清除任务操作记录 END ------ #
  442. # ------ 清除消息数据 START ------ #
  443. Db::name('admin_message')->where('module_name', 'oa')->where('controller_name', 'examine')->delete();
  444. # ------ 清除消息数据 END ------ #
  445. # ------ 重置附件表自增ID START ------ #
  446. Db::query("ALTER TABLE ".$prefix."admin_file AUTO_INCREMENT = 1");
  447. # ------ 重置附件表自增ID END ------ #
  448. # ------ 删除附件 START ------ #
  449. if (!empty($files)) {
  450. foreach ($files AS $key => $value) {
  451. unlink($value);
  452. }
  453. }
  454. # ------ 删除附件 START ------ #
  455. # 提交事务
  456. Db::commit();
  457. return true;
  458. } catch (Exception $e) {
  459. # 回滚事务
  460. Db::rollback();
  461. # 将状态设置为false,终止其他方法的操作
  462. $this->status = false;
  463. $this->log = '重置任务/审批模块时出错!';
  464. return false;
  465. }
  466. }
  467. /**
  468. * 重置日志数据
  469. */
  470. private function resetDailyRecordData()
  471. {
  472. # 表前缀
  473. $prefix = config('database.prefix');
  474. # 文件数组
  475. $files = [];
  476. # 启动事务
  477. Db::startTrans();
  478. try {
  479. # ------ 清除日志数据 START ------ #
  480. # 获取日志附件ID
  481. $logFileIds = Db::name('oa_log_file')->column('file_id');
  482. # 查询活动附件数据
  483. $logFileInfo = $this->getFileList($logFileIds);
  484. # 合并附件数据
  485. $files = array_merge($files, $logFileInfo);
  486. # 清除日志附件关联数据
  487. Db::query("TRUNCATE TABLE ".$prefix."oa_log_file");
  488. # 清除日志客户管理关联数据
  489. Db::query("TRUNCATE TABLE ".$prefix."oa_log_relation");
  490. # 清楚日志数据
  491. Db::query("TRUNCATE TABLE ".$prefix."oa_log");
  492. # ------ 清除日志数据 START ------ #
  493. # ------ 清除活动中有关审批的数据 START ------ #
  494. # 获取有关日志的活动ID
  495. $activityIds = Db::name('crm_activity')->where('activity_type', 8)->column('activity_id');
  496. # 获取有关日志的附件ID
  497. $activityFileIds = Db::name('crm_activity_file')->whereIn('activity_id', $activityIds)->column('file_id');
  498. # 查询日志附件数据
  499. $activityFileInfo = $this->getFileList($activityFileIds);
  500. # 合并附件数据
  501. $files = array_merge($files, $activityFileInfo);
  502. # 删除有关日志的附件关联记录
  503. Db::name('crm_activity_file')->whereIn('activity_id', $activityIds)->delete();
  504. # 重置自增ID
  505. Db::query("ALTER TABLE ".$prefix."crm_activity_file AUTO_INCREMENT = 1");
  506. # 删除有关日志的活动记录
  507. Db::name('crm_activity')->where('activity_type', 8)->delete();
  508. # 重置自增ID
  509. Db::query("ALTER TABLE ".$prefix."crm_activity AUTO_INCREMENT = 1");
  510. # ------ 清除活动中有关审批的数据 END ------ #
  511. # ------ 清除日志操作记录表 START ------ #
  512. Db::name('admin_action_log')->where('module_name', 'oa')->where('controller_name', 'log')->delete();
  513. Db::query("ALTER TABLE ".$prefix."admin_action_log AUTO_INCREMENT = 1");
  514. # ------ 清除日志操作记录表 END ------ #
  515. # ------ 清除日志操作记录 START ------ #
  516. Db::name('admin_operation_log')->where('module', 'oa_log')->delete();
  517. Db::query("ALTER TABLE ".$prefix."admin_operation_log AUTO_INCREMENT = 1");
  518. # ------ 清除日志操作记录 END ------ #
  519. # ------ 删除消息数据 START ------ #
  520. Db::name('admin_comment')->where('type', 'oa_log')->delete();
  521. Db::name('admin_message')->where('module_name', 'oa')->where('controller_name', 'log')->delete();
  522. # ------ 删除消息数据 END ------ #
  523. # ------ 重置附件表自增ID START ------ #
  524. Db::query("ALTER TABLE ".$prefix."admin_file AUTO_INCREMENT = 1");
  525. # ------ 重置附件表自增ID END ------ #
  526. # ------ 删除附件 START ------ #
  527. if (!empty($files)) {
  528. foreach ($files AS $key => $value) {
  529. unlink($value);
  530. }
  531. }
  532. # ------ 删除附件 START ------ #
  533. # 提交事务
  534. Db::commit();
  535. return true;
  536. } catch (Exception $e) {
  537. # 回滚事务
  538. Db::rollback();
  539. # 将状态设置为false,终止其他方法的操作
  540. $this->status = false;
  541. $this->log = '重置日志模块时出错!';
  542. return false;
  543. }
  544. }
  545. /**
  546. * 重置项目管理数据
  547. */
  548. private function resetProjectManagementData()
  549. {
  550. # 表前缀
  551. $prefix = config('database.prefix');
  552. # 文件数组
  553. $files = [];
  554. # 启动事务
  555. Db::startTrans();
  556. try {
  557. # ------ 清除项目管理数据 START ------ #
  558. # 获取项目ID
  559. // $workIds = Db::name('work')->column('work_id');
  560. # 获取任务ID
  561. // $taskIds = Db::name('task')->whereIn('work_id', $workIds)->column('task_id');
  562. $taskIds = Db::name('task')->column('task_id');
  563. # 获取关联附件ID
  564. $workTaskFileIds = Db::name('work_task_file')->whereIn('task_id', $taskIds)->column('file_id');
  565. # 查询项目附件数据
  566. $workTaskFileInfo = $this->getFileList($workTaskFileIds);
  567. # 合并附件数据
  568. $files = array_merge($files, $workTaskFileInfo);
  569. # 清除项目中的任务附件关联数据
  570. Db::name('work_task_file')->whereIn('task_id', $taskIds)->delete();
  571. # 重置自增ID
  572. Db::query("ALTER TABLE ".$prefix."work_task_file AUTO_INCREMENT = 1");
  573. # 清除标签数据
  574. Db::query("TRUNCATE TABLE ".$prefix."work_task_lable");
  575. # 清除任务日志
  576. Db::name('work_task_log')->whereIn('task_id', $taskIds)->delete();
  577. # 重置任务日志自增ID
  578. Db::query("ALTER TABLE ".$prefix."work_task_log AUTO_INCREMENT = 1");
  579. # 清除项目成员
  580. Db::query("TRUNCATE TABLE ".$prefix."work_user");
  581. # 清除任务分类
  582. Db::query("TRUNCATE TABLE ".$prefix."work_task_class");
  583. # 清除任务与客户模块的管理数据
  584. Db::query("TRUNCATE TABLE ".$prefix."work_relation");
  585. # 清除任务数据
  586. Db::query("TRUNCATE TABLE ".$prefix."task");
  587. // Db::name('task')->where('work_id', '<>', 0)->delete();
  588. // # 重置自增ID
  589. // Db::query("ALTER TABLE ".$prefix."task AUTO_INCREMENT = 1");
  590. # 清除项目数据
  591. Db::query("TRUNCATE TABLE ".$prefix."work");
  592. # ------ 清除项目管理数据 END ------ #
  593. # ------ 清除活动中有关任务的数据 START ------ #
  594. # 获取有关任务的活动ID
  595. $activityIds = Db::name('crm_activity')->where('activity_type', 11)->whereIn('activity_type_id', $taskIds)->column('activity_id');
  596. # 获取有关任务的附件ID
  597. $activityFileIds = Db::name('crm_activity_file')->whereIn('activity_id', $activityIds)->column('file_id');
  598. # 查询任务附件数据
  599. $activityFileInfo = $this->getFileList($activityFileIds);
  600. # 合并附件数据
  601. $files = array_merge($files, $activityFileInfo);
  602. # 删除有关任务的附件关联记录
  603. Db::name('crm_activity_file')->whereIn('activity_id', $activityIds)->delete();
  604. # 重置自增ID
  605. Db::query("ALTER TABLE ".$prefix."crm_activity_file AUTO_INCREMENT = 1");
  606. # 删除有关任务的活动记录
  607. Db::name('crm_activity')->where('activity_type', 11)->whereIn('activity_type_id', $taskIds)->delete();
  608. # 重置自增ID
  609. Db::query("ALTER TABLE ".$prefix."crm_activity AUTO_INCREMENT = 1");
  610. # ------ 清除活动中有关任务的数据 END ------ #
  611. # ------ 清除有关项目的数据操作记录 START ------ #
  612. Db::name('admin_action_log')->where('module_name', 'work')->delete();
  613. Db::query("ALTER TABLE ".$prefix."admin_action_log AUTO_INCREMENT = 1");
  614. # ------ 清除有关项目的数据操作记录 END ------ #
  615. # ------ 清除项目操作记录 START ------ #
  616. Db::name('admin_operation_log')->where('module', 'work_task')->delete();
  617. Db::query("ALTER TABLE ".$prefix."admin_operation_log AUTO_INCREMENT = 1");
  618. # ------ 清除项目操作记录 END ------ #
  619. # ------ 清除评论和消息数据 START ------#
  620. Db::name('admin_comment')->where('type', 'task')->delete();
  621. Db::name('admin_message')->where('module_name', 'work')->delete();
  622. Db::name('admin_message')->where('module_name', 'oa')->where('controller_name', 'task')->delete();
  623. # ------ 清除评论和消息数据 END ------ #
  624. # 清除任务关联客户模块表并重置字段ID
  625. Db::query("TRUNCATE TABLE ".$prefix."task_relation");
  626. # ------ 重置附件表自增ID START ------ #
  627. Db::query("ALTER TABLE ".$prefix."admin_file AUTO_INCREMENT = 1");
  628. # ------ 重置附件表自增ID END ------ #
  629. # ------ 删除附件 START ------ #
  630. if (!empty($files)) {
  631. foreach ($files AS $key => $value) {
  632. unlink($value);
  633. }
  634. }
  635. # ------ 删除附件 START ------ #
  636. # 提交事务
  637. Db::commit();
  638. return true;
  639. } catch (Exception $e) {
  640. # 回滚事务
  641. Db::rollback();
  642. # 将状态设置为false,终止其他方法的操作
  643. $this->status = false;
  644. $this->log = '重置项目管理模块时出错!';
  645. return false;
  646. }
  647. }
  648. /**
  649. * 重置日历数据
  650. */
  651. private function resetCalendarData()
  652. {
  653. # 表前缀
  654. $prefix = config('database.prefix');
  655. # 文件数组
  656. $files = [];
  657. # 启动事务
  658. Db::startTrans();
  659. try {
  660. # ------ 清除日历数据 START ------ #
  661. # 获取日历ID
  662. $eventIds = Db::name('oa_event')->column('event_id');
  663. # 删除日历关联的客户数据
  664. Db::query("TRUNCATE TABLE ".$prefix."oa_event_relation");
  665. # 删除日历的数据操作记录
  666. Db::name('admin_action_log')->where('module_name', 'oa')->where('controller_name', 'event')->delete();
  667. # 重置自增ID
  668. Db::query("ALTER TABLE ".$prefix."admin_action_log AUTO_INCREMENT = 1");
  669. # 删除日历的字段操作记录
  670. Db::name('admin_action_record')->where('types', 'oa_event')->delete();
  671. # 重置自增ID
  672. Db::query("ALTER TABLE ".$prefix."admin_action_record AUTO_INCREMENT = 1");
  673. # 删除日历提醒
  674. Db::query("TRUNCATE TABLE ".$prefix."oa_event_notice");
  675. # 删除日历数据
  676. Db::query("TRUNCATE TABLE ".$prefix."oa_event");
  677. # ------ 清除日历数据 END ------ #
  678. # ------ 删除活动数据 START ------ #
  679. # 获取活动ID
  680. $activityIds = Db::name('crm_activity')->where('activity_type', 10)->whereIn('activity_type_id', $eventIds)->column('activity_id');
  681. # 获取有关任务的附件ID
  682. $activityFileIds = Db::name('crm_activity_file')->whereIn('activity_id', $activityIds)->column('file_id');
  683. # 查询任务附件数据
  684. $activityFileInfo = $this->getFileList($activityFileIds);
  685. # 合并附件数据
  686. $files = array_merge($files, $activityFileInfo);
  687. # 删除有关任务的附件关联记录
  688. Db::name('crm_activity_file')->whereIn('activity_id', $activityIds)->delete();
  689. # 重置自增ID
  690. Db::query("ALTER TABLE ".$prefix."crm_activity_file AUTO_INCREMENT = 1");
  691. # 删除有关任务的活动记录
  692. Db::name('crm_activity')->where('activity_type', 10)->whereIn('activity_type_id', $eventIds)->delete();
  693. # 重置自增ID
  694. Db::query("ALTER TABLE ".$prefix."crm_activity AUTO_INCREMENT = 1");
  695. # ------ 删除活动数据 END ------ #
  696. # ------ 删除消息数据 START ------ #
  697. Db::name('admin_message')->where('module_name', 'oa')->where('controller_name', 'event')->delete();
  698. # ------ 删除消息数据 END ------ #
  699. # ------ 重置附件表自增ID START ------ #
  700. Db::query("ALTER TABLE ".$prefix."admin_file AUTO_INCREMENT = 1");
  701. # ------ 重置附件表自增ID END ------ #
  702. # ------ 删除附件 START ------ #
  703. if (!empty($files)) {
  704. foreach ($files AS $key => $value) {
  705. unlink($value);
  706. }
  707. }
  708. # ------ 删除附件 START ------ #
  709. # 提交事务
  710. Db::commit();
  711. return true;
  712. } catch (Exception $e) {
  713. # 回滚事务
  714. Db::rollback();
  715. # 将状态设置为false,终止其他方法的操作
  716. $this->status = false;
  717. $this->log = '重置日历模块时出错!';
  718. return false;
  719. }
  720. }
  721. /**
  722. * 获取文件列表
  723. *
  724. * @param $fileIds
  725. * @return array
  726. * @throws \think\db\exception\DataNotFoundException
  727. * @throws \think\db\exception\ModelNotFoundException
  728. * @throws \think\exception\DbException
  729. */
  730. private function getFileList($fileIds)
  731. {
  732. $result = [];
  733. $list = Db::name('admin_file')->field([
  734. 'file_path',
  735. 'file_path_thumb'
  736. ])->whereIn('file_id', $fileIds)->select();
  737. foreach ($list AS $key => $value) {
  738. if (!empty($value['file_path'])) $result[] = 'public/uploads/' . $value['file_path'];
  739. if (!empty($value['file_path_thumb'])) $result[] = 'public/uploads/' . $value['file_path_thumb'];
  740. }
  741. return $result;
  742. }
  743. }