| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523 | <?phpnamespace App\Http\Controllers\Manage\OfficialAccount;use App\Http\Controllers\Manage\BaseController;use App\Modules\OfficialAccount\Services\CustomMsgService;use App\Modules\OfficialAccount\Services\BatchCustomMsgService;use App\Modules\OfficialAccount\Services\ForceSubscribeService;use App\Modules\OfficialAccount\Services\OfficialAccountService;use App\Modules\OfficialAccount\Models\OfficialAccount;use App\Http\Controllers\Manage\OfficialAccount\Transformers\CustomSendMsgsTransformers;use App\Http\Controllers\Manage\OfficialAccount\Transformers\BatchCustomSendMsgsTransformers;use Illuminate\Http\Request;use GuzzleHttp\Client;use Hashids;use App\Modules\Book\Services\BookConfigService;use App\Modules\Statistic\Services\SendStatistics;class CustomMsgController extends BaseController{        /**     * @apiVersion 1.0.0     * @api {GET} OfficialAccount/customSendMsgsByTrusteeship 全部发送客服消息列表获取     * @apiGroup OfficialAccount     * @apiName customSendMsgsByTrusteeship     */    function  customSendMsgsByTrusteeship(Request $request) {    	\Log::info('customSendMsgsByTrusteeship');    	$param = array();    	$param['trusteeship'] = 1;    	$customMsgServices = CustomMsgService::customSendMsgsByTrusteeship($param);    	    	// 统计    	foreach($customMsgServices as $key=>$customMsgService){    		$temp_customMsgService = $customMsgService;    		$customMsgService->pv = '';    		$customMsgService->uv = '';    		$customMsgService->total_order_num = '';    		$customMsgService->suc_order_num = '';    		$customMsgService->order_suc_rate = '';    		$pv = $uv = $total_order_num = $suc_order_num = $order_suc_rate = array();    		for($i=1;$i<=4;$i++){    			$temp_statistics= $this->get_custom_msg_statistics($temp_customMsgService,$i);    			$pv[$i] = $temp_statistics->pv;    			$uv[$i] = $temp_statistics->uv;    			$total_order_num[$i] = $temp_statistics->total_order_num;    			$suc_order_num[$i] = $temp_statistics->suc_order_num;    			$order_suc_rate[$i] = $temp_statistics->order_suc_rate;    			$success_order_sum[$i] = $temp_statistics->success_order_sum;    		}    		    		// 解析bid,非贪婪匹配    		$matches = array();    		preg_match_all('/bid=(.*?)&cid/', $customMsgService->content, $matches);    		$bids = isset($matches[1])?$matches[1]:array();    		$simple_bids = $book_names = array();    		$j = 1;    		if(!empty($bids)){    			foreach($bids as $bid){    				$simple_bid = Hashids::decode($bid);    				if(isset($simple_bid[0]) && !empty($simple_bid[0])){    					$simple_bids[$j] = $simple_bid[0];    					$book = BookConfigService::getBookById($simple_bid[0]);    					$book_names[$j] = isset($book->book_name)?$book->book_name:'';    					$j++;    				}    			}    		}    		    		$customMsgService->bids = json_encode($simple_bids);    		$customMsgService->book_names = json_encode($book_names);    		$customMsgService->pv = json_encode($pv);    		$customMsgService->uv = json_encode($uv);    		$customMsgService->total_order_num = json_encode($total_order_num);    		$customMsgService->suc_order_num = json_encode($suc_order_num);    		$customMsgService->order_suc_rate = json_encode($order_suc_rate);    		$customMsgService->success_order_sum = json_encode($success_order_sum);    		// 公众号名称    		$official_account = OfficialAccount::officialAccountByAppid($customMsgService->appid);    		$customMsgService->official_account_name = isset($official_account->nickname)?$official_account->nickname:'';    		$customMsgServices[$key] = $customMsgService;    	}        	if (!empty($customMsgServices)) {        		return response()->pagination(new CustomSendMsgsTransformers(), $customMsgServices);    	}else{        		return response()->success(['data'=>0]);    	}        }        /**     * @apiVersion 1.0.0     * @api {GET} OfficialAccount/customSendMsgsByTrusteeshipAndBacthNo 发送客服消息列表获取     * @apiGroup OfficialAccount     * @apiName customSendMsgsByTrusteeshipAndBacthNo     * @apiParam {String}  batch_no 批次id.     */    function  customSendMsgsByTrusteeshipAndBacthNo(Request $request) {    	$batch_no = $request->has('batch_no') ? $request->input('batch_no') : '';    	    	if(empty($batch_no)) {    	    		return response()->error("PARAM_EMPTY");    	}    	$param = array();    	$param['trusteeship'] = 1;    	$param['batch_no'] = $batch_no;    	$customMsgService = CustomMsgService::customSendMsgsByTrusteeshipAndBacthNo($param);        	if (!empty($customMsgService)) {        		return response()->collection(new CustomSendMsgsTransformers(), $customMsgService);    	}else{        		return response()->success(['data'=>0]);    	}        }        /**     * @apiVersion 1.0.0     * @api {GET} OfficialAccount/batchCustomMsgsList 获取批次客服消息列表     * @apiGroup OfficialAccount     * @apiName batchCustomMsgsList     */    function  batchCustomMsgsList(Request $request) {    	    	\Log::info('batchCustomMsgsList_start:');    	$batchCustomMsgs = BatchCustomMsgService::batchCustomMsgList();    	\Log::info($batchCustomMsgs);    	foreach($batchCustomMsgs as $batch_key=>$batchCustomMsg){    		// 得到渠道列表    		$param = array();    		$param['trusteeship'] = 1;    		$param['batch_no'] = $batchCustomMsg->id;    		\Log::info('batchCustomMsgsList:id:'.$batchCustomMsg->id);    		$child_custom_msgs = CustomMsgService::customSendMsgsByTrusteeshipAndBacthNo($param);    		    		$pv = $uv = $pay_user_num = $total_order_num = $suc_order_num = $order_suc_rate = $success_order_sum = array();    		$simple_bids = $book_names = array();    		// 子渠道汇总,统计到每本书的级别    		foreach($child_custom_msgs as $key=>$customMsgService){//     			\Log::info('key:'.$key);    			$temp_customMsgService = $customMsgService;    			for($i=1;$i<=4;$i++){    				$temp_statistics= $this->get_custom_msg_statistics($temp_customMsgService,$i);    				// init    				if(!isset($pv[$i])) {    					$pv[$i] = $uv[$i] = $pay_user_num[$i] = $total_order_num[$i] = $suc_order_num[$i]=$order_suc_rate[$i]=$success_order_sum[$i]=0;    				}    				$pv[$i] += $temp_statistics->pv;    				$uv[$i] += $temp_statistics->uv;    				$pay_user_num[$i] += $temp_statistics->pay_user_num;    				$total_order_num[$i] += $temp_statistics->total_order_num;    				$suc_order_num[$i] += $temp_statistics->suc_order_num;    				$order_suc_rate[$i] += $temp_statistics->order_suc_rate;    				$success_order_sum[$i] += $temp_statistics->success_order_sum;    				    				break;    			}    			// 同1批次,内容一致    			if($key == 0){    				\Log::info('key0');//     				\Log::info($customMsgService);    				// 解析bid,非贪婪匹配    				$matches = array();    				preg_match_all('/bid=(.*?)&cid/', $customMsgService->content, $matches);    				$bids = isset($matches[1])?$matches[1]:array();    				$j = 1;    				if(!empty($bids)){    					foreach($bids as $bid){    						$simple_bid = Hashids::decode($bid);    						if(isset($simple_bid[0]) && !empty($simple_bid[0])){    							$simple_bids[$j] = $simple_bid[0];    							$book = BookConfigService::getBookById($simple_bid[0]);    							$book_names[$j] = isset($book->book_name)?$book->book_name:'';    							$j++;    						}    					}    				}    			}    			$batchCustomMsg->user_num += $customMsgService->user_num;    		}    		    		$batchCustomMsg->pv = json_encode($pv);    		$batchCustomMsg->uv = json_encode($uv);    		$batchCustomMsg->pay_user_num = json_encode($pay_user_num);    		$batchCustomMsg->total_order_num = json_encode($total_order_num);    		$batchCustomMsg->suc_order_num = json_encode($suc_order_num);    		$batchCustomMsg->order_suc_rate = json_encode($order_suc_rate);    		$batchCustomMsg->success_order_sum = json_encode($success_order_sum);    		$batchCustomMsg->bids = json_encode($simple_bids);    		$batchCustomMsg->book_names = json_encode($book_names);    		    		$batchCustomMsgs[$batch_key] = $batchCustomMsg;    		    	}    	if (!empty($batchCustomMsgs)) {    		return response()->pagination(new BatchCustomSendMsgsTransformers(), $batchCustomMsgs);    	}else{    		return response()->success(['data'=>0]);    	}        }    /**     * @apiVersion 1.0.0     * @api {GET} OfficialAccount/batchCustomMsgById 通过ID获取指定批次客服消息     * @apiGroup OfficialAccount     * @apiName batchCustomMsgById     * @apiParam {String}  id 批次id.     */    function  batchCustomMsgById(Request $request) {        $id = $request->has('id') ? $request->input('id') : '';        if(empty($id)) {            return response()->error("PARAM_EMPTY");        }        \Log::info('batchCustomMsgById:'.$id);                $param = array();        $param['id'] = $id;        $batchCustomMsgService = BatchCustomMsgService::batchCustomMsgById($param);//         \Log::info($batchCustomMsgService);        if (!empty($batchCustomMsgService)) {            return response()->item(new BatchCustomSendMsgsTransformers(), $batchCustomMsgService);        }else{            return response()->success(['data'=>0]);        }            }    /**     * @apiVersion 1.0.0     * @api {GET} OfficialAccount/updateBatchCustomSendMsgStatusById 更新发送客服消息     * @apiGroup OfficialAccount     * @apiName updateBatchCustomSendMsgStatusById     * @apiParam {String}  id 客服消息批次id.     * @apiParam {String}  status 状态 1待发送  3发送成功  4删除  8发送中 .     * @apiParam {String}  del_flag 是否删除:1是 0否.     * @apiSuccessExample {json} Success-Response:     *     *      {     *          "code": 0,     *          "msg": "",     *          "data": {     *          }     *      }     */    function  updateBatchCustomSendMsgStatusById(Request $request) {        $id = $request->has('id') ? $request->input('id') : '';        if(empty($id)) {        	return response()->error("PARAM_EMPTY");        }                $status = $request->has('status') ? $request->input('status') : '';        if(empty($status)) {        	return response()->error("PARAM_EMPTY");        }                $del_flag = $request->has('del_flag') ? $request->input('del_flag') : '0';                \Log::info('updateBatchCustomSendMsgStatusById_start,id:'.$id.' status:'.$status.' $del_flag:'.$del_flag);        $param = array();        $param['id'] = $id;        $param['status'] = $status;        $param['del_flag'] = $del_flag;        $batch_res = BatchCustomMsgService::updateBatchCustomSendMsgStatusById($param);        // 循环子消息        $param = array();        $param['trusteeship'] = 1;        $param['batch_no'] = $id;        $customMsgServices = CustomMsgService::customSendMsgsByTrusteeshipAndBacthNo($param);//         \Log::info($customMsgServices);        if(!empty($customMsgServices)){        	foreach($customMsgServices as $customMsgService){        		\Log::info('stopBatchCustomSendMsgsById_single:'.json_encode($customMsgService));        		$customMsgService = CustomMsgService::updateCustomSendMsgsStatusMulty($customMsgService->id,$status,$del_flag);        	}        }        if ($batch_res == 1) {            return response()->success();        }else {            return response()->error('CUSTOMS_SETTING_FAILED');        }            }       /**     * @apiVersion 1.0.0     * @api {GET} OfficialAccount/batchAddCustomSendMsgs 批量添加客服消息     * @apiGroup OfficialAccount     * @apiName batchAddCustomSendMsgs     * @apiParam {String}  name 客服消息标题.     * @apiParam {String}  send_time 客服消息发送时间.     * @apiParam {String}  content 客服消息内容. 格式:[[{"title":"横眉冷对千夫指,俯首甘为孺子牛"},{"description":"横眉冷对千夫指,俯首甘为孺子牛"},{"url":"http://www.baidu.com"},{"image":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=314110819,2721402218&fm=173&s=91B3C23586024F4D0235ECFB0300C036&w=550&h=550&img.JPEG"}],[{"title":"来他家做佣人半年,结果天天被男主人这样!"},{"description":"来他家做佣人半年,结果天天被男主人这样!"},{"url":"http://www.baidu.com"},{"image":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=314110819,2721402218&fm=173&s=91B3C23586024F4D0235ECFB0300C036&w=550&h=550&img.JPEG"}]]     * @apiParam {String}  redirect_url 点击消息重定向地址.     * @apiParam {String}  sex 用户性别.     * @apiSuccessExample {json} Success-Response:     *     *       {     *           "code": 0,     *           "msg": "",     *           "data": []     *       }      */    function  batchAddCustomSendMsgs(Request $request) {    	\Log::info('manage_batchAddCustomSendMsgs_start');    	\Log::info($request->all());                $name = $request->has('name') ? $request->input('name') : '';        if(empty($name)) {            return response()->error("PARAM_EMPTY");        }        $send_time = $request->has('send_time') ? $request->input('send_time') : '';        if(empty($send_time)) {            return response()->error("PARAM_EMPTY");        }        $content = $request->has('content') ? $request->input('content') : '';        if(empty($content)) {            return response()->error("PARAM_EMPTY");        }        $redirect_url = $request->has('redirect_url') ? $request->input('redirect_url') : '';        if(empty($redirect_url)) {            return response()->error("PARAM_EMPTY");        }        $sex = $request->has('sex') ? $request->input('sex') : '';        if(empty($sex)) {            return response()->error("PARAM_EMPTY");        }                $customMsgPrams['name'] = $name;        $customMsgPrams['send_time'] = $send_time;        $customMsgPrams['content'] = json_encode($content);        $customMsgPrams['redirect_url'] = $redirect_url;        $customMsgPrams['sex'] = $sex;        $customMsgPrams['subscribe_time'] = 'g';// 关注1天前,有过交互的        $customMsgPrams['trusteeship'] = '1'; // 托管        $customMsgPrams['balance'] = 'z';        $customMsgPrams['order_type'] = 'z';        $customMsgPrams['category_id'] = 'z';        $customMsgPrams['status'] = '1';        $customMsgPrams['is_show_list'] = '0';// 分销界面不展示        \Log::info($customMsgPrams);        $batch_no = '';                $batch_res = BatchCustomMsgService::addBatchCustomSendMsgs($customMsgPrams,$batch_no);        \Log::info('$batch_res:'.$batch_res.' $batch_no:'.$batch_no);        if($batch_res == 1){        	$customMsgPrams['batch_no'] = $batch_no;        	$official_accounts =  OfficialAccountService::getTrusteeshipOfficialAccounts();        	\Log::info('getTrusteeshipOfficialAccounts');//         	\Log::info($official_accounts);        	foreach($official_accounts as $official_account){        		$customMsgPrams['appid'] = $official_account->appid;        		$customMsgPrams['distribution_channel_id'] = $official_account->distribution_channel_id;        		\Log::info('getTrusteeshipOfficialAccounts:appid:'.$official_account->appid.' distribution_channel_id:'.$official_account->distribution_channel_id);        		         		//先判断在发送时间段1小时以内,有没有发起过相同的模板消息,如果有发送过,就提示用户已经创建过相同模板消息,不创建新的模板消息        		$isSendCustomer = CustomMsgService::isSendCustomerAtSameTime($customMsgPrams);        		if (!empty($isSendCustomer)) {        			\Log::info('isSendCustomerAtSameTime already_send:appid:'.$customMsgPrams['appid'].' distribution_channel_id:'.$customMsgPrams['distribution_channel_id']);        			continue;        		}        		$customMsgService = CustomMsgService::addCustomSendMsgs($customMsgPrams);        	}        }                if ($batch_res == 1) {        	return response()->success();        }elseif ($batch_res == 2) {            return response()->error('CUSTOMS_SEND_FAILED');        }elseif ($batch_res == 3) {            return response()->error('CUSTOMS_DOUBLE_FAILED');        }elseif ($batch_res == 4) {            return response()->error('CUSTOMS_DOUBLE_FAILED');        }elseif ($batch_res == 0) {            return response()->error('CUSTOMS_SEND_FAILED');        }        else{            return response()->error('CUSTOMS_SEND_FAILED');        }            }    /**     * @apiVersion 1.0.0     * @api {GET} OfficialAccount/editCustomSendMsgs 编辑客服消息     * @apiGroup OfficialAccount     * @apiName editCustomSendMsgs     * @apiParam {String}  appid 服务号,英文逗号隔开.     * @apiParam {String}  distribution_channel_id 渠道号.     * @apiParam {String}  name 客服消息标题.     * @apiParam {String}  send_time 客服消息发送时间.     * @apiParam {String}  content 客服消息内容. 格式:[[{"title":"横眉冷对千夫指,俯首甘为孺子牛"},{"description":"横眉冷对千夫指,俯首甘为孺子牛"},{"url":"http://www.baidu.com"},{"image":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=314110819,2721402218&fm=173&s=91B3C23586024F4D0235ECFB0300C036&w=550&h=550&img.JPEG"}],[{"title":"来他家做佣人半年,结果天天被男主人这样!"},{"description":"来他家做佣人半年,结果天天被男主人这样!"},{"url":"http://www.baidu.com"},{"image":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=314110819,2721402218&fm=173&s=91B3C23586024F4D0235ECFB0300C036&w=550&h=550&img.JPEG"}]]     * @apiParam {String}  redirect_url 点击消息重定向地址.     * @apiParam {String}  sex 用户性别.     * @apiParam {String}  id id.     * @apiSuccessExample {json} Success-Response:     *     *       {     *           "code": 0,     *           "msg": "",     *           "data": []     *       }      */    // 批量编辑暂时不支持,逻辑复杂    function  editCustomSendMsgs(Request $request) {    	\Log::info('editCustomSendMsgs_start');    	\Log::info($request->all());    	return response()->error("PARAM_EMPTY");    }    /**     * @apiVersion 1.0.0     * @api {GET} OfficialAccount/testAddCustomSendMsgs 测试向单个用户发送客服消息     * @apiGroup OfficialAccount     * @apiName testAddCustomSendMsgs     * @apiParam {String}  uid 用户id或者openid.     * @apiParam {String}  name 客服消息标题.     * @apiParam {String}  content 客服消息内容. 格式:[[{"title":"横眉冷对千夫指,俯首甘为孺子牛"},{"description":"横眉冷对千夫指,俯首甘为孺子牛"},{"url":"http://www.baidu.com"},{"image":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=314110819,2721402218&fm=173&s=91B3C23586024F4D0235ECFB0300C036&w=550&h=550&img.JPEG"}],[{"title":"来他家做佣人半年,结果天天被男主人这样!"},{"description":"来他家做佣人半年,结果天天被男主人这样!"},{"url":"http://www.baidu.com"},{"image":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=314110819,2721402218&fm=173&s=91B3C23586024F4D0235ECFB0300C036&w=550&h=550&img.JPEG"}]]     * @apiParam {String}  redirect_url 点击消息重定向地址.     * @apiSuccessExample {json} Success-Response:     *     *       {     *           "code": 0,     *           "msg": "",     *           "data": []     *       }      */    function  testAddCustomSendMsgs(Request $request) {    	\Log::info('testAddCustomSendMsgs_start');    	\Log::info($request->all());        $name = $request->has('name') ? $request->input('name') : '';        if(empty($name)) {            return response()->error("PARAM_EMPTY");        }        $content = $request->has('content') ? $request->input('content') : '';        if(empty($content)) {            return response()->error("PARAM_EMPTY");        }        $redirect_url = $request->has('redirect_url') ? $request->input('redirect_url') : '';        if(empty($redirect_url)) {            return response()->error("PARAM_EMPTY");        }        $uid = $request->has('uid') ? $request->input('uid') : '';        if(empty($uid)) {            return response()->error("PARAM_EMPTY");        }                $customMsgPrams['name'] = $name;        $customMsgPrams['redirect_url'] = $redirect_url;        $customMsgPrams['uid'] = $uid;        $customMsgPrams['distribution_channel_id'] = 14;// 线上改为14    	$customMsgPrams['appid'] = 'wxb2aaa55b088f12e9,wxdbc486f1b4f6a8c3';    	// 测试发送加上域名    	foreach($content as $key=>$_content){//     		\Log::info($_content);    		$url = env('PROTOCOL').'://site'.encodeDistributionChannelId($customMsgPrams['distribution_channel_id']).'.'.env('CUSTOM_HOST').'.com'.$_content[2]['url'];    		\Log::info('key:'.$key.' url:'.$url);    		$content[$key][2]['url'] = $url;    	}    	$customMsgPrams['content'] = json_encode($content);    	        $customMsgService = CustomMsgService::testAddCustomSendMsgs($customMsgPrams);        if ($customMsgService == 1) {            return response()->success();        }elseif ($customMsgService == 2) {            return response()->error('CUSTOMS_SEND_FAILED');        }elseif ($customMsgService == 0) {            return response()->error('CUSTOMS_SEND_FAILED');        }else{            return response()->error('CUSTOMS_SEND_FAILED');        }            }       public static function get_custom_msg_statistics($customMsgService,$num){    	$start_date = date('Y-m-d',strtotime('-7 day'));    	$end_date = date('Y-m-d',strtotime('+1 day'));    	$stat_type = 'custom_'.$customMsgService->id.'_'.$num;//     	\Log::info('get_custom_msg_statistics:'.$customMsgService->distribution_channel_id.' start_date:'.$start_date.' end_date:'.$end_date.' stat_type:'.$stat_type);    	$user_pay_stat = SendStatistics::getWechatMsgUseRecord($customMsgService->distribution_channel_id,$stat_type,$start_date,$end_date);//     	\Log::info('get_custom_msg_statistics:');\Log::info($user_pay_stat);    	$customMsgService->uv = isset($user_pay_stat['uv'])?$user_pay_stat['uv']:0;    	$customMsgService->pv = isset($user_pay_stat['pv'])?$user_pay_stat['pv']:0;    	$customMsgService->pay_user_num = isset($user_pay_stat['user_num'])?$user_pay_stat['user_num']:0;    	$customMsgService->total_order_num = isset($user_pay_stat['order_count'])?$user_pay_stat['order_count']:0;    	$customMsgService->suc_order_num = isset($user_pay_stat['success_order_count'])?$user_pay_stat['success_order_count']:0;    	$customMsgService->success_order_sum = isset($user_pay_stat['success_order_sum'])?$user_pay_stat['success_order_sum']:0;    	if(isset($customMsgService->total_order_num) && $customMsgService->total_order_num > 0){    		$customMsgService->order_suc_rate = round(100*$customMsgService->suc_order_num/$customMsgService->total_order_num,2);    	}else{    		$customMsgService->order_suc_rate = 0;    	}    	return $customMsgService;    }        }
 |