public static function createNoticeRecord(array $options) { // 获取通知记录ID $noticeRecordId = $options['notice_record_id']; // 如果提供了接收通知的用户ID,则取得用户对应的phone if (isset($options['user_id'])) { // 对用户进行通知,list的key为user_id $isNoticeUser = true; // 如果只有一个用户,则转换为数组 if (!is_array($options['user_id'])) { $options['user_id'] = [$options['user_id']]; } // 将phone关联到user_id上,key为user_id,value为phone $list = User::assocPhoneByUserIds($options['user_id']); } else { // false,不是对站内用户进行通知,list的key为没有意义,user_id为0 $isNoticeUser = false; // 如果只有一个,同样转换为数组 if (!is_array($options['phone'])) { $options['phone'] = [$options['phone']]; } // 设置list为这些phone $list = $options['phone']; } // 如果list为空,则不进行后续处理 if (!$list) { return; } $time = time(); // 当前unix时间戳 // 为防止需要插入的记录太多,对list进行分块 $list = array_chunk($list, 1000, true); // 开始遍历,并插入记录 foreach ($list as $chunk) { $data = []; // 本次需要插入的全部记录 // 遍历这个chunk,将每项添加至data中准备插入 foreach ($chunk as $key => $phone) { $data[] = ['notice_record_id' => $noticeRecordId, 'user_id' => $isNoticeUser ? $key : 0, 'phone' => $phone, 'created_at' => $time, 'updated_at' => $time, 'status' => static::STATUS_WAIT, 'failure_reason' => '']; } static::insert($data); // 插入记录 } // 取得插入的phones并返回,key为记录ID,value为phone $phones = static::where('notice_record_id', $noticeRecordId)->lists('phone', 'id'); if ($phones) { $phones = $phones->toArray(); } return $phones; }