$uid, 'price' => $fee, 'day' => $day, 'sign_time' => time(), 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')];
Redis::sadd('user_sign:uid', $uid);
Redis::hset('user_sign:uid:info', $uid, json_encode($sign_data));
ReadRecordService::setSignInfo($uid, json_encode($sign_data));
} else {
$user_sign_model = new UserSign();
$user_sign_model->setCurrentTable(date('Ym'));
$data = ['uid'=>$uid,'price'=>$fee,'day'=>$day,'sign_time'=>time()];
$user_sign_model->create($data);
}
return compact('count','fee');
}
/**
* 新签到回复
* @param $openid
* @param bool $check_sign
* @param int $price
* @return string
*/
public static function userSignReturnContent3($openid,$distribution_channel_id='',$WECHAT_CUSTOM_HOST='zhuishuyun')
{
return self::userSignReturnContent($openid,$distribution_channel_id,$WECHAT_CUSTOM_HOST);
}
public static function userSignReturnContent($openid,$distribution_channel_id='',$WECHAT_CUSTOM_HOST='zhuishuyun'){
//强关信息
$user = ForceSubscribeUsers::getOneForceSubscribeUsersByOpenid($openid);
if (!$user) {
return self::defaultSignContent($distribution_channel_id,$WECHAT_CUSTOM_HOST);
}
//用户信息
$user_info = User::where('id',$user->uid)->first();
if (!$user_info){
return self::defaultSignContent($distribution_channel_id,$WECHAT_CUSTOM_HOST);
}
$encode_distribution_channel_id = encodeDistributionChannelId($distribution_channel_id);
$continueReadUrl = env('PROTOCOL') . '://site' . $encode_distribution_channel_id . '.' . $WECHAT_CUSTOM_HOST . '.com/continue';
$sign_url = env('PROTOCOL') . '://site' . $encode_distribution_channel_id . '.' . $WECHAT_CUSTOM_HOST . '.com/sign';
//是否签到
$sign_status = self::isSign($user->uid);
if($sign_status){
$content = self::hadSignContent($continueReadUrl);
}else{
//直接签到
$direct_sites = explode(',',env('DIRECT_SIGN_SITES'));
$is_direct_sign = in_array($distribution_channel_id,$direct_sites) ? true : false;
if ($is_direct_sign) {
$content = self::directSignContent($user->uid,$user_info->nickname,$continueReadUrl,$sign_url);
} else {
$content = '尊敬的会员:'.$user_info->nickname."\n\n"."💰点击此处签到领书币" ;
}
}
$content .= self::bookContent($user->uid,$distribution_channel_id,$encode_distribution_channel_id,$WECHAT_CUSTOM_HOST);
$activity_attach_content = '';
try{
$activity_attach_content = self::signCallBackPushActivityInfoV2($user->uid,$distribution_channel_id);
}catch (\Exception $e){
}
if($activity_attach_content){
$content .= "\n\n" .$activity_attach_content;
}
return $content;
}
private static function bookContent($uid,$distribution_channel_id,$encode_distribution_channel_id,$host){
//展示用户最近阅读的三本书,倒叙排列
//如果没有阅读记录则
$read_record_list = ReadRecordService::getReadRecord($uid);
if($read_record_list){
$temp = 0;
$content = "\n\n" . '历史阅读记录';
foreach ($read_record_list as $item){
if($temp >=3) break;
$url = env('PROTOCOL') . '://site' . $encode_distribution_channel_id . '.' . $host . '.com/reader?bid=' . Hashids::encode($item['bid']) . '&cid=' . $item['cid'];
$content .= "\n\n" . ' ☞ 《' . $item['book_name'] . '》';
$temp++;
}
return $content;
}
//正常推荐3本书
//男女频
$channel_sex = ChannelService::getChannelCompanySex($distribution_channel_id);
if($channel_sex == 1){
$sign_recomm_bid_key = '男频';
}else{
$sex = ForceSubscribeService::getUserRealSexByUid($uid);
$sign_recomm_bid_key = $sex==1?'男频':'女频';
}
$recomm_books = BookConfigService::getSignRecommendBooksFromCache([], $sign_recomm_bid_key,3);
if ($recomm_books) {
// 判断是否不展示书名
$content = "\n\n" . '热门书籍推荐';
foreach ($recomm_books as $key=>$book) {
$book_name = $book->book_name;
$url = env('PROTOCOL') . '://site' . $encode_distribution_channel_id . '.' . $host . '.com/reader?bid=' . Hashids::encode($book->bid) . '&cid=' . $book->first_cid;
$content .= "\n\n" . ' ☞ 《' . $book_name . '》';
}
return $content;
}
return '';
}
//直接签到
private static function directSignContent($uid,$user_name,$continueReadUrl,$sign_url){
$result = self::signV2($uid,date('Y-m-d'));
if($result){
$content = "本日签到成功,您已连续签到{$result['count']}天,赠送{$result['fee']}书币,连续签到,最高赠送150书币~";
$content .= "\n\n ☞ 点我继续上次阅读';
return $content;
}else{
//签到失败
$content = '尊敬的会员:'.$user_name."\n\n"."💰点击此处签到领书币" ;
return $content;
}
}
//已经签过到
private static function hadSignContent($continueReadUrl){
$content = '今日已经签到过了,明日继续签到得书币哦~' ;
$content .= "\n\n ☞ 点我继续上次阅读';
return $content;
}
//默认签到文案
private static function defaultSignContent($distribution_channel_id,$host){
$encode_distribution_channel_id = encodeDistributionChannelId($distribution_channel_id);
$url = env('PROTOCOL') . '://site' . $encode_distribution_channel_id . '.' . $host . '.com/sign';
$content = "尊敬的会员:\n\n" . ' 💰点击此处签到领书币';
return $content;
}
//没有开关控制的签到推送,先去掉
private static function newUserActivity($user)
{
$content = '';
$status = self::newUserActivityStatus($user->uid);
$record = [];
//新关未付费用户42小时后充推送活动 68元的活动 文案:全年免费看书
if (strtotime($user->created_at) + 42 * 3600 < time() &&
$user->distribution_channel_id == 123 &&
!in_array(1, $status)
) {
$url = env('PROTOCOL') . '://site' . encodeDistributionChannelId($user->distribution_channel_id) . '.' . env('CUSTOM_HOST') . '.com/sale/seYearActivity?fromtype=signcallback_forever&send_time=' . time();
$content .= "\n\n" . ' 💰全年免费看书';
$record[] = ['uid' => $user->uid, 'type' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')];
}
//20小时的 文字链的文案:书币充值特惠
if (strtotime($user->created_at) + 20 * 3600 < time() && !in_array(2, $status)) {
$url = env('PROTOCOL') . '://site' . encodeDistributionChannelId($user->distribution_channel_id) . '.' . env('CUSTOM_HOST') . '.com/sale/newUserSale?fromtype=signcallback_newUserSale&send_time=' . time();
$content .= "\n\n" . ' 💰书币充值特惠';
$record[] = ['uid' => $user->uid, 'type' => 2, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')];
}
//36小时的。文案:充9.9送2000书币
if (strtotime($user->created_at) + 36 * 3600 < time() && !in_array(3, $status)) {
$url = env('PROTOCOL') . '://site' . encodeDistributionChannelId($user->distribution_channel_id) . '.' . env('CUSTOM_HOST') . '.com/sale/newUserActivity?fromtype=signcallback_newUserActivity&send_time=' . time();
$content .= "\n\n" . ' 💰充9.9得2000书币';
$record[] = ['uid' => $user->uid, 'type' => 3, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')];
}
self::recordnewUserActivityPush($record);
return $content;
}
private static function newUserActivityStatus($uid)
{
$data = [-1];
if (!$uid) {
return $data;
}
$result = DB::connection('api_mysql')->table('user_sign_push_activity')->where('uid', $uid)->select('type')->get();
if ($result) {
foreach ($result as $v) {
array_push($data, $v->type);
}
}
return $data;
}
private static function recordnewUserActivityPush($data)
{
if ($data) {
try {
DB::connection('api_mysql')->table('user_sign_push_activity')->insert($data);
} catch (\Exception $e) {
}
}
}
public static function signCallBackPushActivityInfoV2($uid,$distribution_channel_id){
$activity_info = ActivityService::selectNowActiveActivity($distribution_channel_id);
if(empty($activity_info))
return false;
$acyivity_id = $activity_info->id;
$activity_setting = $activity_info->setting;
if(!$activity_setting ) return false;
$activity_setting = json_decode($activity_setting,1);
if(!isset($activity_setting['sign_text']) || empty($activity_setting['sign_text'])) return false;
if($activity_info->create_type == 5){
//渠道自定义活动
if(!isset($activity_setting['sign_enter_point_switch']) || empty($activity_setting['sign_enter_point_switch'])){
return false;
}
}else{
if(!ActivitySwitchService::isShowInPage($acyivity_id,$distribution_channel_id,'sign')){
return false;
}
}
$user = UserService::getById($uid);
if(empty($user))
return false;
if($user && isset($user->created_at) && (time() - strtotime($user->created_at)) >= 86400*2) {
$url = env('PROTOCOL') . '://site' . encodeDistributionChannelId($distribution_channel_id) . '.' . env('CUSTOM_HOST') . '.com'.$activity_info->activity_page . '&fromtype=signcallback' ;
return ' ' . $activity_setting['sign_text'] . '';
}
return false;
}
private static function rfmActivity($uid,$distribution_channel_id,$created_at,&$status){
$rfm_user = DB::connection('api_mysql')->table('rfm_ab_test_user')->where('uid',$uid)->select('uid','type')->first();
if(!$rfm_user){
$status = 0;
return '';
}
$time = time() - strtotime($created_at);
if($time > 3600*4 && $time < 23*3600){
if($rfm_user->type == 'A'){
$status = 1;
return '';
}
$level = UserService::rfmLevel($uid,strtotime($created_at));
if($level){
$level_str = implode('',$level);
}
$status = 1;
return '';
}
if($time > 23*3600){
$level = UserService::rfmLevel($uid,strtotime($created_at));
if($level){
$level_str = implode('',$level);
}
$status = 1;
return '';
}
$status = 1;
return '';
}
public static function guideFans($uid,$distribution_channel_id,$openid,$created_at){
list($inner_sites,$qrcode,$second_qrcode) = Redis::hmget('env','GUIDE_PERSONAL_ACCOUNT_SITES','ACTIVE_GUIDE_PERSONAL_ACCOUNT_OURS_QRCODE','SECOND_ACTIVE_GUIDE_PERSONAL_ACCOUNT_OURS_QRCODE');
if ($inner_sites && in_array($distribution_channel_id, explode(',', $inner_sites))){
if (!self::isAccess($openid, $type)) return false;
//注册时按
if ($type == 'INNER_ACTIVE') {
if (!$qrcode) return false;
}
if ($type == 'SECOND_INNER_ACTIVE') {
if (!$second_qrcode) return false;
}
if (strtotime($created_at) <= strtotime('-1 day')) {
$sql = sprintf("select id from orders where uid in (select id from users where openid = '%s' ) and status = 'PAID' and price >=10 limit 1",$openid);
$result = DB::connection('api_mysql')->select( $sql );
if($result){
return true;
}else{
//openid充值金额小于10:不曝光
return false;
}
}
$sql = sprintf("select id from orders where uid = %s and status = 'PAID' and price >=10 limit 1",$uid);
$result = DB::connection('api_mysql')->select( $sql );
//uid下注册时间小于24小时
if ($result) {
return true;
} else {
//uid下充值金额小于10:不曝光
return false;
}
}
return false;
}
//crm 访问权限
private static function isAccess($openid, &$type)
{
//二次到分
$second_result = DB::connection('api_mysql')->table('crm_second_guide')->where('openid',$openid)->select('status')->first();
if($second_result && $second_result->status == 0){
$type = 'SECOND_INNER_ACTIVE';
return true;
}
$first_result = DB::connection('api_mysql')->table('user_bind_hk_welfare')->where('openid',$openid)->select('id')->first();
if ($first_result) {
//领过书币不曝光
return false;
}
$type = 'INNER_ACTIVE';
return true;
}
}