model = model('CustomUrl'); $this->view->assign("messageTypeList", $this->model->getMessageTypeList()); $this->view->assign("typeList", $this->model->getTypeList()); $this->view->assign("officialAccountTypeList", $this->model->getOfficialAccountTypeList()); $this->view->assign("pushTypeList", $this->model->getPushTypeList()); if(!empty($_GET) && !$this->request->isAjax()){ $paramsStr = ""; foreach ($_GET as $k => $v){ if($k == "addtabs") continue; $paramsStr .= "&{$k}={$v}"; } $this->assignconfig("path",$paramsStr); } } /** * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个方法 * 因此在当前控制器中可不用编写增删改查的代码,如果需要自己控制这部分逻辑 * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改 */ /** * 查看 */ public function index($message_type = '0') { //设置过滤方法 $this->request->filter(['strip_tags']); if ($this->request->isAjax()) { //如果发送的来源是Selectpage,则转发到Selectpage if ($this->request->request('pkey_name')) { return $this->selectpage(); } $subIds = model("SubscriptionRelation")->where("admin_id",$this->auth->id)->column("subscription_id");//获取订阅号id $subIds = empty($subIds)?'null':implode(",",$subIds); $adminIds = $this->auth->id; if($this->group == 7){//VIP $adminIds = model("VipAdminBind")->getAdminIdsByVip($this->auth->id);//获取服务号id $adminIds = empty($adminIds)?'null':implode(",",$adminIds); } list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $map['message_type'] = $this->request->get("message_type"); if($push_id = $this->request->get("push_id")){ $map['custom_media_push_id'] = $push_id; unset($map['message_type']); } $total = $this->model ->join("custom_url_collect c","custom_url.custom_id = c.custom_id AND custom_url.idx = c.idx","left") ->field("*,custom_url.id,custom_url.custom_id,custom_url.idx,c.id id1,c.custom_id custom_id1,c.idx idx1") ->where($map) ->where($where) ->where("(official_account_type='0' AND official_account_id in ({$adminIds})) OR (official_account_type='1' AND official_account_id in ({$subIds}))") ->where("custom_url.sendstatus = '1'") // ->order("custom_url.id", "desc") ->count(); $list = $this->model ->join("custom_url_collect c","custom_url.custom_id = c.custom_id AND custom_url.idx = c.idx","left") ->field("*,custom_url.id,custom_url.custom_id,custom_url.idx,c.id id1,c.custom_id custom_id1,c.idx idx1") ->where($map) ->where($where) ->where("(official_account_type='0' AND official_account_id in ({$adminIds})) OR (official_account_type='1' AND official_account_id in ({$subIds}))") ->where("custom_url.sendstatus = '1'") ->order("custom_url.sendtime desc,custom_url.official_account_id desc,custom_url.idx") ->limit($offset, $limit) ->select(); $pushIds = implode(",",array_unique(array_column($list,"custom_media_push_id")))??'null'; if($message_type == Custom::CUSTOM_URL_MESSAGE_TYPE_IMG){ $mediaJsonArr = model("CustomMediaPush")->where("id","IN",$pushIds)->column("id,message_json"); }else{ $mediaJsonArr = model("CustomMediaPush")->where("id","IN",$pushIds)->column("id,message_text"); } $customIdArr = []; $ssdbKeyArr = []; $activityIds = []; $ssdbService = new SsdbService(); foreach ($list as &$v){ $customIdArr[] = $v['custom_id']; $json = isset($mediaJsonArr[$v['custom_media_push_id']])?json_decode($mediaJsonArr[$v['custom_media_push_id']], true):''; if($v['type'] == 1){//活动 $activityIds[] = $v['activity_id'] = $json&&isset($json[$v['idx'] - 1]['activity_id'])?$json[$v['idx'] - 1]['activity_id']:0; }elseif ($v['type'] == 3){//菜单 $v['menu_id'] = $json&&isset($json[$v['idx'] - 1]['menu_id'])?$json[$v['idx'] - 1]['menu_id']:0; } if($message_type == Custom::CUSTOM_URL_MESSAGE_TYPE_IMG){//SSDBkeys $v['mark'] = BigData::BIG_DATA_MARK_IMAGE_TEXT; $v['ssdbkeys'] = $ssdbService->getCustomPushImgKey($v['custom_id'], $v['idx']); $ssdbKeyArr = array_merge($ssdbKeyArr, $v['ssdbkeys']); }else{ $v['mark'] = BigData::BIG_DATA_MARK_LINK; $v['ssdbkeys'] = $ssdbService->getCustomPushTextKey($v['custom_id'], $v['idx']); $ssdbKeyArr = array_merge($ssdbKeyArr, $v['ssdbkeys']); } } //活动名称 $activityIds = implode(",",$activityIds)??'null'; $activityNameArr = model("Activity")->where("id","in",$activityIds)->column("id,name"); //发送/接收人数 $nums = model("custom") ->where("id","in",$customIdArr) ->column("id,send_num,success_num,fail_num","id"); //SSDB今日数据 $ssdb = Ssdb::instance(); $ssdbInfo = $ssdb->multi_get($ssdbKeyArr); foreach ($list as &$v){ if($v['type'] == 1) { $v['activity_name'] = $activityNameArr[$v['activity_id']]??''; }else if ($v['type'] == 3) { $v['menu_name'] = Menu::$allLinks[$v['menu_id']]['title']??''; } foreach ($v['ssdbkeys'] as $vk){ $tkey = substr($vk,-2,2); if(in_array($tkey,['uv','pv'])){ $tkey = 'day'.$tkey; } $v[$tkey] = $ssdbInfo[$vk]??0; } $v['send_num'] = $nums[$v['custom_id']]['send_num']??0; $v['success_num'] = $nums[$v['custom_id']]['success_num']??0; $v['fail_num'] = $nums[$v['custom_id']]['fail_num']??0; unset($v['ssdbkeys']); } $result = array("total" => $total, "rows" => $list); return json($result); } $this->view->assign("message_type",$message_type); return $this->view->fetch(); } }