fmtRequest($request); $requestMap = $request['map'] ?: []; $sceneModel = new \app\admin\model\Scene(); # getCount是代办事项传来的参数,代办事项不需要使用场景 $sceneMap = []; if (empty($getCount)) { if ($scene_id) { //自定义场景 $sceneMap = $sceneModel->getDataById($scene_id, $user_id, 'business') ?: []; } else { //默认场景 $sceneMap = $sceneModel->getDefaultData('crm_business', $user_id) ?: []; } } if ($search || $search == '0') { //普通筛选 $sceneMap['name'] = ['condition' => 'contains', 'value' => $search, 'form_type' => 'text', 'name' => '商机名称']; } if (isset($requestMap['type_id'])) { $requestMap['type_id']['value'] = $requestMap['type_id']['type_id']; if (in_array($requestMap['type_id']['status_id'], [1, 2, 3])) { $requestMap['is_end'] = $requestMap['type_id']['status_id']; } else { if ($requestMap['type_id']['status_id']) $requestMap['status_id']['value'] = $requestMap['type_id']['status_id']; $requestMap['is_end'] = 0; } } if ($sceneMap['type_id']) { $requestMap['type_id']['value'] = $sceneMap['type_id']['type_id']; if (in_array($sceneMap['type_id']['status_id'], [1, 2, 3])) { $sceneMap['is_end'] = $sceneMap['type_id']['status_id']; } else { if ($sceneMap['type_id']['status_id']) $requestMap['status_id']['value'] = $sceneMap['type_id']['status_id']; $sceneMap['is_end'] = 0; } unset($sceneMap['type_id']); } $partMap = []; $teamMap = $requestMap['team_id']; //团队成员 高级筛选 if ($teamMap) { $partMap = advancedQueryFormatForTeam($teamMap, 'business', ''); unset($requestMap['team_id']); $map = $requestMap ? array_merge($sceneMap, $requestMap) : $sceneMap; } else { $map = $requestMap ? array_merge($sceneMap, $requestMap) : $sceneMap; } //高级筛选 $map = advancedQuery($map, 'crm', 'business', 'index'); $authMap = []; $a = 'index'; if ($is_excel) $a = 'excelExport'; $auth_user_ids = $userModel->getUserByPer('crm', 'business', $a); if (isset($map['business.owner_user_id'])) { if (!is_array($map['business.owner_user_id'][1])) { $map['business.owner_user_id'][1] = [$map['business.owner_user_id'][1]]; } if (in_array($map['business.owner_user_id'][0], ['neq', 'notin'])) { $auth_user_ids = array_diff($auth_user_ids, $map['business.owner_user_id'][1]) ?: []; //取差集 } else { $auth_user_ids = array_intersect($map['business.owner_user_id'][1], $auth_user_ids) ?: []; //取交集 } unset($map['business.owner_user_id']); $auth_user_ids = array_merge(array_unique(array_filter($auth_user_ids))) ?: ['-1']; $authMap['business.owner_user_id'] = array('in', $auth_user_ids); } else { if (!$isMessage) { $authMapData = []; $authMapData['auth_user_ids'] = $auth_user_ids; $authMapData['user_id'] = $user_id; $authMap = function ($query) use ($authMapData) { $query->where('business.owner_user_id', array('in', $authMapData['auth_user_ids'])) ->whereOr('business.ro_user_id', array('like', '%,' . $authMapData['user_id'] . ',%')) ->whereOr('business.rw_user_id', array('like', '%,' . $authMapData['user_id'] . ',%')); }; } } //联系人商机 if ($contacts_id) { $business_id = Db::name('crm_contacts_business')->where(['contacts_id' => $contacts_id])->column('business_id'); if ($business_id) { $map['business.business_id'] = array('in', $business_id); } else { $map['business.business_id'] = array('eq', -1); } } //列表展示字段 $indexField = $fieldModel->getIndexField('crm_business', $user_id, 1) ?: array('name'); if (!empty($indexField)) { foreach ($indexField as $key => $value) { if ($value == 'business.customer_name') unset($indexField[(int)$key]); } } $userField = $fieldModel->getFieldByFormType('crm_business', 'user'); //人员类型 $structureField = $fieldModel->getFieldByFormType('crm_business', 'structure'); //部门类型 // $fieldGrant = db('admin_field_mask')->where('types', 'business')->select(); # 处理人员和部门类型的排序报错问题(前端传来的是包含_name的别名字段) $temporaryField = str_replace('_name', '', $order_field); if (in_array($temporaryField, $userField) || in_array($temporaryField, $structureField)) { $order_field = $temporaryField; } //排序 if ($order_type && $order_field) { $order = $fieldModel->getOrderByFormtype('crm_business', 'business', $order_field, $order_type); } else { $order = 'business.update_time desc'; } # 商机组和商机状态搜索 if (!empty($businessTypeId)) $map['business.type_id'] = ['eq', $businessTypeId]; if (!empty($businessStatusId)) { if (preg_match("/^[1-9][0-9]*$/", $businessStatusId)) { $map['is_end'] = 0; $map['business.status_id'] = ['eq', $businessStatusId]; } else { $map['is_end'] = abs($businessStatusId); } } # 待办事项查询参数 $dealtWhere = []; if (!empty($businessIdArray)) $dealtWhere['business.business_id'] = ['in', $businessIdArray]; // 待办事项下需联系商机(逾期) $overdueWhere = ''; if (!empty($overdue)) { $overdueWhere = "(FROM_UNIXTIME(`business`.`last_time`,'%Y-%m-%d') < FROM_UNIXTIME(`business`.`next_time`,'%Y-%m-%d') OR (ISNULL(`business`.`last_time`) AND `business`.`next_time` < " . time() . "))"; } $readAuthIds = $userModel->getUserByPer('crm', 'business', 'read'); $updateAuthIds = $userModel->getUserByPer('crm', 'business', 'update'); $deleteAuthIds = $userModel->getUserByPer('crm', 'business', 'delete'); $dataCount = db('crm_business') ->alias('business') ->join('__CRM_CUSTOMER__ customer', 'business.customer_id = customer.customer_id', 'LEFT') ->where($map)->where($partMap)->where($authMap)->where($overdueWhere)->where($dealtWhere)->count('business_id'); if (!empty($getCount) && $getCount == 1) { $data['dataCount'] = !empty($dataCount) ? $dataCount : 0; # 商机总金额 $sumMoney = Db::name('crm_business')->alias('business') ->whereIn('is_end', [0, 1])->where($map)->where($partMap)->where($authMap)->sum('money'); $data['extraData']['money'] = ['businessSumMoney' => !empty($sumMoney) ? sprintf("%.2f", $sumMoney) : 0.00]; return $data; } $list = db('crm_business') ->alias('business') ->join('__CRM_CUSTOMER__ customer', 'business.customer_id = customer.customer_id', 'LEFT') ->where($map) ->where($partMap) ->where($authMap) ->where($overdueWhere) ->where($dealtWhere) ->limit($request['offset'], $request['length']) ->field('business.*,customer.name as customer_name') ->orderRaw($order) ->select(); $endStatus = ['1' => '赢单', '2' => '输单', '3' => '无效']; # 扩展数据 $extraData = []; $list = getFieldData($list, 'crm_business', $user_id); foreach ($list as $k => $v) { $list[$k]['customer_id_info']['customer_id'] = $v['customer_id']; $list[$k]['customer_id_info']['name'] = $v['customer_name']; $list[$k]['create_user_id_info'] = isset($v['create_user_id']) ? $userModel->getUserById($v['create_user_id']) : []; $list[$k]['owner_user_id_info'] = isset($v['owner_user_id']) ? $userModel->getUserById($v['owner_user_id']) : []; $list[$k]['create_user_name'] = !empty($list[$k]['create_user_id_info']['realname']) ? $list[$k]['create_user_id_info']['realname'] : ''; $list[$k]['owner_user_name'] = !empty($list[$k]['owner_user_id_info']['realname']) ? $list[$k]['owner_user_id_info']['realname'] : ''; $statusInfo = []; $status_count = 0; if (!$v['is_end']) { $statusInfo = db('crm_business_status')->where('status_id', $v['status_id'])->find(); if ($statusInfo['order_id'] < 99) { $status_count = db('crm_business_status')->where('type_id', ['eq', $v['type_id']])->count(); } //进度 $list[$k]['status_progress'] = [$statusInfo['order_id'], $status_count + 1]; } else { $statusInfo['name'] = $endStatus[$v['is_end']]; } $list[$k]['status_id_info'] = $statusInfo['name'];//销售阶段 $list[$k]['type_id_info'] = db('crm_business_type')->where('type_id', $v['type_id'])->value('name');//商机状态组 //权限 $roPre = $userModel->rwPre($user_id, $v['ro_user_id'], $v['rw_user_id'], 'read'); $rwPre = $userModel->rwPre($user_id, $v['ro_user_id'], $v['rw_user_id'], 'update'); $permission = []; $is_read = 0; $is_update = 0; $is_delete = 0; if (in_array($v['owner_user_id'], $readAuthIds) || $roPre || $rwPre) $is_read = 1; if (in_array($v['owner_user_id'], $updateAuthIds) || $rwPre) $is_update = 1; if (in_array($v['owner_user_id'], $deleteAuthIds)) $is_delete = 1; $permission['is_read'] = $is_read; $permission['is_update'] = $is_update; $permission['is_delete'] = $is_delete; $list[$k]['permission'] = $permission; # 下次联系时间 $list[$k]['next_time'] = !empty($v['next_time']) ? date('Y-m-d H:i:s', $v['next_time']) : null; # 关注 $starWhere = ['user_id' => $user_id, 'target_id' => $v['business_id'], 'type' => 'crm_business']; $star = Db::name('crm_star')->where($starWhere)->value('star_id'); $list[$k]['star'] = !empty($star) ? 1 : 0; # 日期 $list[$k]['create_time'] = !empty($v['create_time']) ? date('Y-m-d H:i:s', $v['create_time']) : null; $list[$k]['update_time'] = !empty($v['update_time']) ? date('Y-m-d H:i:s', $v['update_time']) : null; $list[$k]['last_time'] = !empty($v['last_time']) ? date('Y-m-d H:i:s', $v['last_time']) : null; # 系统字段 负责人部门 zjf 20210726 $list[$k]['owner_user_structure_name'] = $list[$k]['owner_user_id_info']['structure_name']; } $data = []; $data['list'] = $list ?: []; $data['dataCount'] = $dataCount ?: 0; # 商机总金额 $sumMoney = Db::name('crm_business')->alias('business') ->join('__CRM_CUSTOMER__ customer', 'business.customer_id = customer.customer_id', 'LEFT') ->whereIn('is_end', [0, 1])->where($map)->where($partMap)->where($authMap)->sum('money'); $data['extraData']['money'] = ['businessSumMoney' => !empty($sumMoney) ? sprintf("%.2f", $sumMoney) : 0.00]; return $data; } /** * 创建客户捞取审批信息 * @param * @return */ public function createData($param) { $createData = []; foreach ($param['customer_id'] as $key => $value) { $createData[$key]['customer_id'] = $value; $createData[$key]['check_status'] = $param['check_status'] ?? 0; $createData[$key]['flow_id'] = $param['flow_id'] ?? 0; $createData[$key]['order_id'] = $param['order_id'] ?? 0; $createData[$key]['check_user_id'] = $param['check_user_id'] ?? 0; $createData[$key]['flow_user_id'] = $param['flow_user_id'] ?? 0; $createData[$key]['user_id'] = $param['user_id'] ?? 0; } $this->startTrans(); try { $data = $this->saveAll($createData); $this->commit(); } catch (\Exception $e) { $this->error = '领取失败'; $this->rollback(); return false; } foreach ($data as $k => $v) { //站内信 $send_user_id = stringToArray($param['check_user_id']); if ($send_user_id && empty($param['check_status'])) { (new Message())->send( Message::CUSTOMER_TO_DO, [ 'title' => $param['name'], 'action_id' => $v['customer_check_id'] ], $send_user_id ); } $data = []; $data['customer_check_id'] = $v['customer_check_id']; echo $v['customer_check_id']; # 创建待办事项的关联数据 $checkUserIds = db('crm_customer_check')->where('customer_check_id', $data['customer_check_id'])->value('check_user_id'); $checkUserIdArray = stringToArray($checkUserIds); $dealtData = []; foreach ($checkUserIdArray as $kk => $vv) { $dealtData[] = [ 'types' => 'crm_customer_check', 'types_id' => $data['customer_check_id'], 'user_id' => $vv ]; } if (!empty($dealtData)) db('crm_dealt_relation')->insertAll($dealtData); } } }