InitializeLogic.php 40KB

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