| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- const API = require("../../../../lib/API");
- const db = require("../../../../plugin/DataBase/db");
- const AccessControl = require("../../../../lib/AccessControl");
- const { BaseStdResponse } = require("../../../../BaseStdResponse");
- const { insertLedgerRecord } = require("../../../../lib/Lepao/CountLedger");
- class ChangeLepaoCount extends API {
- constructor() {
- super()
- this.setPath('/Admin/User/ChangeLepaoCount')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- let {
- uuid,
- session,
- userid,
- lepao_count
- } = req.body
- if ([uuid, session, userid, lepao_count].some(value => value === '' || value === null || value === undefined))
- return res.json({
- ...BaseStdResponse.MISSING_PARAMETER
- })
- // 检查 session
- if (!await AccessControl.checkSession(uuid, session))
- return res.status(401).json({
- ...BaseStdResponse.ACCESS_DENIED
- })
- // 检查权限
- let permission = await AccessControl.getPermission(uuid)
- if (!permission.includes("admin") && !permission.includes("service"))
- return res.json({
- ...BaseStdResponse.PERMISSION_DENIED
- })
- const conn = await db.connect()
- try {
- await conn.beginTransaction()
- const [userRows] = await conn.execute(
- 'SELECT lepao_count FROM users WHERE uuid = ? FOR UPDATE',
- [userid]
- )
- if (!userRows || userRows.length !== 1) {
- await conn.rollback()
- return res.json({
- ...BaseStdResponse.MISSING_FILE,
- msg: '未找到用户信息'
- })
- }
- const beforeCount = Number(userRows[0].lepao_count || 0)
- const targetCount = Number(lepao_count)
- const delta = targetCount - beforeCount
- const [r] = await conn.execute(
- 'UPDATE users SET lepao_count = ? WHERE uuid = ?',
- [targetCount, userid]
- )
- if (!r || r.affectedRows !== 1) {
- await conn.rollback()
- return res.json({
- ...BaseStdResponse.DATABASE_ERR
- })
- }
- if (delta !== 0) {
- await insertLedgerRecord({
- executor: conn,
- userUuid: userid,
- delta,
- balanceBefore: beforeCount,
- balanceAfter: targetCount,
- bizType: 'admin_adjust',
- bizId: `admin_adjust:${Date.now()}:${userid}`,
- operatorUuid: uuid,
- remark: '管理员手工调整次数'
- })
- }
- await conn.commit()
- } catch (error) {
- try { await conn.rollback() } catch (_) { }
- this.logger.error(`管理员调整次数失败: ${error.stack || error}`)
- return res.json({
- ...BaseStdResponse.DATABASE_ERR
- })
- } finally {
- conn.release()
- }
- res.json({
- ...BaseStdResponse.OK
- })
- }
- }
- module.exports.ChangeLepaoCount = ChangeLepaoCount
|