sync: port tangguo_server upstream changes

Ported 7 commits (3a79d6a..3dcf693) from tangguo_server:
- 版本控制: comment out 2FA in admin.go
- 支付和广告调试: pay/ad refactor across appg/adser/rechargeser/pingctrl
- 对接统计: add bili_sync statistics endpoint
- 代码优化: ginUtil improvements
- 修改es/修改appID/代码调整: cumulative updates

Preserved hgmj-local differences:
- ES table prefix stays 91jd_ (not tangguo_)
- BillPlatformID stays 91短剧 (not 糖果短剧)
- admin googauth label stays @91短剧
- appg.go retains LouFengH5/DataBuriedPoint fields
- rechargeser.go retains reportser event reporting

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 17:18:41 +08:00
co-authored by Claude Opus 4.7
parent 625e89c15d
commit 97f679d130
18 changed files with 750 additions and 218 deletions
+1
View File
@@ -37,6 +37,7 @@ func AdsClick(ctx *gin.Context) {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
adser.AsyncAdvertiseClick(arg.ID)
common.ServeJSON(ctx, stderr.Success, nil)
}
+12 -22
View File
@@ -12,6 +12,7 @@ import (
"91jd-server/common/constant"
"91jd-server/common/services/message"
"91jd-server/common/store"
v10 "91jd-server/common/v10"
"91jd-server/models/cache/bannerjumpdata"
"91jd-server/models/cache/sysconfdata"
"91jd-server/models/v/bannerjumpmod"
@@ -33,7 +34,6 @@ import (
"91jd-server/common"
"91jd-server/common/log"
"91jd-server/common/stderr"
"91jd-server/common/version"
"91jd-server/models/commod"
"91jd-server/models/v/sourcemod"
"91jd-server/models/v/systemmod"
@@ -249,40 +249,30 @@ func DomainList(ctx *gin.Context) {
})
common.Go(func() {
defer wg.Done()
builId := v10.ExtractPureEngChar(ua.BuildID)
//版本、广告、公告
verResp, _, annouResp, _, _, _, err := versionser.AdvVersionAnnounThreeServer(ua.Ver, ua.SysType)
versionResp, err := VersionThreeServer(ua.Ver, ua.SysType, builId, ua.BuildID)
if err != nil {
log.Error("VersionThreeServer", log.E(err))
return
}
for k, v := range annouResp {
v.Href = activityclient.ReplaceActivityDomain(v.Href, user, wallet)
annouResp[k] = v
}
//版本业务
//安卓不做限制;iOS 端版本 <= 1.11.2 不下发版本信息
skipVer := false
if ua.SysType == constant.SysTypeIOS {
if cur, err := version.New(ua.Ver); err == nil && cur.LTE(version.MustNew("1.11.2")) {
skipVer = true
}
}
if len(verResp.DownloadLink) > 0 && !skipVer {
if versionResp.HasNewVersion {
versionBody := []*versionmod.VersionBody{
&versionmod.VersionBody{
VersionName: verResp.ServerVersion,
VersionName: versionResp.ServerVersion,
Platform: ua.SysType,
Description: verResp.Description,
ForcedUpdate: verResp.IsForceUpdate,
URL: verResp.DownloadLink[0],
IosUrl: verResp.DownloadLink[0],
Description: versionResp.Description,
ForcedUpdate: versionResp.IsForceUpdate,
URL: versionResp.DownloadLink[0],
IosUrl: versionResp.DownloadLink[0],
}}
sysInfo.Ver = versionBody
}
//公告
sysInfo.Ads.AnnounList = annouResp
})
common.Go(func() {
defer wg.Done()
jtAds, err := adser.JtAdvertiseThreeServer()
if err != nil {
log.Error("JtAdvertiseThreeServer error occur", log.E(err))
+73
View File
@@ -0,0 +1,73 @@
package pingctrl
import (
"91jd-server/app/appg"
"91jd-server/common/httputil"
"91jd-server/common/log"
"encoding/json"
"fmt"
"net/http"
)
type PacketType int32
const (
PacketTypeEnterprise PacketType = 1 // 企业签
PacketTypeShop PacketType = 2 // 商店包
PacketTypeTestFlight PacketType = 3 // TF包
)
type AppVersionReq struct {
AppId int32 `json:"appId" binding:"required"` // AppID
SysType string `json:"sysType,omitempty"` // 终端类型
PktType PacketType `json:"pktType,omitempty"` // 包类型
CurVersion string `json:"curVersion,omitempty"` // 当前版本
CurPackageName string `json:"curPackageName,omitempty"` // 包名
}
type AppVersionResp struct {
HasNewVersion bool `json:"hasNewVersion,omitempty"` // 是否存在新版本
ServerVersion string `json:"serverVersion,omitempty"` // 服务器新版本
DownloadLink []string `json:"downloadLink,omitempty"` // 下载地址
Description string `json:"description,omitempty"` // 描述
IsForceUpdate bool `json:"isForceUpdate,omitempty"` // 是否强制升级
Size string `json:"size,omitempty"` // 大小
Md5 string `json:"md5,omitempty"` // md5
}
func VersionThreeServer(curVersion, sysType, buildID, packageName string) (resp AppVersionResp, err error) {
req := AppVersionReq{
AppId: 4,
PktType: PacketTypeEnterprise,
SysType: sysType,
CurVersion: curVersion,
CurPackageName: packageName,
}
// TF包
if len(buildID) > 0 {
req.PktType = PacketTypeTestFlight
}
url := appg.Conf.URL.VersionUrl + "/api/stat/version/app"
bodyStr, err := json.Marshal(req)
if err != nil {
log.Error("VersionThreeServer json.Marshal fail", log.Any("req", req), log.E(err))
}
code, err := httputil.New().POSTWithJResp(&resp, url, nil, bodyStr)
if err != nil {
log.Error("VersionThreeServer POSTWithJResp ", log.Any("url", url), log.E(err))
return
}
if code != http.StatusOK {
log.Error("VersionThreeServer response status ", log.Any("code", code))
err = fmt.Errorf("response status err")
return
}
log.Info("VersionThreeServer response", log.Any("resp", resp.DownloadLink), log.Any("version", resp.HasNewVersion))
return
}
+7
View File
@@ -9,6 +9,7 @@ import (
"fmt"
"io"
"net/http"
"time"
"91jd-server/app/service/rechargeser"
"91jd-server/common/log"
@@ -44,6 +45,12 @@ func CallBack(ctx *gin.Context) {
return "", err
}
rb.TransNo = rchgutil.RChgIDDisassemble(rb.TransNo)
if rb.SuccessAt.IsZero() {
rb.SuccessAt = time.Now()
}
if rb.PaymentAt.IsZero() {
rb.PaymentAt = rb.SuccessAt
}
if err = rechargeser.RechargeCallBack(ctx, rb.OID, rb.PayMoney, rb.TransNo, rb.Code, rb.PaymentAt, rb.SuccessAt); err != nil {
log.Error(fmt.Sprintf("%s RechargeCallBack fail error:%+v:", name, err))
}
+1
View File
@@ -52,5 +52,6 @@ func Click(ctx *gin.Context) {
common.ServeJSON(ctx, stderr.ErrTokenIsNotExist, "")
return
}
adser.AsyncAdvertiseClick(p.Id)
common.ServeJSON(ctx, stderr.Success, nil)
}