<?php
// +----------------------------------------------------------------------
// | Description: 附件
// +----------------------------------------------------------------------
// | Author:  Michael_xu | gengxiaoxu@5kcrm.com
// +----------------------------------------------------------------------

namespace app\admin\model;

use app\admin\model\Common;
use app\crm\model\Activity;
use app\crm\model\Invoice;
use think\Db;
use think\Request;

class File extends Common 
{

    /**
     * 为了数据库的整洁,同时又不影响Model和Controller的名称
     * 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀
     */
	protected $name = 'admin_file';
	protected $module_arr = [
	    'other',
        'crm_leads',
        'crm_customer',
        'crm_contacts',
        'crm_business',
        'crm_product',
        'crm_contract',
        'oa_log',
        'oa_examine',
        'oa_examine_travel',
        'work_task',
        'admin_record',
        'oa_travel',
        'hrm_pact',
        'hrm_file',
        'crm_invoice',
        'crm_activity',
        'crm_visit',
        'crm_receivables',
        'jxc_product',
        'jxc_supplier',
        'jxc_purchase',
        'jxc_retreat',
        'jxc_sale',
        'jxc_salereturn',
        'jxc_receipt',
        'jxc_outbound',
        'jxc_payment',
        'jxc_collection',
        'jxc_inventory',
        'jxc_allocation'
    ];
	
