将gamerecord的更新改为原子操作
This commit is contained in:
parent
203c24b0f7
commit
8ea3064744
@ -104,10 +104,13 @@ class BoxController extends BaseController {
|
|||||||
throw new ZError(15, 'can not enhance self')
|
throw new ZError(15, 'can not enhance self')
|
||||||
}
|
}
|
||||||
const score = Math.floor(Math.random() * (chest.bounsCfg[1] - chest.bounsCfg[0] + 1) + chest.bounsCfg[0])
|
const score = Math.floor(Math.random() * (chest.bounsCfg[1] - chest.bounsCfg[0] + 1) + chest.bounsCfg[0])
|
||||||
chest.bonusUsers.push(uid)
|
await ActivityChest.updateOne(
|
||||||
chest.bonusScores.push(score)
|
{ _id: chest.id },
|
||||||
chest.scoreBonus += score
|
{
|
||||||
await chest.save()
|
$inc: { scoreBonus: score },
|
||||||
|
$push: { bonusUsers: uid, bonusScores: score },
|
||||||
|
},
|
||||||
|
)
|
||||||
const chestsForUser = await ActivityChest.find({ user: uid, activity: user.activity })
|
const chestsForUser = await ActivityChest.find({ user: uid, activity: user.activity })
|
||||||
// 如果用户没有宝箱, 则说明用户是新用户, 生成一个宝箱
|
// 如果用户没有宝箱, 则说明用户是新用户, 生成一个宝箱
|
||||||
if (chestsForUser.length === 0) {
|
if (chestsForUser.length === 0) {
|
||||||
|
@ -34,8 +34,6 @@ class GameController extends BaseController {
|
|||||||
throw new ZError(13, 'had not signed in')
|
throw new ZError(13, 'had not signed in')
|
||||||
}
|
}
|
||||||
const reward = seqSignScore(record.count)
|
const reward = seqSignScore(record.count)
|
||||||
gameRecord.lastSignDay = dateTag
|
|
||||||
gameRecord.tickets += 1 + reward
|
|
||||||
const ticketRecord = new TicketRecord({
|
const ticketRecord = new TicketRecord({
|
||||||
user: user.id,
|
user: user.id,
|
||||||
activity: user.activity,
|
activity: user.activity,
|
||||||
@ -43,8 +41,11 @@ class GameController extends BaseController {
|
|||||||
data: {},
|
data: {},
|
||||||
score: 1 + reward,
|
score: 1 + reward,
|
||||||
})
|
})
|
||||||
|
await ActivityGame.updateOne(
|
||||||
|
{ user: user.id, activity: user.activity },
|
||||||
|
{ lastSignDay: dateTag, $inc: { tickets: 1 + reward } },
|
||||||
|
)
|
||||||
await ticketRecord.save()
|
await ticketRecord.save()
|
||||||
await gameRecord.save()
|
|
||||||
return { ticket: reward + 1 }
|
return { ticket: reward + 1 }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +98,7 @@ class GameController extends BaseController {
|
|||||||
if (score === 0) {
|
if (score === 0) {
|
||||||
throw new ZError(15, 'invalid days')
|
throw new ZError(15, 'invalid days')
|
||||||
}
|
}
|
||||||
const record = new TicketRecord({
|
const ticketRecord = new TicketRecord({
|
||||||
user: user.id,
|
user: user.id,
|
||||||
activity: user.activity,
|
activity: user.activity,
|
||||||
type: SIGN_TOTAL,
|
type: SIGN_TOTAL,
|
||||||
@ -108,9 +109,8 @@ class GameController extends BaseController {
|
|||||||
if (MANUAL_OPEN_GAME && gameRecord.status === 0) {
|
if (MANUAL_OPEN_GAME && gameRecord.status === 0) {
|
||||||
throw new ZError(12, 'map not open')
|
throw new ZError(12, 'map not open')
|
||||||
}
|
}
|
||||||
gameRecord.tickets += score
|
await ActivityGame.updateOne({ user: user.id, activity: user.activity }, { $inc: { tickets: score } })
|
||||||
await gameRecord.save()
|
await ticketRecord.save()
|
||||||
await record.save()
|
|
||||||
return { ticket: score }
|
return { ticket: score }
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -209,7 +209,6 @@ class GameController extends BaseController {
|
|||||||
if (record.tickets < step) {
|
if (record.tickets < step) {
|
||||||
throw new ZError(13, 'insufficient tickets')
|
throw new ZError(13, 'insufficient tickets')
|
||||||
}
|
}
|
||||||
record.tickets -= step
|
|
||||||
const ticketRecord = new TicketRecord({
|
const ticketRecord = new TicketRecord({
|
||||||
user: user.id,
|
user: user.id,
|
||||||
activity: user.activity,
|
activity: user.activity,
|
||||||
@ -217,17 +216,20 @@ class GameController extends BaseController {
|
|||||||
data: {},
|
data: {},
|
||||||
score: -step,
|
score: -step,
|
||||||
})
|
})
|
||||||
|
let updateData: any = {
|
||||||
|
$inc: { tickets: -step },
|
||||||
|
}
|
||||||
let { score, chests } = generateStepReward(user.id, user.activity, step)
|
let { score, chests } = generateStepReward(user.id, user.activity, step)
|
||||||
if (chests.length > 0) {
|
if (chests.length > 0) {
|
||||||
record.maxNoChestCount = 0
|
updateData.maxNoChestCount = 0
|
||||||
} else {
|
} else {
|
||||||
record.maxNoChestCount += step
|
if (record.maxNoChestCount + step >= RESET_STEP) {
|
||||||
if (record.maxNoChestCount >= RESET_STEP) {
|
updateData.maxNoChestCount = 0
|
||||||
record.maxNoChestCount = 0
|
|
||||||
const level = generateChestLevel()
|
const level = generateChestLevel()
|
||||||
chests.push(generateNewChest(user.id, user.activity, level, ChestStatusEnum.NORMAL))
|
chests.push(generateNewChest(user.id, user.activity, level, ChestStatusEnum.NORMAL))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
await ActivityGame.updateOne({ user: user.id, activity: user.activity }, updateData)
|
||||||
await updateRankScore({
|
await updateRankScore({
|
||||||
user: user.id,
|
user: user.id,
|
||||||
score: score,
|
score: score,
|
||||||
@ -237,12 +239,12 @@ class GameController extends BaseController {
|
|||||||
step: step,
|
step: step,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
// batch save chests
|
||||||
for (let chest of chests) {
|
for (let chest of chests) {
|
||||||
await chest.save()
|
await chest.save()
|
||||||
}
|
}
|
||||||
await ticketRecord.save()
|
await ticketRecord.save()
|
||||||
// await ticketRecord.save({ session })
|
// await ticketRecord.save({ session })
|
||||||
await record.save()
|
|
||||||
// await session.commitTransaction()
|
// await session.commitTransaction()
|
||||||
// session.endSession()
|
// session.endSession()
|
||||||
return { score, chests: chests.map(chest => chest.toJson()) }
|
return { score, chests: chests.map(chest => chest.toJson()) }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user