whereIn('group_id', $adminGroup)->column('channel_id');
} else {
$channel_ids = AdminService::instance()->getAdminId($admin_id)->data;
}
$channel_ids = array_unique($channel_ids);
return $this->setData($channel_ids)->getReturn();
}
public function createDelayReply($params, $vipId)
{
$group = $params['admin_group'];
$channelIds = $this->getVipChannelIds($vipId, $group)->data;
if (!$channelIds) {
return $this->setCode(ErrorCodeConstants::PARAMS_ERROR_INVALID)->setMsg('未查询到可以同步的渠道')->getReturn();
}
LogService::info('同步的渠道'.json_encode($channelIds));
$updateChannelDelay = [];
$error = '';
unset($params['id']);
$hasMini = 0;
//查看是否包含小程序类型 6是小程序类型
if (isset($params['url_type']) && $params['url_type'] == 6){
$hasMini = 1;
}
if ($params['content_type'] == 2 && !empty($params['text_content'])){
$urlTypes = array_column($params['text_content'],'url_type');
$hasMini = in_array(6,$urlTypes) ? 1 : 0;
}
foreach ($channelIds as $channelId) {
if ($channelId != -1) {
$isOpen = 1;
if ($hasMini){
$isOpen = MiniProgramService::instance()->miniWrite($channelId,3);
}
if (!$isOpen){
LogService::info('vip同步延迟客服消息失败'.$channelId.'未开通小程序权限');
continue;
}
$return = $this->updateDelayCustom($params, $channelId);
if ($return->code == ErrorCodeConstants::SUCCESS) {
$updateChannelDelay[] = $return->data;
} else {
$error = $return->msg;
}
} else {
$error = '未查询到需要同步的渠道';
}
}
if (!$updateChannelDelay) {
if (!$error) {
$error = '更新失败';
}
return $this->setCode(ErrorCodeConstants::PARAMS_ERROR_INVALID)->setMsg($error)->getReturn();
}
$result = $this->updateDelayCustom($params, $vipId, true);
if ($result->code == ErrorCodeConstants::SUCCESS) {
model('subscribe_delay_push')->whereIn('id', $updateChannelDelay)->update(['pid'=>$result->data]);
return $this->setData($result->data)->getReturn();
}
return $this->setCode(ErrorCodeConstants::DB_ERROR_UPDATE)->setMsg('更新失败')->getReturn();
}
/**
* @param $params
* @param $channel_id
* @param $is_vip
* @return ReturnObject
*/
public function updateDelayCustom($params, $channel_id, $is_vip = false)
{
$params['url_type'] = (int)$params['url_type'] ?? SubscribeDelayConstants::URL_TYPE_REFERRAL;
$params['user_type'] = (int)$params['user_type'] ?? SubscribeDelayConstants::USER_TYPE_ALL;
$content = [
'title' => $params['title'],
'image' => $params['image'],
'description' => $params['description'],
'user_type' => $params['user_type'],
'url_type' => $params['url_type'],
'sex' => $params['sex'],
'mobile_system' => $params['mobile_system'],
'mini_type' =>$params['mini_type'] ?? 0,
'text_tip_word'=>$params['text_tip_word'] ?? '',
];
if ($is_vip && !empty($params['id'])) {
$row = model('subscribe_delay_push')->where('id', $params['id'])->find();
if (!$row) {
return $this->setMsg('客服消息不存在')->setCode(ErrorCodeConstants::DB_ERROR_SELECT)->getReturn();
}
} else {
$check = [
'admin_id' => $channel_id,
'type' => $params['unit'],
'status' => 'normal',
'delay' => $params['current_time'],
];
$row = model('subscribe_delay_push')->where($check)->find();
}
if (!$is_vip) {
if ($params['content_type'] == 2){ //文本类型
$content['description'] = $this->getContent($params, $channel_id);
}else{//图文类型
//添加链接
switch ($params['url_type']) {
case SubscribeDelayConstants::URL_TYPE_REFERRAL:
$referralId = ReferralService::instance()->getChannelReferralFromVip($params['v_id'], $channel_id)->data;
if (!$referralId) {
LogService::info('vip同步延迟客服消息失败('.$channel_id.')分流链接无效');
return $this->setMsg('分流链接无效')->setCode(ErrorCodeConstants::RESULT_EMPTY)->getReturn();
}
$params['referral_url'] = $content['url'] = getCurrentDomain($channel_id, '/t/' . $referralId);
break;
case SubscribeDelayConstants::URL_TYPE_ACTIVITY:
$url = CustomService::instance()->_buildVipActivityUrl($channel_id, $params['activity_id']);
if (!$url) {
LogService::info('vip同步延迟客服消息失败('.$channel_id.')活动不存在');
return $this->setMsg('活动不存在')->setCode(ErrorCodeConstants::RESULT_EMPTY)->getReturn();
}
$params['activity_url'] = $content['url'] = $url;
break;
case SubscribeDelayConstants::URL_TYPE_RECENTLY_READ:
$content['url'] = getCurrentDomain($channel_id, '/index/book/chapter');
break;
case SubscribeDelayConstants::URL_TYPE_SELF:
$content['url'] = $params['self_url'];
break;
case SubscribeDelayConstants::URL_TYPE_SIGN:
$content['url'] = "weixin://bizmsgmenu?msgmenucontent=" . Message::MESSAGE_KEYWORD . "&msgmenuid={{" . time() . "}}";
break;
case SubscribeDelayConstants::URL_TYPE_MINI:
$content['mini_content'] = MiniProgramService::instance()->getMiniContent($channel_id,$params);
break;
}
}
}
$id = false;
if ($row) {
if (!$is_vip) {
$content = json_encode($content, JSON_UNESCAPED_UNICODE);
$content = UrlService::instance()->replaceReferralHost($channel_id, $content)->data;
} else {
$content = '';
}
$data = [
'type' => $params['unit'],
'delay' => $params['current_time'],
'content' => $content,
'news_set' => json_encode($params, JSON_UNESCAPED_UNICODE),
'status' => 'normal',
'content_type'=>$params['content_type'],
'updatetime' => time()
];
$result = model('subscribe_delay_push')->update($data, ['id'=>$row['id']]);
if ($result !== false) {
$id = $row['id'];
}
} else {
//新增
if (!$is_vip) {
$content = json_encode($content, JSON_UNESCAPED_UNICODE);
$content = UrlService::instance()->replaceReferralHost($channel_id, $content)->data;
} else {
$content = '';
}
$data = [
'admin_id' => $channel_id,
'type' => $params['unit'],
'delay' => $params['current_time'],
'content' => $content,
'news_set' => json_encode($params, JSON_UNESCAPED_UNICODE),
'content_type'=>$params['content_type'],
'status' => 'normal',
'updatetime' => time(),
'createtime' => time(),
];
$id = model('subscribe_delay_push')->insertGetId($data);
}
if ($id !== false) {
//需要清理一下缓存
model('subscribe_delay_push')->delCache($channel_id);
return $this->setData($id)->getReturn();
} else {
return $this->setMsg(model('subscribe_delay_push')->getError())->setCode(ErrorCodeConstants::DB_ERROR_UPDATE)->getReturn();
}
}
/**
* 延迟客服消息-处理文本类型
* @param $args
* @return string
*/
public function getContent($args,$channelId)
{
if (!isset($args['text_content']) || $args['text_content'] == false){
return '';
}
$wxJson = model("AdminConfig")
->where('admin_id', $channelId)
->value('json');
$gzh_name = '';
if (!empty($wxJson)) {
$wxInfo = json_decode($wxJson, true);
$gzh_name = $wxInfo['authorizer_info']['nick_name'];
}
$content = $args['text_content'];
if (isset($args['text_tip_word']) && $args['text_tip_word'] != false){
$str = "{$args['text_tip_word']}\r\n";
}else{
$str = " 欢迎关注「{$gzh_name}」,点击下方继续阅读\r\n";
}
foreach($content as $key =>$value){
if ($value['url_type'] == 6){
$str .= MiniProgramService::instance()->getMiniText2($value['url'],$value['name'],$channelId)."\r\n";
continue;
}
if ($value['url_type'] == 3){
$value['url'] = getCurrentDomain($channelId, '/index/book/chapter');
}
if ($value['url_type'] == 5){
$value['url'] = "weixin://bizmsgmenu?msgmenucontent=" . Message::MESSAGE_KEYWORD . "&msgmenuid={{" . time() . "}}";
}
if ($key == 1){
$str .= "\r\n更多精彩内容,点击下方蓝字内容\r\n";
}
$str .= "{$value['name']}\r\n";
}
$str .= "为了方便下次阅读,请置顶公众号\r\n";
if ($args['is_sign'] == 2){
$str .= "{$args['sign_content']}";
}else{
$str .= '回复签到,获得书币';
}
return $str;
}
}