getSubUserByStr($request['structure_ids'], 2); } $map = []; $search = $request['search']; if (isset($request['search']) && $request['search']) { //普通筛选 $searchMap = function ($query) use ($search) { $query->where('log.content', array('like', '%' . $search . '%')) ->whereOr('log.tomorrow', array('like', '%' . $search . '%')) ->whereOr('log.question', array('like', '%' . $search . '%')); }; } if ($request['category_id']) { $map['log.category_id'] = $request['category_id']; } if ($request['type']) { $timeAry = ByDateTime($request['type']); $between_time = [$timeAry[0], $timeAry[1]]; $map['log.create_time'] = ['between', $between_time]; } else { //自定义时间 $start_time = $request['start_time'] ? strtotime($request['start_time'].' 00:00:00') : strtotime(date('Y-m-01', time())); $end_time = $request['end_time'] ? strtotime($request['end_time'].' 23:59:59') : strtotime(date('Y-m-01', time()) . ' +1 month -1 day'); $map['log.create_time'] = ['between', [$start_time, $end_time]]; } $requestData = $this->requestData(); //获取权限范围内的员工 $auth_user_ids = getSubUserId(true,0,$user_id); $dataWhere['user_id'] = $user_id; $dataWhere['structure_id'] = $request['structure_id']; $dataWhere['auth_user_ids'] = $auth_user_ids; $logMap = ''; if ($request['create_user_id'] != '') { $map['log.create_user_id'] = ['in', trim(arrayToString($request['create_user_id']), ',')]; } switch ($by) { case 'me' : $map['log.create_user_id'] = $user_id; break; case 'other': $logMap = function ($query) use ($dataWhere) { $query->where('log.send_user_ids', array('like', '%,' . $dataWhere['user_id'] . ',%')) ->whereOr('log.send_structure_ids', array('like', '%,' . $dataWhere['structure_id'] . ',%')); }; break; default : $logMap = function ($query) use ($dataWhere) { $query->where('log.create_user_id', array('in', implode(',', $dataWhere['auth_user_ids']))) ->whereOr('log.send_user_ids', array('like', '%,' . $dataWhere['user_id'] . ',%')) ->whereOr('log.send_structure_ids', array('like', '%,' . $dataWhere['structure_id'] . ',%')); }; break; } $list = Db::name('oa_log') ->alias('log') ->where($map) ->where($logMap) ->where($searchMap) ->join('__ADMIN_USER__ user', 'user.id = log.create_user_id', 'LEFT') ->page($request['page'], $request['limit']) ->field('log.*,user.realname,user.thumb_img') ->order('log.update_time desc') ->select(); $dataCount = $this->alias('log')->where($map)->where($logMap)->where($searchMap)->count(); foreach ($list as $k => $v) { $list[$k]['create_user_info']['realname'] = $v['realname'] ?: ''; $list[$k]['create_user_info']['id'] = $v['create_user_id'] ?: ''; $list[$k]['create_user_info']['thumb_img'] = $v['thumb_img'] ? getFullPath($v['thumb_img']) : ''; //附件、图片 $fileList = []; $imgList = []; $where = []; $where['module'] = 'oa_log'; $where['module_id'] = $v['log_id']; $newFileList = []; $newFileList = $fileModel->getDataList($where); foreach ($newFileList['list'] as $val) { if ($val['types'] == 'file') { $fileList[] = $val; } else { $imgList[] = $val; } } $list[$k]['create_time'] = date('Y-m-d H:i:s', $v['create_time']); $list[$k]['fileList'] = $fileList ?: []; $list[$k]['imgList'] = $imgList ?: []; $list[$k]['sendUserList'] = $userModel->getDataByStr($v['send_user_ids']) ?: []; $list[$k]['sendStructList'] = $structureModel->getDataByStr($v['send_structure_ids']) ?: []; $favour=$this->favourList($v['log_id']); $list[$k]['favourUser'] = $favour ?: []; $list[$k]['favour_status'] =!empty($favour)?1:0 ; $param['type_id'] = $v['log_id']; $param['type'] = 'oa_log'; $list[$k]['replyList'] = $commonModel->read($param); //相关业务 $relationArr = $recordModel->getListByRelationId('log', $v['log_id']); $list[$k]['businessList'] = $relationArr['businessList']; $list[$k]['contactsList'] = $relationArr['contactsList']; $list[$k]['contractList'] = $relationArr['contractList']; $list[$k]['customerList'] = $relationArr['customerList']; if ($v['is_relation'] == 1) { $list[$k]['bulletin']['customerNum'] = $v['save_customer']; $list[$k]['bulletin']['businessNum'] = $v['save_business']; $list[$k]['bulletin']['contractNum'] = $v['save_contract']; $list[$k]['bulletin']['receivablesMoneyNum'] = $v['save_receivables']; $list[$k]['bulletin']['recordNum'] = $v['save_activity']; } else { $list[$k]['bulletin'] = 0; } $is_update = 0; $is_delete = 0; //3天内的日志可删,可修改 if (($v['create_user_id'] == $user_id) && date('Ymd', $v['create_time']) > date('Ymd', (strtotime(date('Ymd', time())) - 86400 * 3))) { $is_update = 1; $is_delete = 1; } if (in_array($v['create_user_id'], $auth_user_ids)) { $is_delete = 1; } $permission['is_update'] = $is_update; $permission['is_delete'] = $is_delete; $list[$k]['permission'] = $permission; //已读 $read_user_ids = stringToArray($v['read_user_ids']); $is_read = 0; if (in_array($user_id, $read_user_ids)) { $is_read = 1; } $list[$k]['is_read'] = $is_read; } $data = []; $data['page']['list'] = $list; $data['page']['dataCount'] = $dataCount ?: 0; if ($param['page'] != 1 && ($param['page'] * $param['limit']) >= $dataCount) { $data['firstPage'] = false; $data['lastPage'] = true; } else if ($param['page'] != 1 && (int)($param['page'] * $param['limit']) < $dataCount) { $data['firstPage'] = false; $data['lastPage'] = false; } else if ($param['page'] == 1 && (int)($param['page'] * $param['limit']) < $dataCount) { $data['firstPage'] = true; $data['lastPage'] = true; } return $data; } // 创建日志信息 public function createData($param) { $userModel = new \app\admin\model\User(); $recordModel = new \app\admin\model\Record(); $fileArr = $param['file']; //接收表单附件 unset($param['file']); $senduserArray = $param['send_user_ids'] ?: []; $param['send_user_ids'] = $param['send_user_ids'] ? arrayToString($param['send_user_ids']) : ''; $param['send_structure_ids'] = $param['send_structure_ids'] ? arrayToString($param['send_structure_ids']) : ''; $param['is_relation'] = $param['is_relation'] ?: 0; $rdata = []; //关联业务 $rdata['customer_ids'] = $param['customer_ids'] ? arrayToString($param['customer_ids']) : ''; $rdata['contacts_ids'] = $param['contacts_ids'] ? arrayToString($param['contacts_ids']) : ''; $rdata['business_ids'] = $param['business_ids'] ? arrayToString($param['business_ids']) : ''; $rdata['contract_ids'] = $param['contract_ids'] ? arrayToString($param['contract_ids']) : ''; $arr = ['customer_ids', 'contacts_ids', 'business_ids', 'contract_ids']; foreach ($arr as $value) { unset($param[$value]); } if ($param['category_id'] == 1) { $param['title'] = date('Y-m-d') . '-日报'; } else if ($param['category_id'] == 2) { $param['title'] = date('Y-m-d') . '-周报'; } else if ($param['category_id'] == 3) { $param['title'] = date('Y-m-d') . '-月报'; } if ($this->data($param)->allowField(true)->save()) { $log_id = $this->log_id; //操作记录 // actionLog($log_id, $param['send_user_ids'], $param['send_structure_ids'], '创建了日志'); //处理附件关系 if ($fileArr) { $fileModel = new \app\admin\model\File(); $resData = $fileModel->createDataById($fileArr, 'oa_log', $log_id); if ($resData == false) { $this->error = '附件上传失败'; return false; } } $temp = User::where(['structure_id' => ['in', $param['send_structure_ids']]])->column('id'); (new Message())->send( Message::LOG_SEND, [ 'title' => $param['title'], 'action_id' => $log_id ], array_merge($temp, $senduserArray) ); //返回数据,前端动态追加使用 $data = []; $data['log_id'] = $log_id; $data = $param; if (count($fileArr)) { $fileList = Db::name('AdminFile')->where('file_id in (' . implode(',', $fileArr) . ')')->select(); foreach ($fileList as $k => $v) { $fileList[$k]['file_path'] = $v['file_path'] ? getFullPath($v['file_path']) : ''; } } $data['fileList'] = $fileList ?: array(); //发送人 $data['sendUserList'] = $param['send_user_ids'] ? $userModel->getListByStr($param['send_user_ids']) : []; //发送部门 $data['sendStructureList'] = $param['send_structure_ids'] ? $userModel->getListByStr($param['send_structure_ids']) : []; $data['log_id'] = $log_id; $rdata['log_id'] = $log_id; $rdata['status'] = 1; $rdata['create_time'] = time(); //关联业务 Db::name('OaLogRelation')->insert($rdata); //相关业务 $relationArr = $recordModel->getListByRelationId('log', $log_id); $data['businessList'] = $relationArr['businessList']; $data['contactsList'] = $relationArr['contactsList']; $data['contractList'] = $relationArr['contractList']; $data['customerList'] = $relationArr['customerList']; # 添加活动记录 if (!empty($rdata['customer_ids']) || !empty($rdata['contacts_ids']) || !empty($rdata['business_ids']) || !empty($rdata['contract_ids'])) { Db::name('crm_activity')->insert([ 'type' => 2, 'activity_type' => 8, 'activity_type_id' => $log_id, 'content' => !empty($param['title']) ? $param['title'] : '日志', 'create_user_id' => $param['create_user_id'], 'update_time' => time(), 'create_time' => time(), 'customer_ids' => !empty($rdata['customer_ids']) ? $rdata['customer_ids'] : '', 'contacts_ids' => !empty($rdata['contacts_ids']) ? $rdata['contacts_ids'] : '', 'business_ids' => !empty($rdata['business_ids']) ? $rdata['business_ids'] : '', 'contract_ids' => !empty($rdata['contract_ids']) ? $rdata['contract_ids'] : '', ]); } RecordActionLog($param['create_user_id'],'oa_log','save',$param['title'],'','','新增了日志'.$param['title']); return $data; } else { $this->error = '添加失败'; return false; } } /** * 编辑日志信息 * @param * @return * @author Michael_xu */ public function updateDataById($param, $log_id = '') { $dataInfo = $this->getDataById($log_id); if (!$dataInfo) { $this->error = '数据不存在或已删除'; return false; } if ($dataInfo['create_time'] < time() - 3600 * 24 * 3) { $this->error = '超过时效,不可修改'; return false; } //关联业务 $rdata['customer_ids'] = $param['customer_ids'] ? arrayToString($param['customer_ids']) : ''; $rdata['contacts_ids'] = $param['contacts_ids'] ? arrayToString($param['contacts_ids']) : ''; $rdata['business_ids'] = $param['business_ids'] ? arrayToString($param['business_ids']) : ''; $rdata['contract_ids'] = $param['contract_ids'] ? arrayToString($param['contract_ids']) : ''; $arr = ['customer_ids', 'contacts_ids', 'business_ids', 'contract_ids']; foreach ($arr as $value) { unset($param[$value]); } //过滤不能修改的字段 $unUpdateField = ['create_user_id', 'is_deleted', 'delete_time']; foreach ($unUpdateField as $v) { unset($param[$v]); } $fileArr = $param['file']; //接收表单附件 unset($param['file']); $param['send_user_ids'] = $param['send_user_ids'] ? arrayToString($param['send_user_ids']) : ''; $param['send_structure_ids'] = $param['send_structure_ids'] ? arrayToString($param['send_structure_ids']) : ''; if(empty($param['is_relation'])){ $param['is_relation']=0; $param['save_customer'] = 0; $param['save_business'] = 0; $param['save_contract'] = 0; $param['save_receivables'] = 0; $param['save_activity'] = 0; } if ($this->allowField(true)->save($param, ['log_id' => $log_id])) { //操作日志 Db::name('AdminActionLog')->where(['action_id' => $log_id])->update(['join_user_ids' => $this->send_user_ids, 'structure_ids' => $this->send_structure_ids]); // actionLog($log_id, $this->send_user_ids, $this->send_structure_ids, '修改了日志'); //处理附件关系 if ($fileArr) { $fileModel = new \app\admin\model\File(); $resData = $fileModel->createDataById($fileArr, 'oa_log', $log_id); if ($resData == false) { $this->error = '附件上传失败'; return false; } } $data = []; $data['log_id'] = $log_id; Db::name('OaLogRelation')->where('log_id = ' . $log_id)->update($rdata); # 删除活动记录 Db::name('crm_activity')->where(['activity_type' => 8, 'activity_type_id' => $log_id])->delete(); # 添加活动记录 if (!empty($rdata['customer_ids']) || !empty($rdata['contacts_ids']) || !empty($rdata['business_ids']) || !empty($rdata['contract_ids'])) { Db::name('crm_activity')->insert([ 'type' => 2, 'activity_type' => 8, 'activity_type_id' => $log_id, 'content' => !empty($param['title']) ? $param['title'] : '日志', 'create_user_id' => $param['user_id'], 'update_time' => time(), 'create_time' => time(), 'customer_ids' => !empty($rdata['customer_ids']) ? $rdata['customer_ids'] : '', 'contacts_ids' => !empty($rdata['contacts_ids']) ? $rdata['contacts_ids'] : '', 'business_ids' => !empty($rdata['business_ids']) ? $rdata['business_ids'] : '', 'contract_ids' => !empty($rdata['contract_ids']) ? $rdata['contract_ids'] : '' ]); } RecordActionLog($param['user_id'], 'oa_log', 'update',$dataInfo['title'], '','','修改了日志:'.$dataInfo['title']); return $data; } else { $this->error = '编辑失败'; return false; } } /** * 日志数据 * @param $id 日志ID * @return */ public function getDataById($id = '') { $fileModel = new \app\admin\model\File(); $userModel = new \app\admin\model\User(); $structureModel = new \app\admin\model\Structure(); $commonModel = new \app\admin\model\Comment(); $map['log.log_id'] = $id; $data_view = db('oa_log') ->where($map) ->alias('log') ->join('__ADMIN_USER__ user', 'user.id = log.create_user_id', 'LEFT'); $dataInfo = $data_view->field('log.*,user.realname,user.thumb_img')->find(); if (!$dataInfo) { $this->error = '暂无此数据'; return false; } $relation = Db::name('OaLogRelation')->where('log_id =' . $id)->find(); $BusinessModel = new \app\crm\model\Business(); //商机 $dataInfo['businessList'] = $relation['business_ids'] ? $BusinessModel->getDataByStr($relation['business_ids']) : []; $ContactsModel = new \app\crm\model\Contacts();//联系人 $dataInfo['contactsList'] = $relation['contacts_ids'] ? $ContactsModel->getDataByStr($relation['contacts_ids']) : []; $ContractModel = new \app\crm\model\Contract();//合同 $dataInfo['contractList'] = $relation['contract_ids'] ? $ContractModel->getDataByStr($relation['contract_ids']) : []; $CustomerModel = new \app\crm\model\Customer();//客户 $dataInfo['customerList'] = $relation['customer_ids'] ? $CustomerModel->getDataByStr($relation['customer_ids']) : []; $dataInfo['create_user_info']['realname'] = $dataInfo['realname'] ?: ''; $dataInfo['create_user_info']['id'] = $dataInfo['create_user_id'] ?: ''; $dataInfo['create_user_info']['thumb_img'] = $dataInfo['thumb_img'] ? getFullPath($dataInfo['thumb_img']) : ''; //附件、图片 $where['module'] = 'oa_log'; $where['module_id'] = $id; $newFileList = $fileModel->getDataList($where); foreach ($newFileList['list'] as $val) { if ($val['types'] == 'file') { $fileList[] = $val; } else { $imgList[] = $val; } } $dataInfo['fileList'] = $fileList ?: []; $dataInfo['imgList'] = $imgList ?: []; $dataInfo['sendUserList'] = $userModel->getDataByStr($dataInfo['send_user_ids']) ?: []; $dataInfo['sendStructList'] = $structureModel->getDataByStr($dataInfo['send_structure_ids']) ?: []; $param['type_id'] = $id; $param['type'] = 'oa_log'; $dataInfo['replyList'] = $commonModel->read($param); return $dataInfo; } /** * 日志删除 * * @param string $param * @return bool * @throws \think\Exception * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function delDataById($param) { $map['log_id'] = $param['log_id']; $dataInfo = $this->get($map['log_id']); if (!$dataInfo) { $this->error = '数据不存在或已删除'; return false; } $flag = Db::name('OaLog')->where($map)->delete(); if ($flag) { $fileModel = new \app\admin\model\File(); $commentModel = new \app\admin\model\Comment(); //删除关联附件 $fileModel->delRFileByModule('oa_log', $param['log_id']); //删除相关评论 $commentModel->delDataById(['type' => 'oa_log', 'type_id' => $param['log_id']]); RecordActionLog($param['user_id'], 'oa_log', 'delete', $dataInfo['title'], '', '', '删除了日志:' . $dataInfo['title']); # 删除活动记录 Db::name('crm_activity')->where(['activity_type' => 8, 'activity_type_id' => $param['log_id']])->delete(); return true; } else { $this->error = '操作失败'; return false; } } /** * 点赞数据 * @param string $log_id 日志id * * @author alvin guogaobo * @version 1.0 版本号 * @since 2021/5/18 0018 09:29 */ public function favourList($log_id=''){ $list= db('oa_log_favour') ->alias('favour') ->join('__ADMIN_USER__ user','user.id=favour.user_id','LEFT') ->where(['favour.log_id'=>$log_id,'favour.status'=>1]) ->field('user.id,user.realname,user.img,favour.status') ->select(); return $list?:[]; } }