123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <?php
- namespace App\Console\Commands;
- use Illuminate\Console\Command;
- use App\Modules\OfficialAccount\Services\BatchCustomMsgService;
- use App\Modules\Book\Services\BookConfigService;
- use App\Modules\OfficialAccount\Services\CustomMsgService;
- use App\Modules\OfficialAccount\Services\OfficialAccountService;
- use App\Modules\OfficialAccount\Models\CustomMsgSendTimeConfig;
- use DB;
- class AutoSendTrusteeShipCustomerMsg extends Command
- {
- /**
- * The name and signature of the console command.
- *
- * @var string
- */
- protected $signature = 'AutoSendTrusteeShipCustomerMsg';
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = '自动推送托管客服消息';
- /**
- * Create a new command instance.
- *
- * @return void
- */
- public function __construct()
- {
- parent::__construct();
- }
- /**
- * Execute the console command.
- *
- * @return mixed
- */
- private $hour_begin;
- private $hour_end;
- public function handle()
- {
- $this->hour_begin = date('H:00:00');
- $this->hour_end = date('H:59:59');
- $batch_no = '默认批次';
- //所有开启推送的渠道
- $all_channel_ids = DB::table('custom_msg_switchs_msgs')
- ->where('status',1)
- ->where('custom_category','auto_custom_trusteeship')
- ->select(DB::raw("distinct distribution_channel_id as unique_distribution_channel_id"))
- ->pluck('unique_distribution_channel_id')
- ->toArray();
- //自定义时间的渠道
- $customize_time_channel_ids = CustomMsgSendTimeConfig::where('is_enable',1)
- ->where('custom_category','auto_custom_trusteeship')
- ->whereIn('distribution_channel_id',$all_channel_ids)
- ->select(DB::raw("distinct distribution_channel_id as unique_distribution_channel_id"))
- ->pluck('unique_distribution_channel_id')
- ->toArray();
- //获取没有自定义发送时间的站点19点统一发送
- if($this->hour_begin == '19:00:00'){
- //判断今天是否已经发送过
- $today_send_status = DB::table('batch_custom_send_msgs')
- ->where('send_time','>',date('Y-m-d'))
- ->where('name','like','%'.$batch_no.'%')
- ->first();
- if(!$today_send_status){
- //需要跑的站点= 所有开启推送的站点 - 自定义时间的站点
- $channel_ids = array_diff($all_channel_ids,$customize_time_channel_ids);
- dump($batch_no);
- $this->autoSendTrusteeShipCustomerMsg($channel_ids,$batch_no);
- }
- }
- //获取有自定义发送时间且在一小时内需要创建的站点
- $channel_ids = CustomMsgSendTimeConfig::where('is_enable',1)
- ->where('custom_category','auto_custom_trusteeship')
- ->whereBetween('send_time',[$this->hour_begin,$this->hour_end])
- ->whereIn('distribution_channel_id',$all_channel_ids)
- ->where(function ($query) {
- $query->where('last_send_date','<',date('Y-m-d'))
- ->orWhereNull('last_send_date');
- })
- ->select(DB::raw("distinct distribution_channel_id as unique_distribution_channel_id"))
- ->pluck('unique_distribution_channel_id')
- ->toArray();
- $batch_no ='自定义批次';
- dump($batch_no);
- $this->autoSendTrusteeShipCustomerMsg($channel_ids,$batch_no);
- }
- /**
- * 创建客服消息
- */
- public function autoSendTrusteeShipCustomerMsg($channel_ids,$batch_no = '')
- {
- \Log::info('autoSendTrusteeShipCustomerMsg:');
- $sexs = ['a', 'b'];
- $customMsgPrams['send_time'] = date('Y-m-d H:00:00');
- $customMsgPrams['redirect_url'] = '';
- $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';// 分销界面不展示
- $batch_name = $batch_no;
- //设置书籍标题的站点
- $book_title_channel_ids = DB::table('custom_msg_switchs_msgs')
- ->where('status',1)
- ->where('custom_category','auto_custom_trusteeship')
- ->where('title_type','BOOK')
- ->select(DB::raw("distinct distribution_channel_id as unique_distribution_channel_id"))
- ->pluck('unique_distribution_channel_id')
- ->toArray();
- //
- dump('需要跑的站点');
- dump($channel_ids);
- dump('设置书籍标题的站点');
- dump($book_title_channel_ids);
- //带书名标题的站点
- dump('需要跑的设置书籍标题的站点');
- $book_title_channels = array_intersect($channel_ids,$book_title_channel_ids);
- dump($book_title_channels);
- dump('需要跑的带系统标题的站点');
- //带系统标题的站点
- $default_title_channels = array_diff($channel_ids,$book_title_channels);
- dump($default_title_channels);
- //带默认标题
- if ($default_title_channels) {
- dump('带系统标题');
- foreach ($sexs as $sex) {
- $customMsgPrams['content'] = $this->getMsgContent($sex, 'SYS');
- $customMsgPrams['sex'] = $sex;
- $customMsgPrams['name'] = '自动发送托管客服消息_系统标题'.date('YmdH').$batch_name;
- \Log::info($customMsgPrams);
- $batch_res = BatchCustomMsgService::addBatchCustomSendMsgs($customMsgPrams, $batch_no);
- if ($batch_res == 1) {
- //创建客服消息
- $this->BatchCreateCustomSendMsgs($customMsgPrams,$default_title_channels,$batch_no);
- }
- }
- }
- //带书名标题
- if ($book_title_channels) {
- dump('带书名标题');
- foreach ($sexs as $sex) {
- $customMsgPrams['content'] = $this->getMsgContent($sex, 'BOOK');
- $customMsgPrams['sex'] = $sex;
- $customMsgPrams['name'] = '自动发送托管客服消息_书名标题'.date('YmdH').$batch_name;
- \Log::info($customMsgPrams);
- $batch_res = BatchCustomMsgService::addBatchCustomSendMsgs($customMsgPrams,$batch_no);
- \Log::info('batch_res:' . $batch_res . ' batch_no:' . $batch_no);
- if ($batch_res == 1) {
- //创建客服消息
- $this->BatchCreateCustomSendMsgs($customMsgPrams,$book_title_channels,$batch_no);
- }
- }
- }
- }
- public function getMsgContent($sex,$title_type='')
- {
- // 男生
- if($sex == 'a'){
- $books = BookConfigService::getTrusteeShipChannelBook('','男频', 4);
- }
- // 女生
- else{
- $books = BookConfigService::getTrusteeShipChannelBook('','女频', 4);
- }
- $books = CustomMsgService::get_book_full_infos($books,$sex,$title_type);
- return json_encode($books);
- }
- public function BatchCreateCustomSendMsgs($customMsgPrams,$in_channel_ids=[],$batch_no=''){
- $customMsgPrams['batch_no'] = $batch_no;
- //按站点取其下公众号创建摸板消息
- foreach($in_channel_ids as $channel_id){
- $time_config = CustomMsgSendTimeConfig::getTimeConfig($channel_id,[
- 'begin_time'=>$this->hour_begin,
- 'end_time'=>$this->hour_end,
- 'custom_category'=>'auto_custom_trusteeship',
- ]);
- if($time_config){
- $customMsgPrams['send_time']=date('Y-m-d').' '.$time_config->send_time;
- $time_config->last_send_date =date('Y-m-d');
- $time_config->save();
- }
- $officialAccountParams['in_channle_ids'] = [$channel_id];
- $official_accounts = OfficialAccountService::getTrusteeshipOfficialAccountsWithParams($officialAccountParams);
- \Log::info($official_accounts);
- $customMsgPrams['distribution_channel_id'] = $channel_id;
- foreach($official_accounts as $official_account){
- $customMsgPrams['appid'] = $official_account->appid;
- \Log::info('getTrusteeshipOfficialAccounts:appid:'.$official_account->appid.' distribution_channel_id:'.$channel_id);
- //先判断在发送时间段1小时以内,有没有发起过相同的模板消息,如果有发送过,就提示用户已经创建过相同模板消息,不创建新的模板消息
- $isSendCustomer = CustomMsgService::isSendCustomerAtSameTimeAndSex($customMsgPrams);
- if (!empty($isSendCustomer)) {
- \Log::info('isSendCustomerAtSameTime already_send:appid:'.$customMsgPrams['appid'].' distribution_channel_id:'.$customMsgPrams['distribution_channel_id']);
- continue;
- }
- $customMsgService = CustomMsgService::addCustomSendMsgs($customMsgPrams);
- }
- }
- }
- }
|