File.php 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  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. 'jxc_product',
  41. 'jxc_supplier',
  42. 'jxc_purchase',
  43. 'jxc_retreat',
  44. 'jxc_sale',
  45. 'jxc_salereturn',
  46. 'jxc_receipt',
  47. 'jxc_outbound',
  48. 'jxc_payment',
  49. 'jxc_collection',
  50. 'jxc_inventory',
  51. 'jxc_allocation'
  52. ];
  53. /**
  54. * [createData 添加附件]
  55. * @author Michael_xu
  56. * @param $files 附件数组
  57. * @param $param [module : 模块, module_id : 模块ID]
  58. * @param $x 裁剪图的长 ,$y 裁剪图的宽
  59. * @return [array]
  60. */
  61. public function createData($files, $param = [], $x = '150', $y = '150')
  62. {
  63. if (empty($files)) {
  64. $this->error = '请选择上传文件';
  65. return false;
  66. }
  67. $resData = [];
  68. $get_filesize_byte = get_upload_max_filesize_byte();
  69. foreach ($files as $k=>$v) {
  70. $info = '';
  71. $upload_name = $v['obj']->getInfo()['name'];
  72. if ($upload_name == 'blob') {
  73. $upload_name = 'logo.png';
  74. $new_info = [];
  75. $new_info = $v['obj']->getInfo();
  76. $new_info['name'] = $upload_name;
  77. $v['obj']->setUploadInfo($new_info);
  78. }
  79. $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'); //验证规则
  80. // getimagesize($file["tmp_name"]
  81. if (!$info) {
  82. $this->error = $v['obj']->getError();
  83. return false;
  84. //$resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => $v['obj']->getError()];
  85. break;
  86. }
  87. $fileInfo = $info->getInfo(); //附件数据
  88. $rSuccess = false;
  89. $ext = '';
  90. $saveName = '';
  91. $thumbSaveName = '';
  92. if ($info) {
  93. //如果是图片类型,生成缩略图
  94. $ext = $info->getExtension();
  95. $saveName = $info->getSaveName();
  96. $fileName = $info->getFilename();
  97. if (in_array($ext, ['jpg','png','jpeg']) && $fileInfo['size'] < 8388608) {
  98. // $image = \think\Image::open($v['obj']);
  99. $image = \think\Image::open(UPLOAD_PATH . str_replace(DS, '/', $saveName));
  100. $thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
  101. $image->thumb($x, $y,\think\Image::THUMB_FILLED)->save(FILE_PATH . 'public'. DS .'uploads'. DS .$thumbSaveName); //THUMB_SCALING 或 THUMB_FILLED
  102. }
  103. if ($ext == 'gif') {
  104. $thumbSaveName = $saveName;
  105. }
  106. //附件信息存储
  107. $saveData = [];
  108. $saveData['name'] = $fileInfo['name'];
  109. $saveData['size'] = $fileInfo['size'];
  110. $saveData['create_user_id'] = $param['create_user_id'];
  111. $saveData['create_time'] = time();
  112. $saveData['file_path'] = UPLOAD_PATH . str_replace(DS, '/', $saveName);
  113. $saveData['file_path_thumb'] = $thumbSaveName ? UPLOAD_PATH . str_replace(DS, '/', $thumbSaveName) : '';
  114. $saveData['save_name'] = str_replace(DS, '/', $saveName);
  115. $saveData['types'] = $v['types'] ? : 'file';
  116. if ($k > 0) {
  117. $this->data($saveData)->allowField(true)->isUpdate(false)->save();
  118. } else {
  119. $this->data($saveData)->allowField(true)->save();
  120. }
  121. $file_id = $this->file_id;
  122. if ($file_id) {
  123. $rSuccess = true;
  124. //如果是关系表,则保存关系表数据
  125. if (in_array($param['module'],$this->module_arr) && $param['module_id']) {
  126. switch ($param['module']) {
  127. case 'crm_leads' : $r = db('crm_leads_file'); $r_name = 'leads_id'; break;
  128. case 'crm_customer' : $r = db('crm_customer_file'); $r_name = 'customer_id'; break;
  129. case 'crm_contacts' : $r = db('crm_contacts_file'); $r_name = 'contacts_id'; break;
  130. case 'crm_business' : $r = db('crm_business_file'); $r_name = 'business_id'; break;
  131. case 'crm_product' : $r = db('crm_product_file'); $r_name = 'product_id'; break;
  132. case 'crm_contract' : $r = db('crm_contract_file'); $r_name = 'contract_id'; break;
  133. case 'oa_log' : $r = db('oa_log_file'); $r_name = 'log_id'; break;
  134. case 'oa_examine' : $r = db('oa_examine_file'); $r_name = 'examine_id'; break;
  135. case 'work_task' : $r = db('work_task_file'); $r_name = 'task_id'; break;
  136. case 'admin_record' : $r = db('admin_record_file'); $r_name = 'record_id'; break;
  137. case 'oa_travel' : $r = db('oa_travel_file'); $r_name = 'travel_id'; break;
  138. case 'hrm_pact' : $r = db('hrm_pact_file'); $r_name = 'pact_id'; break;
  139. case 'hrm_file' : $r = db('hrm_user_file'); $r_name = 'user_id'; break;
  140. case 'crm_invoice' : $r = db('crm_invoice_file'); $r_name = 'invoice_id'; break;
  141. case 'crm_activity': $r = db('crm_activity_file'); $r_name = 'activity_id'; break;
  142. case 'crm_visit': $r = db('crm_visit_file'); $r_name = 'visit_id'; break;
  143. case 'crm_receivables': $r = db('crm_receivables_file'); $r_name = 'receivables_id'; break;
  144. case 'jxc_product': $r = db('jxc_product_file'); $r_name = 'product_id'; break;
  145. case 'jxc_supplier': $r = db('jxc_supplier_file'); $r_name = 'supplier_id'; break;
  146. case 'jxc_purchase': $r = db('jxc_purchase_file'); $r_name = 'purchase_id'; break;
  147. case 'jxc_retreat': $r = db('jxc_retreat_file'); $r_name = 'retreat_id'; break;
  148. case 'jxc_sale': $r = db('jxc_sale_file'); $r_name = 'sale_id'; break;
  149. case 'jxc_salereturn': $r = db('jxc_salereturn_file'); $r_name = 'salereturn_id'; break;
  150. case 'jxc_receipt': $r = db('jxc_receipt_file'); $r_name = 'receipt_id'; break;
  151. case 'jxc_outbound': $r = db('jxc_outbound_file'); $r_name = 'outbound_id'; break;
  152. case 'jxc_payment': $r = db('jxc_payment_file'); $r_name = 'payment_note_id'; break;
  153. case 'jxc_collection': $r = db('jxc_collection_file'); $r_name = 'collection_note_id'; break;
  154. case 'jxc_inventory': $r = db('jxc_inventory_file'); $r_name = 'inventory_id'; break;
  155. case 'jxc_allocation': $r = db('jxc_allocation_file'); $r_name = 'allocation_id'; break;
  156. default : break;
  157. }
  158. $rData = [];
  159. $rData[$r_name] = intval ($param['module_id']);
  160. $rData['file_id'] = $file_id;
  161. $rRes = $r->insert($rData);
  162. if (!$rRes) {
  163. $rSuccess = false;
  164. //删除文件
  165. @unlink($saveData['file_path']);
  166. @unlink($saveData['file_path_thumb']);
  167. }
  168. }
  169. }
  170. if ($rSuccess !== false) {
  171. $path = (UPLOAD_PATH.$saveName);
  172. # 应前端要求,将url字段改成跟path一样的内容,格式改为一位数组
  173. $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];
  174. } else {
  175. $resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => '上传出错'];
  176. }
  177. } else {
  178. $resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => $v['obj']->getError()];
  179. }
  180. }
  181. return $resData;
  182. }
  183. /**
  184. * 修改上传文件名
  185. * @param [type] $save_name [description]
  186. * @param [type] $name [description]
  187. * @return [type] [description]
  188. */
  189. public function updateNameBySaveName($save_name,$name)
  190. {
  191. $flag = $this->where(['save_name' => $save_name])->setField('name',$name);
  192. if ( $flag ) {
  193. return true;
  194. } else {
  195. $this->error = '操作失败';
  196. return false;
  197. }
  198. }
  199. /**
  200. * [delFileById 删除附件]
  201. * @author Michael_xu
  202. * @param $save_name 附件保存名称
  203. * @param $param [module : 模块, module_id : 模块ID]
  204. * @return [array]
  205. */
  206. public function delFileBySaveName($save_name, $param = [])
  207. {
  208. if (!$save_name) {
  209. $this->error = '请选择需要删除的附件';
  210. return false;
  211. }
  212. $fileInfo = $this->where(['save_name' => trim($save_name)])->find();
  213. if (!$fileInfo) {
  214. $this->error = '附件不存在或已删除';
  215. return false;
  216. }
  217. $file_id = $fileInfo['file_id'];
  218. $res = db('admin_file')->where(['file_id' => $file_id])->delete();
  219. if ($res) {
  220. @unlink($fileInfo['file_path']);//删除文件
  221. if ($fileInfo['file_path_thumb']) @unlink($fileInfo['file_path_thumb']);
  222. //处理附表信息
  223. if (in_array($param['module'], $this->module_arr)) {
  224. switch ($param['module']) {
  225. case 'crm_leads' : $r = db('crm_leads_file'); break;
  226. case 'crm_customer' : $r = db('crm_customer_file'); break;
  227. case 'crm_contacts' : $r = db('crm_contacts_file'); break;
  228. case 'crm_business' : $r = db('crm_business_file'); break;
  229. case 'crm_product' : $r = db('crm_product_file'); break;
  230. case 'crm_contract' : $r = db('crm_contract_file'); break;
  231. case 'oa_log' : $r = db('oa_log_file'); break;
  232. case 'oa_examine' : $r = db('oa_examine_file'); break;
  233. case 'work_task' : $r = db('work_task_file'); break;
  234. case 'admin_record' : $r = db('admin_record_file'); break;
  235. case 'oa_travel' : $r = db('oa_travel_file'); break;
  236. case 'hrm_pact' : $r = db('hrm_pact_file'); break;
  237. case 'hrm_file' : $r = db('hrm_user_file'); break;
  238. case 'crm_invoice' : $r = db('crm_invoice_file'); break;
  239. case 'crm_activity': $r = db('crm_activity_file'); break;
  240. case 'crm_visit': $r = db('crm_visit_file'); break;
  241. case 'crm_receivables': $r = db('crm_receivables_file'); break;
  242. default : break;
  243. }
  244. $resDel = $r->where(['file_id'=>$file_id])->delete();
  245. }
  246. return true;
  247. } else {
  248. $this->error = '删除失败';
  249. return false;
  250. }
  251. }
  252. /**
  253. * 根据主键获取详情
  254. * @author Michael_xu
  255. * @param array $param [description]
  256. */
  257. public function getDataBySaveName($save_name = '')
  258. {
  259. if (!$save_name) {
  260. $this->error = '参数错误';
  261. return false;
  262. }
  263. $data = $this->where(['save_name' => trim($save_name)])->find();
  264. $data['full_path'] = getFullPath($data['file_path']);
  265. $data['full_path_thumb'] = getFullPath($data['file_path_thumb']);
  266. if (!$data) {
  267. $this->error = '数据不存在或已删除';
  268. return false;
  269. }
  270. return $data;
  271. }
  272. /**
  273. * 根据ID获取列表
  274. * @author Michael_xu
  275. * @param string module [类型]
  276. * @param string by = all 全部(不分页)
  277. * @param int module_id [类型ID]
  278. */
  279. public function getDataList($request, $by = '')
  280. {
  281. if (!in_array($request['module'], $this->module_arr) || !$request['module_id']) {
  282. $this->error = '参数错误';
  283. return false;
  284. }
  285. $module_ids = $request['module_id'];
  286. if (!is_array($request['module_id'])) {
  287. $module_ids = array($request['module_id']);
  288. }
  289. $moduleName = $request['module'];
  290. switch ($request['module']) {
  291. case 'crm_leads' : $r = db('crm_leads_file'); $module = db('crm_leads'); break;
  292. case 'crm_customer' : $r = db('crm_customer_file'); $module = db('crm_customer'); break;
  293. case 'crm_contacts' : $r = db('crm_contacts_file'); $module = db('crm_contacts'); break;
  294. case 'crm_business' : $r = db('crm_business_file'); $module = db('crm_business'); break;
  295. case 'crm_product' : $r = db('crm_product_file'); $module = db('crm_product'); break;
  296. case 'crm_contract' : $r = db('crm_contract_file'); $module = db('crm_contract'); break;
  297. case 'oa_log' : $r = db('oa_log_file'); $module = db('oa_log'); break;
  298. case 'oa_examine' : $r = db('oa_examine_file'); $module = db('oa_examine'); break;
  299. case 'oa_examine_travel' : $r = db('oa_examine_travel_file'); $module = db('oa_examine_travel'); break;
  300. case 'work_task' : $r = db('work_task_file'); $module = db('task'); break;
  301. case 'admin_record' : $r = db('admin_record_file'); $module = db('admin_record'); break;
  302. case 'oa_travel' : $r = db('oa_travel_file'); $module = db('oa_travel'); break;
  303. case 'hrm_pact' : $r = db('hrm_pact_file'); $module = db('hrm_pact'); break;
  304. case 'hrm_file' : $r = db('hrm_user_file'); $module = db('admin_user'); break;
  305. case 'crm_invoice' : $r = db('crm_invoice_file'); $module = db('crm_invoice'); break;
  306. case 'crm_activity' : $r = db('crm_activity_file'); $module = db('crm_activity'); break;
  307. case 'crm_visit' : $r = db('crm_visit_file'); $module = db('crm_visit'); break;
  308. case 'crm_receivables' : $r = db('crm_receivables_file'); $module = db('crm_receivables'); break;
  309. case 'jxc_product' : $r = db('jxc_product_file'); $module = db('jxc_product'); break;
  310. case 'jxc_supplier' : $r = db('jxc_supplier_file'); $module = db('jxc_supplier'); break;
  311. case 'jxc_purchase' : $r = db('jxc_purchase_file'); $module = db('jxc_purchase'); break;
  312. case 'jxc_retreat' : $r = db('jxc_retreat_file'); $module = db('jxc_retreat'); break;
  313. case 'jxc_sale' : $r = db('jxc_sale_file'); $module = db('jxc_sale'); break;
  314. case 'jxc_salereturn' : $r = db('jxc_salereturn_file'); $module = db('jxc_salereturn'); break;
  315. case 'jxc_receipt' : $r = db('jxc_receipt_file'); $module = db('jxc_receipt'); break;
  316. case 'jxc_outbound' : $r = db('jxc_outbound_file'); $module = db('jxc_outbound'); break;
  317. case 'jxc_payment' : $r = db('jxc_payment_file'); $module = db('jxc_payment'); break;
  318. case 'jxc_collection' : $r = db('jxc_collection_file'); $module = db('jxc_collection'); break;
  319. case 'jxc_inventory' : $r = db('jxc_inventory_file'); $module = db('jxc_inventory'); break;
  320. case 'jxc_allocation' : $r = db('jxc_allocation_file'); $module = db('jxc_allocation'); break;
  321. default : break;
  322. }
  323. if ($r) {
  324. $fileIds = $r->where([$module->getPk() => ['in',$module_ids]])->column('file_id');
  325. $request['file_id'] = ['in', $fileIds];
  326. }
  327. unset($request['module']);
  328. unset($request['module_id']);
  329. unset($request['by']);
  330. # 查询活动附件,用于判断是否可以删除附件(活动添加的附件只能在活动中删除)
  331. $activityFileIds = [];
  332. $activityType = ['crm_leads' => 1, 'crm_customer' => 2, 'crm_contacts' => 3, 'crm_business' => 5, 'crm_contract' => 6];
  333. if (!empty($activityType[$moduleName])) {
  334. $activityFileIds = db('crm_activity')->alias('activity')
  335. ->join('__CRM_ACTIVITY_FILE__ file', 'file.activity_id = activity.activity_id', 'LEFT')
  336. ->where(['type' => 1, 'activity_type' => $activityType[$moduleName], 'activity_type_id' => ['in', $module_ids]])
  337. ->column('file.file_id');
  338. $activityFileIds = array_filter($activityFileIds);
  339. }
  340. $userModel = new \app\admin\model\User();
  341. $request = $this->fmtRequest( $request );
  342. $map = $request['map'];
  343. $order = 'create_time desc';
  344. $dataCount = $this->where($map)->count('file_id');
  345. if ($by == 'all') {
  346. $list = Db::name('AdminFile')->where($map)->order($order)->select();
  347. } else {
  348. $list = Db::name('AdminFile')->where($map)->page($request['page'], $request['limit'])->order($order)->select();
  349. }
  350. foreach ($list as $k=>$v) {
  351. $createUserInfo = isset($v['create_user_id']) ? $userModel->getUserById($v['create_user_id']) : [];
  352. $list[$k]['size'] = format_bytes($v['size']); //字节转换
  353. $list[$k]['create_time'] = date('Y-m-d H:i:s',$v['create_time']);
  354. $list[$k]['create_user_id_info'] = $createUserInfo;
  355. $list[$k]['createName'] = !empty($createUserInfo['realname']) ? $createUserInfo['realname'] : '';
  356. $list[$k]['ext'] = getExtension($v['save_name']);
  357. $list[$k]['file_path'] = getFullPath($v['file_path']);
  358. $list[$k]['file_path_thumb'] = getFullPath($v['file_path_thumb']);
  359. $list[$k]['readOnly'] = !empty($activityType[$moduleName]) && in_array($v['file_id'], $activityFileIds) ? 1 : 0; # 活动中上次的附件,只能在活动中删除
  360. }
  361. $data = [];
  362. $data['list'] = $list ? : [];
  363. $data['dataCount'] = $dataCount ? : 0;
  364. return $data;
  365. }
  366. /**
  367. * 根据表、字段更新上传图片
  368. * @author Michael_xu
  369. * @param $file 附件信息
  370. * @param $module 模块(判断权限),一般是控制器,并且和表名一致
  371. * @param $module_id 模块ID(判断权限)
  372. * @param $file 字段
  373. * @param $thumb_field 缩略图字段
  374. * @param $x 裁剪宽度
  375. * @param $y 裁剪高度
  376. */
  377. public function updateByField($file, $module, $module_id, $field, $thumb_field = '', $x = '150', $y = '150')
  378. {
  379. if (empty($module) || empty($module_id) || empty($field)) {
  380. $this->error = '参数错误';
  381. return false;
  382. }
  383. $info = $file->move(FILE_PATH . 'public' . DS . 'uploads'); //验证规则
  384. $fileInfo = $info->getInfo(); //附件数据
  385. $saveName = '';
  386. $thumbSaveName = '';
  387. if ($info) {
  388. //如果是图片类型,生成缩略图
  389. $ext = $info->getExtension();
  390. $saveName = $info->getSaveName();
  391. $fileName = $info->getFilename();
  392. $thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
  393. //附件信息存储
  394. $saveData = [];
  395. if ($thumb_field) {
  396. // $image = \think\Image::open($file);
  397. $image = \think\Image::open(UPLOAD_PATH . str_replace(DS, '/', $saveName));
  398. $thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
  399. $image->thumb($x, $y,\think\Image::THUMB_FILLED)->save(FILE_PATH . 'public'. DS .'uploads'. DS .$thumbSaveName); //THUMB_SCALING 或 THUMB_FILLED
  400. $saveData[$thumb_field] = $thumbSaveName ? UPLOAD_PATH . str_replace(DS, '/', $thumbSaveName) : '';
  401. }
  402. $saveData[$field] = UPLOAD_PATH . str_replace(DS, '/', $saveName);
  403. switch ($module) {
  404. case 'crm_customer' : $moduleModel = new \app\crm\model\Customer(); break;
  405. case 'crm_contacts' : $moduleModel = new \app\crm\model\Contacts(); break;
  406. case 'crm_business' : $moduleModel = new \app\crm\model\Business(); break;
  407. case 'crm_product' : $moduleModel = new \app\crm\model\Product(); break;
  408. case 'crm_contract' : $moduleModel = new \app\crm\model\Contract(); break;
  409. case 'User' : $moduleModel = new \app\admin\model\User(); break;
  410. case 'admin_system': $moduleModel = new \app\admin\model\System(); break;
  411. case 'crm_invoice' : $moduleModel = new Invoice(); break;
  412. case 'crm_activity' : $moduleModel = new Activity(); break;
  413. case 'crm_receivables' : $moduleModel = new \app\crm\model\Receivables(); break;
  414. case 'crm_visit' : $moduleModel = new \app\crm\model\Visit(); break;
  415. }
  416. $resFile = $moduleModel->allowField([$field,$thumb_field])->save($saveData, [$moduleModel->getPk() => $module_id]);
  417. if (!$resFile) {
  418. $this->error = '上传失败';
  419. return false;
  420. }
  421. return true;
  422. }
  423. }
  424. /**
  425. * 根据ID保存,处理逻辑关系
  426. * @author Michael_xu
  427. * @param $ids 附件ID数组
  428. * @param $module 表名
  429. * @param $module_id 模块ID
  430. */
  431. public function createDataById($ids, $module, $module_id)
  432. {
  433. if (!$ids || !in_array($module, $this->module_arr) || !$module_id) {
  434. $this->error = '参数错误';
  435. return false;
  436. }
  437. switch (trim($module)) {
  438. case 'crm_customer' : $rDb = db('crm_customer_file'); $r_name = 'customer_id'; break;
  439. case 'crm_contacts' : $rDb = db('crm_contacts_file'); $r_name = 'contacts_id'; break;
  440. case 'crm_business' : $rDb = db('crm_business_file'); $r_name = 'business_id'; break;
  441. case 'crm_product' : $rDb = db('crm_product_file'); $r_name = 'product_id'; break;
  442. case 'crm_contract' : $rDb = db('crm_contract_file'); $r_name = 'contract_id'; break;
  443. case 'oa_log' : $rDb = db('oa_log_file'); $r_name = 'log_id'; break;
  444. case 'oa_examine' : $rDb = db('oa_examine_file'); $r_name = 'examine_id'; break;
  445. case 'oa_examine_travel' : $rDb = db('oa_examine_travel_file'); $r_name = 'travel_id'; break;
  446. case 'admin_record' : $rDb = db('admin_record_file'); $r_name = 'record_id'; break;
  447. case 'oa_travel' : $rDb = db('oa_travel_file'); $r_name = 'travel_id'; break;
  448. case 'crm_invoice' : $rDb = db('crm_invoice_file'); $r_name = 'invoice_id'; break;
  449. case 'crm_activity' : $rDb = db('crm_activity_file'); $r_name = 'activity_id'; break;
  450. case 'crm_visit' : $rDb = db('crm_visit_file'); $r_name = 'activity_id'; break;
  451. case 'crm_receivables' : $rDb = db('crm_receivables_file'); $r_name = 'receivables_id'; break;
  452. }
  453. $res_success = true;
  454. $data = [];
  455. $data[$r_name] = intval ($module_id);
  456. foreach ($ids as $v) {
  457. $data['file_id'] = intval($v);
  458. if (!$rDb->insert($data)) {
  459. $res_success = false;
  460. }
  461. }
  462. if ($res_success == false) {
  463. $this->error = '附件上传失败';
  464. }
  465. return true;
  466. }
  467. /**
  468. * 删除关系表附件
  469. * @author Michael_xu
  470. * @param $module 模块
  471. * @param $module_id 模块ID
  472. */
  473. public function delRFileByModule($module, $module_id)
  474. {
  475. if (in_array($module,$this->module_arr) && $module_id) {
  476. switch ($module) {
  477. case 'crm_leads' :
  478. $r = db('crm_leads_file');
  479. $r_name = 'leads_id';
  480. break;
  481. case 'crm_customer' :
  482. $r = db('crm_customer_file');
  483. $r_name = 'customer_id';
  484. break;
  485. case 'crm_contacts' :
  486. $r = db('crm_contacts_file');
  487. $r_name = 'contacts_id';
  488. break;
  489. case 'crm_business' :
  490. $r = db('crm_business_file');
  491. $r_name = 'business_id';
  492. break;
  493. case 'crm_product' :
  494. $r = db('crm_product_file');
  495. $r_name = 'product_id';
  496. break;
  497. case 'crm_contract' :
  498. $r = db('crm_contract_file');
  499. $r_name = 'contract_id';
  500. break;
  501. case 'oa_log' :
  502. $r = db('oa_log_file');
  503. $r_name = 'log_id';
  504. break;
  505. case 'oa_examine' :
  506. $r = db('oa_examine_file');
  507. $r_name = 'examine_id';
  508. break;
  509. case 'work_task' :
  510. $r = db('work_task_file');
  511. $r_name = 'task_id';
  512. break;
  513. case 'admin_record' :
  514. $r = db('admin_record_file');
  515. $r_name = 'record_id';
  516. break;
  517. case 'oa_travel' :
  518. $r = db('oa_travel_file');
  519. $r_name = 'travel_id';
  520. break;
  521. case 'hrm_pact' :
  522. $r = db('hrm_pact_file');
  523. $r_name = 'pact_id';
  524. break;
  525. case 'hrm_file' :
  526. $r = db('hrm_user_file');
  527. $r_name = 'user_id';
  528. break;
  529. case 'crm_invoice' :
  530. $r = db('crm_invoice_file');
  531. $r_name = 'invoice_id'; break;
  532. case 'crm_visit' :
  533. $r = db('crm_visit_file');
  534. $r_name = 'visit_id';
  535. break;
  536. case 'crm_activity' :
  537. $r = db('crm_activity_file');
  538. $r_name = 'activity_id';
  539. break;
  540. case 'crm_receivables' :
  541. $r = db('crm_receivables_file');
  542. $r_name = 'receivables_id';
  543. case 'jxc_product' :
  544. $r = db('jxc_product_file');
  545. $r_name = 'product_id';
  546. case 'jxc_supplier' :
  547. $r = db('jxc_supplier_file');
  548. $r_name = 'supplier_id';
  549. case 'jxc_purchase' :
  550. $r = db('jxc_purchase_file');
  551. $r_name = 'purchase_id';
  552. case 'jxc_retreat' :
  553. $r = db('jxc_retreat_file');
  554. $r_name = 'retreat_id';
  555. case 'jxc_sale' :
  556. $r = db('jxc_sale_file');
  557. $r_name = 'sale_id';
  558. case 'jxc_salereturn':
  559. $r = db('jxc_salereturn_file');
  560. $r_name = 'salereturn_id';
  561. case 'jxc_receipt' :
  562. $r = db('jxc_receipt_file');
  563. $r_name = 'receipt_id';
  564. case 'jxc_outbound' :
  565. $r = db('jxc_outbound_file');
  566. $r_name = 'outbound_id';
  567. case 'jxc_inventory' :
  568. $r = db('jxc_inventory_file');
  569. $r_name = 'inventory_id';
  570. case 'jxc_allocation' :
  571. $r = db('jxc_allocation_file');
  572. $r_name = 'allocation_id';
  573. case 'jxc_collection' :
  574. $r = db('jxc_collection_file');
  575. $r_name = 'collection_note_id';
  576. case 'jxc_payment' :
  577. $r = db('jxc_payment_file');
  578. $r_name = 'payment_note_id';
  579. default : break;
  580. }
  581. $rWhere = [];
  582. if(!is_array($module_id)){
  583. $module_id = [intval ($module_id)];
  584. }
  585. $rWhere[$r_name] = ['in',$module_id];
  586. $rFileIds = $r->where($rWhere)->column('file_id');
  587. $rRes = $r->where($rWhere)->delete();
  588. if ($rRes && $rFileIds) {
  589. $fileList = db('admin_file')->where(['file_id' => ['in',$rFileIds]])->field('file_path,file_path_thumb')->select();
  590. foreach ($fileList as $v) {
  591. //删除文件
  592. @unlink($v['file_path']);
  593. @unlink($v['file_path_thumb']);
  594. }
  595. }
  596. }
  597. }
  598. /**
  599. * 全部删除(活动、产品)
  600. *
  601. * @param $param
  602. * @return bool
  603. * @throws \think\Exception
  604. * @throws \think\exception\PDOException
  605. */
  606. public function deleteAll($param)
  607. {
  608. if (!empty($param['module']) && !empty($param['module_id'])) {
  609. $module = db('crm_activity_file');
  610. $primaryKey = 'activity_id';
  611. switch ($param['module']) {
  612. case 'crm_activity' : $module = db('crm_activity_file'); $primaryKey = 'activity_id'; break;
  613. case 'crm_product' : $module = db('crm_product_file'); $primaryKey = 'product_id'; break;
  614. }
  615. $fileIds = $module->where($primaryKey, $param['module_id'])->column('file_id');
  616. # 删除关联数据
  617. $module->where($primaryKey, $param['module_id'])->delete();
  618. # 删除附件
  619. db('admin_file')->whereIn('file_id', $fileIds)->delete();
  620. }
  621. if (!empty($param['file_id'])) {
  622. db('admin_file')->whereIn('file_id', $param['file_id'])->delete();
  623. }
  624. return true;
  625. }
  626. }