	/**
	 * [createData 添加附件]
	 * @author Michael_xu
	 * @param     $files 附件数组 
	 * @param     $param [module : 模块, module_id : 模块ID]
	 * @param     $x 裁剪图的长 ,$y 裁剪图的宽
	 * @return    [array]                         
	 */
	public function createData($files, $param = [], $x = '150', $y = '150')
	{	
        if (empty($files)) {
			$this->error = '请选择上传文件';
			return false;
        }
        $resData = [];
        $get_filesize_byte = get_upload_max_filesize_byte();
        foreach ($files as $k=>$v) {
        	$info = '';
            $upload_name = $v['obj']->getInfo()['name'];
            if ($upload_name == 'blob') {
                $upload_name = 'logo.png';
                $new_info = [];
                $new_info = $v['obj']->getInfo();
                $new_info['name'] = $upload_name;
                $v['obj']->setUploadInfo($new_info);
            }
			$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'); //验证规则
			// getimagesize($file["tmp_name"]
			if (!$info) {
				$this->error = $v['obj']->getError();
				return false;
				//$resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => $v['obj']->getError()];
				break;
			}
			$fileInfo = $info->getInfo(); //附件数据
			$rSuccess = false;
			$ext = '';
			$saveName = '';
			$thumbSaveName = '';
			if ($info) {
				//如果是图片类型,生成缩略图
	            $ext = $info->getExtension();	           
	            $saveName = $info->getSaveName();
	            $fileName = $info->getFilename();
	            if (in_array($ext, ['jpg','png','jpeg']) && $fileInfo['size'] < 8388608) {
	                // $image = \think\Image::open($v['obj']);
	                $image = \think\Image::open(UPLOAD_PATH . str_replace(DS, '/', $saveName));
	                $thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
	                $image->thumb($x, $y,\think\Image::THUMB_FILLED)->save(FILE_PATH . 'public'. DS .'uploads'. DS .$thumbSaveName); //THUMB_SCALING 或 THUMB_FILLED
	            } 
	            if ($ext == 'gif') {
	            	$thumbSaveName = $saveName;
	            } 
	            //附件信息存储
	            $saveData = [];
	            $saveData['name'] = $fileInfo['name'];
	            $saveData['size'] = $fileInfo['size'];
	            $saveData['create_user_id'] = $param['create_user_id'];
	            $saveData['create_time'] = time();
	            $saveData['file_path'] = UPLOAD_PATH . str_replace(DS, '/', $saveName);
	            $saveData['file_path_thumb'] = $thumbSaveName ? UPLOAD_PATH . str_replace(DS, '/', $thumbSaveName) : '';
	            $saveData['save_name'] = str_replace(DS, '/', $saveName);
	            $saveData['types'] = $v['types'] ? : 'file';
	            if ($k > 0) {
					$this->data($saveData)->allowField(true)->isUpdate(false)->save();
	            } else {
					$this->data($saveData)->allowField(true)->save();
	            }
	            
	            $file_id = $this->file_id;
	            if ($file_id) {
	            	$rSuccess = true;
	            	//如果是关系表,则保存关系表数据
		            if (in_array($param['module'],$this->module_arr) && $param['module_id']) {
		            	switch ($param['module']) {
		            		case 'crm_leads' : $r = db('crm_leads_file'); $r_name = 'leads_id'; break;
		            		case 'crm_customer' : $r = db('crm_customer_file'); $r_name = 'customer_id'; break;
		            		case 'crm_contacts' : $r = db('crm_contacts_file'); $r_name = 'contacts_id'; break;
		            		case 'crm_business' : $r = db('crm_business_file'); $r_name = 'business_id'; break;
		            		case 'crm_product' : $r = db('crm_product_file'); $r_name = 'product_id'; break;
		            		case 'crm_contract' : $r = db('crm_contract_file'); $r_name = 'contract_id'; break;
		            		case 'oa_log' : $r = db('oa_log_file'); $r_name = 'log_id'; break;
		            		case 'oa_examine' : $r = db('oa_examine_file'); $r_name = 'examine_id'; break;
		            		case 'work_task' : $r = db('work_task_file'); $r_name = 'task_id'; break;
		            		case 'admin_record' : $r = db('admin_record_file'); $r_name = 'record_id'; break;
		            		case 'oa_travel' : $r = db('oa_travel_file'); $r_name = 'travel_id'; break;
							case 'hrm_pact' : $r = db('hrm_pact_file'); $r_name = 'pact_id'; break;
							case 'hrm_file' : $r = db('hrm_user_file'); $r_name = 'user_id'; break;
                            case 'crm_invoice' : $r = db('crm_invoice_file'); $r_name = 'invoice_id'; break;
                            case 'crm_activity': $r = db('crm_activity_file'); $r_name = 'activity_id'; break;
                            case 'crm_visit': $r = db('crm_visit_file'); $r_name = 'visit_id'; break;
                            case 'crm_receivables': $r = db('crm_receivables_file'); $r_name = 'receivables_id'; break;
                            case 'jxc_product': $r = db('jxc_product_file'); $r_name = 'product_id'; break;
                            case 'jxc_supplier': $r = db('jxc_supplier_file'); $r_name = 'supplier_id'; break;
                            case 'jxc_purchase': $r = db('jxc_purchase_file'); $r_name = 'purchase_id'; break;
                            case 'jxc_retreat': $r = db('jxc_retreat_file'); $r_name = 'retreat_id'; break;
                            case 'jxc_sale': $r = db('jxc_sale_file'); $r_name = 'sale_id'; break;
                            case 'jxc_salereturn': $r = db('jxc_salereturn_file'); $r_name = 'salereturn_id'; break;
                            case 'jxc_receipt': $r = db('jxc_receipt_file'); $r_name = 'receipt_id'; break;
                            case 'jxc_outbound': $r = db('jxc_outbound_file'); $r_name = 'outbound_id'; break;
                            case 'jxc_payment': $r = db('jxc_payment_file'); $r_name = 'payment_note_id'; break;
                            case 'jxc_collection': $r = db('jxc_collection_file'); $r_name = 'collection_note_id'; break;
                            case 'jxc_inventory': $r = db('jxc_inventory_file'); $r_name = 'inventory_id'; break;
                            case 'jxc_allocation': $r = db('jxc_allocation_file'); $r_name = 'allocation_id'; break;
		            		default : break;
		            	}
		            	$rData = [];
		            	$rData[$r_name] = intval ($param['module_id']);
		            	$rData['file_id'] = $file_id;
		            	$rRes = $r->insert($rData);
		            	if (!$rRes) {
		            		$rSuccess = false;
							//删除文件
			            	@unlink($saveData['file_path']);
			            	@unlink($saveData['file_path_thumb']);		            		
		            	}
		            }
	            }
	            if ($rSuccess !== false) {
	            	$path =  (UPLOAD_PATH.$saveName);
	            	# 应前端要求,将url字段改成跟path一样的内容,格式改为一位数组
                    $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];
	            } else {
	            	$resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => '上传出错'];
	            }
			} else {
				$resData[$k] = ['key' => $k,'name' => $fileInfo['name'],'status' => 0,'error' => $v['obj']->getError()];
			}
        }
        return $resData;		
	}

	/**
	 * 修改上传文件名
	 * @param  [type] $save_name [description]
	 * @param  [type] $name      [description]
	 * @return [type]            [description]
	 */
	public function updateNameBySaveName($save_name,$name)
	{
		$flag = $this->where(['save_name' => $save_name])->setField('name',$name);
		if ( $flag ) {
			return true;
		} else {
			$this->error = '操作失败';
			return false;
		}
	}

	/**
	 * [delFileById 删除附件]
	 * @author Michael_xu
	 * @param     $save_name 附件保存名称 
	 * @param     $param [module : 模块, module_id : 模块ID]
	 * @return    [array]                         
	 */	
	public function delFileBySaveName($save_name, $param = [])
	{
		if (!$save_name) {
			$this->error = '请选择需要删除的附件';
			return false;    
		}
		$fileInfo = $this->where(['save_name' => trim($save_name)])->find();
		if (!$fileInfo) {
			$this->error = '附件不存在或已删除';
			return false;
		}
		$file_id = $fileInfo['file_id'];
		$res = db('admin_file')->where(['file_id' => $file_id])->delete();
		if ($res) {
			@unlink($fileInfo['file_path']);//删除文件
			if ($fileInfo['file_path_thumb']) @unlink($fileInfo['file_path_thumb']);
			//处理附表信息
			if (in_array($param['module'], $this->module_arr)) {
				switch ($param['module']) {
					case 'crm_leads' : $r = db('crm_leads_file'); break;
					case 'crm_customer' : $r = db('crm_customer_file'); break;
            		case 'crm_contacts' : $r = db('crm_contacts_file'); break;
            		case 'crm_business' : $r = db('crm_business_file'); break;
            		case 'crm_product' : $r = db('crm_product_file'); break;
            		case 'crm_contract' : $r = db('crm_contract_file'); break;
            		case 'oa_log' : $r = db('oa_log_file'); break;
            		case 'oa_examine' : $r = db('oa_examine_file'); break;
            		case 'work_task' : $r = db('work_task_file'); break;
            		case 'admin_record' : $r = db('admin_record_file'); break;
            		case 'oa_travel' : $r = db('oa_travel_file'); break;
					case 'hrm_pact' : $r = db('hrm_pact_file'); break;
					case 'hrm_file' : $r = db('hrm_user_file'); break;
                    case 'crm_invoice' : $r = db('crm_invoice_file'); break;
                    case 'crm_activity': $r = db('crm_activity_file'); break;
                    case 'crm_visit': $r = db('crm_visit_file'); break;
                    case 'crm_receivables': $r = db('crm_receivables_file'); break;
            		default : break;
				}
				$resDel = $r->where(['file_id'=>$file_id])->delete();
			}
			return true;
		} else {
			$this->error = '删除失败';
			return false;
		}
	}

	/**
	 * 根据主键获取详情
	 * @author Michael_xu
	 * @param  array   $param  [description]
	 */ 
	public function getDataBySaveName($save_name = '')
	{
		if (!$save_name) {
			$this->error = '参数错误';
			return false;
		}
		$data = $this->where(['save_name' => trim($save_name)])->find();
		$data['full_path'] = getFullPath($data['file_path']);
		$data['full_path_thumb'] = getFullPath($data['file_path_thumb']);
		if (!$data) {
			$this->error = '数据不存在或已删除';
			return false;
		}
		return $data;		
	}

	/**
	 * 根据ID获取列表
	 * @author Michael_xu
	 * @param  string   module  [类型]
	 * @param  string   by = all 全部(不分页)
	 * @param  int   module_id  [类型ID]
	 */	 
	public function getDataList($request, $by = '')
	{   
		if (!in_array($request['module'], $this->module_arr) || !$request['module_id']) {
			$this->error = '参数错误';
			return false;
		}
		$module_ids = $request['module_id'];
		if (!is_array($request['module_id'])) {
			$module_ids = array($request['module_id']);
		}
		$moduleName = $request['module'];

		switch ($request['module']) {
			case 'crm_leads' : $r = db('crm_leads_file'); $module = db('crm_leads'); break;
			case 'crm_customer' : $r = db('crm_customer_file'); $module = db('crm_customer'); break;
			case 'crm_contacts' : $r = db('crm_contacts_file'); $module = db('crm_contacts'); break;
			case 'crm_business' : $r = db('crm_business_file'); $module = db('crm_business'); break;
			case 'crm_product' : $r = db('crm_product_file'); $module = db('crm_product'); break;
			case 'crm_contract' : $r = db('crm_contract_file'); $module = db('crm_contract'); break;
			case 'oa_log' : $r = db('oa_log_file'); $module = db('oa_log'); break;
			case 'oa_examine' : $r = db('oa_examine_file'); $module = db('oa_examine'); break;
			case 'oa_examine_travel' : $r = db('oa_examine_travel_file'); $module = db('oa_examine_travel'); break;
			case 'work_task' : $r = db('work_task_file'); $module = db('task'); break;
			case 'admin_record' : $r = db('admin_record_file'); $module = db('admin_record'); break;
			case 'oa_travel' : $r = db('oa_travel_file'); $module = db('oa_travel'); break;
			case 'hrm_pact' : $r = db('hrm_pact_file'); $module = db('hrm_pact'); break;
			case 'hrm_file' : $r = db('hrm_user_file'); $module = db('admin_user'); break;
            case 'crm_invoice' : $r = db('crm_invoice_file'); $module = db('crm_invoice'); break;
            case 'crm_activity' : $r = db('crm_activity_file'); $module = db('crm_activity'); break;
            case 'crm_visit' : $r = db('crm_visit_file'); $module = db('crm_visit'); break;
            case 'crm_receivables' : $r = db('crm_receivables_file'); $module = db('crm_receivables'); break;
            case 'jxc_product' : $r = db('jxc_product_file'); $module = db('jxc_product'); break;
            case 'jxc_supplier' : $r = db('jxc_supplier_file'); $module = db('jxc_supplier'); break;
            case 'jxc_purchase' : $r = db('jxc_purchase_file'); $module = db('jxc_purchase'); break;
            case 'jxc_retreat' : $r = db('jxc_retreat_file'); $module = db('jxc_retreat'); break;
            case 'jxc_sale' : $r = db('jxc_sale_file'); $module = db('jxc_sale'); break;
            case 'jxc_salereturn' : $r = db('jxc_salereturn_file'); $module = db('jxc_salereturn'); break;
            case 'jxc_receipt' : $r = db('jxc_receipt_file'); $module = db('jxc_receipt'); break;
            case 'jxc_outbound' : $r = db('jxc_outbound_file'); $module = db('jxc_outbound'); break;
            case 'jxc_payment' : $r = db('jxc_payment_file'); $module = db('jxc_payment'); break;
            case 'jxc_collection' : $r = db('jxc_collection_file'); $module = db('jxc_collection'); break;
            case 'jxc_inventory' : $r = db('jxc_inventory_file'); $module = db('jxc_inventory'); break;
            case 'jxc_allocation' : $r = db('jxc_allocation_file'); $module = db('jxc_allocation'); break;
			default : break;
		}
		if ($r) {
			$fileIds = $r->where([$module->getPk() => ['in',$module_ids]])->column('file_id');
			$request['file_id'] = ['in', $fileIds];			
		}
		unset($request['module']);
		unset($request['module_id']);
		unset($request['by']);

        # 查询活动附件,用于判断是否可以删除附件(活动添加的附件只能在活动中删除)
        $activityFileIds = [];
        $activityType = ['crm_leads' => 1, 'crm_customer' => 2, 'crm_contacts' => 3, 'crm_business' => 5, 'crm_contract' => 6];
        if (!empty($activityType[$moduleName])) {
            $activityFileIds = db('crm_activity')->alias('activity')
                ->join('__CRM_ACTIVITY_FILE__ file', 'file.activity_id = activity.activity_id', 'LEFT')
                ->where(['type' => 1, 'activity_type' => $activityType[$moduleName], 'activity_type_id' => ['in', $module_ids]])
                ->column('file.file_id');
            $activityFileIds = array_filter($activityFileIds);
        }

		$userModel = new \app\admin\model\User();
		$request = $this->fmtRequest( $request );
        $map = $request['map'];
        $order = 'create_time desc';
        $dataCount = $this->where($map)->count('file_id');
        if ($by == 'all') {
        	$list = Db::name('AdminFile')->where($map)->order($order)->select();
        } else {
        	$list = Db::name('AdminFile')->where($map)->page($request['page'], $request['limit'])->order($order)->select();	
        }
        foreach ($list as $k=>$v) {
            $createUserInfo = isset($v['create_user_id']) ? $userModel->getUserById($v['create_user_id']) : [];
        	$list[$k]['size'] = format_bytes($v['size']); //字节转换
        	$list[$k]['create_time'] = date('Y-m-d H:i:s',$v['create_time']);
        	$list[$k]['create_user_id_info'] = $createUserInfo;
        	$list[$k]['createName'] = !empty($createUserInfo['realname']) ? $createUserInfo['realname'] : '';
        	$list[$k]['ext'] = getExtension($v['save_name']);
        	$list[$k]['file_path'] = getFullPath($v['file_path']);
        	$list[$k]['file_path_thumb'] = getFullPath($v['file_path_thumb']);
        	$list[$k]['readOnly'] = !empty($activityType[$moduleName]) && in_array($v['file_id'], $activityFileIds) ? 1 : 0; # 活动中上次的附件,只能在活动中删除
        }
        $data = [];
        $data['list'] = $list ? : [];
        $data['dataCount'] = $dataCount ? : 0;
        return $data;		
	}
	
	/**
	 * 根据表、字段更新上传图片
	 * @author Michael_xu
	 * @param  $file 附件信息
	 * @param  $module 模块(判断权限),一般是控制器,并且和表名一致
	 * @param  $module_id 模块ID(判断权限)
	 * @param  $file 字段
	 * @param  $thumb_field 缩略图字段
	 * @param  $x 裁剪宽度
	 * @param  $y 裁剪高度
	 */	
	public function updateByField($file, $module, $module_id, $field, $thumb_field = '', $x = '150', $y = '150')
	{
		if (empty($module) || empty($module_id) || empty($field)) {
			$this->error = '参数错误';
			return false;
		}
		
		$info = $file->move(FILE_PATH . 'public' . DS . 'uploads'); //验证规则
		$fileInfo = $info->getInfo(); //附件数据
		$saveName = '';
		$thumbSaveName = '';
		if ($info) {
			//如果是图片类型,生成缩略图
            $ext = $info->getExtension();	           
            $saveName = $info->getSaveName();
            $fileName = $info->getFilename();
            $thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
			//附件信息存储
            $saveData = [];

            if ($thumb_field) {
            	// $image = \think\Image::open($file);
            	$image = \think\Image::open(UPLOAD_PATH . str_replace(DS, '/', $saveName));
            	$thumbSaveName = str_replace(DS, DS.'thumb_', $saveName);
            	$image->thumb($x, $y,\think\Image::THUMB_FILLED)->save(FILE_PATH . 'public'. DS .'uploads'. DS .$thumbSaveName); //THUMB_SCALING 或 THUMB_FILLED
            	$saveData[$thumb_field] = $thumbSaveName ? UPLOAD_PATH . str_replace(DS, '/', $thumbSaveName) : '';
            }
            $saveData[$field] = UPLOAD_PATH . str_replace(DS, '/', $saveName);  
            switch ($module) {
            	case 'crm_customer' : $moduleModel = new \app\crm\model\Customer(); break;
				case 'crm_contacts' : $moduleModel = new \app\crm\model\Contacts(); break;
				case 'crm_business' : $moduleModel = new \app\crm\model\Business(); break;
				case 'crm_product' : $moduleModel = new \app\crm\model\Product(); break;
				case 'crm_contract' : $moduleModel = new \app\crm\model\Contract(); break;		
				case 'User' : $moduleModel = new \app\admin\model\User(); break;
				case 'admin_system': $moduleModel = new \app\admin\model\System(); break;
                case 'crm_invoice' : $moduleModel = new Invoice(); break;
                case 'crm_activity' : $moduleModel = new Activity(); break;
                case 'crm_receivables' : $moduleModel = new \app\crm\model\Receivables(); break;
                case 'crm_visit' : $moduleModel = new \app\crm\model\Visit(); break;
            }

            $resFile = $moduleModel->allowField([$field,$thumb_field])->save($saveData, [$moduleModel->getPk() => $module_id]);
            if (!$resFile) {
				$this->error = '上传失败';
            	return false;            	
            }
            return true;
        }		
	}

	/**
	 * 根据ID保存,处理逻辑关系
	 * @author Michael_xu
	 * @param  $ids 附件ID数组
	 * @param  $module 表名
	 * @param  $module_id 模块ID
	 */	
	public function createDataById($ids, $module, $module_id)
	{
		if (!$ids || !in_array($module, $this->module_arr) || !$module_id) {
			$this->error = '参数错误';
			return false;
		}

		switch (trim($module)) {
			case 'crm_customer' : $rDb = db('crm_customer_file'); $r_name = 'customer_id'; break;
			case 'crm_contacts' : $rDb = db('crm_contacts_file'); $r_name = 'contacts_id'; break;
			case 'crm_business' : $rDb = db('crm_business_file'); $r_name = 'business_id'; break;
			case 'crm_product' : $rDb = db('crm_product_file'); $r_name = 'product_id'; break;
			case 'crm_contract' : $rDb = db('crm_contract_file'); $r_name = 'contract_id'; break;
			case 'oa_log' : $rDb = db('oa_log_file'); $r_name = 'log_id'; break;
			case 'oa_examine' : $rDb = db('oa_examine_file'); $r_name = 'examine_id'; break;
			case 'oa_examine_travel' : $rDb = db('oa_examine_travel_file'); $r_name = 'travel_id'; break;
			case 'admin_record' : $rDb = db('admin_record_file'); $r_name = 'record_id'; break;
			case 'oa_travel' : $rDb = db('oa_travel_file'); $r_name = 'travel_id'; break;
            case 'crm_invoice' : $rDb = db('crm_invoice_file'); $r_name = 'invoice_id'; break;
            case 'crm_activity' : $rDb = db('crm_activity_file'); $r_name = 'activity_id'; break;
            case 'crm_visit' : $rDb = db('crm_visit_file'); $r_name = 'activity_id'; break;
            case 'crm_receivables' : $rDb = db('crm_receivables_file'); $r_name = 'receivables_id'; break;
		}

		$res_success = true;
		$data = [];
		$data[$r_name] = intval ($module_id);
		foreach ($ids as $v) {
			$data['file_id'] = intval($v);
			if (!$rDb->insert($data)) {
				$res_success = false;
			}
		}
		if ($res_success == false) {
			$this->error = '附件上传失败';
		}
		return true;
	}


	/**
	 * 删除关系表附件
	 * @author Michael_xu
	 * @param  $module 模块
	 * @param  $module_id 模块ID
	 */	
	public function delRFileByModule($module, $module_id)
	{
		if (in_array($module,$this->module_arr) && $module_id) {
        	switch ($module) {
        		case 'crm_leads' : 
        			$r = db('crm_leads_file'); 
        			$r_name = 'leads_id'; 
        			break;
        		case 'crm_customer' : 
        			$r = db('crm_customer_file'); 
        			$r_name = 'customer_id'; 
        			break;
        		case 'crm_contacts' : 
        			$r = db('crm_contacts_file'); 
        			$r_name = 'contacts_id'; 
        			break;
        		case 'crm_business' : 
        			$r = db('crm_business_file'); 
        			$r_name = 'business_id'; 
        			break;
        		case 'crm_product' : 
        			$r = db('crm_product_file'); 
        			$r_name = 'product_id'; 
        			break;
        		case 'crm_contract' : 
        			$r = db('crm_contract_file'); 
        			$r_name = 'contract_id'; 
        			break;
        		case 'oa_log' : 
        			$r = db('oa_log_file'); 
        			$r_name = 'log_id'; 
        			break;
        		case 'oa_examine' : 
        			$r = db('oa_examine_file'); 
        			$r_name = 'examine_id'; 
        			break;
        		case 'work_task' : 
        			$r = db('work_task_file'); 
        			$r_name = 'task_id'; 
        			break;
        		case 'admin_record' : 
        			$r = db('admin_record_file'); 
        			$r_name = 'record_id'; 
        			break;
        		case 'oa_travel' : 
        			$r = db('oa_travel_file'); 
        			$r_name = 'travel_id'; 
        			break;
				case 'hrm_pact' : 
					$r = db('hrm_pact_file'); 
					$r_name = 'pact_id'; 
					break;
				case 'hrm_file' : 
					$r = db('hrm_user_file'); 
					$r_name = 'user_id';
					break;
                case 'crm_invoice' :
                    $r = db('crm_invoice_file');
                    $r_name = 'invoice_id'; break;
                case 'crm_visit' :
                    $r = db('crm_visit_file');
                    $r_name = 'visit_id';
                    break;
                case 'crm_activity' :
                    $r = db('crm_activity_file');
                    $r_name = 'activity_id';
                    break;
                case 'crm_receivables' :
                    $r = db('crm_receivables_file');
                    $r_name = 'receivables_id';

                case 'jxc_product' :
                    $r = db('jxc_product_file');
                    $r_name = 'product_id';
                case 'jxc_supplier' :
                    $r = db('jxc_supplier_file');
                    $r_name = 'supplier_id';
                case 'jxc_purchase' :
                    $r = db('jxc_purchase_file');
                    $r_name = 'purchase_id';
                case 'jxc_retreat' :
                    $r = db('jxc_retreat_file');
                    $r_name = 'retreat_id';
                case 'jxc_sale' :
                    $r = db('jxc_sale_file');
                    $r_name = 'sale_id';
                case 'jxc_salereturn':
                    $r = db('jxc_salereturn_file');
                    $r_name = 'salereturn_id';
                case 'jxc_receipt' :
                    $r = db('jxc_receipt_file');
                    $r_name = 'receipt_id';
                case 'jxc_outbound' :
                    $r = db('jxc_outbound_file');
                    $r_name = 'outbound_id';
                case 'jxc_inventory' :
                    $r = db('jxc_inventory_file');
                    $r_name = 'inventory_id';
                case 'jxc_allocation' :
                    $r = db('jxc_allocation_file');
                    $r_name = 'allocation_id';
                case 'jxc_collection' :
                    $r = db('jxc_collection_file');
                    $r_name = 'collection_note_id';
                case 'jxc_payment' :
                    $r = db('jxc_payment_file');
                    $r_name = 'payment_note_id';
        		default : break;
        	}
        	$rWhere = [];
        	if(!is_array($module_id)){
        		$module_id = [intval ($module_id)];
        	}
        	$rWhere[$r_name] = ['in',$module_id];
        	$rFileIds = $r->where($rWhere)->column('file_id');
        	$rRes = $r->where($rWhere)->delete();
        	if ($rRes && $rFileIds) {
        		$fileList = db('admin_file')->where(['file_id' => ['in',$rFileIds]])->field('file_path,file_path_thumb')->select();
        		foreach ($fileList as $v) {
					//删除文件
	            	@unlink($v['file_path']);
	            	@unlink($v['file_path_thumb']);
        		}		            		
        	}
        }		
	}

    /**
     * 全部删除(活动、产品)
     *
     * @param $param
     * @return bool
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
	public function deleteAll($param)
    {
        if (!empty($param['module']) && !empty($param['module_id'])) {
            $module     = db('crm_activity_file');
            $primaryKey = 'activity_id';

            switch ($param['module']) {
                case 'crm_activity' : $module = db('crm_activity_file'); $primaryKey = 'activity_id'; break;
                case 'crm_product' : $module = db('crm_product_file'); $primaryKey = 'product_id'; break;
            }

            $fileIds = $module->where($primaryKey, $param['module_id'])->column('file_id');

            # 删除关联数据
            $module->where($primaryKey, $param['module_id'])->delete();

            # 删除附件
            db('admin_file')->whereIn('file_id', $fileIds)->delete();
        }

        if (!empty($param['file_id'])) {
            db('admin_file')->whereIn('file_id', $param['file_id'])->delete();
        }

        return true;
    }
}