✨ feat(活动): 37通用对接接口

This commit is contained in:
luying
2023-04-04 18:53:02 +08:00
parent 16eace7d4c
commit ad808162d7
9 changed files with 252 additions and 30 deletions
+150 -24
View File
@@ -1,7 +1,7 @@
import { Service } from 'egg';
import { REDIS_KEY, PAY_37_CALLBACK_CODE, SDK_37_CONST, ORDER_STATE, SDK_37_TREAT_CODE, SERVER_STATUS, SDK_37_REFUND_CODE, SDK_37_SEND_GIFT_RESULT_CODE, PUBLIC_ACCOUNT_GIFT, GIFT_GENERATE_TYPE } from '@consts';
import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam, SendGiftCodeParam } from '../domain/sdk';
import { REDIS_KEY, PAY_37_CALLBACK_CODE, SDK_37_CONST, ORDER_STATE, SDK_37_TREAT_CODE, SERVER_STATUS, SDK_37_REFUND_CODE, SDK_37_ACTIVITY_CODE, PUBLIC_ACCOUNT_GIFT, GIFT_GENERATE_TYPE } from '@consts';
import { GetGuildInfoByUserParam, GetRoleByServerParam, GetRoleByUidParam, GetServerListParam, GetServerParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam, SendGiftCodeParam } from '../domain/sdk';
import { RedisClient } from 'redis';
import { checkParamPrice, get37GetServerMd5Sign, get37Md5SignA, get37Md5SignB, getChannelId, getRedisSubChannel, md5 } from '../pubUtils/sdkUtil';
import { UserOrderModel } from '@db/UserOrder';
@@ -425,22 +425,21 @@ export default class Sdk extends Service {
const { ctx } = this;
try {
let validateResult = this.sendGiftValidata(params);
if(validateResult.code != SDK_37_SEND_GIFT_RESULT_CODE.SUCCESS.code) return validateResult;
if(validateResult.code != SDK_37_ACTIVITY_CODE.SUCCESS.code) return validateResult;
let channelId = getChannelId('37', params.user_id);
console.log(channelId);
let user = await UserModel.findUserByChannel(channelId);
if(!user) {
console.error('用户名违规处理, 未找到玩家账号', channelId);
return resResult(SDK_37_SEND_GIFT_RESULT_CODE.ORDER_DUPLICATE);
console.error('sendGiftCode, 未找到玩家账号', channelId);
return resResult(SDK_37_ACTIVITY_CODE.ROLE_NOT_FOUND);
}
if(params.gift_id.startsWith(PUBLIC_ACCOUNT_GIFT)) {
let activityId = parseInt(params.gift_id.replace(PUBLIC_ACCOUNT_GIFT, ''));
if(!activityId) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.GIFT_NOT_FOUND);
if(!activityId) return resResult(SDK_37_ACTIVITY_CODE.GIFT_NOT_FOUND);
let data = await ActivityPublicAccountCodeModel.findByChannel(activityId, channelId);
if(data) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.ORDER_DUPLICATE);
if(data) return resResult(SDK_37_ACTIVITY_CODE.ORDER_DUPLICATE);
await ActivityPublicAccountCodeModel.sendGift(activityId, channelId, params.server_id, params.role_id, params.order_id);
await ctx.service.utils.pushPubAccountGiftChannel(activityId, user.userCode, user.channelId);
@@ -449,33 +448,33 @@ export default class Sdk extends Service {
let giftCodeDetail = await GiftCodeDetailModel.findByCode(params.gift_id);
if(!giftCodeDetail) {
return resResult(SDK_37_SEND_GIFT_RESULT_CODE.GIFT_NOT_FOUND);
return resResult(SDK_37_ACTIVITY_CODE.GIFT_NOT_FOUND);
}
let giftCode = await GiftCodeModel.findByGiftId(giftCodeDetail.giftId);
if(!giftCode) {
return resResult(SDK_37_SEND_GIFT_RESULT_CODE.GIFT_NOT_FOUND);
return resResult(SDK_37_ACTIVITY_CODE.GIFT_NOT_FOUND);
}
if(giftCode.generateType == GIFT_GENERATE_TYPE.ONE_TO_ONE) { // 一人一条,单条不能被多人使用
if(giftCodeDetail.usedNum > 0) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.USE_CNT_MAX);
if(giftCodeDetail.usedNum > 0) return resResult(SDK_37_ACTIVITY_CODE.USE_CNT_MAX);
}
if(!giftCode.isEnable) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.GIFT_CODE_HAS_EXPIRED);
if (giftCode.beginTime > nowSeconds()) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.GIFT_CODE_NOT_START);
if (giftCode.endTime < nowSeconds()) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.GIFT_CODE_HAS_EXPIRED);
if(!giftCode.isEnable) return resResult(SDK_37_ACTIVITY_CODE.GIFT_CODE_HAS_EXPIRED);
if (giftCode.beginTime > nowSeconds()) return resResult(SDK_37_ACTIVITY_CODE.GIFT_CODE_NOT_START);
if (giftCode.endTime < nowSeconds()) return resResult(SDK_37_ACTIVITY_CODE.GIFT_CODE_HAS_EXPIRED);
if(giftCode.channel.indexOf('all') == -1 && giftCode.channel.indexOf(user.channelInfo?.platformAppid) == -1) {
return resResult(SDK_37_SEND_GIFT_RESULT_CODE.GIFT_CHANNEL_ERR);
return resResult(SDK_37_ACTIVITY_CODE.GIFT_CHANNEL_ERR);
}
let role = await RoleModel.findByUid(user.uid, params.server_id);
if(!role) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.ROLE_NOT_FOUND);
if(!role) return resResult(SDK_37_ACTIVITY_CODE.ROLE_NOT_FOUND);
if (giftCodeDetail.roleIds.indexOf(role.roleId) != -1) {
return resResult(SDK_37_SEND_GIFT_RESULT_CODE.ORDER_DUPLICATE);
return resResult(SDK_37_ACTIVITY_CODE.ORDER_DUPLICATE);
}
let checkHasUse = await GiftCodeDetailModel.checkHasUsed(role.roleId, giftCodeDetail.giftId);
if(checkHasUse) {
return resResult(SDK_37_SEND_GIFT_RESULT_CODE.ORDER_DUPLICATE);
return resResult(SDK_37_ACTIVITY_CODE.ORDER_DUPLICATE);
}
await GiftCodeDetailModel.increaseUsedNum(giftCodeDetail.code, role.roleId, role.roleName, role.serverId, params.order_id);
@@ -484,22 +483,149 @@ export default class Sdk extends Service {
await ctx.service.utils.pushGiftCodeChannel(role.roleId, giftCode.id);
}
return resResult(SDK_37_SEND_GIFT_RESULT_CODE.SUCCESS, []);
return resResult(SDK_37_ACTIVITY_CODE.SUCCESS, []);
} catch(e) {
console.error('sendGiftCode err', e);
return ctx.service.utils.resResult(SDK_37_SEND_GIFT_RESULT_CODE.INTERNAL_ERR, '');
return ctx.service.utils.resResult(SDK_37_ACTIVITY_CODE.INTERNAL_ERR, '');
}
}
public sendGiftValidata(params: SendGiftCodeParam) {
if(!params.checkParams()) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.WRONG_PARAMS);
if(!params.checkParams()) return resResult(SDK_37_ACTIVITY_CODE.WRONG_PARAMS);
let { user_id, server_id, role_id, gift_id, order_id, time } = params;
let str = `${user_id}${server_id}${role_id}${gift_id}${order_id}${time}${SDK_37_CONST.CHAT_KEY}`;
let str = `${user_id}${server_id}${role_id}${gift_id}${order_id}${time}${SDK_37_CONST.SEND_GIFT_KEY}`;
let sign = md5(str);
console.log('#### str: ', str, 'sign', sign);
if(sign != params.sign) return resResult(SDK_37_SEND_GIFT_RESULT_CODE.SIGN_ERR);
if(sign != params.sign) return resResult(SDK_37_ACTIVITY_CODE.SIGN_ERR);
return resResult(SDK_37_SEND_GIFT_RESULT_CODE.SUCCESS);
if(nowSeconds() - params.time > 15 * 60) {
return SDK_37_ACTIVITY_CODE.TIME_IS_EXPIRED;
}
return resResult(SDK_37_ACTIVITY_CODE.SUCCESS);
}
// 根据服务器获取玩家数据
public async getRoleByUidAndServer(params:GetRoleByServerParam) {
try {
let validateResult = this.getRoleByServerValidate(params);
if(validateResult.code != SDK_37_ACTIVITY_CODE.SUCCESS.code) return validateResult;
let channelId = getChannelId('37', params.user_id);
let user = await UserModel.findUserByChannel(channelId);
if(!user) return resResult(SDK_37_ACTIVITY_CODE.ROLE_NOT_FOUND);
let server = await ServerlistModel.findByServerId(params.server_id);
if(!server) return resResult(SDK_37_ACTIVITY_CODE.SERVER_NOT_FOUND);
let role = await RoleModel.findByUid(user.uid, params.server_id, 'roleId roleName lv createTime serverId');
if(!role) return resResult(SDK_37_ACTIVITY_CODE.ROLE_NOT_FOUND);
return resResult(SDK_37_ACTIVITY_CODE.SUCCESS, [{
id: role.roleId,
name: role.roleName,
level: role.lv.toString(),
create_time: role.createTime.toString(),
server_id: server.id.toString(),
server_name: server.name,
pid: user.channelInfo?.platformAppid,
gid: user.channelInfo?.childGameId,
}])
} catch(e) {
console.error(e);
return resResult(SDK_37_ACTIVITY_CODE.INTERNAL_ERR);
}
}
private getRoleByServerValidate(params:GetRoleByServerParam) {
if(!params.checkParams()) return resResult(SDK_37_ACTIVITY_CODE.WRONG_PARAMS);
let { user_id, server_id, time } = params;
let str = `${user_id}${server_id}${time}${SDK_37_CONST.SEND_GIFT_KEY}`;
let sign = md5(str);
console.log('#### str: ', str, 'sign', sign);
if(sign != params.sign) return resResult(SDK_37_ACTIVITY_CODE.SIGN_ERR);
if(nowSeconds() - params.time > 15 * 60) {
return SDK_37_ACTIVITY_CODE.TIME_IS_EXPIRED;
}
return resResult(SDK_37_ACTIVITY_CODE.SUCCESS);
}
public async getRoleByUid(params: GetRoleByUidParam) {
try {
let validateResult = this.getRoleByUidValidate(params);
if(validateResult.code != SDK_37_ACTIVITY_CODE.SUCCESS.code) return validateResult;
let channelId = getChannelId('37', params.user_id);
let user = await UserModel.findUserByChannel(channelId);
if(!user) return resResult(SDK_37_ACTIVITY_CODE.ROLE_NOT_FOUND);
let redisClient: RedisClient = this.ctx.app.context.redisClient;
let servers = await redisClient.hgetallAsync(REDIS_KEY.SERVER);
let roles = await RoleModel.findAllByUid(user.uid);
let result = roles.map(role => ({
id: role.roleId,
name: role.roleName,
level: role.lv.toString(),
create_time: role.createTime.toString(),
server_id: role.serverId.toString(),
server_name: servers[role.serverId],
pid: user.channelInfo?.platformAppid,
gid: user.channelInfo?.childGameId,
}));
return resResult(SDK_37_ACTIVITY_CODE.SUCCESS, result);
} catch(e) {
console.error(e);
return resResult(SDK_37_ACTIVITY_CODE.INTERNAL_ERR);
}
}
private getRoleByUidValidate(params: GetRoleByUidParam) {
if(!params.checkParams()) return resResult(SDK_37_ACTIVITY_CODE.WRONG_PARAMS);
let { user_id, time } = params;
let str = `${user_id}${time}${SDK_37_CONST.SEND_GIFT_KEY}`;
let sign = md5(str);
console.log('#### str: ', str, 'sign', sign);
if(sign != params.sign) return resResult(SDK_37_ACTIVITY_CODE.SIGN_ERR);
if(nowSeconds() - params.time > 15 * 60) {
return SDK_37_ACTIVITY_CODE.TIME_IS_EXPIRED;
}
return resResult(SDK_37_ACTIVITY_CODE.SUCCESS);
}
public async getServerInfo(params: GetServerParam) {
try {
let validateResult = this.getServerInfoValidate(params);
if(validateResult.code != SDK_37_ACTIVITY_CODE.SUCCESS.code) return validateResult;
let server = await ServerlistModel.findByServerId(params.server_id);
if(!server) return resResult(SDK_37_ACTIVITY_CODE.SERVER_NOT_FOUND);
return resResult(SDK_37_ACTIVITY_CODE.SUCCESS, {
server_name: server.name,
start_time: moment(server.createdAt).format('YYYY-MM-DD HH:mm:ss')
});
} catch(e) {
console.error(e);
return resResult(SDK_37_ACTIVITY_CODE.INTERNAL_ERR);
}
}
private getServerInfoValidate(params: GetServerParam) {
if(!params.checkParams()) return resResult(SDK_37_ACTIVITY_CODE.WRONG_PARAMS);
let { server_id, time } = params;
let str = `${server_id}${time}${SDK_37_CONST.SEND_GIFT_KEY}`;
let sign = md5(str);
console.log('#### str: ', str, 'sign', sign);
if(sign != params.sign) return resResult(SDK_37_ACTIVITY_CODE.SIGN_ERR);
if(nowSeconds() - params.time > 15 * 60) {
return SDK_37_ACTIVITY_CODE.TIME_IS_EXPIRED;
}
return resResult(SDK_37_ACTIVITY_CODE.SUCCESS);
}
}