拍卖行:定时刷新、结算和简单测试,个别bug修复
This commit is contained in:
@@ -1,13 +1,16 @@
|
||||
import { DIVIDENDWEEKENDRATE, DIVIDENDMAXRATIO, DIVIDENDPOSITIONMAXRATIO } from './../consts/constModules/auctionConst';
|
||||
import { MailModel, MailType } from './../db/Mail';
|
||||
import { DividendModel } from './../db/Dividend';
|
||||
import { LOT_CODE_LEN, AUCTION_STAGE, AUCTION_TIME, DIVIDEND_CODE_LEN, DIVIDEND_STATUS, LOT_STATUS } from './../consts';
|
||||
import { LOT_CODE_LEN, AUCTION_STAGE, AUCTION_TIME, DIVIDEND_CODE_LEN, DIVIDEND_STATUS, LOT_STATUS, MAIL_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, STATUS, DIVIDENDWEEKENDRATE, DIVIDENDMAXRATIO, DIVIDENDPOSITIONMAXRATIO, ROLE_RECEIVE_STATUS } from './../consts';
|
||||
import { DividendRec, ItemReward } from "../domain/dbGeneral";
|
||||
import { genCode } from '../pubUtils/util';
|
||||
import { genCode, resResult } from '../pubUtils/util';
|
||||
import { LotModel, LotParam } from '../db/Lot';
|
||||
import { getNextTime, getTodayZeroDate } from '../pubUtils/timeUtil';
|
||||
import { getNextTime, getTodayZeroDate, getZeroDateByDeltaDay } from '../pubUtils/timeUtil';
|
||||
import { gameData, getGoodById } from '../pubUtils/data';
|
||||
import { DividendParam, DividendType } from '../db/Dividend';
|
||||
import { RolePosition } from '../domain/battleField/guild';
|
||||
import { pushMail } from '../pubUtils/interface';
|
||||
import { getMailContent } from './mailService';
|
||||
import { pinus } from 'pinus';
|
||||
|
||||
// ! 获取底价,假数据
|
||||
function getBasePrice(gid: number, count: number) {
|
||||
@@ -41,6 +44,10 @@ export function todayGuildBegin() {
|
||||
return getNextTime(getTodayZeroDate(), AUCTION_TIME.GUILD_BEGIN_HOUR, AUCTION_TIME.GUILD_BEGIN_MIN);
|
||||
}
|
||||
|
||||
export function yestodayGuildBegin() {
|
||||
return getNextTime(getZeroDateByDeltaDay(-1), AUCTION_TIME.GUILD_BEGIN_HOUR, AUCTION_TIME.GUILD_BEGIN_MIN);
|
||||
}
|
||||
|
||||
export function todayWorldBegin() {
|
||||
return getNextTime(getTodayZeroDate(), AUCTION_TIME.WORLD_BEGIN_HOUR, AUCTION_TIME.WORLD_BEGIN_MIN);
|
||||
}
|
||||
@@ -147,3 +154,73 @@ export async function calculateDividend(dividend: DividendType) {
|
||||
});
|
||||
return await DividendModel.updateDividend(code, { dividends });
|
||||
}
|
||||
|
||||
export async function startGuildAuction() {
|
||||
try {
|
||||
console.log('schedule startGuildAuction called:', new Date());
|
||||
const begin = todayGuildBegin();
|
||||
await LotModel.updateLotsStageByBegin(begin, AUCTION_STAGE.GUILD);
|
||||
await DividendModel.updateDividendsStatus(begin, DIVIDEND_STATUS.ING);
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.error('startGuildAuction err: ', e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function startWorldAuction() {
|
||||
try {
|
||||
console.log('schedule startWorldAuction called:', new Date());
|
||||
const begin = todayGuildBegin();
|
||||
await LotModel.updateLotsStageByBegin(begin, AUCTION_STAGE.WORLD);
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.error('startWorldAuction err: ', e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function stopAuction() {
|
||||
try {
|
||||
console.log('schedule stopAuction called:', new Date());
|
||||
const begin = todayGuildBegin();
|
||||
await LotModel.updateLotsStageByBegin(begin, AUCTION_STAGE.END);
|
||||
await DividendModel.updateDividendsStatus(begin, DIVIDEND_STATUS.END);
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.error('stopAuction err: ', e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function sendUngotDividend() {
|
||||
try {
|
||||
console.log('schedule sendUngotDividend called:', new Date());
|
||||
const begin = yestodayGuildBegin();
|
||||
const dividends = await DividendModel.findDividendsByBegin(begin);
|
||||
const rewards = new Map<string, number>();
|
||||
for (let dividend of dividends) {
|
||||
if (!dividend.dividends) continue;
|
||||
for (let dividendRec of dividend.dividends) {
|
||||
if (dividendRec.status === ROLE_RECEIVE_STATUS.YES) continue;
|
||||
const sum = rewards.get(dividendRec.roleId) || 0;
|
||||
rewards.set(dividendRec.roleId, sum + dividendRec.total);
|
||||
}
|
||||
}
|
||||
|
||||
let mails: MailType[] = [];
|
||||
let pushMessage: pushMail[] = [];
|
||||
for (let [roleId, count] of rewards) {
|
||||
// TODO: 邮件类型修改
|
||||
await getMailContent(roleId, MAIL_TYPE.GUILD_BOSS_REWARD, [JSON.stringify(count)], [{ id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD), count }], mails, pushMessage);
|
||||
}
|
||||
await MailModel.addMails(mails);
|
||||
pushMessage.forEach(({route, data, uids })=>{
|
||||
pinus.app.channelService.pushMessageByUids(route, resResult(STATUS.SUCCESS, { mails: data }), uids);
|
||||
});
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.error('sendUngotDividend err: ', e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user