123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- namespace app\admin\controller;
- use app\admin\service\SsdbService;
- use app\common\constants\BigData;
- use app\common\constants\Menu;
- use app\common\controller\Backend;
- use app\common\constants\Custom;
- use app\common\library\Ssdb;
- use Symfony\Component\Cache\Adapter\NullAdapter;
- use think\Controller;
- use think\Request;
- /**
- * 客服消息分链接统计表,cps系统使用
- *
- * @icon fa fa-circle-o
- */
- class Customurl extends Backend
- {
-
- /**
- * CustomUrl模型对象
- */
- protected $model = null;
- public function _initialize()
- {
- parent::_initialize();
- $this->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();
- }
- }
|