File.php 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 附件
  4. // +----------------------------------------------------------------------
  5. // | Author: Michael_xu | gengxiaoxu@5kcrm.com
  6. // +----------------------------------------------------------------------
  7. namespace app\admin\model;
  8. use app\admin\model\Common;
  9. use app\crm\model\Activity;
  10. use app\crm\model\Invoice;
  11. use think\Db;
  12. use think\Request;
  13. class File extends Common
  14. {
  15. /**
  16. * 为了数据库的整洁,同时又不影响Model和Controller的名称
  17. * 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀
  18. */
  19. protected $name = 'admin_file';
  20. protected $module_arr = [
  21. 'other',
  22. 'crm_leads',
  23. 'crm_customer',
  24. 'crm_contacts',
  25. 'crm_business',
  26. 'crm_product',
  27. 'crm_contract',
  28. 'oa_log',
  29. 'oa_examine',
  30. 'oa_examine_travel',
  31. 'work_task',
  32. 'admin_record',
  33. 'oa_travel',
  34. 'hrm_pact',
  35. 'hrm_file',
  36. 'crm_invoice',
  37. 'crm_activity',
  38. 'crm_visit',
  39. 'crm_receivables'
  40. ];
  41. /**
  42. * [createData 添加附件]
  43. * @author Michael_xu
  44. * @param $files 附件数组
  45. * @param $param [module : 模块, module_id : 模块ID]
  46. * @param $x 裁剪图的长 ,$y 裁剪图的宽
  47. * @return [array]
  48. */
  49. public function createData($files, $param = [], $x = '150', $y = '150')
  50. {
  51. if (empty($files)) {
  52. $this->error = '请选择上传文件';
  53. return false;
  54. }
  55. $resData = [];
  56. $get_filesize_byte = get_upload_max_filesize_byte();
  57. foreach ($files as $k=>$v) {
  58. $info = '';
  59. $upload_name = $v['obj']->getInfo()['name'];
  60. if ($upload_name == 'blob') {
  61. $upload_name = 'logo.png';
  62. $new_info = [];
  63. $new_info = $v['obj']->getInfo();
  64. $new_info['name'] = $upload_name;
  65. $v['obj']->setUploadInfo($new_info);
  66. }
  67. $info = $v['obj']->validate(['size'=>$get_filesize_byte,'ext'=>'jpg,jpeg,png,gif,zip,rar,doc,docx,xls,xlsx,ppt,pptx,txt,pdf,csv'])->move(FILE_PATH . 'public' . DS . 'uploads'); //验证规则
  68. // getimagesize($file["tmp_name"]
  69. if (!$info) {
  70. $this->error = $v['obj']->getError();
  71. return false;
  72. //$resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => $v['obj']->getError()];
  73. break;
  74. }
  75. $fileInfo = $info->getInfo(); //附件数据
  76. $rSuccess = false;
  77. $ext = '';
  78. $saveName = '';
  79. $thumbSaveName = '';
  80. if ($info) {
  81. //如果是图片类型,生成缩略图
  82. $ext = $info->getExtension();
  83. $saveName = $info->getSaveName();
  84. $fileName = $info->getFilename();
  85. if (in_array($ext, ['jpg','png','jpeg']) && $fileInfo['size'] < 8388608) {
  86. // $image = \think\Image::open($v['obj']);
  87. $image = \think\Image::open(UPLOAD_PATH . str_replace(DS, '/', $saveName));
  88. $thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
  89. $image->thumb($x, $y,\think\Image::THUMB_FILLED)->save(FILE_PATH . 'public'. DS .'uploads'. DS .$thumbSaveName); //THUMB_SCALING 或 THUMB_FILLED
  90. }
  91. if ($ext == 'gif') {
  92. $thumbSaveName = $saveName;
  93. }
  94. //附件信息存储
  95. $saveData = [];
  96. $saveData['name'] = $fileInfo['name'];
  97. $saveData['size'] = $fileInfo['size'];
  98. $saveData['create_user_id'] = $param['create_user_id'];
  99. $saveData['create_time'] = time();
  100. $saveData['file_path'] = UPLOAD_PATH . str_replace(DS, '/', $saveName);
  101. $saveData['file_path_thumb'] = $thumbSaveName ? UPLOAD_PATH . str_replace(DS, '/', $thumbSaveName) : '';
  102. $saveData['save_name'] = str_replace(DS, '/', $saveName);
  103. $saveData['types'] = $v['types'] ? : 'file';
  104. if ($k > 0) {
  105. $this->data($saveData)->allowField(true)->isUpdate(false)->save();
  106. } else {
  107. $this->data($saveData)->allowField(true)->save();
  108. }
  109. $file_id = $this->file_id;
  110. if ($file_id) {
  111. $rSuccess = true;
  112. //如果是关系表,则保存关系表数据
  113. if (in_array($param['module'],$this->module_arr) && $param['module_id']) {
  114. switch ($param['module']) {
  115. case 'crm_leads' : $r = db('crm_leads_file'); $r_name = 'leads_id'; break;
  116. case 'crm_customer' : $r = db('crm_customer_file'); $r_name = 'customer_id'; break;
  117. case 'crm_contacts' : $r = db('crm_contacts_file'); $r_name = 'contacts_id'; break;
  118. case 'crm_business' : $r = db('crm_business_file'); $r_name = 'business_id'; break;
  119. case 'crm_product' : $r = db('crm_product_file'); $r_name = 'product_id'; break;
  120. case 'crm_contract' : $r = db('crm_contract_file'); $r_name = 'contract_id'; break;
  121. case 'oa_log' : $r = db('oa_log_file'); $r_name = 'log_id'; break;
  122. case 'oa_examine' : $r = db('oa_examine_file'); $r_name = 'examine_id'; break;
  123. case 'work_task' : $r = db('work_task_file'); $r_name = 'task_id'; break;
  124. case 'admin_record' : $r = db('admin_record_file'); $r_name = 'record_id'; break;
  125. case 'oa_travel' : $r = db('oa_travel_file'); $r_name = 'travel_id'; break;
  126. case 'hrm_pact' : $r = db('hrm_pact_file'); $r_name = 'pact_id'; break;
  127. case 'hrm_file' : $r = db('hrm_user_file'); $r_name = 'user_id'; break;
  128. case 'crm_invoice' : $r = db('crm_invoice_file'); $r_name = 'invoice_id'; break;
  129. case 'crm_activity': $r = db('crm_activity_file'); $r_name = 'activity_id'; break;
  130. case 'crm_visit': $r = db('crm_visit_file'); $r_name = 'visit_id'; break;
  131. case 'crm_receivables': $r = db('crm_receivables_file'); $r_name = 'receivables_id'; break;
  132. default : break;
  133. }
  134. $rData = [];
  135. $rData[$r_name] = intval ($param['module_id']);
  136. $rData['file_id'] = $file_id;
  137. $rRes = $r->insert($rData);
  138. if (!$rRes) {
  139. $rSuccess = false;
  140. //删除文件
  141. @unlink($saveData['file_path']);
  142. @unlink($saveData['file_path_thumb']);
  143. }
  144. }
  145. }
  146. if ($rSuccess !== false) {
  147. $path = (UPLOAD_PATH.$saveName);
  148. # 应前端要求,将url字段改成跟path一样的内容,格式改为一位数组
  149. $resData = ['key' => $k, 'name' => $fileInfo['name'], 'status' => 1, 'path' => getFullPath($path), 'save_name' => str_replace(DS, '/', $saveName), 'url' => getFullPath($path), 'size' => format_bytes($fileInfo['size']), 'file_id' => $file_id];
  150. } else {
  151. $resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => '上传出错'];
  152. }
  153. } else {
  154. $resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => $v['obj']->getError()];
  155. }
  156. }
  157. return $resData;
  158. }
  159. /**
  160. * 修改上传文件名
  161. * @param [type] $save_name [description]
  162. * @param [type] $name [description]
  163. * @return [type] [description]
  164. */
  165. public function updateNameBySaveName($save_name,$name)
  166. {
  167. $flag = $this->where(['save_name' => $save_name])->setField('name',$name);
  168. if ( $flag ) {
  169. return true;
  170. } else {
  171. $this->error = '操作失败';
  172. return false;
  173. }
  174. }
  175. /**
  176. * [delFileById 删除附件]
  177. * @author Michael_xu
  178. * @param $save_name 附件保存名称
  179. * @param $param [module : 模块, module_id : 模块ID]
  180. * @return [array]
  181. */
  182. public function delFileBySaveName($save_name, $param = [])
  183. {
  184. if (!$save_name) {
  185. $this->error = '请选择需要删除的附件';
  186. return false;
  187. }
  188. $fileInfo = $this->where(['save_name' => trim($save_name)])->find();
  189. if (!$fileInfo) {
  190. $this->error = '附件不存在或已删除';
  191. return false;
  192. }
  193. $file_id = $fileInfo['file_id'];
  194. $res = db('admin_file')->where(['file_id' => $file_id])->delete();
  195. if ($res) {
  196. @unlink($fileInfo['file_path']);//删除文件
  197. if ($fileInfo['file_path_thumb']) @unlink($fileInfo['file_path_thumb']);
  198. //处理附表信息
  199. if (in_array($param['module'], $this->module_arr)) {
  200. switch ($param['module']) {
  201. case 'crm_leads' : $r = db('crm_leads_file'); break;
  202. case 'crm_customer' : $r = db('crm_customer_file'); break;
  203. case 'crm_contacts' : $r = db('crm_contacts_file'); break;
  204. case 'crm_business' : $r = db('crm_business_file'); break;
  205. case 'crm_product' : $r = db('crm_product_file'); break;
  206. case 'crm_contract' : $r = db('crm_contract_file'); break;
  207. case 'oa_log' : $r = db('oa_log_file'); break;
  208. case 'oa_examine' : $r = db('oa_examine_file'); break;
  209. case 'work_task' : $r = db('work_task_file'); break;
  210. case 'admin_record' : $r = db('admin_record_file'); break;
  211. case 'oa_travel' : $r = db('oa_travel_file'); break;
  212. case 'hrm_pact' : $r = db('hrm_pact_file'); break;
  213. case 'hrm_file' : $r = db('hrm_user_file'); break;
  214. case 'crm_invoice' : $r = db('crm_invoice_file'); break;
  215. case 'crm_activity': $r = db('crm_activity_file'); break;
  216. case 'crm_visit': $r = db('crm_visit_file'); break;
  217. case 'crm_receivables': $r = db('crm_receivables_file'); break;
  218. default : break;
  219. }
  220. $resDel = $r->where(['file_id'=>$file_id])->delete();
  221. }
  222. return true;
  223. } else {
  224. $this->error = '删除失败';
  225. return false;
  226. }
  227. }
  228. /**
  229. * 根据主键获取详情
  230. * @author Michael_xu
  231. * @param array $param [description]
  232. */
  233. public function getDataBySaveName($save_name = '')
  234. {
  235. if (!$save_name) {
  236. $this->error = '参数错误';
  237. return false;
  238. }
  239. $data = $this->where(['save_name' => trim($save_name)])->find();
  240. $data['full_path'] = getFullPath($data['file_path']);
  241. $data['full_path_thumb'] = getFullPath($data['file_path_thumb']);
  242. if (!$data) {
  243. $this->error = '数据不存在或已删除';
  244. return false;
  245. }
  246. return $data;
  247. }
  248. /**
  249. * 根据ID获取列表
  250. * @author Michael_xu
  251. * @param string module [类型]
  252. * @param string by = all 全部(不分页)
  253. * @param int module_id [类型ID]
  254. */
  255. public function getDataList($request, $by = '')
  256. {
  257. if (!in_array($request['module'], $this->module_arr) || !$request['module_id']) {
  258. $this->error = '参数错误';
  259. return false;
  260. }
  261. $module_ids = $request['module_id'];
  262. if (!is_array($request['module_id'])) {
  263. $module_ids = array($request['module_id']);
  264. }
  265. switch ($request['module']) {
  266. case 'crm_leads' : $r = db('crm_leads_file'); $module = db('crm_leads'); break;
  267. case 'crm_customer' : $r = db('crm_customer_file'); $module = db('crm_customer'); break;
  268. case 'crm_contacts' : $r = db('crm_contacts_file'); $module = db('crm_contacts'); break;
  269. case 'crm_business' : $r = db('crm_business_file'); $module = db('crm_business'); break;
  270. case 'crm_product' : $r = db('crm_product_file'); $module = db('crm_product'); break;
  271. case 'crm_contract' : $r = db('crm_contract_file'); $module = db('crm_contract'); break;
  272. case 'oa_log' : $r = db('oa_log_file'); $module = db('oa_log'); break;
  273. case 'oa_examine' : $r = db('oa_examine_file'); $module = db('oa_examine'); break;
  274. case 'oa_examine_travel' : $r = db('oa_examine_travel_file'); $module = db('oa_examine_travel'); break;
  275. case 'work_task' : $r = db('work_task_file'); $module = db('task'); break;
  276. case 'admin_record' : $r = db('admin_record_file'); $module = db('admin_record'); break;
  277. case 'oa_travel' : $r = db('oa_travel_file'); $module = db('oa_travel'); break;
  278. case 'hrm_pact' : $r = db('hrm_pact_file'); $module = db('hrm_pact'); break;
  279. case 'hrm_file' : $r = db('hrm_user_file'); $module = db('admin_user'); break;
  280. case 'crm_invoice' : $r = db('crm_invoice_file'); $module = db('crm_invoice'); break;
  281. case 'crm_activity' : $r = db('crm_activity_file'); $module = db('crm_activity'); break;
  282. case 'crm_visit' : $r = db('crm_visit_file'); $module = db('crm_visit'); break;
  283. case 'crm_receivables' : $r = db('crm_receivables_file'); $module = db('crm_receivables'); break;
  284. default : break;
  285. }
  286. if ($r) {
  287. $fileIds = $r->where([$module->getPk() => ['in',$module_ids]])->column('file_id');
  288. $request['file_id'] = ['in', $fileIds];
  289. }
  290. unset($request['module']);
  291. unset($request['module_id']);
  292. unset($request['by']);
  293. $userModel = new \app\admin\model\User();
  294. $request = $this->fmtRequest( $request );
  295. $map = $request['map'];
  296. $order = 'create_time desc';
  297. $dataCount = $this->where($map)->count('file_id');
  298. if ($by == 'all') {
  299. $list = Db::name('AdminFile')->where($map)->order($order)->select();
  300. } else {
  301. $list = Db::name('AdminFile')->where($map)->page($request['page'], $request['limit'])->order($order)->select();
  302. }
  303. foreach ($list as $k=>$v) {
  304. $createUserInfo = isset($v['create_user_id']) ? $userModel->getUserById($v['create_user_id']) : [];
  305. $list[$k]['size'] = format_bytes($v['size']); //字节转换
  306. $list[$k]['create_time'] = date('Y-m-d H:i:s',$v['create_time']);
  307. $list[$k]['create_user_id_info'] = $createUserInfo;
  308. $list[$k]['createName'] = !empty($createUserInfo['realname']) ? $createUserInfo['realname'] : '';
  309. $list[$k]['ext'] = getExtension($v['save_name']);
  310. $list[$k]['file_path'] = getFullPath($v['file_path']);
  311. $list[$k]['file_path_thumb'] = getFullPath($v['file_path_thumb']);
  312. }
  313. $data = [];
  314. $data['list'] = $list ? : [];
  315. $data['dataCount'] = $dataCount ? : 0;
  316. return $data;
  317. }
  318. /**
  319. * 根据表、字段更新上传图片
  320. * @author Michael_xu
  321. * @param $file 附件信息
  322. * @param $module 模块(判断权限),一般是控制器,并且和表名一致
  323. * @param $module_id 模块ID(判断权限)
  324. * @param $file 字段
  325. * @param $thumb_field 缩略图字段
  326. * @param $x 裁剪宽度
  327. * @param $y 裁剪高度
  328. */
  329. public function updateByField($file, $module, $module_id, $field, $thumb_field = '', $x = '150', $y = '150')
  330. {
  331. if (empty($module) || empty($module_id) || empty($field)) {
  332. $this->error = '参数错误';
  333. return false;
  334. }
  335. $info = $file->move(FILE_PATH . 'public' . DS . 'uploads'); //验证规则
  336. $fileInfo = $info->getInfo(); //附件数据
  337. $saveName = '';
  338. $thumbSaveName = '';
  339. if ($info) {
  340. //如果是图片类型,生成缩略图
  341. $ext = $info->getExtension();
  342. $saveName = $info->getSaveName();
  343. $fileName = $info->getFilename();
  344. $thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
  345. //附件信息存储
  346. $saveData = [];
  347. if ($thumb_field) {
  348. // $image = \think\Image::open($file);
  349. $image = \think\Image::open(UPLOAD_PATH . str_replace(DS, '/', $saveName));
  350. $thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
  351. $image->thumb($x, $y,\think\Image::THUMB_FILLED)->save(FILE_PATH . 'public'. DS .'uploads'. DS .$thumbSaveName); //THUMB_SCALING 或 THUMB_FILLED
  352. $saveData[$thumb_field] = $thumbSaveName ? UPLOAD_PATH . str_replace(DS, '/', $thumbSaveName) : '';
  353. }
  354. $saveData[$field] = UPLOAD_PATH . str_replace(DS, '/', $saveName);
  355. switch ($module) {
  356. case 'crm_customer' : $moduleModel = new \app\crm\model\Customer(); break;
  357. case 'crm_contacts' : $moduleModel = new \app\crm\model\Contacts(); break;
  358. case 'crm_business' : $moduleModel = new \app\crm\model\Business(); break;
  359. case 'crm_product' : $moduleModel = new \app\crm\model\Product(); break;
  360. case 'crm_contract' : $moduleModel = new \app\crm\model\Contract(); break;
  361. case 'User' : $moduleModel = new \app\admin\model\User(); break;
  362. case 'admin_system': $moduleModel = new \app\admin\model\System(); break;
  363. case 'crm_invoice' : $moduleModel = new Invoice(); break;
  364. case 'crm_activity' : $moduleModel = new Activity(); break;
  365. case 'crm_receivables' : $moduleModel = new \app\crm\model\Receivables(); break;
  366. case 'crm_visit' : $moduleModel = new \app\crm\model\Visit(); break;
  367. }
  368. $resFile = $moduleModel->allowField([$field,$thumb_field])->save($saveData, [$moduleModel->getPk() => $module_id]);
  369. if (!$resFile) {
  370. $this->error = '上传失败';
  371. return false;
  372. }
  373. return true;
  374. }
  375. }
  376. /**
  377. * 根据ID保存,处理逻辑关系
  378. * @author Michael_xu
  379. * @param $ids 附件ID数组
  380. * @param $module 表名
  381. * @param $module_id 模块ID
  382. */
  383. public function createDataById($ids, $module, $module_id)
  384. {
  385. if (!$ids || !in_array($module, $this->module_arr) || !$module_id) {
  386. $this->error = '参数错误';
  387. return false;
  388. }
  389. switch (trim($module)) {
  390. case 'crm_customer' : $rDb = db('crm_customer_file'); $r_name = 'customer_id'; break;
  391. case 'crm_contacts' : $rDb = db('crm_contacts_file'); $r_name = 'contacts_id'; break;
  392. case 'crm_business' : $rDb = db('crm_business_file'); $r_name = 'business_id'; break;
  393. case 'crm_product' : $rDb = db('crm_product_file'); $r_name = 'product_id'; break;
  394. case 'crm_contract' : $rDb = db('crm_contract_file'); $r_name = 'contract_id'; break;
  395. case 'oa_log' : $rDb = db('oa_log_file'); $r_name = 'log_id'; break;
  396. case 'oa_examine' : $rDb = db('oa_examine_file'); $r_name = 'examine_id'; break;
  397. case 'oa_examine_travel' : $rDb = db('oa_examine_travel_file'); $r_name = 'travel_id'; break;
  398. case 'admin_record' : $rDb = db('admin_record_file'); $r_name = 'record_id'; break;
  399. case 'oa_travel' : $rDb = db('oa_travel_file'); $r_name = 'travel_id'; break;
  400. case 'crm_invoice' : $rDb = db('crm_invoice_file'); $r_name = 'invoice_id'; break;
  401. case 'crm_activity' : $rDb = db('crm_activity_file'); $r_name = 'activity_id'; break;
  402. case 'crm_visit' : $rDb = db('crm_visit_file'); $r_name = 'activity_id'; break;
  403. case 'crm_receivables' : $rDb = db('crm_receivables_file'); $r_name = 'receivables_id'; break;
  404. }
  405. $res_success = true;
  406. $data = [];
  407. $data[$r_name] = intval ($module_id);
  408. foreach ($ids as $v) {
  409. $data['file_id'] = intval($v);
  410. if (!$rDb->insert($data)) {
  411. $res_success = false;
  412. }
  413. }
  414. if ($res_success == false) {
  415. $this->error = '附件上传失败';
  416. }
  417. return true;
  418. }
  419. /**
  420. * 删除关系表附件
  421. * @author Michael_xu
  422. * @param $module 模块
  423. * @param $module_id 模块ID
  424. */
  425. public function delRFileByModule($module, $module_id)
  426. {
  427. if (in_array($module,$this->module_arr) && $module_id) {
  428. switch ($module) {
  429. case 'crm_leads' :
  430. $r = db('crm_leads_file');
  431. $r_name = 'leads_id';
  432. break;
  433. case 'crm_customer' :
  434. $r = db('crm_customer_file');
  435. $r_name = 'customer_id';
  436. break;
  437. case 'crm_contacts' :
  438. $r = db('crm_contacts_file');
  439. $r_name = 'contacts_id';
  440. break;
  441. case 'crm_business' :
  442. $r = db('crm_business_file');
  443. $r_name = 'business_id';
  444. break;
  445. case 'crm_product' :
  446. $r = db('crm_product_file');
  447. $r_name = 'product_id';
  448. break;
  449. case 'crm_contract' :
  450. $r = db('crm_contract_file');
  451. $r_name = 'contract_id';
  452. break;
  453. case 'oa_log' :
  454. $r = db('oa_log_file');
  455. $r_name = 'log_id';
  456. break;
  457. case 'oa_examine' :
  458. $r = db('oa_examine_file');
  459. $r_name = 'examine_id';
  460. break;
  461. case 'work_task' :
  462. $r = db('work_task_file');
  463. $r_name = 'task_id';
  464. break;
  465. case 'admin_record' :
  466. $r = db('admin_record_file');
  467. $r_name = 'record_id';
  468. break;
  469. case 'oa_travel' :
  470. $r = db('oa_travel_file');
  471. $r_name = 'travel_id';
  472. break;
  473. case 'hrm_pact' :
  474. $r = db('hrm_pact_file');
  475. $r_name = 'pact_id';
  476. break;
  477. case 'hrm_file' :
  478. $r = db('hrm_user_file');
  479. $r_name = 'user_id';
  480. break;
  481. case 'crm_invoice' :
  482. $r = db('crm_invoice_file');
  483. $r_name = 'invoice_id'; break;
  484. case 'crm_visit' :
  485. $r = db('crm_visit_file');
  486. $r_name = 'visit_id';
  487. break;
  488. case 'crm_activity' :
  489. $r = db('crm_activity_file');
  490. $r_name = 'activity_id';
  491. break;
  492. case 'crm_receivables' :
  493. $r = db('crm_receivables_file');
  494. $r_name = 'receivables_id';
  495. default : break;
  496. }
  497. $rWhere = [];
  498. if(!is_array($module_id)){
  499. $module_id = [intval ($module_id)];
  500. }
  501. $rWhere[$r_name] = ['in',$module_id];
  502. $rFileIds = $r->where($rWhere)->column('file_id');
  503. $rRes = $r->where($rWhere)->delete();
  504. if ($rRes && $rFileIds) {
  505. $fileList = db('admin_file')->where(['file_id' => ['in',$rFileIds]])->field('file_path,file_path_thumb')->select();
  506. foreach ($fileList as $v) {
  507. //删除文件
  508. @unlink($v['file_path']);
  509. @unlink($v['file_path_thumb']);
  510. }
  511. }
  512. }
  513. }
  514. /**
  515. * 全部删除(活动、产品)
  516. *
  517. * @param $param
  518. * @return bool
  519. * @throws \think\Exception
  520. * @throws \think\exception\PDOException
  521. */
  522. public function deleteAll($param)
  523. {
  524. if (!empty($param['module']) && !empty($param['module_id'])) {
  525. $module = db('crm_activity_file');
  526. $primaryKey = 'activity_id';
  527. switch ($param['module']) {
  528. case 'crm_activity' : $module = db('crm_activity_file'); $primaryKey = 'activity_id'; break;
  529. case 'crm_product' : $module = db('crm_product_file'); $primaryKey = 'product_id'; break;
  530. }
  531. $fileIds = $module->where($primaryKey, $param['module_id'])->column('file_id');
  532. # 删除关联数据
  533. $module->where($primaryKey, $param['module_id'])->delete();
  534. # 删除附件
  535. db('admin_file')->whereIn('file_id', $fileIds)->delete();
  536. }
  537. if (!empty($param['file_id'])) {
  538. db('admin_file')->whereIn('file_id', $param['file_id'])->delete();
  539. }
  540. return true;
  541. }
  542. }