149 lines
6.2 KiB
TypeScript
149 lines
6.2 KiB
TypeScript
import { isNumber } from 'underscore';
|
|
import { ACTIVITY_TYPE, BIND_PHONE_STATUS, PUBLIC_ACCOUNT_GIFT, PUSH_ROUTE, SDK_37_CONST, SNS_LINK_TYPE } from '../../consts';
|
|
import { ActivityModelType } from '../../db/Activity';
|
|
import { ActivityBindPhoneRewardModel } from '../../db/ActivityBindPhoneReward';
|
|
import { ActivityPublicAccountCodeModel } from '../../db/ActivityPublicAccountCode';
|
|
import { LinkModel } from '../../db/Link';
|
|
import { UserModel, UserType } from '../../db/User';
|
|
import { BindPhoneData } from '../../domain/activityField/bindPhoneField';
|
|
import { aes128Encrypt } from '../../pubUtils/util';
|
|
import { getOnlineRoleByUserCode, getRedis, getRoleCreateTime, getServerCreateTime } from '../redisService';
|
|
import { getActivityById } from './activityService';
|
|
import { sendMessageToUserWithSuc } from '../pushService';
|
|
|
|
|
|
/**
|
|
* 绑定手机相关数据
|
|
*
|
|
* @param {number} serverId 区Id
|
|
* @param {number} activityId 活动Id
|
|
* @param {string} roleId 角色Id
|
|
*
|
|
*/
|
|
export async function getAllSnsLinkData(activityId: number, roleId: string, serverId: number, uid: number) {
|
|
|
|
let activityData: ActivityModelType = await getActivityById(activityId);
|
|
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
|
|
|
let createTime = await getRoleCreateTime(roleId);
|
|
let serverTime = await getServerCreateTime(serverId);
|
|
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
|
|
|
let links = await LinkModel.findByServerId(serverId);
|
|
playerData.setLinks(links);
|
|
|
|
let user: UserType;
|
|
if(playerData.bindPhone) {
|
|
if(!user) user = await UserModel.findUserByUid(uid);
|
|
let receiveRec = await ActivityBindPhoneRewardModel.findByUid(activityId, uid);
|
|
playerData.bindPhone.setBindPhoneStatus(user, receiveRec);
|
|
}
|
|
if(playerData.wxPublicAccount) {
|
|
if(!user) user = await UserModel.findUserByUid(uid);
|
|
if(user.channelInfo) {
|
|
let giftCode = encodeGiftCode(roleId, serverId, user.channelInfo.uid, user.channelInfo.platformAppid, user.channelInfo.childGameId, activityId);
|
|
playerData.wxPublicAccount.setEncodeGiftCode(giftCode);
|
|
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, user.channelId);
|
|
if(playerRecord) playerData.wxPublicAccount.setPlayerRecord(playerRecord);
|
|
}
|
|
}
|
|
|
|
return playerData;
|
|
}
|
|
|
|
/**
|
|
* 绑定手机相关数据
|
|
*
|
|
* @param {number} serverId 区Id
|
|
* @param {number} activityId 活动Id
|
|
* @param {string} roleId 角色Id
|
|
*
|
|
*/
|
|
export async function getBindPhoneData(activityId: number, roleId: string, serverId: number, uid: number) {
|
|
|
|
let activityData: ActivityModelType = await getActivityById(activityId);
|
|
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
|
|
|
let createTime = await getRoleCreateTime(roleId);
|
|
let serverTime = await getServerCreateTime(serverId);
|
|
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
|
|
|
let links = await LinkModel.findByServerId(serverId);
|
|
playerData.setLinks(links);
|
|
|
|
let user: UserType;
|
|
if(playerData.bindPhone) {
|
|
if(!user) user = await UserModel.findUserByUid(uid);
|
|
let receiveRec = await ActivityBindPhoneRewardModel.findByUid(activityId, uid);
|
|
playerData.bindPhone.setBindPhoneStatus(user, receiveRec);
|
|
}
|
|
|
|
return playerData;
|
|
}
|
|
|
|
/**
|
|
* 微信公众号
|
|
*
|
|
* @param {number} serverId 区Id
|
|
* @param {number} activityId 活动Id
|
|
* @param {string} roleId 角色Id
|
|
*
|
|
*/
|
|
export async function getPublicAccountData(activityId: number, roleId: string, serverId: number, user: UserType) {
|
|
|
|
let activityData: ActivityModelType = await getActivityById(activityId);
|
|
if(!activityData || activityData.type != ACTIVITY_TYPE.BIND_PHONE) return null;
|
|
|
|
let createTime = await getRoleCreateTime(roleId);
|
|
let serverTime = await getServerCreateTime(serverId);
|
|
let playerData = new BindPhoneData(activityData, createTime, serverTime);
|
|
|
|
let links = await LinkModel.findByServerId(serverId);
|
|
playerData.setLinks(links);
|
|
|
|
if(playerData.wxPublicAccount) {
|
|
if(user.channelInfo) {
|
|
let giftCode = encodeGiftCode(roleId, serverId, user.channelInfo.uid, user.channelInfo.platformAppid, user.channelInfo.childGameId, activityId);
|
|
playerData.wxPublicAccount.setEncodeGiftCode(giftCode);
|
|
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, user.channelId);
|
|
if(playerRecord) playerData.wxPublicAccount.setPlayerRecord(playerRecord);
|
|
}
|
|
}
|
|
|
|
return playerData;
|
|
}
|
|
|
|
|
|
/**
|
|
* 玩家玩家活动数据
|
|
*
|
|
* @param {number} serverId 区Id
|
|
* @param {number} activityId 活动Id
|
|
* @param {string} roleId 角色Id
|
|
*
|
|
*/
|
|
export async function getAllSnsLinkDataShow(activityId: number, roleId: string, serverId: number, uid: number) {
|
|
let playerData = await getAllSnsLinkData(activityId, roleId, serverId, uid);
|
|
if(playerData && playerData.canShow && playerData.canShow()) {
|
|
return playerData.getShowResult();
|
|
}
|
|
return null
|
|
}
|
|
|
|
function encodeGiftCode(roleId: string, serverId: number, uid: number, pid: string, gid: string, activityId: number) {
|
|
let encodeResult = aes128Encrypt(`${roleId}|${serverId}|${uid}|${pid}|${gid}|${PUBLIC_ACCOUNT_GIFT}${activityId}|${SDK_37_CONST.GIFT_GAME_ID}`, SDK_37_CONST.PUBLIC_GIFT_KEY);
|
|
return `FS${encodeResult}`;
|
|
}
|
|
|
|
export async function sendPublicAccountGift(message: string) {
|
|
let [_activityId, userCode, channelId] = message?.split('|')||[];
|
|
let activityId = parseInt(_activityId);
|
|
if(!isNumber(activityId) || !userCode || !channelId) return;
|
|
|
|
let onlineRoleId = await getOnlineRoleByUserCode(userCode);
|
|
// console.log('##### sendPublicAccountGift', message, userCode, onlineRoleId);
|
|
if (!!onlineRoleId) { // 在线,推送消息
|
|
let playerRecord = await ActivityPublicAccountCodeModel.findByChannel(activityId, channelId);
|
|
await sendMessageToUserWithSuc(onlineRoleId, PUSH_ROUTE.PUBLIC_ACCOUNT_GIFT, { activityId, type: SNS_LINK_TYPE.WX_PUBLIC_ACCOUNT, status: playerRecord.hasReceived? BIND_PHONE_STATUS.RECEIVED: BIND_PHONE_STATUS.HAS_BIND });
|
|
}
|
|
} |