活动:根据订单获得活动
This commit is contained in:
@@ -3,8 +3,9 @@ import { aesEncrypt, aesEncryptcfb, resResult } from '../../../pubUtils/util';
|
|||||||
import { ENCRYPT_IV, ENCRYPT_KEY, STATUS, TASK_TYPE } from '../../../consts';
|
import { ENCRYPT_IV, ENCRYPT_KEY, STATUS, TASK_TYPE } from '../../../consts';
|
||||||
import { ActivityGroupModel } from '../../../db/ActivityGroup';
|
import { ActivityGroupModel } from '../../../db/ActivityGroup';
|
||||||
import { ServerlistModel } from '../../../db/Serverlist';
|
import { ServerlistModel } from '../../../db/Serverlist';
|
||||||
import { getActivity, getActivityById } from '../../../services/activity/activityService';
|
import { getActivitiesWithOrder, getActivity, getActivityById } from '../../../services/activity/activityService';
|
||||||
import { ActivityModel } from '../../../db/Activity';
|
import { ActivityModel, ActivityModelType } from '../../../db/Activity';
|
||||||
|
import { UserOrderModel } from '../../../db/UserOrder';
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
new HandlerService(app, {});
|
new HandlerService(app, {});
|
||||||
@@ -56,6 +57,30 @@ export class ActivityHandler {
|
|||||||
return resResult(STATUS.SUCCESS, { playerActivityArray, playerGroupArray });
|
return resResult(STATUS.SUCCESS, { playerActivityArray, playerGroupArray });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getActivitiesByOrder(msg: { localOrderID: string }, session: BackendSession) {
|
||||||
|
|
||||||
|
const { localOrderID } = msg;
|
||||||
|
const roleId = session.get('roleId');
|
||||||
|
const serverId = session.get('serverId');
|
||||||
|
const guildCode = session.get('guildCode');
|
||||||
|
|
||||||
|
let orderInfo = await UserOrderModel.findOrder(localOrderID);
|
||||||
|
if (!orderInfo || orderInfo.roleId != roleId) {
|
||||||
|
return resResult(STATUS.NO_ORDER);
|
||||||
|
}
|
||||||
|
let activities: ActivityModelType[] = await getActivitiesWithOrder(orderInfo);
|
||||||
|
let result = [];
|
||||||
|
for(let activityData of activities) {
|
||||||
|
if (!activityData) continue;
|
||||||
|
|
||||||
|
let playerActivityData = await getActivity(serverId, roleId, guildCode, activityData.activityId, activityData.type);
|
||||||
|
if(playerActivityData) {
|
||||||
|
result.push(playerActivityData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resResult(STATUS.SUCCESS, { activities: result });
|
||||||
|
}
|
||||||
|
|
||||||
async debugActivityMemory(msg: {}, session: BackendSession) {
|
async debugActivityMemory(msg: {}, session: BackendSession) {
|
||||||
const { } = msg;
|
const { } = msg;
|
||||||
const roleId = session.get('roleId');
|
const roleId = session.get('roleId');
|
||||||
|
|||||||
@@ -254,6 +254,6 @@ export class orderHandler {
|
|||||||
let result = await settleOrder(orderInfo, serverId, sid);
|
let result = await settleOrder(orderInfo, serverId, sid);
|
||||||
orderInfo = await UserOrderModel.success(roleId, localOrderID, JSON.stringify(result));
|
orderInfo = await UserOrderModel.success(roleId, localOrderID, JSON.stringify(result));
|
||||||
console.log(`测试支付完成!!!!!!!!!!!!! serverId:${serverId}, productID:${productID}, productType:${productType}, roleId:${roleId}, localOrderID:${localOrderID}, payType:${payType}`)
|
console.log(`测试支付完成!!!!!!!!!!!!! serverId:${serverId}, productID:${productID}, productType:${productType}, roleId:${roleId}, localOrderID:${localOrderID}, payType:${payType}`)
|
||||||
return resResult(STATUS.SUCCESS, result);
|
return resResult(STATUS.SUCCESS, {...result, localOrderID});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ import { getGuildChannelSid } from '../chatService';
|
|||||||
import { getGuildPayDataShow } from './guildPayService';
|
import { getGuildPayDataShow } from './guildPayService';
|
||||||
import { PopUpShopItemShow } from '../../domain/activityField/popUpShopField';
|
import { PopUpShopItemShow } from '../../domain/activityField/popUpShopField';
|
||||||
import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from '../pushService';
|
import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from '../pushService';
|
||||||
|
import { UserOrderModelType } from '../../db/UserOrder';
|
||||||
|
import { isArray } from 'underscore';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取活动数据
|
* 获取活动数据
|
||||||
@@ -56,6 +58,7 @@ export async function getActivity(serverId: number, roleId: string, guildCode: s
|
|||||||
case ACTIVITY_TYPE.SIGN_IN://签到 4
|
case ACTIVITY_TYPE.SIGN_IN://签到 4
|
||||||
case ACTIVITY_TYPE.SIGN_IN_VIP://高级签到 5
|
case ACTIVITY_TYPE.SIGN_IN_VIP://高级签到 5
|
||||||
case ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN://新手签到 25
|
case ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN://新手签到 25
|
||||||
|
case ACTIVITY_TYPE.COMMON_SIGN_IN://通用签到 36
|
||||||
{
|
{
|
||||||
activityData = await getPlayerSignInData(activityId, serverId, roleId);
|
activityData = await getPlayerSignInData(activityId, serverId, roleId);
|
||||||
break;
|
break;
|
||||||
@@ -176,11 +179,6 @@ export async function getActivity(serverId: number, roleId: string, guildCode: s
|
|||||||
activityData = await getPlayerMonopolyData(activityId, serverId, roleId);
|
activityData = await getPlayerMonopolyData(activityId, serverId, roleId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIVITY_TYPE.COMMON_SIGN_IN://通用签到 36
|
|
||||||
{
|
|
||||||
activityData = await getPlayerSignInData(activityId, serverId, roleId);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ACTIVITY_TYPE.NEW_HERO_GIFTS://新将好礼(很多红包,用积分兑换一遍结束) 37
|
case ACTIVITY_TYPE.NEW_HERO_GIFTS://新将好礼(很多红包,用积分兑换一遍结束) 37
|
||||||
{
|
{
|
||||||
activityData = await getPlayerNewHeroGiftsData(activityId, serverId, roleId);
|
activityData = await getPlayerNewHeroGiftsData(activityId, serverId, roleId);
|
||||||
@@ -252,6 +250,15 @@ export async function getActivitiesByType(serverId: number, type: number) {
|
|||||||
return activities.map(transActivityInRemoteToModelType);
|
return activities.map(transActivityInRemoteToModelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getActivitiesByTypes(serverId: number, types: number[]) {
|
||||||
|
let result: ActivityModelType[] = [];
|
||||||
|
for(let type of types) {
|
||||||
|
let activities = await getActivitiesByType(serverId, type);
|
||||||
|
if(activities && isArray(activities)) result.push(...activities);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
export async function getActivities() {
|
export async function getActivities() {
|
||||||
let serverType = pinus.app.getServerType();
|
let serverType = pinus.app.getServerType();
|
||||||
if(serverType == 'activity') {
|
if(serverType == 'activity') {
|
||||||
@@ -433,3 +440,23 @@ export async function pushActivities(arr: pushActivityInter[], roleId: string, s
|
|||||||
export async function pushActivitiesToGuild(arr: pushActivityInter[], guildCode: string) {
|
export async function pushActivitiesToGuild(arr: pushActivityInter[], guildCode: string) {
|
||||||
if(arr.length > 0) await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.ACTIVITY_UPDATE, { activities: arr })
|
if(arr.length > 0) await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.ACTIVITY_UPDATE, { activities: arr })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getActivitiesWithOrder(orderInfo: UserOrderModelType) {
|
||||||
|
let activities: ActivityModelType[] = [];
|
||||||
|
let curActivity = await getActivityById(orderInfo.activityId);
|
||||||
|
if(curActivity) activities.push(curActivity);
|
||||||
|
|
||||||
|
let activitiesWithSum = await getActivitiesByTypes(orderInfo.serverId, [ACTIVITY_TYPE.FIRST_GIFT, ACTIVITY_TYPE.RECHARGE_MONEY, ACTIVITY_TYPE.VIP_RECHARGE_MONEY, ACTIVITY_TYPE.GUILD_PAY]);
|
||||||
|
if(activitiesWithSum && isArray(activitiesWithSum)) activities.push(...activitiesWithSum);
|
||||||
|
|
||||||
|
if(orderInfo.paramStr) { //大富翁商店结算
|
||||||
|
try {
|
||||||
|
let paramObj = JSON.parse(orderInfo.paramStr);
|
||||||
|
let paramActivity = paramObj.activityId && await getActivityById(paramObj.activityId);
|
||||||
|
if(paramActivity) activities.push(paramActivity);
|
||||||
|
} catch(e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return activities;
|
||||||
|
}
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
import moment = require('moment');
|
import moment = require('moment');
|
||||||
import { ACTIVITY_TYPE, REFRESH_TIME, SERVER_OPEN_TIME, SIGNIN_VIP_OPEN_LIMIT, STATUS } from '../../consts';
|
import { ACTIVITY_TYPE, SERVER_OPEN_TIME, SIGNIN_VIP_OPEN_LIMIT, STATUS } from '../../consts';
|
||||||
import { ActivityModel, ActivityModelType } from '../../db/Activity';
|
import { ActivityModelType } from '../../db/Activity';
|
||||||
import { ActivitySignInModel, ActivitySignInModelType } from '../../db/ActivitySignIn';
|
import { ActivitySignInModel, ActivitySignInModelType } from '../../db/ActivitySignIn';
|
||||||
import { RoleModel } from '../../db/Role';
|
|
||||||
import { ServerlistModel } from '../../db/Serverlist';
|
|
||||||
import { SignInData } from '../../domain/activityField/signInField';
|
import { SignInData } from '../../domain/activityField/signInField';
|
||||||
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
import { getRoleCreateTime, getServerCreateTime } from '../redisService';
|
||||||
import { getActivitiesByType, getActivityById } from './activityService';
|
import { getActivitiesByType, getActivityById } from './activityService';
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ export async function makeOrder(orderInfo: UserOrderModelType, sid: string) {
|
|||||||
rewardResult = await makeShop(roleId, roleInfo.roleName, sid, orderInfo.serverId, orderInfo.activityId, orderInfo.productID)
|
rewardResult = await makeShop(roleId, roleInfo.roleName, sid, orderInfo.serverId, orderInfo.activityId, orderInfo.productID)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIVITY_TYPE.SELF_SERVICE_SHOP://自选商店-购买礼包
|
case ACTIVITY_TYPE.SELF_SERVICE_SHOP://自选商店-购买礼包(糜家商队)
|
||||||
{
|
{
|
||||||
rewardResult = await makeSelfServerShop(roleId, roleInfo.roleName, sid, orderInfo.serverId, orderInfo.activityId, orderInfo.productID)
|
rewardResult = await makeSelfServerShop(roleId, roleInfo.roleName, sid, orderInfo.serverId, orderInfo.activityId, orderInfo.productID)
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -4,6 +4,35 @@ import { ActivityRefreshShopModelType, GoodsInfo } from '../../db/ActivityRefres
|
|||||||
import { getZeroPoint, getZeroPointOfTime } from '../../pubUtils/timeUtil';
|
import { getZeroPoint, getZeroPointOfTime } from '../../pubUtils/timeUtil';
|
||||||
import { ActivityBase } from './activityField';
|
import { ActivityBase } from './activityField';
|
||||||
|
|
||||||
|
interface RefreshShopDataInDb {
|
||||||
|
shopType: number;
|
||||||
|
name: string;
|
||||||
|
data: RefreshShopPageInDb[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface RefreshShopPageInDb {
|
||||||
|
pageIndex: number;
|
||||||
|
viewcount: number;
|
||||||
|
name: string;
|
||||||
|
items: RefreshShopItemInDb[]
|
||||||
|
}
|
||||||
|
|
||||||
|
interface RefreshShopItemInDb {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
price: number;
|
||||||
|
productID: string;
|
||||||
|
reward: string;
|
||||||
|
countMax: number;
|
||||||
|
discount: number;
|
||||||
|
imageName: string;
|
||||||
|
consume: string;
|
||||||
|
weight: number;
|
||||||
|
refreshType: number;
|
||||||
|
levelLimitMin: number;
|
||||||
|
levelLimitMax: number;
|
||||||
|
}
|
||||||
|
|
||||||
// 每个商品的内容
|
// 每个商品的内容
|
||||||
export class RefreshShopItem {
|
export class RefreshShopItem {
|
||||||
id: number; // 商品id
|
id: number; // 商品id
|
||||||
@@ -23,7 +52,7 @@ export class RefreshShopItem {
|
|||||||
|
|
||||||
buyCount: number = 0; //购买过的次数
|
buyCount: number = 0; //购买过的次数
|
||||||
|
|
||||||
constructor(data: any, pageIndex: number) {
|
constructor(data: RefreshShopItemInDb, pageIndex: number) {
|
||||||
this.pageIndex = pageIndex;
|
this.pageIndex = pageIndex;
|
||||||
this.id = data.id;
|
this.id = data.id;
|
||||||
this.reward = data.reward;
|
this.reward = data.reward;
|
||||||
@@ -60,13 +89,13 @@ export class RefreshShopPage {
|
|||||||
name: string; //名字
|
name: string; //名字
|
||||||
viewCount: number; //随机可购买的商品个数
|
viewCount: number; //随机可购买的商品个数
|
||||||
items: Array<RefreshShopItem> = [];//商品列表
|
items: Array<RefreshShopItem> = [];//商品列表
|
||||||
constructor(data: any) {
|
constructor(data: RefreshShopPageInDb) {
|
||||||
this.pageIndex = data.pageIndex;
|
this.pageIndex = data.pageIndex;
|
||||||
this.name = data.name;
|
this.name = data.name;
|
||||||
for (let item of data.items) {
|
for (let item of data.items) {
|
||||||
this.items.push(new RefreshShopItem(item, data.pageIndex))
|
this.items.push(new RefreshShopItem(item, data.pageIndex))
|
||||||
}
|
}
|
||||||
this.viewCount = data.viewCount ? data.viewCount : this.items.length;
|
this.viewCount = data.viewcount ? data.viewcount : this.items.length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,7 +193,7 @@ export class RefreshShopData extends ActivityBase {
|
|||||||
|
|
||||||
public initData(data: string) {
|
public initData(data: string) {
|
||||||
// this.nextRefreshTime = this.endTime;
|
// this.nextRefreshTime = this.endTime;
|
||||||
let dataObj = JSON.parse(data);
|
let dataObj: RefreshShopDataInDb = JSON.parse(data);
|
||||||
this.shopType = dataObj.shopType;
|
this.shopType = dataObj.shopType;
|
||||||
this.name = dataObj.name;
|
this.name = dataObj.name;
|
||||||
let arr = dataObj.data;
|
let arr = dataObj.data;
|
||||||
|
|||||||
@@ -6,6 +6,30 @@ import { getZeroPoint } from '../../pubUtils/timeUtil';
|
|||||||
import { parseNumberList } from '../../pubUtils/util';
|
import { parseNumberList } from '../../pubUtils/util';
|
||||||
import { ActivityBase } from './activityField';
|
import { ActivityBase } from './activityField';
|
||||||
|
|
||||||
|
interface RefreshTaskDataInDb {
|
||||||
|
refreshType: number;
|
||||||
|
name: string;
|
||||||
|
consumePoint: number;
|
||||||
|
reward: string;
|
||||||
|
data: RefreshTaskPageInDb[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface RefreshTaskPageInDb {
|
||||||
|
pageIndex: number;
|
||||||
|
name: string;
|
||||||
|
items: RefreshTaskItemInDb[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface RefreshTaskItemInDb {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
taskType: number;
|
||||||
|
taskParam: string;
|
||||||
|
condition: number;
|
||||||
|
reward: string;
|
||||||
|
point: number;
|
||||||
|
skip: string;
|
||||||
|
}
|
||||||
|
|
||||||
// 任务配置数据
|
// 任务配置数据
|
||||||
export class RefreshTaskItem {
|
export class RefreshTaskItem {
|
||||||
@@ -16,7 +40,7 @@ export class RefreshTaskItem {
|
|||||||
taskParam: string; //任务数据 dic_zyz_taskType.json
|
taskParam: string; //任务数据 dic_zyz_taskType.json
|
||||||
condition: number; //任务数据条件 dic_zyz_taskType.jsonT
|
condition: number; //任务数据条件 dic_zyz_taskType.jsonT
|
||||||
reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品
|
reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品
|
||||||
skip: number; //跳转客户端用
|
skip: string; //跳转客户端用
|
||||||
point: number; //奖励的点数
|
point: number; //奖励的点数
|
||||||
|
|
||||||
taskParamArray: number[] = [];
|
taskParamArray: number[] = [];
|
||||||
@@ -24,7 +48,7 @@ export class RefreshTaskItem {
|
|||||||
receiveRewardCount: number = 0; //领取奖励次数
|
receiveRewardCount: number = 0; //领取奖励次数
|
||||||
refreshType: SHOP_REFRESH_TYPE = SHOP_REFRESH_TYPE.FOREVER;
|
refreshType: SHOP_REFRESH_TYPE = SHOP_REFRESH_TYPE.FOREVER;
|
||||||
|
|
||||||
constructor(data: any, pageIndex: number, refreshType: number) {
|
constructor(data: RefreshTaskItemInDb, pageIndex: number, refreshType: number) {
|
||||||
this.pageIndex = pageIndex;
|
this.pageIndex = pageIndex;
|
||||||
this.id = data.id;
|
this.id = data.id;
|
||||||
this.name = data.name;
|
this.name = data.name;
|
||||||
@@ -51,11 +75,11 @@ export class RefreshTaskPage {
|
|||||||
name: string; // 任务名称
|
name: string; // 任务名称
|
||||||
items: Array<RefreshTaskItem> = [];
|
items: Array<RefreshTaskItem> = [];
|
||||||
|
|
||||||
constructor(data: any) {
|
constructor(data: RefreshTaskPageInDb, refreshType: number) {
|
||||||
this.pageIndex = data.pageIndex;
|
this.pageIndex = data.pageIndex;
|
||||||
this.name = data.name;
|
this.name = data.name;
|
||||||
for (let obj of data.items) {
|
for (let obj of data.items) {
|
||||||
this.items.push(new RefreshTaskItem(obj, data.pageIndex, data.refreshType));
|
this.items.push(new RefreshTaskItem(obj, data.pageIndex, refreshType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,9 +88,6 @@ export class RefreshTaskPage {
|
|||||||
export class RefreshTaskData extends ActivityBase {
|
export class RefreshTaskData extends ActivityBase {
|
||||||
name: string = '';//活动名称
|
name: string = '';//活动名称
|
||||||
list: Array<RefreshTaskPage> = [];
|
list: Array<RefreshTaskPage> = [];
|
||||||
// nextRefreshTime: number;//下次刷新时间
|
|
||||||
// roundIndex: number = 1;//周期数从1开始
|
|
||||||
addPointActivityId: number = 0;//获得的点数,关联其他活动id(新将礼物)
|
|
||||||
|
|
||||||
consumePoint: number = 0;//消耗点数兑换奖品
|
consumePoint: number = 0;//消耗点数兑换奖品
|
||||||
reward: string = ''//消耗点数的奖品内容
|
reward: string = ''//消耗点数的奖品内容
|
||||||
@@ -116,16 +137,15 @@ export class RefreshTaskData extends ActivityBase {
|
|||||||
|
|
||||||
public initData(data: string) {
|
public initData(data: string) {
|
||||||
// this.nextRefreshTime = this.endTime;
|
// this.nextRefreshTime = this.endTime;
|
||||||
let dataObj = JSON.parse(data);
|
let dataObj: RefreshTaskDataInDb = JSON.parse(data);
|
||||||
this.name = dataObj.name;
|
this.name = dataObj.name;
|
||||||
this.consumePoint = dataObj.consumePoint;
|
this.consumePoint = dataObj.consumePoint;
|
||||||
this.reward = dataObj.reward;
|
this.reward = dataObj.reward;
|
||||||
this.addPointActivityId = dataObj.addPointActivityId ? dataObj.addPointActivityId : 0;
|
|
||||||
this.totalPoint = 0;
|
this.totalPoint = 0;
|
||||||
this.exchangePoint = 0;
|
this.exchangePoint = 0;
|
||||||
let arr = dataObj.data;
|
let arr = dataObj.data;
|
||||||
for (let obj of arr) {
|
for (let obj of arr) {
|
||||||
this.list.push(new RefreshTaskPage(obj))
|
this.list.push(new RefreshTaskPage(obj, dataObj.refreshType))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,8 +53,6 @@ export interface DicDailyTask extends DicTaskBase {
|
|||||||
readonly point: number;
|
readonly point: number;
|
||||||
// 经验基数
|
// 经验基数
|
||||||
readonly exp: RewardInter;
|
readonly exp: RewardInter;
|
||||||
// 获得积分关联的活动id
|
|
||||||
readonly addPointActivityId: number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const DicDailyTaskKeys: KeysEnum<DicDailyTask> = {
|
const DicDailyTaskKeys: KeysEnum<DicDailyTask> = {
|
||||||
@@ -66,7 +64,6 @@ const DicDailyTaskKeys: KeysEnum<DicDailyTask> = {
|
|||||||
taskReward: true,
|
taskReward: true,
|
||||||
point: true,
|
point: true,
|
||||||
exp: true,
|
exp: true,
|
||||||
addPointActivityId: true
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 成就
|
// 成就
|
||||||
|
|||||||
Reference in New Issue
Block a user