diff --git a/api/controllers/plan/Temp.php b/api/controllers/plan/Temp.php index 25399d9c..686a9acb 100644 --- a/api/controllers/plan/Temp.php +++ b/api/controllers/plan/Temp.php @@ -16,6 +16,62 @@ class Temp extends HD_Controller $this->log_file = 'temp.log'; } + /** + * Notes:更新私域直播_用户门店 + * Created on: 2022/3/09 11:58 + * Created by: dengbw + * https://liche-api-dev.xiaoyu.com/plan/temp/market_sylive_user + * https://api.liche.cn/plan/temp/market_sylive_user + */ + public function market_sylive_user() + { + $this->load->model('market/Market_sylive_user_model', 'mdSyliveUser'); + $this->load->model('market/Market_sylive_organization_model', 'mdSyliveOrganization'); + $param = $this->input->get(); + $param['page'] = intval($param['page']); + $param['size'] = intval($param['size']); + !$param['size'] && $param['size'] = 100; + !$param['page'] && $param['page'] = 1; + $counts = intval($param['counts']); + ob_start(); //打开缓冲区 + $where = ["organizationId>" => 0]; + $res = $this->mdSyliveUser->select($where, 'userId ASC', $param['page'], $param['size'], 'userId,organizationId'); + if (!$res) { + echo '
本次更新用户门店完成了:'; + echo '

成功更新 ' . $counts . ' 条'; + echo '

点击将再次更新用户门店>>>'; + exit; + } + $log = []; + foreach ($res as $key => $v) { + $re = $this->mdSyliveOrganization->get(['organizationId' => $v['organizationId']] + , 'organizationId,organizationType,parentId'); + $bizId = 0; + if ($re) { + if ($re['organizationType'] == 4 && $re['parentId']) { + $bizId = $re['parentId']; + } else if ($re['organizationType'] == 3) { + $bizId = $re['organizationId']; + } + } + if ($bizId) { + $ret = $this->mdSyliveUser->update(['bizId' => $bizId], ['userId' => $v['userId']]); + if ($ret) { + $log[] = ['userId' => $v['userId'], 'bizId' => $bizId]; + $counts++; + } + } + } + echo '
成功更新:'; + if ($log) { + echo json_encode($log, JSON_UNESCAPED_UNICODE); + } + echo '

数据库获取:'; + echo json_encode($res, JSON_UNESCAPED_UNICODE); + header('refresh:3;url=/plan/temp/market_sylive_user?counts=' . $counts . '&size=' . $param['size'] . '&page=' . ($param['page'] + 1)); + ob_end_flush();//输出全部内容到浏览器 + } + /** * Notes:更新门店日志 * Created on: 2022/3/09 11:58 diff --git a/market/controllers/api/sylive/Activity.php b/market/controllers/api/sylive/Activity.php index f6c743b1..27ea4893 100644 --- a/market/controllers/api/sylive/Activity.php +++ b/market/controllers/api/sylive/Activity.php @@ -18,6 +18,7 @@ class Activity extends BaseController $this->load->model('market/Market_sylive_organization_model', 'mdSyliveOrganization'); $this->load->model('market/Market_sylive_team_model', 'mdSyliveTeam'); $this->load->model('market/Market_sylive_activity_team_model', 'mdSyliveActivityTeam'); + $this->load->model('market/Market_sylive_groups_model', 'mdSyliveGroups'); } /** @@ -44,10 +45,9 @@ class Activity extends BaseController if ($_SESSION['brandName']) {//品牌机构 $re_org = $this->mdSyliveOrganization->get(['organizationName' => $_SESSION['brandName'], 'parentId' => 0, 'status' => 0]); if ($re_org['organizationId']) { - $organizationIds = ",{$re_org['organizationId']},"; - $where['organizationIds LIKE "%' . $organizationIds . '%"'] = null; + $where['organizationId'] = $re_org['organizationId']; } else { - $where['organizationIds'] = '-1'; + $where['organizationId'] = -1; } } $count = $this->mdSyliveActivity->count($where); @@ -58,7 +58,7 @@ class Activity extends BaseController $dateRange = [$v['timeStart'], $v['timeEnd']]; $status = intval($v['status']); $activityId = intval($v['activityId']); - $bgImg = $channelImg = $banner = $sharePhoto = $shareImg = $shareTitle = $bizIds = $teamIds = $pay = []; + $bgImg = $channelImg = $banner = $sharePhoto = $shareImg = $shareTitle = $pay = $bottoms = []; $item = ['activityId' => $activityId, 'itemImg' => [], 'title' => '', 'introduction' => '', 'price' => '', 'stock' => '', 'dateRange' => '']; $coupon = ['activityId' => $activityId, 'img' => [], 'title' => '', 'rules' => '', 'price' => '', 'dateRange' => '']; $pay = ['way' => 1, 'price' => '', 'img' => []]; @@ -121,27 +121,30 @@ class Activity extends BaseController $shareImg[] = ['uid' => $k2, 'fileUrl' => $v2, 'url' => build_qiniu_image_url($v2), 'status' => 'done']; } } - $res_biz = $this->mdSyliveActivityBiz->select(['activityId' => $activityId, 'status' => 0], 'id desc', 0, 0, 'bizId'); - if ($res_biz) { - foreach ($res_biz as $k2 => $v2) { - $bizIds[] = intval($v2['bizId']); - } - } - $res_team = $this->mdSyliveActivityTeam->select(['activityId' => $activityId, 'status' => 0], 'id desc', 0, 0, 'teamId2'); - if ($res_team) { - foreach ($res_team as $k2 => $v2) { - $teamIds[] = intval($v2['teamId2']); + if ($jsondata['bottoms']) { + foreach ($jsondata['bottoms'] as $k2 => $v2) { + $icon = []; + if ($v2['icon']) { + $icon[] = ['uid' => $k2, 'fileUrl' => $v2['icon'], 'url' => build_qiniu_image_url($v2['icon']), 'status' => 'done']; + } + $v2['icon'] = $icon; + $bottoms[] = $v2; } } $skey = $this->myencryption->base64url_encode("a_id=" . $activityId); $url = http_host_com('home') . "/h5/market/sylive?skey=" . $skey;//活动连接 $serviceLink = $jsondata['serviceLink'] ? $jsondata['serviceLink'] : ''; + $activityStart = $v['activityStart'] != '0000-00-00 00:00:00' ? $v['activityStart'] : ''; + $organizationId = $v['organizationId'] ? intval($v['organizationId']) : ''; + $groups = 0; + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'parentId' => 0, 'status>=' => 0]); + $re_gro && $groups = 1; $list[] = [ - 'activityId' => $activityId, 'title' => $v['title'], 'channelId' => $v['channelId'], 'bizIds' => $bizIds, 'teamIds' => $teamIds, 'pay' => $pay, - 'introduction' => $v['introduction'], 'shareTitle' => $shareTitle, 'dateRange' => $dateRange, 'coupon' => $coupon, 'drawCode' => $v['drawCode'], + 'activityId' => $activityId, 'title' => $v['title'], 'channelId' => $v['channelId'], 'pay' => $pay, 'organizationId' => $organizationId, + 'activityStart' => $activityStart, 'shareTitle' => $shareTitle, 'dateRange' => $dateRange, 'coupon' => $coupon, 'drawCode' => $v['drawCode'], 'bgImg' => $bgImg, 'channelImg' => $channelImg, 'banner' => $banner, 'sharePhoto' => $sharePhoto, 'shareImg' => $shareImg, 'item' => $item, 'url' => $url, - 'mchId' => $v['mchId'], 'protocolTitle' => $v['protocolTitle'], 'protocol' => $v['protocol'], 'serviceLink' => $serviceLink - , 's_time' => $v['timeStart'], 'e_time' => $v['timeEnd'], 'status' => $status, 'createTime' => $v['createTime']]; + 'mchId' => $v['mchId'], 'protocolTitle' => $v['protocolTitle'], 'protocol' => $v['protocol'], 'serviceLink' => $serviceLink, 'bottoms' => $bottoms + , 's_time' => $v['timeStart'], 'e_time' => $v['timeEnd'], 'status' => $status, 'groups' => $groups, 'createTime' => $v['createTime']]; } } $date = ['list' => $list, 'count' => $count]; @@ -158,14 +161,12 @@ class Activity extends BaseController $title = $this->input_param('title'); $channelId = $this->input_param('channelId'); $dateRange = $this->input_param('dateRange'); - $introduction = $this->input_param('introduction'); $shareTitle = $this->input_param('shareTitle'); $shareImg = $this->input_param('shareImg'); $bgImg = $this->input_param('bgImg'); $channelImg = $this->input_param('channelImg'); $sharePhoto = $this->input_param('sharePhoto'); - $bizIds = $this->input_param('bizIds'); - $teamIds = $this->input_param('teamIds'); + $organizationId = intval($this->input_param('organizationId')); $pay = $this->input_param('pay'); $drawCode = $this->input_param('drawCode'); $banner = $this->input_param('banner'); @@ -173,6 +174,8 @@ class Activity extends BaseController $protocolTitle = $this->input_param('protocolTitle'); $protocol = $this->input_param('protocol'); $serviceLink = $this->input_param('serviceLink'); + $activityStart = $this->input_param('activityStart'); + $bottoms = $this->input_param('bottoms'); if (!$title) { $this->return_json('请输入活动标题'); } @@ -191,9 +194,6 @@ class Activity extends BaseController $this->return_json('抽奖码已存在'); } } -// if (!$introduction) { -// $this->return_json('请输入活动简介'); -// } $bgImg = $bgImg[0]['fileUrl']; $sharePhoto = $sharePhoto ? $sharePhoto[0]['fileUrl'] : ''; $channelImg = $channelImg ? $channelImg[0]['fileUrl'] : ''; @@ -214,59 +214,32 @@ class Activity extends BaseController $jsondata['pay'] = $pay; $jsondata['banner'] = $banner; $jsondata['serviceLink'] = $serviceLink; + $setBottoms = []; + foreach ($bottoms as $v) { + if ($v['urlType'] == 'link') { + $v['miniProgramId'] = ''; + } + $v['icon'] = $v['icon'][0]['fileUrl'] ? $v['icon'][0]['fileUrl'] : ''; + $setBottoms[] = $v; + } + $jsondata['bottoms'] = $setBottoms; $jsondata = json_encode($jsondata, JSON_UNESCAPED_UNICODE); + $createTime = date('Y-m-d H:i:s'); $addDate = ['title' => $title, 'bgImg' => $bgImg, 'channelImg' => $channelImg, 'channelId' => $channelId, 'jsondata' => $jsondata - , 'introduction' => $introduction, 'shareTitle' => $shareTitle, 'sharePhoto' => $sharePhoto, 'shareImg' => $setShareImg - , 'drawCode' => $drawCode, 'mchId' => $mchId, 'protocolTitle' => $protocolTitle, 'protocol' => $protocol - , 'timeStart' => $dateRange[0], 'timeEnd' => $dateRange[1], 'status' => 1, 'createTime' => date('Y-m-d H:i:s')]; + , 'shareTitle' => $shareTitle, 'sharePhoto' => $sharePhoto, 'shareImg' => $setShareImg, 'organizationId' => $organizationId + , 'drawCode' => $drawCode, 'mchId' => $mchId, 'protocolTitle' => $protocolTitle, 'protocol' => $protocol, 'activityStart' => $activityStart + , 'timeStart' => $dateRange[0], 'timeEnd' => $dateRange[1], 'status' => 1, 'createTime' => $createTime]; $activityId = $this->mdSyliveActivity->add($addDate); if (!$activityId) { $this->return_json('添加活动失败'); } - $organizationIds = $add_biz = $add_team = []; - if ($bizIds) { - $bizIds = implode(',', $bizIds); - $res_org = $this->mdSyliveOrganization->select(["organizationId in({$bizIds})" => null, 'organizationType' => 3] - , 'organizationId desc', 0, 0, 'organizationId,parentId'); - if ($res_org) { - $this->mdSyliveActivityBiz->update(['status' => -1], ["bizId not in({$bizIds})" => null, 'activityId' => $activityId, 'status' => 0]); - foreach ($res_org as $v) { - $add_biz[] = ['activityId' => $activityId, 'areaId' => $v['parentId'] - , 'bizId' => $v['organizationId'], 'createTime' => date('Y-m-d H:i:s')]; - if ($v['parentId']) { - $re_org = $this->mdSyliveOrganization->get(["organizationId" => $v['parentId']]); - if ($re_org['parentId'] && !in_array($re_org['parentId'], $organizationIds)) { - $organizationIds[] = $re_org['parentId'];//所属机构 - } - } - } - //增加活动商家 - $add_biz && $this->mdSyliveActivityBiz->add_batch($add_biz); + if ($organizationId) { + $re = $this->mdSyliveOrganization->get(['organizationId' => $organizationId, 'status' => 0]); + if ($re['organizationName']) {//加顶级分组 + $this->mdSyliveGroups->add(['groupsName' => $re['organizationName'], 'activityId' => $activityId, + 'statisticsType' => 4, 'createTime' => $createTime]); } } - if ($teamIds) { - $teamIds = implode(',', $teamIds); - $res_org = $this->mdSyliveTeam->select(["teamId in({$teamIds})" => null, 'teamType' => 2], 'teamId desc', 0, 0, 'teamId,parentId'); - if ($res_org) { - $this->mdSyliveActivityTeam->update(['status' => -1], ["teamId2 not in({$teamIds})" => null, 'activityId' => $activityId, 'status' => 0]); - foreach ($res_org as $v) { - $add_team[] = ['activityId' => $activityId, 'teamId1' => $v['parentId'] - , 'teamId2' => $v['teamId'], 'createTime' => date('Y-m-d H:i:s')]; - if ($v['parentId']) { - $re_team = $this->mdSyliveTeam->get(["teamId" => $v['parentId']]); - if ($re_team['organizationId'] && !in_array($re_team['organizationId'], $organizationIds)) { - $organizationIds[] = $re_team['organizationId']; - } - } - } - //增加活动商家 - $add_team && $this->mdSyliveActivityTeam->add_batch($add_team); - } - } - if ($organizationIds) {//所属机构 - $organizationIds = ',' . implode(',', $organizationIds) . ','; - $this->mdSyliveActivity->update(['organizationIds' => $organizationIds], ['activityId' => $activityId]); - } $this->return_response(); } @@ -299,14 +272,11 @@ class Activity extends BaseController $title = $this->input_param('title'); $channelId = $this->input_param('channelId'); $dateRange = $this->input_param('dateRange'); - $introduction = $this->input_param('introduction'); $shareTitle = $this->input_param('shareTitle'); $shareImg = $this->input_param('shareImg'); $bgImg = $this->input_param('bgImg'); $channelImg = $this->input_param('channelImg'); $sharePhoto = $this->input_param('sharePhoto'); - $bizIds = $this->input_param('bizIds'); - $teamIds = $this->input_param('teamIds'); $pay = $this->input_param('pay'); $drawCode = $this->input_param('drawCode'); $banner = $this->input_param('banner'); @@ -314,6 +284,9 @@ class Activity extends BaseController $protocolTitle = $this->input_param('protocolTitle'); $protocol = $this->input_param('protocol'); $serviceLink = $this->input_param('serviceLink'); + $organizationId = intval($this->input_param('organizationId')); + $activityStart = $this->input_param('activityStart'); + $bottoms = $this->input_param('bottoms'); if (!$activityId) { $this->return_json('参数错误'); } @@ -341,60 +314,6 @@ class Activity extends BaseController } } } - $organizationIds = $add_biz = $add_team = []; - if ($bizIds) { - $bizIds = implode(',', $bizIds); - $res_org = $this->mdSyliveOrganization->select(["organizationId in({$bizIds})" => null, 'organizationType' => 3] - , 'organizationId desc', 0, 0, 'organizationId,parentId'); - if ($res_org) { - $this->mdSyliveActivityBiz->update(['status' => -1], ["bizId not in({$bizIds})" => null, 'activityId' => $activityId, 'status' => 0]); - foreach ($res_org as $v) { - $re_org = $this->mdSyliveActivityBiz->get(['activityId' => $activityId, 'bizId' => $v['organizationId']]); - if (!$re_org) { - $add_biz[] = ['activityId' => $activityId, 'areaId' => $v['parentId'] - , 'bizId' => $v['organizationId'], 'createTime' => date('Y-m-d H:i:s')]; - } else if ($re_org['status'] == -1) { - $this->mdSyliveActivityBiz->update(['status' => 0], ['id' => $re_org['id']]); - } - if ($v['parentId']) { - $re_org = $this->mdSyliveOrganization->get(["organizationId" => $v['parentId']]); - if ($re_org['parentId'] && !in_array($re_org['parentId'], $organizationIds)) { - $organizationIds[] = $re_org['parentId'];//所属机构 - } - } - } - //增加活动商家 - $add_biz && $this->mdSyliveActivityBiz->add_batch($add_biz); - } - } else { - $this->mdSyliveActivityBiz->update(['status' => -1], ['activityId' => $activityId, 'status' => 0]); - } - if ($teamIds) { - $teamIds = implode(',', $teamIds); - $res_org = $this->mdSyliveTeam->select(["teamId in({$teamIds})" => null, 'teamType' => 2], 'teamId desc', 0, 0, 'teamId,parentId'); - if ($res_org) { - $this->mdSyliveActivityTeam->update(['status' => -1], ["teamId2 not in({$teamIds})" => null, 'activityId' => $activityId, 'status' => 0]); - foreach ($res_org as $v) { - $re_org = $this->mdSyliveActivityTeam->get(['activityId' => $activityId, 'teamId2' => $v['teamId']]); - if (!$re_org) { - $add_team[] = ['activityId' => $activityId, 'teamId1' => $v['parentId'] - , 'teamId2' => $v['teamId'], 'createTime' => date('Y-m-d H:i:s')]; - } else if ($re_org['status'] == -1) { - $this->mdSyliveActivityTeam->update(['status' => 0], ['id' => $re_org['id']]); - } - if ($v['parentId']) { - $re_team = $this->mdSyliveTeam->get(["teamId" => $v['parentId']]); - if ($re_team['organizationId'] && !in_array($re_team['organizationId'], $organizationIds)) { - $organizationIds[] = $re_team['organizationId']; - } - } - } - //增加活动商家 - $add_team && $this->mdSyliveActivityTeam->add_batch($add_team); - } - } else { - $this->mdSyliveActivityTeam->update(['status' => -1], ['activityId' => $activityId, 'status' => 0]); - } $bgImg = $bgImg[0]['fileUrl']; $sharePhoto = $sharePhoto ? $sharePhoto[0]['fileUrl'] : ''; $channelImg = $channelImg ? $channelImg[0]['fileUrl'] : ''; @@ -416,12 +335,20 @@ class Activity extends BaseController $jsondata['pay'] = $pay; $jsondata['banner'] = $banner; $jsondata['serviceLink'] = $serviceLink; + $setBottoms = []; + foreach ($bottoms as $v) { + if ($v['urlType'] == 'link') { + $v['miniProgramId'] = ''; + } + $v['icon'] = $v['icon'][0]['fileUrl'] ? $v['icon'][0]['fileUrl'] : ''; + $setBottoms[] = $v; + } + $jsondata['bottoms'] = $setBottoms; $jsondata = json_encode($jsondata, JSON_UNESCAPED_UNICODE); - $organizationIds = $organizationIds ? ',' . implode(',', $organizationIds) . ',' : ''; - $upDate = ['title' => $title, 'bgImg' => $bgImg, 'channelImg' => $channelImg, 'channelId' => $channelId, 'introduction' => $introduction, + $upDate = ['title' => $title, 'bgImg' => $bgImg, 'channelImg' => $channelImg, 'channelId' => $channelId, 'activityStart' => $activityStart, 'shareTitle' => $shareTitle, 'sharePhoto' => $sharePhoto, 'shareImg' => $setShareImg, 'jsondata' => $jsondata, 'drawCode' => $drawCode, 'mchId' => $mchId, 'protocolTitle' => $protocolTitle, 'protocol' => $protocol, - 'timeStart' => $dateRange[0], 'timeEnd' => $dateRange[1], 'organizationIds' => $organizationIds]; + 'timeStart' => $dateRange[0], 'timeEnd' => $dateRange[1], 'organizationId' => $organizationId]; $this->mdSyliveActivity->update($upDate, ['activityId' => $activityId]); $this->return_response(); } diff --git a/market/controllers/api/sylive/Groups.php b/market/controllers/api/sylive/Groups.php index c4cfc746..5c152b14 100644 --- a/market/controllers/api/sylive/Groups.php +++ b/market/controllers/api/sylive/Groups.php @@ -27,16 +27,18 @@ class Groups extends BaseController $unGroupsType = $this->input_param('unGroupsType'); $where['status>='] = 0; $activityId && $where['activityId'] = $activityId; - $unGroupsType && $where['groupsType<>'] = $unGroupsType; + $unGroupsType && $where['groupsLevel<>'] = $unGroupsType; $sort_order = 'sortNumber asc,groupsId desc'; - $fileds = 'activityId,groupsId,parentId,sortNumber,userFrom,groupsName,groupsType'; + $fileds = 'activityId,groupsId,parentId,sortNumber,userFrom,groupsName,ifBiz,statisticsType'; $res = $this->mdSyliveGroups->select($where, $sort_order, 0, 0, $fileds); foreach ($res as $k => $v) { $res[$k]['activityId'] = intval($v['activityId']); $res[$k]['groupsId'] = intval($v['groupsId']); + $res[$k]['userFrom'] = intval($v['userFrom']); $res[$k]['parentId'] = intval($v['parentId']); $res[$k]['sortNumber'] = intval($v['sortNumber']); - $res[$k]['userFrom'] = intval($v['userFrom']); + $res[$k]['ifBiz'] = intval($v['ifBiz']); + $res[$k]['statisticsType'] = $v['statisticsType'] ? intval($v['statisticsType']) : ''; } $this->return_response_list($res); } @@ -66,28 +68,31 @@ class Groups extends BaseController $activityId = intval($this->input_param('activityId')); $parentId = intval($this->input_param('parentId')); $groupsName = $this->input_param('groupsName'); - $groupsType = $this->input_param('groupsType'); $userFrom = intval($this->input_param('userFrom')); $sortNumber = intval($this->input_param('sortNumber')); + $ifBiz = intval($this->input_param('ifBiz')); + $statisticsType = intval($this->input_param('statisticsType')); if (!$groupsName) { $this->return_json('请输入分组名称'); } - if (!$groupsType) { - $this->return_json('请选择分组类型'); - } - if ($parentId) {//判断上级分组是不是门店类型 + $groupsLevel = 0; + if ($parentId) {//判断上级分组 $re_org = $this->mdSyliveGroups->get(['groupsId' => $parentId]); - if ($re_org['groupsType'] == 4) { - $this->return_json('选择的上级分组不能保存,请重新选择'); + if ($re_org['ifBiz']) { + $userFrom = $re_org['userFrom'] == 0 ? '门店' : '团队'; + $this->return_json("选择的上级分组{$userFrom}不能保存,请重新选择"); } + $re_org['groupsLevel'] == 3 && $ifBiz = 1;//如果上级等级3级,当前分组设为门店 + !$ifBiz && $groupsLevel = $re_org['groupsLevel'] + 1; } else { $re_org = $this->mdSyliveGroups->get(['parentId' => $parentId]); if ($re_org) { $this->return_json('请选择上级分组'); } } - $addDate = ['activityId' => $activityId, 'parentId' => $parentId, 'groupsName' => $groupsName, 'groupsType' => $groupsType, 'userFrom' => $userFrom, - 'sortNumber' => $sortNumber, 'createTime' => date('Y-m-d H:i:s')]; + $addDate = ['activityId' => $activityId, 'parentId' => $parentId, 'groupsName' => $groupsName, 'groupsLevel' => $groupsLevel, + 'statisticsType' => $statisticsType, 'userFrom' => $userFrom, 'ifBiz' => $ifBiz, 'sortNumber' => $sortNumber + , 'createTime' => date('Y-m-d H:i:s')]; $id = $this->mdSyliveGroups->add($addDate); if (!$id) { $this->return_json('添加分组失败'); @@ -102,34 +107,45 @@ class Groups extends BaseController */ public function index_put() { + $activityId = intval($this->input_param('activityId')); $groupsId = intval($this->input_param('groupsId')); $parentId = intval($this->input_param('parentId')); $groupsName = $this->input_param('groupsName'); - $groupsType = $this->input_param('groupsType'); - $userFrom = $this->input_param('userFrom'); + $userFrom = intval($this->input_param('userFrom')); $sortNumber = intval($this->input_param('sortNumber')); + $ifBiz = intval($this->input_param('ifBiz')); + $statisticsType = intval($this->input_param('statisticsType')); if (!$groupsId) { $this->return_json('参数错误'); } if (!$groupsName) { $this->return_json('请输入分组名称'); } - if (!$groupsType) { - $this->return_json('请选择分组类型'); - } - if ($parentId) {//判断上级分组是不是门店类型 - $re_org = $this->mdSyliveGroups->get(['groupsId' => $parentId]); - if ($re_org['groupsType'] == 4) { - $this->return_json('选择的上级分组不能保存,请重新选择'); + $re_gro = $this->mdSyliveGroups->get(['groupsId' => $groupsId]); + if ($re_gro && $re_gro['parentId'] != $parentId) { + $this->load->model('market/Market_sylive_groups_user_model', 'mdSyliveGroupsUser'); + $re_user = $this->mdSyliveGroupsUser->get(['groupsId' => $groupsId, 'activityId' => $re_gro['activityId']]); + if ($re_user) { + $this->return_json('此分组已有用户,不能修改上级分组'); } + } + $groupsLevel = 0; + if ($parentId) {//判断上级分组 + $re_org = $this->mdSyliveGroups->get(['groupsId' => $parentId]); + if ($re_org['ifBiz']) { + $userFrom = $re_org['userFrom'] == 0 ? '门店' : '团队'; + $this->return_json("选择的上级分组{$userFrom}不能保存,请重新选择"); + } + $re_org['groupsLevel'] == 3 && $ifBiz = 1;//如果上级等级3级,当前分组设为门店 + !$ifBiz && $groupsLevel = $re_org['groupsLevel'] + 1; } else { - $re_org = $this->mdSyliveGroups->get(['parentId' => $parentId]); + $re_org = $this->mdSyliveGroups->get(['parentId' => $parentId, 'activityId' => $activityId]); if ($re_org && $groupsId != $re_org['groupsId']) { $this->return_json('请选择上级分组'); } } - $upDate = ['parentId' => $parentId, 'groupsName' => $groupsName, 'groupsType' => $groupsType, - 'userFrom' => $userFrom, 'sortNumber' => $sortNumber]; + $upDate = ['parentId' => $parentId, 'groupsName' => $groupsName, 'groupsLevel' => $groupsLevel, + 'statisticsType' => $statisticsType, 'userFrom' => $userFrom, 'ifBiz' => $ifBiz, 'sortNumber' => $sortNumber]; $this->mdSyliveGroups->update($upDate, ['groupsId' => $groupsId]); $this->return_response(); } diff --git a/market/controllers/api/sylive/GroupsStatistics.php b/market/controllers/api/sylive/GroupsStatistics.php new file mode 100644 index 00000000..977ef78e --- /dev/null +++ b/market/controllers/api/sylive/GroupsStatistics.php @@ -0,0 +1,682 @@ +load->model('market/Market_sylive_groups_model', 'mdSyliveGroups'); + $this->load->model('market/Market_sylive_groups_user_model', 'mdSyliveGroupsUser'); + $this->load->model('market/Market_sylive_user_model', 'mdSyliveUser'); + $this->load->model('market/Market_sylive_activity_kpidata_model', 'mdSyliveActivityKpidata'); + $this->load->model('market/Market_sylive_activity_model', 'mdSyliveActivity'); + $this->load->model('market/Market_sylive_order_model', 'mdSyliveOrder'); + $this->load->model('market/Market_sylive_items_model', 'mdSyliveItems'); + $this->load->model('market/Market_sylive_viewlog_model', 'mdSyliveViewlog'); + $this->load->model('live/Live_polyv_session_model', 'mdPolyvSession'); + } + + /** + * Notes:分组数据统计主页 + * Created on: 2022/12/05 14:48 + * Created by: dengbw + */ + public function index_get($activityId = null) + { + $activityId = intval($activityId); + if (!$activityId) { + $this->return_json('参数错误'); + } + $title = ''; + $activityData1 = $activityData2 = $areaAry = $funnel = $allOrganizationIds = $levelData = []; + $days[] = ['name' => '全部日期', 'value' => '']; + $goods[] = ['name' => '全部订单', 'value' => '']; + $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); + if ($re) { + $res_item = $this->mdSyliveItems->select(['status>=' => 0, 'activityId' => $activityId], 'sort asc,itemId desc' + , 0, 0, 'itemId,title'); + foreach ($res_item as $k => $v) { + $goods[] = ['name' => $v['title'], 'value' => intval($v['itemId'])]; + } + if ($re['timeEnd'] != '0000-00-00 00:00:00') { + $timeEnd = date("Y-m-d", strtotime($re['timeEnd'])); + for ($i = 6; $i >= 0; $i--) { + $day = date("Y-m-d", strtotime("$timeEnd -{$i} day")); + $days[] = ['name' => $day, 'value' => $day]; + } + } + $title = $re['title']; + $channelId = $re['channelId']; + $browse = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'browse']); + $subscribe = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'subscribe']); + $watch = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'watch']); + $order = $this->mdSyliveOrder->count(['activityId' => $activityId, 'status' => 1]); + $duration_min = $livePV = $liveUV = $watchDuration = $watchDuration = $pvDuration = 0; + if ($channelId) { + $re_duration = $this->mdPolyvSession->sum('duration', ['channelId' => $channelId]); + if ($re_duration['duration']) { + $re_livePV = $this->mdPolyvSession->sum('livePV', ['channelId' => $channelId]); + $re_liveUV = $this->mdPolyvSession->sum('liveUV', ['channelId' => $channelId]); + $livePV = $re_livePV['livePV']; + $liveUV = $re_liveUV['liveUV']; + $re_totalPlayDuration = $this->mdPolyvSession->sum('totalPlayDuration', ['channelId' => $channelId]); + $duration_min = round($re_duration['duration'] / 60); + $totalPlayDuration_min = round($re_totalPlayDuration['totalPlayDuration'] / 60); + $watchDuration = round($totalPlayDuration_min / $liveUV); + $pvDuration = round($livePV / $liveUV, 1); + } + } + $consultant = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId], 'cfUserId'); + $allConsultant = $this->mdSyliveGroupsUser->count(['activityId' => $activityId, 'status>=' => 0]); + $consultant > $allConsultant && $allConsultant = $consultant; + $bizs = $this->mdSyliveGroups->count(['activityId' => $activityId, 'ifBiz' => 1, 'status>=' => 0]); + $activityData1 = [['name' => '参与门店数', 'value' => $bizs] + , ['name' => '参与/全部顾问数', 'value' => $consultant . '/' . $allConsultant]]; + $watch_un = 0; + if ($liveUV) { + $watch_un = $watch - $liveUV; + $watch_un < 0 && $watch_un = 0; + } + $activityData2 = [['name' => '浏览数(人)', 'value' => $browse, 'url' => ''], ['name' => '预约数(人)', 'value' => $subscribe, 'url' => ''] + , ['name' => '订单数(单)', 'value' => $order, 'url' => ''], ['name' => '有效观看(人)', 'value' => $liveUV, 'url' => ''], ['name' => '无效观看(人)', 'value' => $watch_un, 'url' => ''] + , ['name' => '直播时长(分)', 'value' => $duration_min, 'url' => ''], ['name' => '观看数(人次)', 'value' => $livePV, 'url' => ''] + , ['name' => '人均观看(分)', 'value' => $watchDuration, 'url' => ''], ['name' => '人均观看(次)', 'value' => $pvDuration, 'url' => '']]; + } + $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) { + $levelData[] = ['title' => $v['dictDataName'].'统计', 'value' => $groupsLevel]; + } + } + } + $data = ['activityId' => $activityId, 'title' => $title, 'activityData1' => ['list' => $activityData1, 'style' => 'width: 50%'] + , 'activityData2' => ['list' => $activityData2, 'style' => 'width: 11.1%'], 'tableData' => ['days' => $days, 'goods' => $goods] + , 'levelData' => $levelData + ]; + $this->return_response($data); + } + + /** + * Notes:分组等级数据统计 + * Created on: 2022/12/5 17:50 + * Created by: dengbw + */ + public function level_get() + { + $activityId = intval($this->input_param('activityId')); + $sort = $this->input_param('sort'); + $order = $this->input_param('order'); + $day = $this->input_param('day');//日期 + $itemId = intval($this->input_param('itemId'));//商品 + $groupsLevel = intval($this->input_param('level'));//等级 + $levelId = "levelId" . $groupsLevel; + $list = []; + $count = 0; + $page = 1; + $limit = 50; + $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); + if ($re) { + $channelId = intval($re['channelId']); + !$sort && $sort = 'browse'; + !$order && $order = 'desc'; + if ($sort == 'order' && !$day) { + $sort_order = 'orderTotal ' . $order; + } else { + $sort_order = $sort . ' ' . $order; + } + if ($day) {//按天搜索 + $createTimeStart = strtotime($day . ' 00:00:00'); + $createTimeEnd = strtotime($day . ' 23:59:59'); + $where = $where_order = $where_sort = ['activityId' => $activityId, 'day' => $day, "$levelId>" => 0, 'kpi' => $sort]; + if ($sort == 'order') { + $itemId && $where['itemId'] = $itemId; + } + $count = $this->mdSyliveActivityKpidata->count($where, $levelId); + if ($count) { + $res = $this->mdSyliveActivityKpidata->select_groupby($levelId, $where, "total {$order},id desc", $page, $limit, "$levelId,count(id) as total"); + foreach ($res as $v) { + $groupsId = intval($v[$levelId]); + $re_gro = $this->mdSyliveGroups->get(['groupsId' => $groupsId, 'activityId' => $activityId, 'status>=' => 0]); + $groupsName = $re_gro ? $re_gro['groupsName'] : '-'; + $where_sort[$levelId] = $groupsId; + if ($sort == 'browse') { + $browse = $v['total']; + } else { + $where_sort['kpi'] = 'browse'; + $browse = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'subscribe') { + $subscribe = $v['total']; + } else { + $where_sort['kpi'] = 'subscribe'; + $subscribe = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'watch') { + $watch = $v['total']; + } else { + $where_sort['kpi'] = 'watch'; + $watch = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'order') { + $orderTotal = $v['total']; + } else { + $where_order['kpi'] = 'order'; + $where_order[$levelId] = $groupsId; + $itemId && $where_order['itemId'] = $itemId; + $orderTotal = $this->mdSyliveActivityKpidata->count($where_order); + } + $consultant = $this->mdSyliveActivityKpidata->count([$levelId => $groupsId, 'activityId' => $activityId], 'cfUserId'); + $allConsultant = $this->mdSyliveGroupsUser->count([$levelId => $groupsId, 'activityId' => $activityId, 'status>=' => 0]); + $consultant > $allConsultant && $allConsultant = $consultant; + $livePV = $watchDuration = 0; + if ($channelId) { + $livePV = $this->mdSyliveViewlog->count([$levelId => $groupsId, 'activityId' => $activityId + , 'createTime>=' => $createTimeStart, 'createTime<=' => $createTimeEnd]); + $re_sum = $this->mdSyliveViewlog->sum('playDuration', [$levelId => $groupsId, 'activityId' => $activityId + , 'createTime>=' => $createTimeStart, 'createTime<=' => $createTimeEnd]); + if ($re_sum['playDuration']) { + $playDuration = ceil($re_sum['playDuration'] / 60); + $watchDuration = round($playDuration / $livePV); + } + } + $biz = $this->getBiz($groupsId); + $list[] = [ + 'groupsName' => $groupsName, 'biz' => $biz, 'consultant' => $consultant, 'allConsultant' => $allConsultant, 'browse' => $browse, 'subscribe' => $subscribe + , 'watch' => $watch, 'order' => $orderTotal, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + } + } + } else { + if ($sort == 'order' && $itemId) {//有订单排序与商品id,区分订单搜索 + $where = ['activityId' => $activityId, 'itemId' => $itemId, "$levelId>" => 0, 'kpi' => $sort]; + $count = $this->mdSyliveActivityKpidata->count($where, 'bizId'); + } else { + $where = ['activityId' => $activityId, 'status>=' => 0, 'groupsLevel' => $groupsLevel]; + $count = $this->mdSyliveGroups->count($where); + } + if ($count) { + if ($sort == 'order' && $itemId) {//有订单排序与商品id,区分订单搜索 + $res = $this->mdSyliveActivityKpidata->select_groupby($levelId, $where, "orderTotal {$order},id desc" + , $page, $limit, "$levelId,count(id) as orderTotal"); + } else { + $res = $this->mdSyliveGroups->select($where, "{$sort_order},groupsId desc", $page, $limit, + 'groupsId,groupsName,browse,subscribe,watch,orderTotal'); + } + foreach ($res as $v) { + if ($sort == 'order' && $itemId) {//只改变订单数值,其它不变 + $groupsId = intval($v[$levelId]); + $re_gro = $this->mdSyliveGroups->get(['groupsId' => $groupsId, 'activityId' => $activityId, 'status>=' => 0]); + $groupsName = $re_gro ? $re_gro['groupsName'] : '-'; + $v['browse'] = intval($re_gro['browse']); + $v['subscribe'] = intval($re_gro['subscribe']); + $v['watch'] = intval($re_gro['watch']); + } else { + $groupsId = intval($v['groupsId']); + $groupsName = $v['groupsName'] ? $v['groupsName'] : '-'; + } + $consultant = $this->mdSyliveActivityKpidata->count([$levelId => $groupsId, 'activityId' => $activityId], 'cfUserId'); + $allConsultant = $this->mdSyliveGroupsUser->count([$levelId => $groupsId, 'activityId' => $activityId, 'status>=' => 0]); + $consultant > $allConsultant && $allConsultant = $consultant; + $livePV = $watchDuration = 0; + if ($channelId) { + $livePV = $this->mdSyliveViewlog->count([$levelId => $groupsId, 'activityId' => $activityId]); + $re_sum = $this->mdSyliveViewlog->sum('playDuration', [$levelId => $groupsId, 'activityId' => $activityId]); + if ($re_sum['playDuration']) { + $playDuration = ceil($re_sum['playDuration'] / 60); + $watchDuration = round($playDuration / $livePV); + } + } + if ($sort != 'order' && $itemId) {//有商品id,区分订单 + $order = $this->mdSyliveActivityKpidata->count(['kpi' => 'order', $levelId => $groupsId, 'itemId' => $itemId, 'activityId' => $activityId]); + } else { + $order = $v['orderTotal']; + } + $biz = $this->getBiz($groupsId); + $list[] = [ + 'groupsName' => $groupsName, 'biz' => $biz, 'consultant' => $consultant, 'allConsultant' => $allConsultant, 'browse' => $v['browse'], 'subscribe' => $v['subscribe'] + , 'watch' => $v['watch'], 'order' => $order, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + } + } + } + } + $date = ['list' => $list, 'count' => $count]; + $this->return_response_list($date); + } + + /** + * Notes:分组门店统计 + * Created on: 2022/12/05 14:48 + * Created by: dengbw + */ + public function biz_get() + { + $activityId = intval($this->input_param('activityId')); + $page = $this->input_param('page'); + $limit = $this->input_param('limit'); + $sort = $this->input_param('sort'); + $order = $this->input_param('order'); + $day = $this->input_param('day'); + $itemId = intval($this->input_param('itemId'));//商品 + !$page && $page = 1; + !$limit && $limit = 10; + $list = []; + $count = 0; + $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); + if ($re) { + $channelId = intval($re['channelId']); + !$sort && $sort = 'browse'; + !$order && $order = 'desc'; + if ($sort == 'order' && !$day) { + $sort_order = 'orderTotal ' . $order; + } else { + $sort_order = $sort . ' ' . $order; + } + if ($day) {//按天搜索 + $createTimeStart = strtotime($day . ' 00:00:00'); + $createTimeEnd = strtotime($day . ' 23:59:59'); + $where = $where_order = $where_sort = ['activityId' => $activityId, 'day' => $day, 'bizId>' => 0, 'kpi' => $sort]; + if ($sort == 'order') { + $itemId && $where['itemId'] = $itemId; + } + $count = $this->mdSyliveActivityKpidata->count($where, 'bizId'); + if ($count) { + $res = $this->mdSyliveActivityKpidata->select_groupby('bizId', $where, "total {$order},id desc", $page, $limit, "bizId,count(id) as total"); + foreach ($res as $v) { + $bizId = intval($v['bizId']); + $re_biz = $this->mdSyliveGroups->get(['groupsId' => $bizId, 'activityId' => $activityId, 'status>=' => 0]); + $bizName = $re_biz ? $re_biz['groupsName'] : '-'; + $where_sort['bizId'] = $bizId; + if ($sort == 'browse') { + $browse = $v['total']; + } else { + $where_sort['kpi'] = 'browse'; + $browse = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'subscribe') { + $subscribe = $v['total']; + } else { + $where_sort['kpi'] = 'subscribe'; + $subscribe = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'watch') { + $watch = $v['total']; + } else { + $where_sort['kpi'] = 'watch'; + $watch = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'order') { + $orderTotal = $v['total']; + } else { + $where_order['kpi'] = 'order'; + $where_order['bizId'] = $bizId; + $itemId && $where_order['itemId'] = $itemId; + $orderTotal = $this->mdSyliveActivityKpidata->count($where_order); + } + $consultant = $this->mdSyliveActivityKpidata->count(['bizId' => $bizId, 'activityId' => $activityId], 'cfUserId'); + $allConsultant = $this->mdSyliveGroupsUser->count(['bizId' => $bizId, 'activityId' => $activityId, 'status>=' => 0]); + $consultant > $allConsultant && $allConsultant = $consultant; + $livePV = $watchDuration = 0; + if ($channelId) { + $livePV = $this->mdSyliveViewlog->count(['bizId' => $bizId, 'activityId' => $activityId + , 'createTime>=' => $createTimeStart, 'createTime<=' => $createTimeEnd]); + $re_sum = $this->mdSyliveViewlog->sum('playDuration', ['bizId' => $bizId, 'activityId' => $activityId + , 'createTime>=' => $createTimeStart, 'createTime<=' => $createTimeEnd]); + if ($re_sum['playDuration']) { + $playDuration = ceil($re_sum['playDuration'] / 60); + $watchDuration = round($playDuration / $livePV); + } + } + $list[] = [ + 'bizName' => $bizName, 'consultant' => $consultant, 'allConsultant' => $allConsultant, 'browse' => $browse, 'subscribe' => $subscribe + , 'watch' => $watch, 'order' => $orderTotal, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + } + } + } else { + if ($sort == 'order' && $itemId) {//有订单排序与商品id,区分订单搜索 + $where = ['activityId' => $activityId, 'itemId' => $itemId, 'bizId>' => 0, 'kpi' => $sort]; + $count = $this->mdSyliveActivityKpidata->count($where, 'bizId'); + } else { + $where = ['activityId' => $activityId, 'status>=' => 0, 'ifBiz' => 1]; + $count = $this->mdSyliveGroups->count($where); + } + if ($count) { + if ($sort == 'order' && $itemId) {//有订单排序与商品id,区分订单搜索 + $res = $this->mdSyliveActivityKpidata->select_groupby('bizId', $where, "orderTotal {$order},id desc" + , $page, $limit, "bizId,count(id) as orderTotal"); + + } else { + $res = $this->mdSyliveGroups->select($where, "{$sort_order},groupsId desc", $page, $limit, + 'groupsId,groupsName,browse,subscribe,watch,orderTotal'); + } + foreach ($res as $v) { + if ($sort == 'order' && $itemId) { + $bizId = intval($v['bizId']); + $re_biz = $this->mdSyliveGroups->get(['groupsId' => $bizId, 'activityId' => $activityId, 'status>=' => 0]); + $bizName = $re_biz ? $re_biz['groupsName'] : '-'; + } else { + $bizId = intval($v['groupsId']); + $bizName = $v['groupsName'] ? $v['groupsName'] : '-'; + } + $consultant = $this->mdSyliveActivityKpidata->count(['bizId' => $bizId, 'activityId' => $activityId], 'cfUserId'); + $allConsultant = $this->mdSyliveGroupsUser->count(['bizId' => $bizId, 'activityId' => $activityId, 'status>=' => 0]); + $consultant > $allConsultant && $allConsultant = $consultant; + $livePV = $watchDuration = 0; + if ($channelId) { + $livePV = $this->mdSyliveViewlog->count(['bizId' => $bizId, 'activityId' => $activityId]); + $re_sum = $this->mdSyliveViewlog->sum('playDuration', ['bizId' => $bizId, 'activityId' => $activityId]); + if ($re_sum['playDuration']) { + $playDuration = ceil($re_sum['playDuration'] / 60); + $watchDuration = round($playDuration / $livePV); + } + } + if ($sort != 'order' && $itemId) {//有商品id,区分订单 + $order = $this->mdSyliveActivityKpidata->count(['kpi' => 'order', 'bizId' => $bizId, 'itemId' => $itemId, 'activityId' => $activityId]); + } else { + $order = $v['orderTotal']; + } + if ($sort == 'order' && $itemId) {//只改变订单数值,其它不变 + $re = $this->mdSyliveGroups->get(['groupsId' => $bizId, 'activityId' => $activityId, 'status>=' => 0], 'browse,subscribe,watch'); + $v['browse'] = intval($re['browse']); + $v['subscribe'] = intval($re['subscribe']); + $v['watch'] = intval($re['watch']); + } + $list[] = [ + 'bizName' => $bizName, 'consultant' => $consultant, 'allConsultant' => $allConsultant, 'browse' => $v['browse'], 'subscribe' => $v['subscribe'] + , 'watch' => $v['watch'], 'order' => $order, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + } + } + } + } + $date = ['list' => $list, 'count' => $count]; + $this->return_response_list($date); + } + + /** + * Notes:分组顾问统计 + * Created on: 2022/12/05 14:48 + * Created by: dengbw + */ + public function consultant_get() + { + $activityId = intval($this->input_param('activityId')); + $page = $this->input_param('page'); + $limit = $this->input_param('limit'); + $sort = $this->input_param('sort'); + $order = $this->input_param('order'); + $day = $this->input_param('day'); + $itemId = intval($this->input_param('itemId'));//商品 + !$page && $page = 1; + !$limit && $limit = 10; + $list = []; + $count = 0; + $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); + if ($re) { + $channelId = intval($re['channelId']); + !$sort && $sort = 'browse'; + !$order && $order = 'desc'; + if ($sort == 'order' && !$day) { + $sort_order = 'orderTotal ' . $order; + } else { + $sort_order = $sort . ' ' . $order; + } + if ($day) { + $createTimeStart = strtotime($day . ' 00:00:00'); + $createTimeEnd = strtotime($day . ' 23:59:59'); + $where = $where_order = $where_sort = ['activityId' => $activityId, 'day' => $day, 'cfUserId>' => 0, 'kpi' => $sort]; + if ($sort == 'order') { + $itemId && $where['itemId'] = $itemId; + } + $count = $this->mdSyliveActivityKpidata->count($where, 'cfUserId'); + if ($count) { + $res = $this->mdSyliveActivityKpidata->select_groupby('cfUserId', $where, "total {$order},id desc", $page, $limit, "bizId as groupsId,cfUserId,count(id) as total"); + foreach ($res as $v) { + $cfUserId = intval($v['cfUserId']); + $re_org = $this->mdSyliveGroups->get(['groupsId' => $v['groupsId'], 'status>=' => 0]); + $bizName = $re_org['groupsName'] ? $re_org['groupsName'] : '-'; + $re_user = $this->mdSyliveUser->get(['userId' => $cfUserId, 'status>=' => 0]); + $uname = $re_user['uname'] ? $re_user['uname'] : $re_user['nickname']; + $consultantName = $bizName . ' ' . $uname; + $where_sort['cfUserId'] = $cfUserId; + if ($sort == 'browse') { + $browse = $v['total']; + } else { + $where_sort['kpi'] = 'browse'; + $browse = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'subscribe') { + $subscribe = $v['total']; + } else { + $where_sort['kpi'] = 'subscribe'; + $subscribe = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'watch') { + $watch = $v['total']; + } else { + $where_sort['kpi'] = 'watch'; + $watch = $this->mdSyliveActivityKpidata->count($where_sort); + } + if ($sort == 'order') { + $order = $v['total']; + } else { + $where_order['kpi'] = 'order'; + $where_order['cfUserId'] = $cfUserId; + $itemId && $where_order['itemId'] = $itemId; + $order = $this->mdSyliveActivityKpidata->count($where_order); + } + $livePV = $watchDuration = 0; + if ($channelId) { + $livePV = $this->mdSyliveViewlog->count(['cfUserId' => $cfUserId, 'activityId' => $activityId + , 'createTime>=' => $createTimeStart, 'createTime<=' => $createTimeEnd]); + $re_sum = $this->mdSyliveViewlog->sum('playDuration', ['cfUserId' => $cfUserId, 'activityId' => $activityId + , 'createTime>=' => $createTimeStart, 'createTime<=' => $createTimeEnd]); + if ($re_sum['playDuration']) { + $playDuration = ceil($re_sum['playDuration'] / 60); + $watchDuration = round($playDuration / $livePV); + } + } + $list[] = ['consultantName' => $consultantName, 'browse' => $browse, 'subscribe' => $subscribe + , 'watch' => $watch, 'order' => $order, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + } + } + } else { + if ($sort == 'order' && $itemId) {//有订单排序与商品id,区分订单搜索 + $where = ['activityId' => $activityId, 'itemId' => $itemId, 'cfUserId>' => 0, 'kpi' => $sort]; + $count = $this->mdSyliveActivityKpidata->count($where, 'cfUserId'); + } else { + $where = ['activityId' => $activityId, 'status>=' => 0]; + $count = $this->mdSyliveGroupsUser->count($where); + } + if ($count) { + if ($sort == 'order' && $itemId) {//有订单排序与商品id,区分订单搜索 + $res = $this->mdSyliveActivityKpidata->select_groupby('cfUserId', $where, "orderTotal {$order},id desc" + , $page, $limit, "cfUserId as userId,bizId as groupsId,count(id) as orderTotal"); + } else { + $res = $this->mdSyliveGroupsUser->select($where, "{$sort_order},groupsUserId desc", $page, $limit, + 'userId,groupsId,browse,subscribe,orderTotal,watch'); + } + foreach ($res as $v) { + $userId = intval($v['userId']); + $re_org = $this->mdSyliveGroups->get(['groupsId' => $v['groupsId'], 'status>=' => 0]); + $bizName = $re_org['groupsName'] ? $re_org['groupsName'] : '-'; + $re_user = $this->mdSyliveUser->get(['userId' => $userId, 'status>=' => 0]); + $uname = $re_user['uname'] ? $re_user['uname'] : $re_user['nickname']; + $consultantName = $bizName . ' ' . $uname; + $livePV = $watchDuration = 0; + if ($channelId) { + $livePV = $this->mdSyliveViewlog->count(['cfUserId' => $userId, 'activityId' => $activityId]); + $re_sum = $this->mdSyliveViewlog->sum('playDuration', ['cfUserId' => $userId, 'activityId' => $activityId]); + if ($re_sum['playDuration']) { + $playDuration = ceil($re_sum['playDuration'] / 60); + $watchDuration = round($playDuration / $livePV); + } + } + if ($sort != 'order' && $itemId) {//有商品id,区分订单 + $order = $this->mdSyliveActivityKpidata->count(['kpi' => 'order', 'cfUserId' => $userId, 'itemId' => $itemId, 'activityId' => $activityId]); + } else { + $order = $v['orderTotal']; + } + if ($sort == 'order' && $itemId) {//只改变订单数值,其它不变 + $re = $this->mdSyliveGroupsUser->get(['userId' => $userId, 'activityId' => $activityId], 'browse,subscribe,watch'); + $v['browse'] = intval($re['browse']); + $v['subscribe'] = intval($re['subscribe']); + $v['watch'] = intval($re['watch']); + } + $list[] = ['consultantName' => $consultantName, 'browse' => $v['browse'], 'subscribe' => $v['subscribe'], 'watch' => $v['watch'] + , 'order' => $order, 'livePV' => $livePV, 'watchDuration' => $watchDuration]; + } + } + } + } + $date = ['list' => $list, 'count' => $count]; + $this->return_response_list($date); + } + + /** + * Notes:漏头数据 + * Created on: 2022/12/05 14:17 + * Created by: dengbw + */ + public function funnel_get() + { + $activityId = intval($this->input_param('activityId')); + $itemId = intval($this->input_param('itemId'));//商品 + $show = $this->input_param('show'); + $funnel_preheating = $funnel_live = []; + $timeStart = 0; + $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); + $re['timeStart'] && $timeStart = strtotime($re['timeStart']); + if ($show == 'left' || !$show) {//预热阶段 + $left_browse_where = "userId in(select userId from lc_market_sylive_activity_kpidata where activityId = {$activityId} AND kpi = 'browse' AND createTime < {$timeStart})"; + $left_browse = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'browse', 'createTime<' => $timeStart]); + $left_subscribe = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'subscribe', 'createTime<' => $timeStart]); + $left_watch = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'watch', $left_browse_where => null]); + if ($itemId) { + $left_order = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'itemId' => $itemId, 'kpi' => 'order', $left_browse_where => null]); + } else { + $left_order = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'order', $left_browse_where => null]); + } + $left_subscribe_per = number_format_com($left_subscribe / $left_browse * 100, 1, ''); + $left_watch_per = number_format_com($left_watch / $left_subscribe * 100, 1, ''); + $left_order_per = number_format_com($left_order / $left_watch * 100, 1, ''); + $left_expected_data = [['name' => "浏览人数100%", 'value' => 100], ['name' => "预约人数({$left_subscribe_per}%)", 'value' => 75] + , ['name' => "观看人数({$left_watch_per}%)", 'value' => 50], ['name' => "订单数({$left_order_per}%)", 'value' => 25]]; + $left_actual_data = [['name' => '浏览人数', 'value' => $left_browse], ['name' => '预约人数', 'value' => $left_subscribe] + , ['name' => '观看人数', 'value' => $left_watch], ['name' => '订单数', 'value' => $left_order]]; + $funnel_preheating = ['title' => '浏览转化漏斗((预热阶段)', 'expectedData' => $left_expected_data, 'actualData' => $left_actual_data]; + } + if ($show == 'right' || !$show) {//直播阶段 + $right_browse_where = "userId in(select userId from lc_market_sylive_activity_kpidata where activityId = {$activityId} AND kpi = 'browse' AND createTime >= {$timeStart})"; + $right_browse = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'browse', 'createTime>=' => $timeStart]); + $right_watch = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'watch', $right_browse_where => null]); + if ($itemId) { + $right_order = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'itemId' => $itemId, 'kpi' => 'order', $right_browse_where => null]); + } else { + $right_order = $this->mdSyliveActivityKpidata->count(['activityId' => $activityId, 'kpi' => 'order', $right_browse_where => null]); + } + $right_watch_per = number_format_com($right_watch / $right_browse * 100, 1, ''); + $right_order_per = number_format_com($right_order / $right_watch * 100, 1, ''); + $right_expected_data = [['name' => "浏览人数100%", 'value' => 100], ['name' => "观看人数({$right_watch_per}%)", 'value' => 66.7], ['name' => "订单数({$right_order_per}%)", 'value' => 33.3]]; + $right_actual_data = [['name' => '浏览人数_' . $right_browse, 'value' => $right_browse], ['name' => '观看人数', 'value' => $right_watch], ['name' => '订单数', 'value' => $right_order]]; + $funnel_live = ['title' => '浏览转化漏斗(直播阶段)', 'expectedData' => $right_expected_data, 'actualData' => $right_actual_data]; + } + $data['funnelPreheating'] = $funnel_preheating; + $data['funnelLive'] = $funnel_live; + $this->return_response($data); + } + + /** + * Notes:获取观看数/订单数区域折线图数据 + * Created on: 2022/12/06 10:54 + * Created by: dengbw + */ + public function stacked_watchOrder_get() + { + $activityId = intval($this->input_param('activityId')); + $re = $this->mdSyliveActivity->get(['activityId' => $activityId]); + $times = $legendData = $yAxisSeries = $xAxisData = []; + if ($re) { + $timeStart = $re['timeStart']; + $timeEnd = $re['timeEnd']; + if ($timeStart != '0000-00-00 00:00:00' && (date('Y-m-d H:i:s') > $timeStart)) { + $start_Time = strtotime($timeStart); + $end_Time = strtotime($timeEnd); + $legend_data = [['name' => date('Y-m-d', $start_Time) . '的观看数', 'value' => 'watch'], + ['name' => date('Y-m-d', $start_Time) . '的订单数', 'value' => 'order']]; + $add_time = '+1 hour'; + $diff = abs($start_Time - $end_Time); // 获取时间差 + $hour = ceil($diff / 3600); // 获取相差小时数 + $hour < 6 && $add_time = '+30 minute';//转分钟显示 + $ii = 0; + while ($start_Time < $end_Time) { + $start = date('Y-m-d H:i:s', $start_Time); + $ii > 0 && $start = date('Y-m-d H:i:s', $start_Time + 60); + $name_start = date('H:i', $start_Time); + $start_Time = strtotime($add_time, $start_Time); + $name = $name_start . '-' . date('H:i', $start_Time); + $end = date('Y-m-d H:i:s', $start_Time + 59); + $times[] = ['name' => $name, 'start' => $start, 'end' => $end]; + $xAxisData[] = $name; + $ii++; + } + foreach ($legend_data as $v) { + $legendData[] = $v['name']; + $counts = []; + foreach ($times as $v2) { + $start = strtotime($v2['start']); + $end = strtotime($v2['end']); + $counts[] = $this->mdSyliveActivityKpidata->count(['kpi' => $v['value'], 'createTime >=' => $start, + 'createTime <=' => $end, 'activityId' => $activityId]); + } + $yAxisSeries[] = ['name' => $v['name'], 'type' => 'line', 'data' => $counts]; + } + } + } + $date = ['legendData' => $legendData, 'xAxisData' => $xAxisData, 'yAxisSeries' => $yAxisSeries]; + $this->return_response_list($date); + } + + /** + * Notes:获取门店数 + * Created on: 2022/12/6 14:48 + * Created by: dengbw + * @param $groupsId + * @return int + */ + private function getBiz($groupsId) + { + $groupsIds = ''; + $res1 = $this->mdSyliveGroups->select(['parentId' => $groupsId, 'status>=' => 0], "groupsId desc", 0, 0, 'groupsId'); + if ($res1) { + $groupsIds = implode(',', array_column($res1, 'groupsId')); + $res2 = $this->mdSyliveGroups->select(["parentId in({$groupsIds})" => null, 'status>=' => 0] + , "groupsId desc", 0, 0, 'groupsId'); + if ($res2) { + $groupsIds = implode(',', array_column($res2, 'groupsId')); + $res3 = $this->mdSyliveGroups->select(["parentId in({$groupsIds})" => null, 'status>=' => 0] + , "groupsId desc", 0, 0, 'groupsId'); + if ($res3) { + $groupsIds = implode(',', array_column($res3, 'groupsId')); + } + } + } + $biz = 0; + if ($groupsIds) { + $biz = $this->mdSyliveGroups->count(["groupsId in({$groupsIds})" => null, 'status>=' => 0]); + } + return $biz; + } + +} \ No newline at end of file diff --git a/market/controllers/api/sylive/GroupsUser.php b/market/controllers/api/sylive/GroupsUser.php index 882cbd0e..e6f8135c 100644 --- a/market/controllers/api/sylive/GroupsUser.php +++ b/market/controllers/api/sylive/GroupsUser.php @@ -14,6 +14,8 @@ class GroupsUser extends BaseController { parent::__construct(); $this->load->model('market/Market_sylive_groups_user_model', 'mdSyliveGroupsUser'); + $this->load->model('market/Market_sylive_groups_model', 'mdSyliveGroups'); + $this->load->model('market/Market_sylive_user_model', 'mdSyliveUser'); } /** @@ -27,29 +29,44 @@ class GroupsUser extends BaseController $limit = $this->input_param('limit'); $uname = $this->input_param('uname'); $nickname = $this->input_param('nickname'); - $sort = $this->input_param('sort'); - $order = $this->input_param('order'); - $teamId = intval($this->input_param('teamId')); + $activityId = intval($this->input_param('activityId')); + $groupsId = intval($this->input_param('groupsId')); !$page && $page = 1; !$limit && $limit = 10; - $sort_order = 'userId desc'; - if ($sort && $order) { - $sort_order = $sort . ' ' . $order; - } + $sort_order = 'type desc,groupsUserId desc'; $list = []; $where['status>='] = 0; - $teamId && $where['teamId'] = $teamId; - $uname && $where['uname'] = $uname; - $nickname && $where['nickname'] = $nickname; + $groupsId && $where['groupsId'] = $groupsId; + $activityId && $where['activityId'] = $activityId; + if ($uname || $nickname) { + $where_user = $uname ? "(uname LIKE '%{$uname}%')" : "(nickname LIKE '%{$nickname}%')"; + $where["userId in (select userId from lc_market_sylive_user where {$where_user})"] = null; + } $count = $this->mdSyliveGroupsUser->count($where); if ($count) { $res = $this->mdSyliveGroupsUser->select($where, $sort_order, $page, $limit); + $user_ids = implode(",", array_column($res, 'userId')); + $map_user = $this->mdSyliveUser->map('userId', 'uname,nickname,mobile', ["userId in({$user_ids})" => null]); foreach ($res as $v) { + $uname = $nickname = $mobile = ''; + $user = $map_user[$v['userId']]; + if ($user) { + $uname = $user['uname']; + $nickname = $user['nickname']; + $mobile = $user['mobile']; + } $status = intval($v['status']); $createTime = $v['createTime'] != '0000-00-00 00:00:00' ? $v['createTime'] : ''; + if ($v['type'] == 0) { + $roleName = '销售'; + } else if ($v['type'] == 1) { + $roleName = $v['userFrom'] == 0 ? '店长' : '团长'; + } else { + $roleName = '管理员'; + } $list[] = [ - 'userId' => $v['userId'], 'uname' => $v['uname'], 'nickname' => $v['nickname'], 'mobile' => $v['mobile'] - , 'teamId' => $teamId, 'status' => $status, 'createTime' => $createTime]; + 'groupsUserId' => $v['groupsUserId'], 'uname' => $uname, 'nickname' => $nickname, 'mobile' => $mobile + , 'groupsId' => $groupsId, 'roleName' => $roleName, 'status' => $status, 'createTime' => $createTime]; } } $date = ['list' => $list, 'count' => $count]; @@ -63,36 +80,60 @@ class GroupsUser extends BaseController */ public function index_post() { - $mobile = $this->input_param('mobile'); - $teamId = intval($this->input_param('teamId')); - $uname = $this->input_param('uname'); - if (!$mobile) { - $this->return_json('请输入手机号'); + $activityId = intval($this->input_param('activityId')); + $groupsId = intval($this->input_param('groupsId')); + $userFrom = intval($this->input_param('userFrom')); + $chooseUsers = $this->input_param('chooseUsers'); + if (!$groupsId) { + $this->return_json('未选择分组'); } - if (!$teamId) { - $this->return_json('请选择所属团队'); + if (!$chooseUsers) { + $this->return_json('未选择用户'); } - if (!$uname) { - $this->return_json('请输入姓名'); - } - $re = $this->mdSyliveGroupsUser->get(['mobile' => $mobile]); - if ($re && $re['status'] != -1) { - if ($re['teamId'] || $re['organizationId']) { - $this->return_json('手机号已存在'); + $addData = []; + $levelAry = $this->getLevelAry($groupsId); + $re_gro = $this->mdSyliveGroups->get(['groupsId' => $groupsId], 'ifBiz'); + $ifBiz = intval($re_gro['ifBiz']);//是否门店 + foreach ($chooseUsers as $v) { + $re = $this->mdSyliveGroupsUser->get(['activityId' => $activityId, 'userId' => $v['userId'], 'status>=' => 0]); + if (!$re) { + $type = $ifBiz ? $v['type'] : 2; + $value = ['userId' => $v['userId'], 'type' => $type, 'activityId' => $activityId + , 'groupsId' => $groupsId, 'userFrom' => $userFrom, 'createTime' => date('Y-m-d H:i:s')]; + $data = array_merge($value, $levelAry); + $addData[] = $data; } } - $addDate = ['teamId' => $teamId, 'uname' => $uname, 'status' => 0, 'organizationId' => 0]; - if ($re['userId']) { - $this->mdSyliveGroupsUser->update($addDate, ['userId' => $re['userId']]); - $this->return_response([], '绑定用户成功'); + $addData && $this->mdSyliveGroupsUser->add_batch($addData); + $this->return_response(); + } + + /** + * Notes:获取分组等级ID + * Created on: 2022/11/30 14:30 + * Created by: dengbw + * @param $groupsId + * @param array $data + * @return array + */ + private function getLevelAry($groupsId, $data = []) + { + $re = $this->mdSyliveGroups->get(['groupsId' => $groupsId], 'groupsId,parentId,groupsLevel,ifBiz'); + if (!$re) { + return $data; } else { - $addDate['mobile'] = $mobile; - $addDate['createTime'] = date('Y-m-d H:i:s'); - $id = $this->mdSyliveGroupsUser->add($addDate); - if (!$id) { - $this->return_json('添加用户失败'); + if ($re['groupsLevel']) {//分类id + $levelId = "levelId" . $re['groupsLevel']; + $data[$levelId] = $re['groupsId']; + } + if ($re['ifBiz']) {//门店id + $data['bizId'] = $re['groupsId']; + } + if ($re['parentId']) { + return $this->getLevelAry($re['parentId'], $data); + } else { + return $data; } - $this->return_response(); } } @@ -127,12 +168,12 @@ class GroupsUser extends BaseController */ public function status_put() { - $userId = $this->input_param('userId'); + $groupsUserId = $this->input_param('groupsUserId'); $status = $this->input_param('status'); - if (!$userId) { + if (!$groupsUserId) { $this->return_json('参数错误'); } - $this->mdSyliveGroupsUser->update(['status' => $status], ['userId' => $userId]); + $this->mdSyliveGroupsUser->update(['status' => $status], ['groupsUserId' => $groupsUserId]); $this->return_response(); } @@ -140,14 +181,14 @@ class GroupsUser extends BaseController * Notes:删除用户 * Created on: 2022/9/21 16:10 * Created by: dengbw - * @param null $userId + * @param null $groupsUserId */ - public function index_delete($userId = null) + public function index_delete($groupsUserId = null) { - if (!$userId) { + if (!$groupsUserId) { $this->return_json('参数错误'); } - $this->mdSyliveGroupsUser->update(['status' => -1], ['userId' => $userId]); + $this->mdSyliveGroupsUser->update(['status' => -1], ['groupsUserId' => $groupsUserId]); $this->return_response(); } diff --git a/market/controllers/api/sylive/Organization.php b/market/controllers/api/sylive/Organization.php index bdf3ff8d..11cbe238 100644 --- a/market/controllers/api/sylive/Organization.php +++ b/market/controllers/api/sylive/Organization.php @@ -23,12 +23,19 @@ class Organization extends BaseController */ public function index_get() { - $unOrganizationType = $this->input_param('unOrganizationType'); + $unOrganizationType = intval($this->input_param('unOrganizationType')); + $activityId = intval($this->input_param('activityId')); $where['status>='] = 0; $unOrganizationType && $where['organizationType<>'] = $unOrganizationType; $sort_order = 'sortNumber asc,organizationId desc'; - if ($_SESSION['brandName']) {//只找该品牌机构 - $re_org = $this->mdSyliveOrganization->get(['organizationName' => $_SESSION['brandName'], 'parentId' => 0, 'status' => 0]); + if ($_SESSION['brandName'] || $activityId) {//只找该品牌机构 + if ($activityId) { + $this->load->model('market/Market_sylive_activity_model', 'mdSyliveActivity'); + $re_act = $this->mdSyliveActivity->get(['activityId' => $activityId]); + $re_org['organizationId'] = intval($re_act['organizationId']); + } else { + $re_org = $this->mdSyliveOrganization->get(['organizationName' => $_SESSION['brandName'], 'parentId' => 0, 'status' => 0]); + } if ($re_org['organizationId']) { $organizationIds[] = $re_org['organizationId']; $res_all = $this->mdSyliveOrganization->select($where, 'organizationType asc,parentId asc', 0, 0, 'organizationId,parentId'); @@ -70,20 +77,23 @@ class Organization extends BaseController */ public function parent_get() { - $res = []; + $list = []; if ($_SESSION['brandName']) {//只找该品牌机构 - $re_org = $this->mdSyliveOrganization->get(['organizationName' => $_SESSION['brandName'], 'parentId' => 0, 'status' => 0]); + $re_org = $this->mdSyliveOrganization->get(['organizationName' => $_SESSION['brandName'], 'parentId' => 0, 'status>=' => 0]); if ($re_org['organizationId']) { - $res[] = ['organizationId' => intval($re_org['organizationId']), 'organizationName' => $re_org['organizationName']]; + $list[] = ['organizationId' => intval($re_org['organizationId']), 'organizationName' => $re_org['organizationName']]; } } else { $parentId = intval($this->input_param('parentId')); $sort_order = 'sortNumber asc,organizationId desc'; $where['status>='] = 0; $where['parentId'] = $parentId; - $res = $this->mdSyliveOrganization->select($where, $sort_order,0,0,'organizationId,organizationName'); + $res = $this->mdSyliveOrganization->select($where, $sort_order, 0, 0, 'organizationId,organizationName'); + foreach ($res as $k => $v) { + $list[] = ['organizationId' => intval($v['organizationId']), 'organizationName' => $v['organizationName']]; + } } - $this->return_response_list($res); + $this->return_response_list($list); } /** diff --git a/market/controllers/api/sylive/TeamUser.php b/market/controllers/api/sylive/TeamUser.php index 6b656d2b..0b35bf50 100644 --- a/market/controllers/api/sylive/TeamUser.php +++ b/market/controllers/api/sylive/TeamUser.php @@ -14,6 +14,7 @@ class TeamUser extends BaseController { parent::__construct(); $this->load->model('market/Market_sylive_user_model', 'mdSyliveUser'); + $this->load->model('market/Market_sylive_team_model', 'mdSyliveTeam'); } /** @@ -56,6 +57,69 @@ class TeamUser extends BaseController $this->return_response_list($date); } + /** + * Notes:获取团队用户 + * Created on: 2022/11/30 15:37 + * Created by: dengbw + */ + public function list_post() + { + $this->load->model('market/Market_sylive_groups_user_model', 'mdSyliveGroupsUser'); + $this->load->model('market/Market_sylive_groups_model', 'mdSyliveGroups'); + $activityId = intval($this->input_param('activityId')); + $teamIds = $this->input_param('teamIds'); + $keyword = trim($this->input_param('keyword')); + $where = ['status>=' => 0, 'teamId>' => 0]; + if ($keyword) { + $where["(uname LIKE '%{$keyword}%' OR mobile LIKE '%{$keyword}%')"] = null; + } else if ($teamIds) { + $teamIds_str = implode(',', $teamIds); + $res_tea = $this->mdSyliveTeam->select(["parentId in({$teamIds_str})" => null], 'teamId desc', 0, 0, 'teamId'); + foreach ($res_tea as $v) { + $teamIds[] = $v['teamId']; + } + $teamIds = implode(',', $teamIds); + $where["teamId in({$teamIds})"] = null; + } + $res = $this->mdSyliveUser->select($where, 'userId desc', 0, 0, 'userId,uname,mobile,teamId'); + if ($keyword && $res) { + $teamIds = []; + foreach ($res as $v) { + $v['teamId'] && $teamIds[] = $v['teamId']; + } + $teamIds && $teamIds = implode(',', $teamIds); + } + $map_team = $map_team2 = []; + if ($teamIds) { + $map_team = $this->mdSyliveTeam->map('teamId', 'teamName,teamType', ["teamId in({$teamIds})" => null]); + } + $list = []; + foreach ($res as $v) { + $uname = $v['uname'] ? $v['uname'] : '-'; + $team = $map_team[$v['teamId']]; + $teamName = $team['teamName'] ? $team['teamName'] : '-'; + $type = 2; + if ($team['teamType'] == 2) { + $type = 1; + } else if ($team['teamType'] == 3) { + $type = 0; + } + $groups = 0; + $re_gro_use = $this->mdSyliveGroupsUser->get(['activityId' => $activityId, 'userId' => $v['userId'] + , 'status>=' => 0], 'groupsId,bizId'); + if ($re_gro_use) { + $groups = 1; + $groupsId = $re_gro_use['bizId'] ? $re_gro_use['bizId'] : $re_gro_use['groupsId']; + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'groupsId' => $groupsId + , 'status>=' => 0], 'groupsName'); + $re_gro['groupsName'] && $teamName .= "(分组-{$re_gro['groupsName']})"; + } + $list[] = ['userId' => $v['userId'], 'uname' => $uname, 'mobile' => $v['mobile'], 'type' => $type + , 'groups' => $groups, 'teamName' => $teamName]; + } + $this->return_response_list($list); + } + /** * Notes:添加用户 * Created on: 2022/9/21 16:46 diff --git a/market/controllers/api/sylive/User.php b/market/controllers/api/sylive/User.php index fd6ea033..28dbf9b0 100644 --- a/market/controllers/api/sylive/User.php +++ b/market/controllers/api/sylive/User.php @@ -14,6 +14,7 @@ class User extends BaseController { parent::__construct(); $this->load->model('market/Market_sylive_user_model', 'mdSyliveUser'); + $this->load->model('market/Market_sylive_organization_model', 'mdSyliveOrganization'); } /** @@ -61,6 +62,67 @@ class User extends BaseController $this->return_response_list($date); } + /** + * Notes:获取机构用户 + * Created on: 2022/11/29 11:08 + * Created by: dengbw + */ + public function list_post() + { + $this->load->model('market/Market_sylive_groups_user_model', 'mdSyliveGroupsUser'); + $this->load->model('market/Market_sylive_groups_model', 'mdSyliveGroups'); + $activityId = intval($this->input_param('activityId')); + $organizationIds = $this->input_param('organizationIds'); + $keyword = trim($this->input_param('keyword')); + $where = ['status>=' => 0, 'organizationId>' => 0]; + if ($keyword) { + $where["(uname LIKE '%{$keyword}%' OR mobile LIKE '%{$keyword}%')"] = null; + } else if ($organizationIds) { + $organizationIds = implode(',', $organizationIds); + $where["organizationId in({$organizationIds}) or bizId in({$organizationIds})"] = null; + } + $res = $this->mdSyliveUser->select($where, 'userId desc', 0, 0, 'userId,uname,mobile,organizationId,bizId'); + if ($keyword && $res) { + $organizationIds = []; + foreach ($res as $v) { + $v['bizId'] && $organizationIds[] = $v['bizId']; + $v['organizationId'] && $organizationIds[] = $v['organizationId']; + } + $organizationIds && $organizationIds = implode(',', $organizationIds); + } + $map_organization = []; + if ($organizationIds) { + $map_organization = $this->mdSyliveOrganization->map('organizationId', 'organizationName,organizationType' + , ["organizationId in({$organizationIds})" => null]); + } + $list = []; + foreach ($res as $v) { + $uname = $v['uname'] ? $v['uname'] : '-'; + $organization = $map_organization[$v['bizId']]; + if (!$organization) { + $organization = $map_organization[$v['organizationId']]; + } + $organizationName = $organization['organizationName'] ? $organization['organizationName'] : '-'; + $type = 2; + if ($v['bizId']) { + $type = $v['bizId'] == $v['organizationId'] ? 1 : 0; + } + $groups = 0; + $re_gro_use = $this->mdSyliveGroupsUser->get(['activityId' => $activityId, 'userId' => $v['userId'] + , 'status>=' => 0], 'groupsId,bizId'); + if ($re_gro_use) { + $groups = 1; + $groupsId = $re_gro_use['bizId'] ? $re_gro_use['bizId'] : $re_gro_use['groupsId']; + $re_gro = $this->mdSyliveGroups->get(['activityId' => $activityId, 'groupsId' => $groupsId + , 'status>=' => 0], 'groupsName'); + $re_gro['groupsName'] && $organizationName .= "(分组-{$re_gro['groupsName']})"; + } + $list[] = ['userId' => $v['userId'], 'uname' => $uname, 'mobile' => $v['mobile'], 'type' => $type + , 'groups' => $groups, 'organizationName' => $organizationName]; + } + $this->return_response_list($list); + } + /** * Notes:添加用户 * Created on: 2022/9/21 16:46 @@ -86,7 +148,16 @@ class User extends BaseController $this->return_json('手机号已存在'); } } - $addDate = ['organizationId' => $organizationId, 'uname' => $uname, 'status' => 0, 'teamId' => 0]; + $bizId = 0; + $re_org = $this->mdSyliveOrganization->get(['organizationId' => $organizationId]); + if ($re_org) { + if ($re_org['organizationType'] == 4 && $re_org['parentId']) { + $bizId = $re_org['parentId']; + } else if ($re_org['organizationType'] == 3) { + $bizId = $re_org['organizationId']; + } + } + $addDate = ['organizationId' => $organizationId, 'uname' => $uname, 'bizId' => $bizId, 'status' => 0, 'teamId' => 0]; if ($re['userId']) { $this->mdSyliveUser->update($addDate, ['userId' => $re['userId']]); $this->return_response([], '绑定用户成功'); @@ -120,7 +191,16 @@ class User extends BaseController if (!$uname) { $this->return_json('请输入姓名'); } - $upDate = ['organizationId' => $organizationId, 'uname' => $uname]; + $bizId = 0; + $re_org = $this->mdSyliveOrganization->get(['organizationId' => $organizationId]); + if ($re_org) { + if ($re_org['organizationType'] == 4 && $re_org['parentId']) { + $bizId = $re_org['parentId']; + } else if ($re_org['organizationType'] == 3) { + $bizId = $re_org['organizationId']; + } + } + $upDate = ['organizationId' => $organizationId, 'bizId' => $bizId, 'teamId' => 0, 'uname' => $uname]; $this->mdSyliveUser->update($upDate, ['userId' => $userId]); $this->return_response(); } diff --git a/market/controllers/api/system/Dictionary.php b/market/controllers/api/system/Dictionary.php index 9cc02a62..07b7660d 100644 --- a/market/controllers/api/system/Dictionary.php +++ b/market/controllers/api/system/Dictionary.php @@ -23,7 +23,9 @@ class Dictionary extends BaseController */ public function index_get() { + $dictCode = $this->input_param('dictCode'); $where['status>='] = 0; + $dictCode && $where['dictCode like "%' . $dictCode . '%"'] = null; $sort_order = 'sortNumber asc,dictId desc'; $res = $this->mdSysDictionary->select($where, $sort_order); foreach ($res as $k => $v) {