From 80cbd4ece6c4c91ea0b79f294760069ac88db683 Mon Sep 17 00:00:00 2001 From: dengbw Date: Thu, 23 Mar 2023 16:35:02 +0800 Subject: [PATCH] market_323_2 --- .../controllers/api/sylive/GroupsCustomer.php | 63 ++++++- .../controllers/api/sylive/GroupsExchange.php | 73 +++++++- market/controllers/api/sylive/GroupsOrder.php | 69 +++++++- .../api/sylive/GroupsStatistics.php | 162 ++++++++++++++---- market/controllers/api/sylive/GroupsWin.php | 66 ++++++- 5 files changed, 363 insertions(+), 70 deletions(-) diff --git a/market/controllers/api/sylive/GroupsCustomer.php b/market/controllers/api/sylive/GroupsCustomer.php index 94ff78d5..a090eee8 100644 --- a/market/controllers/api/sylive/GroupsCustomer.php +++ b/market/controllers/api/sylive/GroupsCustomer.php @@ -166,6 +166,22 @@ class groupsCustomer extends BaseController $order = $params['order']; !$page && $page = 1; !$limit && $limit = 10; + $levels = []; + if ($page == 1) { + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'parentId' => 0, 'status>=' => 0]); + if ($re_gro['statisticsType']) { + $this->load->model('market/Market_sys_dictionary_data_model', 'mdSysDictionaryData'); + $res_dit = $this->mdSysDictionaryData->select(['status>=' => 0, 'dictId' => $re_gro['statisticsType']], 'sortNumber asc,dictDataId desc' + , 0, 0, 'dictDataCode,dictDataName'); + foreach ($res_dit as $k => $v) { + $groupsLevel = intval($v['dictDataCode']); + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'groupsLevel' => $groupsLevel, 'status>=' => 0]); + if ($re_gro) { + $levels[] = ['label' => $v['dictDataName'], 'prop' => "levelName{$groupsLevel}"]; + } + } + } + } $sort_order = 'customerId desc'; if ($sort && $order) { $sort_order = $sort . ' ' . $order; @@ -208,7 +224,7 @@ class groupsCustomer extends BaseController , 'bizId' => $v['bizId'], 'cfUserId' => $v['cfUserId']]); $status = intval($v['status']); $statusName = $statusAry[$status]; - $visitTagName = '-'; + $visitTagName = ''; $visitTagId = $v['visitTagId']; if ($visitTagId) { $visitTagName = $visitTagAry[$visitTagId]; @@ -216,19 +232,50 @@ class groupsCustomer extends BaseController $visitTagName = $visitTagName . '(' . $jsonData['visitTag'][$visitTagId] . ')'; } } - $item = [ - 'customerId' => $v['customerId'], 'name' => $v['name'], 'mobile' => $v['mobile'], 'level' => $v['level'] - , 'statusName' => $statusName, 'visitTagName' => $visitTagName, 'levelName1' => $consultant['levelName1'] - , 'levelName2' => $consultant['levelName2'], 'levelName3' => $consultant['levelName3'] - , 'stores' => $consultant['stores'], 'consultant' => $consultant['consultant'] + $list1 = [ + 'customerId' => $v['customerId'], 'name' => $v['name'], 'mobile' => $v['mobile'] + , 'statusName' => $statusName, 'visitTagName' => $visitTagName, 'consultant' => $consultant['consultant'] ]; + if ($limit == 10000) { + unset($list1['customerId']); + } + $list2 = []; + foreach ($levels as $k2 => $v2) { + $list2[$v2['prop']] = $consultant[$v2['prop']] ? $consultant[$v2['prop']] : ''; + } + $item = count($list2) ? array_merge($list1, $list2) : $list1; + $item['stores'] = $consultant['stores']; $list[] = $item; } } if ($limit == 10000) { - return $list; + $columns1 = ['姓名', '手机号', '状态', '回访标签', '顾问']; + $columns2 = []; + foreach ($levels as $k => $v) { + $columns2[] = $v['label']; + } + $columns3 = count($columns2) ? array_merge($columns1, $columns2) : $columns1; + $columns = array_merge($columns3, ['门店']); + return ['list' => $list, 'columns' => $columns]; } else { - return ['list' => $list, 'count' => $count]; + $columns = ''; + if ($page == 1) { + $columns1 = [ + ['prop' => 'customerId', 'label' => 'ID', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 45, 'fixed' => 'left'], + ['prop' => 'name', 'label' => '姓名', 'showOverflowTooltip' => true, 'minWidth' => 60], + ['prop' => 'mobile', 'label' => '手机号', 'showOverflowTooltip' => true, 'minWidth' => 60], + ['prop' => 'statusName', 'label' => '状态', 'showOverflowTooltip' => true, 'minWidth' => 60, 'align' => 'center'], + ['prop' => 'visitTagName', 'label' => '回访标签', 'showOverflowTooltip' => true, 'minWidth' => 100, 'align' => 'center'], + ['prop' => 'consultant', 'label' => '顾问', 'showOverflowTooltip' => true, 'minWidth' => 60] + ]; + $columns2 = []; + foreach ($levels as $k => $v) { + $columns2[] = ['prop' => $v['prop'], 'label' => $v['label'], 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + $columns = count($columns2) ? array_merge($columns1, $columns2) : $columns1; + $columns[] = ['prop' => 'stores', 'label' => '门店', 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + return ['list' => $list, 'count' => $count, 'columns' => $columns]; } } diff --git a/market/controllers/api/sylive/GroupsExchange.php b/market/controllers/api/sylive/GroupsExchange.php index 730faa01..21b38800 100644 --- a/market/controllers/api/sylive/GroupsExchange.php +++ b/market/controllers/api/sylive/GroupsExchange.php @@ -244,6 +244,22 @@ class groupsExchange extends BaseController $itemId = $params['itemId']; !$page && $page = 1; !$limit && $limit = 10; + $levels = []; + if ($page == 1) { + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'parentId' => 0, 'status>=' => 0]); + if ($re_gro['statisticsType']) { + $this->load->model('market/Market_sys_dictionary_data_model', 'mdSysDictionaryData'); + $res_dit = $this->mdSysDictionaryData->select(['status>=' => 0, 'dictId' => $re_gro['statisticsType']], 'sortNumber asc,dictDataId desc' + , 0, 0, 'dictDataCode,dictDataName'); + foreach ($res_dit as $k => $v) { + $groupsLevel = intval($v['dictDataCode']); + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'groupsLevel' => $groupsLevel, 'status>=' => 0]); + if ($re_gro) { + $levels[] = ['label' => $v['dictDataName'], 'prop' => "levelName{$groupsLevel}"]; + } + } + } + } $sort_order = 'id desc'; if ($sort && $order) { $sort_order = $sort . ' ' . $order; @@ -302,14 +318,25 @@ class groupsExchange extends BaseController $useStatusName = '驳回'; } $ifAddress = intval($map_items[$v['itemId']]); - $item = [ + $list1 = [ 'id' => $v['id'], 'sid' => $v['sid'], 'uname' => $v['uname'], 'mobile' => $v['mobile'], 'itemTitle' => $v['itemTitle'] - , 'totalPrice' => $v['totalPrice'], 'payTime' => $v['payTime'] != '0000-00-00 00:00:00' ? $v['payTime'] : '' - , 'winTime' => $v['winTime'] ? $v['winTime'] : '', 'useStatusName' => $useStatusName, 'useStatus' => intval($useStatus) - , 'levelName1' => $consultant['levelName1'], 'levelName2' => $consultant['levelName2'], 'levelName3' => $consultant['levelName3'] - , 'stores' => $consultant['stores'], 'consultant' => $consultant['consultant'], 'exchangeName' => $exchangeName - , 'ifAddress' => $ifAddress + , 'totalPrice' => $v['totalPrice'], 'exchangeName' => $exchangeName + , 'useStatusName' => $useStatusName, 'consultant' => $consultant['consultant'] + , 'ifAddress' => $ifAddress, 'useStatus' => intval($useStatus) ]; + if ($limit == 10000) { + unset($list1['id']); + unset($list1['ifAddress']); + unset($list1['useStatus']); + } else { + unset($list1['sid']); + } + $list2 = []; + foreach ($levels as $k2 => $v2) { + $list2[$v2['prop']] = $consultant[$v2['prop']] ? $consultant[$v2['prop']] : ''; + } + $item = count($list2) ? array_merge($list1, $list2) : $list1; + $item['stores'] = $consultant['stores']; if ($limit == 10000) { $address = $biz = ''; $jsondata = $v['jsondata'] ? json_decode($v['jsondata'], true) : []; @@ -319,16 +346,44 @@ class groupsExchange extends BaseController if ($jsondata['biz']) { $biz = $jsondata['biz']; } - $item['address'] = $address; $item['biz'] = $biz; + $item['address'] = $address; } $list[] = $item; } } if ($limit == 10000) { - return $list; + $columns1 = ['订单号', '姓名', '手机号', '商品标题', '订单价格', '核销类型', '状态', '顾问']; + $columns2 = []; + foreach ($levels as $k => $v) { + $columns2[] = $v['label']; + } + $columns3 = count($columns2) ? array_merge($columns1, $columns2) : $columns1; + $columns = array_merge($columns3, ['门店', '所选经销商', '地址']); + return ['list' => $list, 'columns' => $columns]; } else { - return ['list' => $list, 'count' => $count]; + $columns = ''; + if ($page == 1) { + $columns1 = [ + ['prop' => 'id', 'label' => 'ID', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 45, 'fixed' => 'left'], + ['prop' => 'uname', 'label' => '姓名', 'showOverflowTooltip' => true, 'minWidth' => 60], + ['prop' => 'mobile', 'label' => '手机号', 'showOverflowTooltip' => true, 'minWidth' => 80], + ['prop' => 'itemTitle', 'label' => '商品标题', 'showOverflowTooltip' => true, 'minWidth' => 130], + ['prop' => 'totalPrice', 'label' => '订单价格', 'showOverflowTooltip' => true, 'minWidth' => 60], + ['prop' => 'exchangeName', 'label' => '核销类型', 'showOverflowTooltip' => true, 'minWidth' => 60, 'align' => 'center'], + ['prop' => 'useStatus', 'label' => '状态', 'showOverflowTooltip' => true, 'minWidth' => 60, 'align' => 'center', 'slot' => 'useStatus'], + ['prop' => 'consultant', 'label' => '顾问', 'showOverflowTooltip' => true, 'minWidth' => 60] + ]; + $columns2 = []; + foreach ($levels as $k => $v) { + $columns2[] = ['prop' => $v['prop'], 'label' => $v['label'], 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + $columns = count($columns2) ? array_merge($columns1, $columns2) : $columns1; + $columns[] = ['prop' => 'stores', 'label' => '门店', 'showOverflowTooltip' => true, 'minWidth' => 80]; + $columns[] = ['columnKey' => 'action', 'label' => '操作', 'showOverflowTooltip' => true, 'width' => 150, 'align' => 'center' + , 'resizable' => false, 'slot' => 'action']; + } + return ['list' => $list, 'count' => $count, 'columns' => $columns]; } } diff --git a/market/controllers/api/sylive/GroupsOrder.php b/market/controllers/api/sylive/GroupsOrder.php index 08b11ffb..0fe3b368 100644 --- a/market/controllers/api/sylive/GroupsOrder.php +++ b/market/controllers/api/sylive/GroupsOrder.php @@ -61,6 +61,22 @@ class groupsOrder extends BaseController $itemId = $params['itemId']; !$page && $page = 1; !$limit && $limit = 10; + $levels = []; + if ($page == 1) { + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'parentId' => 0, 'status>=' => 0]); + if ($re_gro['statisticsType']) { + $this->load->model('market/Market_sys_dictionary_data_model', 'mdSysDictionaryData'); + $res_dit = $this->mdSysDictionaryData->select(['status>=' => 0, 'dictId' => $re_gro['statisticsType']], 'sortNumber asc,dictDataId desc' + , 0, 0, 'dictDataCode,dictDataName'); + foreach ($res_dit as $k => $v) { + $groupsLevel = intval($v['dictDataCode']); + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'groupsLevel' => $groupsLevel, 'status>=' => 0]); + if ($re_gro) { + $levels[] = ['label' => $v['dictDataName'], 'prop' => "levelName{$groupsLevel}"]; + } + } + } + } $sort_order = 'id desc'; if ($sort && $order) { if ($sort == 'statusName') { @@ -105,14 +121,23 @@ class groupsOrder extends BaseController $consultant = $this->consultantGet(['activityId' => $v['activityId'], 'userId' => $v['userId'] , 'levelId1' => $v['levelId1'], 'levelId2' => $v['levelId2'], 'levelId3' => $v['levelId3'] , 'bizId' => $v['bizId'], 'cfUserId' => $v['cfUserId']]); - $item = [ + $list1 = [ 'id' => $v['id'], 'sid' => $v['sid'], 'uname' => $v['uname'], 'mobile' => $v['mobile'], 'itemTitle' => $v['itemTitle'] , 'totalPrice' => $v['totalPrice'], 'payTime' => $v['payTime'] != '0000-00-00 00:00:00' ? $v['payTime'] : '' - , 'typeName' => $this->mdSyliveOrder->typeAry($v['type']), 'createTime' => $v['createTime'] - , 'statusName' => $this->mdSyliveOrder->statusAry($v['status']) - , 'levelName1' => $consultant['levelName1'] , 'levelName2' => $consultant['levelName2'] , 'levelName3' => $consultant['levelName3'] - , 'stores' => $consultant['stores'], 'consultant' => $consultant['consultant'] + , 'createTime' => $v['createTime'], 'typeName' => $this->mdSyliveOrder->typeAry($v['type']) + , 'statusName' => $this->mdSyliveOrder->statusAry($v['status']), 'consultant' => $consultant['consultant'] ]; + if ($limit == 10000) { + unset($list1['id']); + } else { + unset($list1['sid']); + } + $list2 = []; + foreach ($levels as $k2 => $v2) { + $list2[$v2['prop']] = $consultant[$v2['prop']] ? $consultant[$v2['prop']] : ''; + } + $item = count($list2) ? array_merge($list1, $list2) : $list1; + $item['stores'] = $consultant['stores']; if ($limit == 10000) { $address = $biz = ''; $jsondata = $v['jsondata'] ? json_decode($v['jsondata'], true) : []; @@ -122,16 +147,44 @@ class groupsOrder extends BaseController if ($jsondata['biz']) { $biz = $jsondata['biz']; } - $item['address'] = $address; $item['biz'] = $biz; + $item['address'] = $address; } $list[] = $item; } } if ($limit == 10000) { - return $list; + $columns1 = ['订单号', '姓名', '手机号', '商品标题', '订单价格', '付款时间', '创建时间', '订单类型', '状态', '顾问']; + $columns2 = []; + foreach ($levels as $k => $v) { + $columns2[] = $v['label']; + } + $columns3 = count($columns2) ? array_merge($columns1, $columns2) : $columns1; + $columns = array_merge($columns3, ['门店', '所选经销商', '地址']); + return ['list' => $list, 'columns' => $columns]; } else { - return ['list' => $list, 'count' => $count]; + $columns = ''; + if ($page == 1) { + $columns1 = [ + ['prop' => 'id', 'label' => 'ID', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 45, 'fixed' => 'left'], + ['prop' => 'uname', 'label' => '姓名', 'showOverflowTooltip' => true, 'minWidth' => 60], + ['prop' => 'mobile', 'label' => '手机号', 'showOverflowTooltip' => true, 'minWidth' => 80], + ['prop' => 'itemTitle', 'label' => '商品标题', 'showOverflowTooltip' => true, 'minWidth' => 130], + ['prop' => 'totalPrice', 'label' => '订单价格', 'showOverflowTooltip' => true, 'minWidth' => 70, 'sortable' => 'custom'], + ['prop' => 'payTime', 'label' => '付款时间', 'showOverflowTooltip' => true, 'minWidth' => 100, 'sortable' => 'custom'], + ['prop' => 'createTime', 'label' => '创建时间', 'showOverflowTooltip' => true, 'minWidth' => 100, 'sortable' => 'custom'], + ['prop' => 'typeName', 'label' => '订单类型', 'showOverflowTooltip' => true, 'minWidth' => 70], + ['prop' => 'statusName', 'label' => '状态', 'showOverflowTooltip' => true, 'minWidth' => 70], + ['prop' => 'consultant', 'label' => '顾问', 'showOverflowTooltip' => true, 'minWidth' => 60] + ]; + $columns2 = []; + foreach ($levels as $k => $v) { + $columns2[] = ['prop' => $v['prop'], 'label' => $v['label'], 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + $columns = count($columns2) ? array_merge($columns1, $columns2) : $columns1; + $columns[] = ['prop' => 'stores', 'label' => '门店', 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + return ['list' => $list, 'count' => $count, 'columns' => $columns]; } } diff --git a/market/controllers/api/sylive/GroupsStatistics.php b/market/controllers/api/sylive/GroupsStatistics.php index d0ded0b4..4eff7bcb 100644 --- a/market/controllers/api/sylive/GroupsStatistics.php +++ b/market/controllers/api/sylive/GroupsStatistics.php @@ -107,7 +107,7 @@ class GroupsStatistics extends BaseController $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'groupsLevel' => $groupsLevel, 'status>=' => 0]); if ($re_gro) { $levelData[] = ['title' => $v['dictDataName'] . '统计', 'value' => $groupsLevel]; - $levels[] = ['label' => $v['dictDataName'], 'prop' => "levelName{$groupsLevel}"]; + $levels[] = "{$v['dictDataName']},$groupsLevel"; } } } @@ -466,11 +466,18 @@ class GroupsStatistics extends BaseController $order = $params['order']; $day = $params['day']; $itemId = intval($params['itemId']);//商品 + $levels = $params['levels']; !$page && $page = 1; !$limit && $limit = 10; $list = []; $count = 0; $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); + if ($levels && count($levels)) { + foreach ($levels as $k => $v) { + $arr_unit = explode(',', $v); + $levels[$k] = ['label' => $arr_unit[0], 'prop' => "levelName{$arr_unit[1]}", 'levelId' => "levelId{$arr_unit[1]}"]; + } + } if ($re) { $channelId = intval($re['channelId']); !$sort && $sort = 'browse'; @@ -518,10 +525,7 @@ class GroupsStatistics extends BaseController ["groupsId in({$str_groups})" => null, 'activityId' => $activityId, 'status>=' => 0]); foreach ($res as $v) { $bizId = intval($v['bizId']); - $levelName1 = $levelName2 = $levelName3 = $bizName = '-'; - $map_groups[$v['levelId1']] && $levelName1 = $map_groups[$v['levelId1']]; - $map_groups[$v['levelId2']] && $levelName2 = $map_groups[$v['levelId2']]; - $map_groups[$v['levelId3']] && $levelName3 = $map_groups[$v['levelId3']]; + $bizName = '-'; $map_groups[$bizId] && $bizName = $map_groups[$bizId]; $where_sort['bizId'] = $bizId; if ($sort == 'browse') { @@ -563,9 +567,14 @@ class GroupsStatistics extends BaseController } } $consultantPer = number_format_com($consultant / $allConsultant * 100, 2, '') . '%'; - $list[] = ['levelName1' => $levelName1, 'levelName2' => $levelName2, 'levelName3' => $levelName3, 'bizName' => $bizName - , 'consultant' => $consultant, 'allConsultant' => $allConsultant, 'consultantPer' => $consultantPer, 'browse' => $browse, 'subscribe' => $subscribe - , 'watch' => $watch, 'order' => $orderTotal, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + $list1 = []; + foreach ($levels as $k2 => $v2) { + $levelId = $v2['levelId']; + $list1[$v2['prop']] = $map_groups[$v[$levelId]] ? $map_groups[$v[$levelId]] : ''; + } + $list2 = ['bizName' => $bizName, 'consultant' => $consultant, 'allConsultant' => $allConsultant, 'consultantPer' => $consultantPer + , 'browse' => $browse, 'subscribe' => $subscribe, 'watch' => $watch, 'order' => $orderTotal, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + $list[] = count($list1) ? array_merge($list1, $list2) : $list2; } } } else { @@ -621,10 +630,7 @@ class GroupsStatistics extends BaseController ["groupsId in({$str_groups})" => null, 'activityId' => $activityId, 'status>=' => 0]); foreach ($res as $v) { $bizId = intval($v['bizId']); - $levelName1 = $levelName2 = $levelName3 = $bizName = '-'; - $map_groups[$v['levelId1']] && $levelName1 = $map_groups[$v['levelId1']]; - $map_groups[$v['levelId2']] && $levelName2 = $map_groups[$v['levelId2']]; - $map_groups[$v['levelId3']] && $levelName3 = $map_groups[$v['levelId3']]; + $bizName = '-'; if ($v['groupsName']) { $bizName = $v['groupsName']; } else { @@ -654,9 +660,14 @@ class GroupsStatistics extends BaseController $v['watch'] = intval($re['watch']); } $consultantPer = number_format_com($consultant / $allConsultant * 100, 2, '') . '%'; - $list[] = ['levelName1' => $levelName1, 'levelName2' => $levelName2, 'levelName3' => $levelName3, 'bizName' => $bizName - , 'consultant' => $consultant, 'allConsultant' => $allConsultant, 'consultantPer' => $consultantPer, 'browse' => $v['browse'], 'subscribe' => $v['subscribe'] - , 'watch' => $v['watch'], 'order' => $order, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + $list1 = []; + foreach ($levels as $k2 => $v2) { + $levelId = $v2['levelId']; + $list1[$v2['prop']] = $map_groups[$v[$levelId]] ? $map_groups[$v[$levelId]] : ''; + } + $list2 = ['bizName' => $bizName, 'consultant' => $consultant, 'allConsultant' => $allConsultant, 'consultantPer' => $consultantPer + , 'browse' => $v['browse'], 'subscribe' => $v['subscribe'], 'watch' => $v['watch'], 'order' => $order, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + $list[] = count($list1) ? array_merge($list1, $list2) : $list2; } } } @@ -664,7 +675,27 @@ class GroupsStatistics extends BaseController if ($limit == 10000) { return $list; } else { - return ['list' => $list, 'count' => $count]; + $columns = ''; + if ($page == 1) { + $columns1 = []; + foreach ($levels as $k => $v) { + $columns1[] = ['prop' => $v['prop'], 'label' => $v['label'], 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + $columns2 = [ + ['prop' => 'bizName', 'label' => '门店', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 120], + ['prop' => 'consultant', 'label' => '参与顾问数', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 85], + ['prop' => 'allConsultant', 'label' => '全部顾问数', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 85], + ['prop' => 'consultantPer', 'label' => '开工率', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 75], + ['prop' => 'browse', 'label' => '浏览数(人)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 115, 'sortable' => 'custom'], + ['prop' => 'subscribe', 'label' => '预约数(人)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 115, 'sortable' => 'custom'], + ['prop' => 'watch', 'label' => '观看数(人)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 115, 'sortable' => 'custom'], + ['prop' => 'order', 'label' => '订单数(单)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 115, 'sortable' => 'custom'], + ['prop' => 'livePV', 'label' => '观看数(人次)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 100, 'sortable' => 'custom'], + ['prop' => 'watchDuration', 'label' => '人均观看(分)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 100, 'sortable' => 'custom'], + ]; + $columns = count($columns1) ? array_merge($columns1, $columns2) : $columns2; + } + return ['list' => $list, 'count' => $count, 'columns' => $columns]; } } @@ -677,10 +708,17 @@ class GroupsStatistics extends BaseController $order = $params['order']; $day = $params['day']; $itemId = intval($params['itemId']);//商品 + $levels = $params['levels']; !$page && $page = 1; !$limit && $limit = 10; $list = []; $count = 0; + if ($levels && count($levels)) { + foreach ($levels as $k => $v) { + $arr_unit = explode(',', $v); + $levels[$k] = ['label' => $arr_unit[0], 'prop' => "levelName{$arr_unit[1]}", 'levelId' => "levelId{$arr_unit[1]}"]; + } + } $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); if ($re) { $channelId = intval($re['channelId']); @@ -732,10 +770,7 @@ class GroupsStatistics extends BaseController $map_user = $this->mdSyliveUser->map('userId', 'uname', ["userId in({$str_user})" => null]); foreach ($res as $v) { $cfUserId = intval($v['cfUserId']); - $levelName1 = $levelName2 = $levelName3 = $bizName = $consultantName = '-'; - $map_groups[$v['levelId1']] && $levelName1 = $map_groups[$v['levelId1']]; - $map_groups[$v['levelId2']] && $levelName2 = $map_groups[$v['levelId2']]; - $map_groups[$v['levelId3']] && $levelName3 = $map_groups[$v['levelId3']]; + $bizName = $consultantName = '-'; $map_groups[$v['bizId']] && $bizName = $map_groups[$v['bizId']]; $map_user[$cfUserId] && $consultantName = $map_user[$cfUserId]; $where_sort['cfUserId'] = $cfUserId; @@ -774,9 +809,14 @@ class GroupsStatistics extends BaseController $watchDuration = round($playDuration / $livePV); } } - $list[] = ['levelName1' => $levelName1, 'levelName2' => $levelName2, 'levelName3' => $levelName3, - 'bizName' => $bizName, 'consultantName' => $consultantName, 'browse' => $browse, + $list1 = []; + foreach ($levels as $k2 => $v2) { + $levelId = $v2['levelId']; + $list1[$v2['prop']] = $map_groups[$v[$levelId]] ? $map_groups[$v[$levelId]] : ''; + } + $list2 = ['bizName' => $bizName, 'consultantName' => $consultantName, 'browse' => $browse, 'subscribe' => $subscribe, 'watch' => $watch, 'order' => $order, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + $list[] = count($list1) ? array_merge($list1, $list2) : $list2; } } } else { @@ -818,10 +858,7 @@ class GroupsStatistics extends BaseController $map_user = $this->mdSyliveUser->map('userId', 'uname', ["userId in({$str_user})" => null]); foreach ($res as $v) { $cfUserId = intval($v['cfUserId']); - $levelName1 = $levelName2 = $levelName3 = $bizName = $consultantName = '-'; - $map_groups[$v['levelId1']] && $levelName1 = $map_groups[$v['levelId1']]; - $map_groups[$v['levelId2']] && $levelName2 = $map_groups[$v['levelId2']]; - $map_groups[$v['levelId3']] && $levelName3 = $map_groups[$v['levelId3']]; + $bizName = $consultantName = '-'; $map_groups[$v['bizId']] && $bizName = $map_groups[$v['bizId']]; $map_user[$cfUserId] && $consultantName = $map_user[$cfUserId]; if ($sort != 'order' && $itemId) {//有商品id,区分订单 @@ -848,9 +885,14 @@ class GroupsStatistics extends BaseController $watchDuration = round($playDuration / $livePV); } } - $list[] = ['levelName1' => $levelName1, 'levelName2' => $levelName2, 'levelName3' => $levelName3, - 'bizName' => $bizName, 'consultantName' => $consultantName, 'browse' => $browse, + $list1 = []; + foreach ($levels as $k2 => $v2) { + $levelId = $v2['levelId']; + $list1[$v2['prop']] = $map_groups[$v[$levelId]] ? $map_groups[$v[$levelId]] : ''; + } + $list2 = ['bizName' => $bizName, 'consultantName' => $consultantName, 'browse' => $browse, 'subscribe' => $subscribe, 'watch' => $watch, 'order' => $order, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + $list[] = count($list1) ? array_merge($list1, $list2) : $list2; } } } @@ -858,7 +900,23 @@ class GroupsStatistics extends BaseController if ($limit == 10000) { return $list; } else { - return ['list' => $list, 'count' => $count]; + $columns = ''; + if ($page == 1) { + $columns1 = []; + foreach ($levels as $k => $v) { + $columns1[] = ['prop' => $v['prop'], 'label' => $v['label'], 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + $columns2 = [ + ['prop' => 'bizName', 'label' => '门店', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 120], + ['prop' => 'consultantName', 'label' => '顾问', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 90], + ['prop' => 'browse', 'label' => '浏览数(人)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 120, 'sortable' => 'custom'], + ['prop' => 'subscribe', 'label' => '预约数(人)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 120, 'sortable' => 'custom'], + ['prop' => 'watch', 'label' => '观看数(人)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 120, 'sortable' => 'custom'], + ['prop' => 'order', 'label' => '订单数(单)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 120, 'sortable' => 'custom'], + ]; + $columns = count($columns1) ? array_merge($columns1, $columns2) : $columns2; + } + return ['list' => $list, 'count' => $count, 'columns' => $columns]; } } @@ -872,10 +930,17 @@ class GroupsStatistics extends BaseController $itemId = intval($params['itemId']);//商品 $insiders = intval($params['insiders']);//内部人员 $groupsId = intval($params['groupsId']);//分组id + $levels = $params['levels']; !$page && $page = 1; !$limit && $limit = 10; $list = []; $count = 0; + if ($levels && count($levels)) { + foreach ($levels as $k => $v) { + $arr_unit = explode(',', $v); + $levels[$k] = ['label' => $arr_unit[0], 'prop' => "levelName{$arr_unit[1]}", 'levelId' => "levelId{$arr_unit[1]}"]; + } + } $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); if ($re) { $channelId = intval($re['channelId']); @@ -948,10 +1013,7 @@ class GroupsStatistics extends BaseController $cfUserId = intval($v['cfUserId']); $insiders = '否';//内部人员 $createTime = $browseTime = $subscribeTime = $liveTime = $playDuration = $livePV = ''; - $nickname = $consultantName = $levelName1 = $levelName2 = $levelName3 = $bizName = '-'; - $map_groups[$v['levelId1']] && $levelName1 = $map_groups[$v['levelId1']]; - $map_groups[$v['levelId2']] && $levelName2 = $map_groups[$v['levelId2']]; - $map_groups[$v['levelId3']] && $levelName3 = $map_groups[$v['levelId3']]; + $nickname = $consultantName = $bizName = '-'; $map_groups[$v['bizId']] && $bizName = $map_groups[$v['bizId']]; $map_user[$cfUserId] && $consultantName = $map_user[$cfUserId]['uname']; $user = $map_user[$userId]; @@ -977,17 +1039,41 @@ class GroupsStatistics extends BaseController $re_sum = $this->mdSyliveViewlog->sum('playDuration', ['userId' => $userId, 'activityId' => $activityId]); $re_sum['playDuration'] && $playDuration = ceil($re_sum['playDuration'] / 60); } - $list[] = ['nickname' => $nickname, 'createTime' => $createTime, 'browseTime' => $browseTime, 'subscribeTime' => $subscribeTime, - 'consultantName' => $consultantName, 'levelName1' => $levelName1, 'levelName2' => $levelName2 - , 'levelName3' => $levelName3, 'bizName' => $bizName, - 'liveTime' => $liveTime, 'livePV' => $livePV, 'playDuration' => $playDuration, 'insiders' => $insiders]; + $list1 = []; + foreach ($levels as $k2 => $v2) { + $levelId = $v2['levelId']; + $list1[$v2['prop']] = $map_groups[$v[$levelId]] ? $map_groups[$v[$levelId]] : ''; + } + $list2 = ['bizName' => $bizName, 'nickname' => $nickname, 'createTime' => $createTime, 'browseTime' => $browseTime, 'subscribeTime' => $subscribeTime, + 'liveTime' => $liveTime, 'livePV' => $livePV, 'playDuration' => $playDuration, 'insiders' => $insiders, 'consultantName' => $consultantName]; + $list[] = count($list1) ? array_merge($list1, $list2) : $list2; } } } if ($limit == 10000) { return $list; } else { - return ['list' => $list, 'count' => $count]; + $columns = ''; + if ($page == 1) { + $columns1 = []; + foreach ($levels as $k => $v) { + $columns1[] = ['prop' => $v['prop'], 'label' => $v['label'], 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + $columns2 = [ + ['prop' => 'bizName', 'label' => '门店', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 110], + ['prop' => 'nickname', 'label' => '昵称', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 80], + ['prop' => 'createTime', 'label' => '创建时间', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 90], + ['prop' => 'browseTime', 'label' => '首次浏览时间', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 90], + ['prop' => 'subscribeTime', 'label' => '预约时间', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 90], + ['prop' => 'liveTime', 'label' => '首次观看时间', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 90], + ['prop' => 'playDuration', 'label' => '观看时长(分)', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 80], + ['prop' => 'livePV', 'label' => '观看次数', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 80], + ['prop' => 'insiders', 'label' => '内部人员', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 80], + ['prop' => 'consultantName', 'label' => '归属顾问', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 80], + ]; + $columns = count($columns1) ? array_merge($columns1, $columns2) : $columns2; + } + return ['list' => $list, 'count' => $count, 'columns' => $columns]; } } diff --git a/market/controllers/api/sylive/GroupsWin.php b/market/controllers/api/sylive/GroupsWin.php index 27494b09..40cfcacf 100644 --- a/market/controllers/api/sylive/GroupsWin.php +++ b/market/controllers/api/sylive/GroupsWin.php @@ -80,6 +80,22 @@ class groupsWin extends BaseController $winType = $params['winType']; !$page && $page = 1; !$limit && $limit = 10; + $levels = []; + if ($page == 1) { + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'parentId' => 0, 'status>=' => 0]); + if ($re_gro['statisticsType']) { + $this->load->model('market/Market_sys_dictionary_data_model', 'mdSysDictionaryData'); + $res_dit = $this->mdSysDictionaryData->select(['status>=' => 0, 'dictId' => $re_gro['statisticsType']], 'sortNumber asc,dictDataId desc' + , 0, 0, 'dictDataCode,dictDataName'); + foreach ($res_dit as $k => $v) { + $groupsLevel = intval($v['dictDataCode']); + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'groupsLevel' => $groupsLevel, 'status>=' => 0]); + if ($re_gro) { + $levels[] = ['label' => $v['dictDataName'], 'prop' => "levelName{$groupsLevel}"]; + } + } + } + } $sort_order = 'winTime desc'; if ($sort && $order) { $sort_order = $sort . ' ' . $order; @@ -124,13 +140,22 @@ class groupsWin extends BaseController , 'levelId1' => $v['levelId1'], 'levelId2' => $v['levelId2'], 'levelId3' => $v['levelId3'] , 'bizId' => $v['bizId'], 'cfUserId' => $v['cfUserId']]); $winName = $winTypeAry[$v['winType']] ? $winTypeAry[$v['winType']] : ''; - $item = [ + $list1 = [ 'id' => $v['id'], 'sid' => $v['sid'], 'uname' => $v['uname'], 'mobile' => $v['mobile'], 'itemTitle' => $v['itemTitle'] , 'totalPrice' => $v['totalPrice'], 'payTime' => $v['payTime'] != '0000-00-00 00:00:00' ? $v['payTime'] : '' - , 'winTime' => $v['winTime'] ? $v['winTime'] : '', 'winName' => $winName - , 'levelName1' => $consultant['levelName1'], 'levelName2' => $consultant['levelName2'], 'levelName3' => $consultant['levelName3'] - , 'stores' => $consultant['stores'], 'consultant' => $consultant['consultant'] + , 'winTime' => $v['winTime'] ? $v['winTime'] : '', 'winName' => $winName, 'consultant' => $consultant['consultant'] ]; + if ($limit == 10000) { + unset($list1['id']); + } else { + unset($list1['sid']); + } + $list2 = []; + foreach ($levels as $k2 => $v2) { + $list2[$v2['prop']] = $consultant[$v2['prop']] ? $consultant[$v2['prop']] : ''; + } + $item = count($list2) ? array_merge($list1, $list2) : $list1; + $item['stores'] = $consultant['stores']; if ($limit == 10000) { $address = $biz = ''; $jsondata = $v['jsondata'] ? json_decode($v['jsondata'], true) : []; @@ -140,16 +165,43 @@ class groupsWin extends BaseController if ($jsondata['biz']) { $biz = $jsondata['biz']; } - $item['address'] = $address; $item['biz'] = $biz; + $item['address'] = $address; } $list[] = $item; } } if ($limit == 10000) { - return $list; + $columns1 = ['订单号', '姓名', '手机号', '商品标题', '订单价格', '付款时间', '中奖时间', '中奖类型', '顾问']; + $columns2 = []; + foreach ($levels as $k => $v) { + $columns2[] = $v['label']; + } + $columns3 = count($columns2) ? array_merge($columns1, $columns2) : $columns1; + $columns = array_merge($columns3, ['门店', '所选经销商', '地址']); + return ['list' => $list, 'columns' => $columns]; } else { - return ['list' => $list, 'count' => $count]; + $columns = ''; + if ($page == 1) { + $columns1 = [ + ['prop' => 'id', 'label' => 'ID', 'align' => 'center', 'showOverflowTooltip' => true, 'minWidth' => 45, 'fixed' => 'left'], + ['prop' => 'uname', 'label' => '姓名', 'showOverflowTooltip' => true, 'minWidth' => 60], + ['prop' => 'mobile', 'label' => '手机号', 'showOverflowTooltip' => true, 'minWidth' => 80], + ['prop' => 'itemTitle', 'label' => '商品标题', 'showOverflowTooltip' => true, 'minWidth' => 130], + ['prop' => 'totalPrice', 'label' => '订单价格', 'showOverflowTooltip' => true, 'minWidth' => 70, 'sortable' => 'custom'], + ['prop' => 'payTime', 'label' => '付款时间', 'showOverflowTooltip' => true, 'minWidth' => 100, 'sortable' => 'custom'], + ['prop' => 'winTime', 'label' => '中奖时间', 'showOverflowTooltip' => true, 'minWidth' => 100, 'sortable' => 'custom'], + ['prop' => 'winName', 'label' => '中奖类型', 'showOverflowTooltip' => true, 'minWidth' => 90], + ['prop' => 'consultant', 'label' => '顾问', 'showOverflowTooltip' => true, 'minWidth' => 60] + ]; + $columns2 = []; + foreach ($levels as $k => $v) { + $columns2[] = ['prop' => $v['prop'], 'label' => $v['label'], 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + $columns = count($columns2) ? array_merge($columns1, $columns2) : $columns1; + $columns[] = ['prop' => 'stores', 'label' => '门店', 'showOverflowTooltip' => true, 'minWidth' => 80]; + } + return ['list' => $list, 'count' => $count, 'columns' => $columns]; } }