拍卖行:分红数据的生成和计算

This commit is contained in:
liangtongchuan
2021-03-18 00:00:56 +08:00
parent 18c3e724e6
commit 0d478e25b9
7 changed files with 81 additions and 13 deletions
@@ -53,11 +53,11 @@ export class AuctionHandler {
const serverId: number = session.get('serverId');
if (!guildCode) return resResult(STATUS.GUILD_NOT_FOUND)
const lots = await genAuction(guildCode, sourceType, sourceCode, serverId, rewards);
if (!lots) {
const result = await genAuction(guildCode, sourceType, sourceCode, serverId, rewards);
if (!result) {
return resResult(STATUS.WRONG_PARMS);
}
return resResult(STATUS.SUCCESS, { lots });
return resResult(STATUS.SUCCESS, result);
}
}
+52 -5
View File
@@ -1,9 +1,11 @@
import { LOT_CODE_LEN, AUCTION_STAGE, AUCTION_TIME } from './../consts';
import { ItemReward } from "../domain/dbGeneral";
import { DividendModel } from './../db/Dividend';
import { LOT_CODE_LEN, AUCTION_STAGE, AUCTION_TIME, DIVIDEND_CODE_LEN } from './../consts';
import { DividendRec, ItemReward } from "../domain/dbGeneral";
import { genCode } from '../pubUtils/util';
import { LotModel, LotParam } from '../db/Lot';
import { getNextTime } from '../pubUtils/timeUtil';
import { getGoodById } from '../pubUtils/data';
import { DividendParam, DividendType } from '../db/Dividend';
// ! 获取底价,假数据
function getBasePrice(gid: number, count: number) {
@@ -29,7 +31,7 @@ function getMaxPrice(gid: number, count: number) {
export async function genAuction(guildCode: string, sourceType: number, sourceCode: string, serverId: number, rewards: ItemReward[]) {
const begin = getNextTime(new Date(), AUCTION_TIME.GUILD_BEGIN_HOUR, AUCTION_TIME.GUILD_BEGIN_MIN);
const end = getNextTime(new Date(), AUCTION_TIME.WORLD_END_HOUR, AUCTION_TIME.WORLD_END_MIN);
const lots: LotParam[] = rewards.map(reward => {
const lotsData: LotParam[] = rewards.map(reward => {
const { id, count } = reward;
const code = genCode(LOT_CODE_LEN);
return {
@@ -38,8 +40,13 @@ export async function genAuction(guildCode: string, sourceType: number, sourceCo
maxPrice: getMaxPrice(id, count), curPrice: getBasePrice(id, count),
}
});
const result = await LotModel.createRecs(lots);
return result;
const lots = await LotModel.createRecs(lotsData);
const dividendCode = genCode(DIVIDEND_CODE_LEN);
const dividendData: DividendParam = {
guildCode, sourceType, sourceCode, serverId, code: dividendCode, lots: [], dividends: [], totalPrice: 0, end
};
const dividend = await DividendModel.createDividend(dividendData);
return { lots, dividend };
}
/**
@@ -59,3 +66,43 @@ export async function participants(guildCode: string, sourceType: number, source
position: 2,
}];
}
function baseDividend(totalPrice: number, roleNum: number) {
return roleNum > 10 ? totalPrice / roleNum : totalPrice / 10;
}
function posDividend(totalPrice: number, roleNum: number, position: number) {
return totalPrice / roleNum * position;
}
function weekendDividend(totalPrice: number, roleNum: number, date: Date) {
const day = date.getDay();
return (day === 0 || day === 6) ? totalPrice / roleNum : 0;
}
export async function calculateDividend(dividend: DividendType) {
const { code, guildCode, sourceType, sourceCode, lots, totalPrice, status, end } = dividend;
if (status === 3) return null;
const calcuTotalPrice = lots.reduce((acc, lot) => { return acc + lot.price }, 0);
if (calcuTotalPrice !== totalPrice) {
await DividendModel.updateDividend(code, { totalPrice: calcuTotalPrice });
// 更新 totalPrice
}
const participantsData = await participants(guildCode, sourceType, sourceCode);
const dividends: DividendRec[] = participantsData.map(data => {
const { roleId, position } = data;
const roleNum = participantsData.length;
const baseNum = baseDividend(calcuTotalPrice, roleNum);
const posNum = posDividend(calcuTotalPrice, roleNum, position);
const weekendNum = weekendDividend(calcuTotalPrice, roleNum, end);
return {
roleId,
baseNum, // 基础分红
posNum, // 职位分红
weekendNum, // 额外分红,周末
total: baseNum + posNum + weekendNum, // 总分红
status: 0, // 0:未领取,1:已领取
};
});
await DividendModel.updateDividend(code, { dividends });
}
+1 -1
View File
@@ -113,7 +113,7 @@ describe('拍卖行测试', function() {
});
it('查看我的拍卖纪录', function(done) {
pinusClient.request('battle.auctionHandler.getAuction', { count: 10 }, (res) => {
pinusClient.request('battle.auctionHandler.offerRecs', { count: 10 }, (res) => {
checkSuccessResponse(res, false);
done();
});