getUserByPer('bi', 'customer', 'read'); # 权限范围内userIds $userIds = $perUserIds; # 数组交集 if (empty($userIds)) return []; # 员工信息 $userList = db('admin_user')->field(['id', 'realname'])->whereIn('id', $userIds)->select(); foreach ($userList AS $key => $value) { $result[$value['id']] = [ 'realname' => $value['realname'], 'visitContractNum' => 0, '很满意' => 0, '满意' => 0, '一般' => 0, '不满意' => 0, '很不满意' => 0, ]; } $visitField = ['owner_user_id', 'satisfaction', 'count(`satisfaction`) AS satisfactionCount', 'count(`contract_id`) AS contractCount']; $where['owner_user_id'] = ['in', $userIds]; $where['create_time'] = ['between', [$param['start_time'], $param['end_time']]]; $where['deleted_state'] = 0; $visitList = db('crm_visit')->field($visitField)->where($where)->group('owner_user_id, satisfaction')->select(); foreach ($visitList AS $key => $value) { if (!empty($value['satisfaction']) && trim($value['satisfaction']) == '很满意') { $result[$value['owner_user_id']]['很满意'] += $value['satisfactionCount']; } if (!empty($value['satisfaction']) && trim($value['satisfaction']) == '满意') { $result[$value['owner_user_id']]['满意'] += $value['satisfactionCount']; } if (!empty($value['satisfaction']) && trim($value['satisfaction']) == '一般') { $result[$value['owner_user_id']]['一般'] += $value['satisfactionCount']; } if (!empty($value['satisfaction']) && trim($value['satisfaction']) == '不满意') { $result[$value['owner_user_id']]['不满意'] += $value['satisfactionCount']; } if (!empty($value['satisfaction']) && trim($value['satisfaction']) == '很不满意') { $result[$value['owner_user_id']]['很不满意'] += $value['satisfactionCount']; } $result[$value['owner_user_id']]['visitContractNum'] += $value['contractCount']; } $result = $this->sortCommon($result, 'visitContractNum', 'desc'); return array_values($result); } /** * 产品满意度分析 * * @param $param * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getProductSatisfaction($param) { $productData = []; $userModel = new \app\admin\model\User(); $perUserIds = $userModel->getUserByPer('bi', 'customer', 'read'); # 权限范围内userIds $userIds = !empty($param['user_id']) ? array_intersect([$param['user_id']], $perUserIds) : $perUserIds; # 数组交集 if (empty($userIds)) return []; # 产品列表(上架中) $productList = db('crm_product')->field(['product_id', 'name'])->where('status', '上架')->select(); foreach ($productList AS $key => $value) { $productData[$value['product_id']] = [ 'productName' => $value['name'], 'visitNum' => 0, '很满意' => 0, '满意' => 0, '一般' => 0, '不满意' => 0, '很不满意' => 0, ]; } # 回访条件 $where['visit.owner_user_id'] = ['in', $userIds]; $where['visit.create_time'] = ['between', [$param['start_time'], $param['end_time']]]; $where['visit.deleted_state'] = 0; # 回访数据 $visitList = db('crm_visit')->alias('visit')->field(['visit.contract_id', 'visit.satisfaction']) ->join('__CRM_CONTRACT__ contract', 'contract.contract_id = visit.contract_id') ->where($where)->select(); # 整理数据 foreach ($visitList AS $key => $value) { if (empty($value['satisfaction'])) continue; $productIds = db('crm_contract_product')->where('contract_id', $value['contract_id'])->column('product_id'); foreach ($productIds AS $k => $v) { if ($productData[$v]) { if (trim($value['satisfaction']) == '很满意') $productData[$v]['很满意']++; if (trim($value['satisfaction']) == '满意') $productData[$v]['满意']++; if (trim($value['satisfaction']) == '一般') $productData[$v]['一般']++; if (trim($value['satisfaction']) == '不满意') $productData[$v]['不满意']++; if (trim($value['satisfaction']) == '很不满意') $productData[$v]['很不满意']++; $productData[$v]['visitNum']++; } } } $productData = $this->sortCommon($productData, 'visitNum', 'desc'); return array_values($productData); } }