Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
package daichongctrl
import (
"net/http"
"strconv"
"strings"
"91porn-server/common/daichong"
"91porn-server/common/log"
"91porn-server/common/stderr"
"91porn-server/models/e/daichongmod"
"91porn-server/models/v/usermod"
"91porn-server/models/v/walletmod"
"91porn-server/web/webg"
"github.com/gin-gonic/gin"
)
// 查询玩家信息 doc
// @Summary 查询玩家信息 通知订单生成
// @Description 通知订单生成
// @Tags WEB-daichong
// @Accept mpfd,json
// @Produce json,html
// @Param appId formData string true "代充平台提供的appId"
// @Param data formData string true "加密结果字符串"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /daichong/api/chat/queryPlayerInfo [post]
func QueryPlayerInfo(ctx *gin.Context) {
param := daichongmod.CommnReq{}
if err := ctx.ShouldBind(&param); err != nil {
log.Warn("daichong callback api queryPlayerInfo post param fail error", log.E(err))
ctx.JSON(http.StatusOK, gin.H{"data": nil, "code": stderr.ErrParamError, "msg": stderr.ErrParamError.Msg()})
return
}
if param.AppId != webg.Conf.DaiChong.AppID {
ctx.JSON(http.StatusOK, gin.H{"data": nil, "code": stderr.ErrAppIDNotExist, "msg": stderr.ErrAppIDNotExist.Msg()})
return
}
querySign := daichongmod.BalanceSign{}
if err := daichong.Sign2Struct(&querySign, param.Data, webg.Conf.DaiChong.AppSecret); err != nil {
log.Warn("daichong callback api queryPlayerInfo decrypt sign data fail error", log.E(err))
ctx.JSON(http.StatusOK, gin.H{"data": nil, "code": stderr.Failure, "msg": stderr.Failure.Msg()})
return
}
uidstr := strings.Split(strings.TrimSpace(querySign.Uids), ",")
type userForThird struct {
Uid string `json:"uid"`
NickName string `json:"nickName"`
CoinNum string `json:"coinNum"`
BankCoin string `json:"bankCoin"`
}
ut := make([]userForThird, len(uidstr))
for i, v := range uidstr {
uid, _ := strconv.Atoi(strings.TrimSpace(v))
user, err := usermod.FindUserByUID(uint64(uid))
if err != nil || user == nil {
continue
}
w, _ := walletmod.GetWallet(uint64(uid))
coinNum := w.Amount
ut[i] = userForThird{
Uid: strings.TrimSpace(v),
NickName: user.Name,
CoinNum: strconv.Itoa(int(coinNum)),
BankCoin: "0",
}
}
ctx.JSON(http.StatusOK, gin.H{"data": ut, "code": stderr.Success, "msg": stderr.Success.Msg()})
}
+84
View File
@@ -0,0 +1,84 @@
package daichongctrl
import (
"encoding/json"
"net/http"
"time"
"91porn-server/common"
"91porn-server/common/constant"
"91porn-server/common/daichong"
"91porn-server/common/log"
"91porn-server/common/stderr"
"91porn-server/models/l/operatorlgmod"
"91porn-server/models/v/rchgordmod"
"91porn-server/web/service/daichongser"
"github.com/gin-gonic/gin"
)
// 代充 doc
// @Summary 手动回调代充订单结果
// @Description 手动回调代充订单结果
// @Tags 代充-订单
// @Accept mpfd,json
// @Produce json,html
// @Param oid formData string true "订单ID"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /daichong/order/handScore [post]
func HandAddScore(c *gin.Context) {
manager, err := common.GetAdminAct(c)
if err != nil {
common.ServeJSON(c, stderr.AdminIDErr, err.Error())
return
}
var arg struct {
OID string `form:"oid" json:"oid" binding:"required"`
}
if err := c.ShouldBind(&arg); err != nil {
common.ServeJSON(c, stderr.ErrParamError, err)
return
}
order, _ := rchgordmod.FindRechargeOrderByThirdOrderId(arg.OID)
if order.NotifyStatus == rchgordmod.Notify_SUCCESS {
c.JSON(http.StatusOK, gin.H{"code": stderr.Failure, "msg": "不可重复手动通知,已经成功通知的订单"})
return
}
var orderStatus int
switch order.Status {
case rchgordmod.SUCCESS:
orderStatus = daichong.Success
case rchgordmod.FAILURE:
orderStatus = daichong.Failed
}
if orderStatus != daichong.Success && orderStatus != daichong.Failed {
c.JSON(http.StatusOK, gin.H{"code": stderr.Failure, "msg": "订单状态不是成功或失败状态,无法手动通知"})
return
}
resp, code := daichongser.OrderCallBack(c, daichong.OrderCallSign{
OrderId: arg.OID,
Time: order.NotifyTime,
Status: orderStatus,
})
selector := rchgordmod.ReplaceEditSelector{}
if code == http.StatusOK {
notifySuccess := rchgordmod.Notify_SUCCESS
selector.NotifyStatus = &notifySuccess
log.InfoX(c, "daichong order call back send http request successfully",
log.Any("msg", resp.Msg),
log.Any("orderStatus", orderStatus),
log.Any("orderId", arg.OID),
log.Any("time", time.Now().Format(time.RFC3339)))
} else {
notifySuccess := rchgordmod.Notify_SUCCESS
selector.NotifyStatus = &notifySuccess
log.WarnX(c, "daichong order call back send http request failed", log.Any("responseCode", code),
log.Any("msg", resp.Msg))
}
_ = rchgordmod.UpdateBaseOnOidAndStatus(nil, arg.OID, order.Status, selector)
logFiled, _ := json.Marshal(&arg)
_ = operatorlgmod.RecordOperation(manager, constant.TradeManageRechargeOrder, constant.Modify, string(logFiled),
c.Request.URL.RequestURI())
c.JSON(http.StatusOK, resp)
}