Explorar el Código

更新

master
huangjiajun hace 2 meses
padre
commit
0cb5154711
Se han modificado 33 ficheros con 11716 adiciones y 1864 borrados
  1. +7
    -0
      app/cfg/cfg_app.go
  2. +3
    -0
      app/cfg/init_cfg.go
  3. +28
    -0
      app/cfg/init_rabbitmq.go
  4. +155
    -0
      app/hdl/hdl_data_center_generate_data.go
  5. +285
    -0
      app/hdl/hdl_data_center_original_data.go
  6. +25
    -1
      app/hdl/hdl_demo.go
  7. +90
    -0
      app/hdl/hdl_division_strategy.go
  8. +152
    -0
      app/hdl/hdl_finance_center_medium.go
  9. +80
    -0
      app/hdl/hdl_settle_center_agent.go
  10. +80
    -0
      app/hdl/hdl_settle_center_medium.go
  11. +3
    -0
      app/md/comm.go
  12. +1
    -0
      app/md/md__applet_application_ad_space_list.go
  13. +111
    -0
      app/md/md_data_center_generate_data.go
  14. +133
    -0
      app/md/md_data_center_original_data.go
  15. +47
    -0
      app/md/md_division_strategy.go
  16. +85
    -0
      app/md/md_finance_center.go
  17. +17
    -0
      app/md/md_mq.go
  18. +88
    -0
      app/md/md_settle_center.go
  19. +48
    -0
      app/router/router.go
  20. +1
    -3
      app/svc/svc_applet_application_ad_space.go
  21. +263
    -0
      app/svc/svc_data_center_generate_data.go
  22. +403
    -0
      app/svc/svc_data_center_original_data.go
  23. +148
    -0
      app/svc/svc_division_strategy.go
  24. +194
    -0
      app/svc/svc_finance_center_medium.go
  25. +138
    -0
      app/svc/svc_medium_agent.go
  26. +86
    -0
      app/svc/svc_settle_center_agent.go
  27. +86
    -0
      app/svc/svc_settle_center_medium.go
  28. +1
    -0
      app/svc/svc_wx_data.go
  29. +3415
    -764
      docs/docs.go
  30. +3415
    -764
      docs/swagger.json
  31. +2121
    -330
      docs/swagger.yaml
  32. +6
    -2
      go.mod
  33. +1
    -0
      main.go

+ 7
- 0
app/cfg/cfg_app.go Ver fichero

@@ -10,10 +10,17 @@ type Config struct {
CurlDebug bool `yaml:"curldebug"`
SrvAddr string `yaml:"srv_addr"`
RedisAddr string `yaml:"redis_addr"`
MQ MQCfg `yaml:"mq"`
DB DBCfg `yaml:"db"`
Log LogCfg `yaml:"log"`
Local bool
}
type MQCfg struct {
Host string `yaml:"host"`
Port string `yaml:"port"`
User string `yaml:"user"`
Pwd string `yaml:"pwd"`
}

// 数据库配置结构体
type DBCfg struct {


+ 3
- 0
app/cfg/init_cfg.go Ver fichero

@@ -14,6 +14,7 @@ var (
CurlDebug bool
SrvAddr string
RedisAddr string
MQ *MQCfg
DB *DBCfg
Log *LogCfg
Local bool
@@ -47,4 +48,6 @@ func InitCfg() {
Log = &conf.Log
RedisAddr = conf.RedisAddr
SrvAddr = conf.SrvAddr
MQ = &conf.MQ

}

+ 28
- 0
app/cfg/init_rabbitmq.go Ver fichero

@@ -0,0 +1,28 @@
package cfg

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
"encoding/json"
"os"
"strings"
"time"
)

func InitMq() {
data, _ := json.Marshal(MQ)
filePutContents("init_rabbit_mq", string(data))
err := rabbit.Init(MQ.Host, MQ.Port, MQ.User, MQ.Pwd)
if err != nil {
filePutContents("init_rabbit_mq", err.Error())
return
}
}

func filePutContents(fileName string, content string) {
fd, _ := os.OpenFile("./tmp/"+fileName+".log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
fd_time := time.Now().Format("2006-01-02 15:04:05")
fd_content := strings.Join([]string{"[", fd_time, "] ", content, "\n"}, "")
buf := []byte(fd_content)
fd.Write(buf)
fd.Close()
}

+ 155
- 0
app/hdl/hdl_data_center_generate_data.go Ver fichero

@@ -0,0 +1,155 @@
package hdl

import (
"applet/app/e"
"applet/app/lib/validate"
"applet/app/md"
"applet/app/svc"
"github.com/gin-gonic/gin"
)

// GenerateDataList
// @Summary 分成数据-列表
// @Tags 数据中心------嘉俊
// @Description 数据中心-分成数据-列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterGenerateDataReq true "请求参数"
// @Success 200 {object} md.DataCenterGenerateDataRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/generate/data/list [POST]
func GenerateDataList(c *gin.Context) {
var req md.DataCenterGenerateDataReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DataCenterGenerateDataList(c, req)
e.OutSuc(c, res, nil)
return
}

// IncomeDataList
// @Summary 收益报表-列表
// @Tags 数据中心------嘉俊
// @Description 数据中心-收益报表-列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterGenerateDataReq true "请求参数"
// @Success 200 {object} md.DataCenterIncomeDataRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/income/data/list [POST]
func IncomeDataList(c *gin.Context) {
var req md.DataCenterGenerateDataReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DataCenterIncomeDataList(c, req)
e.OutSuc(c, res, nil)
return
}

// IncomeDataDetail
// @Summary 收益报表-详情
// @Tags 数据中心------嘉俊
// @Description 数据中心-收益报表-详情
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterGenerateDataCommReq true "请求参数"
// @Success 200 {object} md.DataCenterIncomeDataDetail "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/income/data/detail [POST]
func IncomeDataDetail(c *gin.Context) {
var req md.DataCenterGenerateDataCommReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.DataCenterIncomeDataDetail(c, req)
}

// GenerateDataDel
// @Summary 分成数据-删除
// @Tags 数据中心------嘉俊
// @Description 数据中心-分成数据-删除
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterGenerateDataCommReq true "请求参数"
// @Success 200 {string} "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/generate/data/del [POST]
func GenerateDataDel(c *gin.Context) {
var req md.DataCenterGenerateDataCommReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DataCenterGenerateDataDel(c, req)
e.OutSuc(c, res, nil)
return
}

// GenerateDataDoing
// @Summary 分成数据-应用操作
// @Tags 数据中心------嘉俊
// @Description 数据中心-分成数据-应用操作
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterGenerateDataCommReq true "请求参数"
// @Success 200 {string} "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/generate/data/doing [POST]
func GenerateDataDoing(c *gin.Context) {
var req md.DataCenterGenerateDataCommReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DataCenterGenerateDataDoing(c, req)
e.OutSuc(c, res, nil)
return
}

// GenerateDataDetail
// @Summary 分成数据-详情
// @Tags 数据中心------嘉俊
// @Description 数据中心-分成数据-详情
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterGenerateDataCommReq true "请求参数"
// @Success 200 {object} md.DataCenterGenerateDataDetailData "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/generate/data/detail [POST]
func GenerateDataDetail(c *gin.Context) {
var req md.DataCenterGenerateDataCommReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.DataCenterGenerateDataDetail(c, req)
}

+ 285
- 0
app/hdl/hdl_data_center_original_data.go Ver fichero

@@ -0,0 +1,285 @@
package hdl

import (
"applet/app/e"
"applet/app/lib/validate"
"applet/app/md"
"applet/app/svc"
"applet/app/utils/cache"
"github.com/gin-gonic/gin"
)

// OriginalDataList
// @Summary 原始数据-列表
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataReq true "请求参数"
// @Success 200 {object} md.DataCenterOriginalDataRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/list [POST]
func OriginalDataList(c *gin.Context) {
var req md.DataCenterOriginalDataReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DataCenterOriginalDataList(c, req)
e.OutSuc(c, res, nil)
return
}

// OriginalDataDel
// @Summary 原始数据-删除
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-删除
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataCommReq true "请求参数"
// @Success 200 {string} "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/del [POST]
func OriginalDataDel(c *gin.Context) {
var req md.DataCenterOriginalDataCommReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DataCenterOriginalDataDel(c, req)
e.OutSuc(c, res, nil)
return
}

// OriginalDataDoing
// @Summary 原始数据-应用操作
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-应用操作
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterDataCenterOriginalDataDoingReq true "请求参数"
// @Success 200 {string} "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/doing [POST]
func OriginalDataDoing(c *gin.Context) {
var req md.DataCenterDataCenterOriginalDataDoingReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DataCenterOriginalDataDoing(c, req)
e.OutSuc(c, res, nil)
return
}

// OriginalDataTotal
// @Summary 原始数据-记录应用时统计
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-记录应用时统计
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataCommReq true "请求参数"
// @Success 200 {string} "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/total [POST]
func OriginalDataTotal(c *gin.Context) {
var req md.DataCenterOriginalDataCommReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.DataCenterOriginalDataTotal(c, req)
}

// OriginalDataMoreApplication
// @Summary 原始数据-一键导入应用列表
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-一键导入应用列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataMoreApplicationReq true "请求参数"
// @Success 200 {object} md.DataCenterOriginalDataMoreApplicationRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/more/application [POST]
func OriginalDataMoreApplication(c *gin.Context) {
var req md.DataCenterOriginalDataMoreApplicationReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.OriginalDataMoreApplication(c, req)
e.OutSuc(c, res, nil)
return
}

// OriginalDataMoreApplicationDoing
// @Summary 原始数据-一键导入操作
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-一键导入操作
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataOneApplicationDoingReq true "请求参数"
// @Success 200 {string} "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/more/application/doing [POST]
func OriginalDataMoreApplicationDoing(c *gin.Context) {
var req md.DataCenterOriginalDataMoreApplicationDoingReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
err = svc.OriginalDataMoreApplicationDoing(c, req)
if err != nil {
e.OutErr(c, 400, e.NewErr(400, err.Error()))
return
}
e.OutSuc(c, "success", nil)
return
}

// OriginalDataMoreApplicationState
// @Summary 原始数据-一键导入操作状态
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-一键导入操作状态
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataOneApplicationDoingReq true "请求参数"
// @Success 200 {string} "具体看返回内容 state=1 进行中"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/more/application/state [GET]
func OriginalDataMoreApplicationState(c *gin.Context) {
res := map[string]string{
"state": "0",
}
state, _ := cache.GetString(c.GetString("mid") + ":original.wx.ad.data")
if state == "1" {
res["state"] = "1"
}
e.OutSuc(c, res, nil)
return
}

// OriginalDataOneApplication
// @Summary 原始数据-单个导入应用列表
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-单个导入应用列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Success 200 {object} md.DataCenterOriginalDataOneApplicationRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/one/application [GET]
func OriginalDataOneApplication(c *gin.Context) {
svc.OriginalDataOneApplication(c)
}

// OriginalDataOneApplicationAdList
// @Summary 原始数据-单个导入应用-广告位列表
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-单个导入应用-广告位列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataOneApplicationAdListReq true "请求参数"
// @Success 200 {object} md.DataCenterOriginalDataOneApplicationAdListRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/one/application/ad/list [POST]
func OriginalDataOneApplicationAdList(c *gin.Context) {
var req md.DataCenterOriginalDataOneApplicationAdListReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.OriginalDataOneApplicationAdList(c, req)
e.OutSuc(c, res, nil)
return
}

// OriginalDataOneApplicationTotal
// @Summary 原始数据-单个应用数据统计
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-单个应用数据统计
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataOneApplicationDoingReq true "请求参数"
// @Success 200 {object} md.DataCenterOriginalDataOneApplicationDoingRes "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/one/application/total [POST]
func OriginalDataOneApplicationTotal(c *gin.Context) {
var req md.DataCenterOriginalDataOneApplicationDoingReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.OriginalDataOneApplicationTotal(c, req)
}

// OriginalDataOneApplicationDoing
// @Summary 原始数据-单个应用数据操作
// @Tags 数据中心------嘉俊
// @Description 数据中心-原始数据-单个应用数据操作
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DataCenterOriginalDataOneApplicationDoingReq true "请求参数"
// @Success 200 {string} "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/dataCenter/original/data/one/application/doing [POST]
func OriginalDataOneApplicationDoing(c *gin.Context) {
var req md.DataCenterOriginalDataOneApplicationDoingReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
args := md.DataCenterOriginalDataMoreApplicationDoingReq{
Ids: []md.DataCenterOriginalDataOneApplicationDoingReqData{
{
AppId: req.AppId,
AdId: req.AdId,
},
},
Date: req.Date,
}
err = svc.OriginalDataMoreApplicationDoing(c, args)
if err != nil {
e.OutErr(c, 400, e.NewErr(400, err.Error()))
return
}
e.OutSuc(c, "success", nil)
return
}

+ 25
- 1
app/hdl/hdl_demo.go Ver fichero

@@ -3,18 +3,23 @@ package hdl
import (
"applet/app/e"
"applet/app/lib/wechat"
"applet/app/md"
"applet/app/svc"
"applet/app/utils"
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"fmt"
"github.com/gin-gonic/gin"
)

func Demo(c *gin.Context) {
mediumId := utils.GenerateUniqueRandomNumbers(8)
fmt.Println(mediumId)
return
appId := c.DefaultQuery("app_id", "")
masterId := svc.GetMasterId(c)
adUnitId := c.DefaultQuery("adunit_id", "")

//1、查找对应 user_wx_applet_list 记录
userWxAppletListDb := implement.NewUserWxAppletListDb(db.Db)
UserWxAppletList, err := userWxAppletListDb.GetUserWxAppletList(masterId)
@@ -36,6 +41,25 @@ func Demo(c *gin.Context) {
e.OutErr(c, e.ERR_NOT_FAN, "未查询到对应三方应用记录")
return
}
ch, err := rabbit.Cfg.Pool.GetChannel()
if err != nil {
return
}
defer ch.Release()
var arg = md.ZhiosAdOriginalDataApplication{
Mid: "123456",
AppId: "123",
AdId: "123",
Date: "123",
ComponentAppsecret: wxOpenThirdPartyAppList.AppSecret,
ComponentAppid: wxOpenThirdPartyAppList.Appid,
}
err = ch.PublishV2(md.AdOriginalData, arg, md.AdOriginalDataApplication)
if err != nil {
ch.PublishV2(md.AdOriginalData, arg, md.AdOriginalDataApplication)
}
return

wxApiService, err := wechat.NewWxApiService(masterId, wxOpenThirdPartyAppList.Appid, wxOpenThirdPartyAppList.AppSecret)
if err != nil {
e.OutErr(c, e.ERR, err.Error())


+ 90
- 0
app/hdl/hdl_division_strategy.go Ver fichero

@@ -0,0 +1,90 @@
package hdl

import (
"applet/app/e"
"applet/app/lib/validate"
"applet/app/md"
"applet/app/svc"
"github.com/gin-gonic/gin"
)

// DivisionStrategyList
// @Summary 列表
// @Tags 分成策略------嘉俊
// @Description 分成策略-列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DivisionStrategyReq true "请求参数"
// @Success 200 {object} md.DivisionStrategyRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/divisionStrategy/list [POST]
func DivisionStrategyList(c *gin.Context) {
var req md.DivisionStrategyReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DivisionStrategyList(c, req)
e.OutSuc(c, res, nil)
return
}

// DivisionStrategyDetail
// @Summary 详情
// @Tags 分成策略------嘉俊
// @Description 分成策略-详情
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DivisionStrategyDetailReq true "请求参数"
// @Success 200 {object} md.DivisionStrategyDetailRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/divisionStrategy/detail [POST]
func DivisionStrategyDetail(c *gin.Context) {
var req md.DivisionStrategyDetailReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.DivisionStrategyDetail(c, req)
e.OutSuc(c, res, nil)
return
}

// DivisionStrategySave
// @Summary 保存
// @Tags 分成策略------嘉俊
// @Description 分成策略-保存
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.DivisionStrategyDetailRes true "请求参数"
// @Success 200 {string} "具体看返回内容 "
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/divisionStrategy/save [POST]
func DivisionStrategySave(c *gin.Context) {
var req md.DivisionStrategyDetailRes
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
err = svc.DivisionStrategySave(c, req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
e.OutSuc(c, "success", nil)
return
}

+ 152
- 0
app/hdl/hdl_finance_center_medium.go Ver fichero

@@ -0,0 +1,152 @@
package hdl

import (
"applet/app/e"
"applet/app/lib/validate"
"applet/app/md"
"applet/app/svc"
"github.com/gin-gonic/gin"
)

// FinanceCenterMediumList
// @Summary 媒体列表
// @Tags 财务中心------嘉俊
// @Description 财务中心-媒体列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.FinanceCenterDataReq true "请求参数"
// @Success 200 {object} md.FinanceCenterDataRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/financeCenter/medium/list [POST]
func FinanceCenterMediumList(c *gin.Context) {
var req md.FinanceCenterDataReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.FinanceCenterMediumList(c, req)
e.OutSuc(c, res, nil)
return
}

// FinanceCenterMediumDetail
// @Summary 媒体详情
// @Tags 财务中心------嘉俊
// @Description 财务中心-媒体详情
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.CommDetailReq true "请求参数"
// @Success 200 {object} md.FinanceCenterDataRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/financeCenter/medium/detail [POST]
func FinanceCenterMediumDetail(c *gin.Context) {
var req md.CommDetailReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.FinanceCenterMediumDetail(c, req)
e.OutSuc(c, res, nil)
return
}

// FinanceCenterMediumSettleFileSave
// @Summary 媒体详情-结算单保存
// @Tags 财务中心------嘉俊
// @Description 财务中心-媒体详情-结算单保存
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.SettleFileReq true "请求参数"
// @Success 200 {string} "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/financeCenter/medium/settle/file/save [POST]
func FinanceCenterMediumSettleFileSave(c *gin.Context) {
var req md.SettleFileReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.FinanceCenterMediumSettleFileSave(c, req)
}

// FinanceCenterMediumPaySave
// @Summary 媒体详情-确认支付
// @Tags 财务中心------嘉俊
// @Description 财务中心-媒体详情-确认支付
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.CommDetailReq true "请求参数"
// @Success 200 {string} "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/financeCenter/medium/pay/save [POST]
func FinanceCenterMediumPaySave(c *gin.Context) {
var req md.CommDetailReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.FinanceCenterMediumPaySave(c, req)
}

// FinanceCenterMediumOtherIncomeSave
// @Summary 媒体详情-其他收益调整
// @Tags 财务中心------嘉俊
// @Description 财务中心-媒体详情-其他收益调整
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.OtherIncomeReq true "请求参数"
// @Success 200 {string} "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/financeCenter/medium/other/income/save [POST]
func FinanceCenterMediumOtherIncomeSave(c *gin.Context) {
var req md.OtherIncomeReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.FinanceCenterMediumOtherIncomeSave(c, req)
}

// FinanceCenterMediumInvoiceSave
// @Summary 媒体详情-发票保存
// @Tags 财务中心------嘉俊
// @Description 财务中心-媒体详情-发票保存
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.InvoiceReq true "请求参数"
// @Success 200 {string} "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/financeCenter/medium/invoice/save [POST]
func FinanceCenterMediumInvoiceSave(c *gin.Context) {
var req md.InvoiceReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.FinanceCenterMediumInvoiceSave(c, req)

}

+ 80
- 0
app/hdl/hdl_settle_center_agent.go Ver fichero

@@ -0,0 +1,80 @@
package hdl

import (
"applet/app/e"
"applet/app/lib/validate"
"applet/app/md"
"applet/app/svc"
"github.com/gin-gonic/gin"
)

// SettleCenterAgentList
// @Summary 代理列表
// @Tags 结算中心------嘉俊
// @Description 结算中心-代理列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.SettleCenterDataReq true "请求参数"
// @Success 200 {object} md.SettleCenterDataRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/settleCenter/agent/list [POST]
func SettleCenterAgentList(c *gin.Context) {
var req md.SettleCenterDataReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.SettleCenterAgentList(c, req)
e.OutSuc(c, res, nil)
return
}

// SettleCenterAgentSave
// @Summary 代理列表
// @Tags 结算中心------嘉俊
// @Description 结算中心-代理列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.SettleCenterDataSaveReq true "请求参数"
// @Success 200 {string} "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/settleCenter/agent/save [POST]
func SettleCenterAgentSave(c *gin.Context) {
var req md.SettleCenterDataSaveReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.SettleCenterAgentSave(c, req)
}

// SettleCenterAgentDetail
// @Summary 代理列表
// @Tags 结算中心------嘉俊
// @Description 结算中心-代理列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.SettleCenterDataDetailReq true "请求参数"
// @Success 200 {string} "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/settleCenter/agent/detail [POST]
func SettleCenterAgentDetail(c *gin.Context) {
var req md.SettleCenterDataDetailReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.SettleCenterAgentDetail(c, req)
}

+ 80
- 0
app/hdl/hdl_settle_center_medium.go Ver fichero

@@ -0,0 +1,80 @@
package hdl

import (
"applet/app/e"
"applet/app/lib/validate"
"applet/app/md"
"applet/app/svc"
"github.com/gin-gonic/gin"
)

// SettleCenterMediumList
// @Summary 媒体列表
// @Tags 结算中心------嘉俊
// @Description 结算中心-媒体列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.SettleCenterDataReq true "请求参数"
// @Success 200 {object} md.SettleCenterDataRes "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/settleCenter/medium/list [POST]
func SettleCenterMediumList(c *gin.Context) {
var req md.SettleCenterDataReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
res := svc.SettleCenterMediumList(c, req)
e.OutSuc(c, res, nil)
return
}

// SettleCenterMediumSave
// @Summary 媒体列表
// @Tags 结算中心------嘉俊
// @Description 结算中心-媒体列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.SettleCenterDataSaveReq true "请求参数"
// @Success 200 {string} "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/settleCenter/medium/save [POST]
func SettleCenterMediumSave(c *gin.Context) {
var req md.SettleCenterDataSaveReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.SettleCenterMediumSave(c, req)
}

// SettleCenterMediumDetail
// @Summary 媒体列表
// @Tags 结算中心------嘉俊
// @Description 结算中心-媒体列表
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @Accept json
// @Produce json
// @Param args body md.SettleCenterDataDetailReq true "请求参数"
// @Success 200 {string} "具体看返回内容 这是data里面的数据"
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/settleCenter/medium/detail [POST]
func SettleCenterMediumDetail(c *gin.Context) {
var req md.SettleCenterDataDetailReq
err := c.ShouldBindJSON(&req)
if err != nil {
err = validate.HandleValidateErr(err)
err1 := err.(e.E)
e.OutErr(c, err1.Code, err1.Error())
return
}
svc.SettleCenterMediumDetail(c, req)
}

+ 3
- 0
app/md/comm.go Ver fichero

@@ -4,3 +4,6 @@ type SelectData struct {
Name string `json:"name" example:"名称"`
Value string `json:"value" example:"值"`
}
type CommDetailReq struct {
Id string `json:"id" example:"列表id"`
}

+ 1
- 0
app/md/md__applet_application_ad_space_list.go Ver fichero

@@ -25,6 +25,7 @@ type AppletApplicationAdSpaceListReq struct {
Page string `json:"page" `
Name string `json:"name"`
CooperateState string `json:"cooperate_state" example:"合作状态"`
AdType string `json:"ad_type" example:""`
Platform string `json:"platform"`
}
type AppletApplicationAdSpaceListRes struct {


+ 111
- 0
app/md/md_data_center_generate_data.go Ver fichero

@@ -0,0 +1,111 @@
package md

type DataCenterGenerateDataReq struct {
Limit string `json:"limit"`
Page string `json:"page" `
Name string `json:"name"`
State string `json:"state"`
Platform string `json:"platform"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
}

type DataCenterGenerateDataRes struct {
List []DataCenterGenerateDataData `json:"list" `
Total int64 `json:"total"`
State []SelectData `json:"state"`
Platform []SelectData `json:"platform"`
}

type DataCenterGenerateDataData struct {
Id string `json:"id" example:"id"`
Date string `json:"date" example:"日期"`
Name string `json:"name" example:"名称"`
Platform string `json:"platform" example:"平台名称"`
AdvName string `json:"adv_name" example:"广告位"`
State string `json:"state" example:"状态id"`
OldExposureCount string `json:"old_exposure_count" example:"原-曝光量"`
OldClickCount string `json:"old_click_count" example:"原-点击量"`
OldClickRate string `json:"old_click_rate" example:"原-点击率"`
OldEcpm string `json:"old_ecpm" example:"'原-ecpm(元)"`
ExposureCount string `json:"exposure_count" example:"现-曝光量"`
ClickCount string `json:"click_count" example:"现-点击量"`
ClickRate string `json:"click_rate" example:"现-点击率"`
Ecpm string `json:"ecpm" example:"'现-ecpm(元)"`
PlatformRetention string `json:"platform_retention" example:"平台留存(元)"`
CommissionRetention string `json:"commission_retention" example:"佣金留存(元)"`
PriceAdjustmentRetention string `json:"price_adjustment_retention" example:"调价留存(元)"`
MediaRevenue string `json:"media_revenue" example:"媒体收益(元)"`
AgentRevenue string `json:"agent_revenue" example:"代理收益(元)"`
ExtraRevenue string `json:"extra_revenue" example:"额外收益(元)"`
AgreementSharing string `json:"agreement_sharing" example:"协议分成(元)"`
AgreementSharingTotal string `json:"agreement_sharing_total" example:"协议总分成(元)"`
IsGenerateReport string `json:"is_generate_report" example:"是否已生成报表(0:未 1:已)"`
}

type DataCenterIncomeDataRes struct {
List []DataCenterIncomeDataData `json:"list" `
Total int64 `json:"total"`
State []SelectData `json:"state"`
Platform []SelectData `json:"platform"`
}

type DataCenterIncomeDataData struct {
Id string `json:"id" example:"id"`
Date string `json:"date" example:"日期"`
Name string `json:"name" example:"名称"`
Platform string `json:"platform" example:"平台名称"`
AdvName string `json:"adv_name" example:"广告位"`
State string `json:"state" example:"状态id"`
ExposureCount string `json:"exposure_count" example:"现-曝光量"`
ClickCount string `json:"click_count" example:"现-点击量"`
ClickRate string `json:"click_rate" example:"现-点击率"`
Ecpm string `json:"ecpm" example:"'现-ecpm(元)"`
MediaRevenue string `json:"media_revenue" example:"媒体收益(元)"`
AgreementSharing string `json:"agreement_sharing" example:"平台收益(元)"`
AgentRevenue string `json:"agent_revenue" example:"代理收益(元)"`
SettleAmount string `json:"settle_amount" example:"结算收益(元)"`
}
type DataCenterIncomeDataDetail struct {
Platform string `json:"platform" example:"填充来源"`
MediaRevenue string `json:"media_revenue" example:"媒体收益(元)"`
MediaRevenueRate string `json:"media_revenue_rate" example:"媒体收益百分比"`
AgreementSharingRate string `json:"agreement_sharing_rate" example:"平台收益百分比"`
AgreementSharing string `json:"agreement_sharing" example:"平台收益(元)"`
AgentRevenue string `json:"agent_revenue" example:"代理收益(元)"`
AgentRevenueRate string `json:"agent_revenue_rate" example:"代理收益百分比"`
DataSource string `json:"data_source" example:"数据来源"`
MediumName string `json:"medium_name" example:"媒体名称"`
CreateAt string `json:"create_at"`
UpdateAt string `json:"update_at"`
AgentReward []DataCenterGenerateDataDetailAgentRewardSecond `json:"agent_reward"`
}
type DataCenterGenerateDataCommReq struct {
Id string `json:"id" example:"列表id"`
}

type DataCenterGenerateDataDetailData struct {
PlatformRetentionRate string `json:"platform_retention_rate" example:"平台留存百分比"`
CommissionRetentionRate string `json:"commission_retention_rate" example:"佣金留存百分比"`
MediaRevenueRate string `json:"media_revenue_rate" example:"媒体收益百分比"`
AgentRevenueRate string `json:"agent_revenue_rate" example:"代理收益百分比"`
ExtraRevenueRate string `json:"extra_revenue_rate" example:"额外收益百分比"`
AgreementSharingRate string `json:"agreement_sharing_rate" example:"协议分成百分比"`
CreateAt string `json:"create_at" `
UpdateAt string `json:"update_at" `
AgentReward []DataCenterGenerateDataDetailAgentReward `json:"agent_reward"`
}
type DataCenterGenerateDataDetailAgentReward struct {
Name string `json:"name"`
Account string `json:"account"`
AgentRevenue string `json:"agent_revenue" example:"代理收益(元)"`
AgentRevenueRate string `json:"agent_revenue_rate" example:"代理收益百分比"`
ExtraRevenue string `json:"extra_revenue" example:"额外收益(元)"`
ExtraRevenueRate string `json:"extra_revenue_rate" example:"'额外收益百分比"`
}
type DataCenterGenerateDataDetailAgentRewardSecond struct {
Name string `json:"name"`
Account string `json:"account"`
AgentRevenue string `json:"agent_revenue" example:"代理收益(元)"`
AgentRevenueRate string `json:"agent_revenue_rate" example:"代理收益百分比"`
}

+ 133
- 0
app/md/md_data_center_original_data.go Ver fichero

@@ -0,0 +1,133 @@
package md

var AdState = []SelectData{
{Name: "审核通过", Value: "1"},
{Name: "待审核", Value: "0"},
{Name: "审核拒绝", Value: "2"},
{Name: "封禁中", Value: "3"},
}

var AdPlatform = []SelectData{
{Name: "微信小程序", Value: "wx_applet"},
}

type DataCenterOriginalDataReq struct {
Limit string `json:"limit"`
Page string `json:"page" `
Name string `json:"name"`
State string `json:"state"`
Platform string `json:"platform"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
}

type DataCenterOriginalDataRes struct {
List []DataCenterOriginalDataData `json:"list" `
Total int64 `json:"total"`
State []SelectData `json:"state"`
Platform []SelectData `json:"platform"`
}

type DataCenterOriginalDataData struct {
Id string `json:"id" example:"id"`
Date string `json:"date" example:"日期"`
Name string `json:"name" example:"名称"`
Platform string `json:"platform" example:"平台名称"`
AdvName string `json:"adv_name" example:"广告位"`
State string `json:"state" example:"状态id"`
ReqSuccCount string `json:"req_succ_count" example:"拉取量"`
ExposureCount string `json:"exposure_count" example:"曝光量"`
ExposureRate string `json:"exposure_rate" example:"曝光率"`
ClickCount string `json:"click_count" example:"点击量"`
ClickRate string `json:"click_rate" example:"点击率"`
PublisherIncome string `json:"publisher_income" example:"总收益(元)"`
Ecpm string `json:"ecpm" example:"'ecpm(元)"`
IsApply string `json:"is_apply" example:"是否已应用"`
}

type DataCenterOriginalDataCommReq struct {
Id string `json:"id" example:"列表id"`
}
type DataCenterDataCenterOriginalDataDoingReq struct {
Id string `json:"id" example:"列表id"`
NowExposureCount string `json:"now_exposure_count" example:"现-曝光量"`
NowEcpm string `json:"now_ecpm" example:"现-广告千次曝光收益(元)"`
}
type DataCenterOriginalDataMoreApplicationReq struct {
Limit string `json:"limit"`
Page string `json:"page" `
Name string `json:"name"`
}

type DataCenterOriginalDataMoreApplicationRes struct {
List []DataCenterOriginalDataMoreApplicationData `json:"list" `
Total int64 `json:"total"`
State []SelectData `json:"state"`
}

type DataCenterOriginalDataMoreApplicationData struct {
Id string `json:"id" example:"id"`
AppId string `json:"app_id" example:"小程序id"`
AdId string `json:"ad_id" example:"广告位id"`
Logo string `json:"logo"`
Name string `json:"name" example:"名称"`
AdvName string `json:"adv_name" example:"广告位"`
State string `json:"state" example:"状态id"`
}
type DataCenterOriginalDataOneApplicationRes struct {
List []DataCenterOriginalDataOneApplicationData `json:"list" `
}
type DataCenterOriginalDataOneApplicationData struct {
Id string `json:"id" example:"id"`
AppId string `json:"app_id" example:"小程序id"`
Logo string `json:"logo"`
Name string `json:"name" example:"名称"`
}
type DataCenterOriginalDataOneApplicationAdListReq struct {
AppId string `json:"app_id"`
}
type DataCenterOriginalDataOneApplicationAdListRes struct {
List []DataCenterOriginalDataOneApplicationAdListData `json:"list" `
State []SelectData `json:"state"`
}
type DataCenterOriginalDataOneApplicationAdListData struct {
Id string `json:"id" example:"id"`
Name string `json:"name" example:"名称"`
AdId string `json:"ad_id" example:"广告位id"`
State string `json:"state" example:"状态id"`
}
type DataCenterOriginalDataMoreApplicationDoingReq struct {
Ids []DataCenterOriginalDataOneApplicationDoingReqData `json:"ids"`
Date string `json:"date" example:"2024-08-28"`
}
type DataCenterOriginalDataOneApplicationDoingReqData struct {
AppId string `json:"app_id"`
AdId string `json:"ad_id"`
}
type DataCenterOriginalDataOneApplicationDoingReq struct {
AppId string `json:"app_id"`
AdId string `json:"ad_id"`
Date string `json:"date" example:"2024-08-28"`
}
type DataCenterOriginalDataOneApplicationDoingRes struct {
AdId string `json:"ad_id"`
AdSlot string `json:"ad_slot" example:"广告位类型名称"`
ExposureCount string `json:"exposure_count" example:"曝光量"`
ReqSuccCount string `json:"req_succ_count" example:"拉取量"`
PublisherIncome string `json:"publisher_income" example:"总收益(元)"`
ClickCount string `json:"click_count" example:"点击量"`
Ecpm string `json:"ecpm" example:"ecpm(元)"`
ExposureRate string `json:"exposure_rate" example:"曝光率"`
ClickRate string `json:"click_rate" example:"点击率"`
}
type MediumDivisionStrategy struct {
PlatformRetentionRate string `json:"platform_retention_rate" example:"平台留存百分比"`
CommissionRetentionRate string `json:"commission_retention_rate" example:"佣金留存百分比"`
MediaRevenueRate string `json:"media_revenue_rate" example:"媒体收益百分比"`
AgentRevenueRate string `json:"agent_revenue_rate" example:"代理收益百分比"`
ExtraRevenueRate string `json:"extra_revenue_rate" example:"额外收益百分比"`
AgreementSharingRate string `json:"agreement_sharing_rate" example:"协议分成百分比"`
ExposureCount string `json:"exposure_count" example:"曝光量"`
OldEcpm string `json:"old_ecpm" example:"原-ecpm(元)"`
Ecpm string `json:"ecpm" example:"现-ecpm(元)"`
}

+ 47
- 0
app/md/md_division_strategy.go Ver fichero

@@ -0,0 +1,47 @@
package md

type DivisionStrategyReq struct {
Limit string `json:"limit"`
Page string `json:"page" `
Name string `json:"name"`
}

type DivisionStrategyRes struct {
List []DivisionStrategyData `json:"list" `
Total int64 `json:"total"`
}

type DivisionStrategyData struct {
Id string `json:"id" example:"id"`
MediumId string `json:"medium_id" example:"媒体id"`
Account string `json:"account" example:"账号"`
Name string `json:"name" example:"名称"`
PlatformRetentionRate string `json:"platform_retention_rate" example:"平台留存百分比"`
CommissionRetentionRate string `json:"commission_retention_rate" example:"佣金留存百分比"`
MediaRevenueRate string `json:"media_revenue_rate" example:"媒体收益百分比"`
AgentRevenueRate string `json:"agent_revenue_rate" example:"代理收益百分比"`
ExtraRevenueRate string `json:"extra_revenue_rate" example:"额外收益百分比"`
AgreementSharingRate string `json:"agreement_sharing_rate" example:"协议分成百分比"`
}
type DivisionStrategyDetailReq struct {
MediumId string `json:"medium_id"`
}
type DivisionStrategyDetailRes struct {
MediumId string `json:"medium_id" example:"媒体id"`
Account string `json:"account" example:"账号"`
Name string `json:"name" example:"名称"`
PlatformRetentionRate string `json:"platform_retention_rate" example:"平台留存百分比"`
CommissionRetentionRate string `json:"commission_retention_rate" example:"佣金留存百分比"`
MediaRevenueRate string `json:"media_revenue_rate" example:"媒体收益百分比"`
AgentRevenueRate string `json:"agent_revenue_rate" example:"代理收益百分比"`
ExtraRevenueRate string `json:"extra_revenue_rate" example:"额外收益百分比"`
AgreementSharingRate string `json:"agreement_sharing_rate" example:"协议分成百分比"`
AgentList []DivisionStrategyDetailByAgent `json:"agent_list"`
}
type DivisionStrategyDetailByAgent struct {
AgentId string `json:"agent_id" example:"代理id"`
Account string `json:"account" example:"账号"`
Name string `json:"name" example:"名称"`
AgentRevenueRate string `json:"agent_revenue_rate" example:"佣金比例"`
ExtraRevenueRate string `json:"extra_revenue_rate" example:"额外奖励"`
}

+ 85
- 0
app/md/md_finance_center.go Ver fichero

@@ -0,0 +1,85 @@
package md

type FinanceCenterDataReq struct {
Limit string `json:"limit"`
Page string `json:"page" `
PayState string `json:"pay_state" example:"读 settle_pay_state返回的"`
StartTime string `json:"start_time" example:"2024-08-29"`
EndTime string `json:"end_time" `
}

type FinanceCenterDataRes struct {
List []FinanceCenterDataData `json:"list" `
Total int64 `json:"total"`
BusinessKind []SelectData `json:"business_kind"`
SettlePayState []SelectData `json:"settle_pay_state"`
SettleState []SelectData `json:"settle_state"`
SettleType []SelectData `json:"settle_type"`
}

type FinanceCenterDataData struct {
Id string `json:"id"`
TimeStr string `json:"time_str" example:"业务时间"`
Name string `json:"name" example:"媒体名称"`
SettleType string `json:"settle_type" example:"结算单类型(1:日结 2:周结 3:月结 4:预付)"`
AllIncome string `json:"all_income" example:"合计收益"`
TopIncome string `json:"top_income" example:"上游结算"`
CommissionIncome string `json:"commission_income" example:"佣金留存"`
PlatformIncome string `json:"platform_income" example:"平台留存"`
ChangeIncome string `json:"change_income" example:"调价留存"`
MediumIncome string `json:"medium_income" example:"媒体结算"`
OtherIncome string `json:"other_income" example:"其他调整"`
PayState string `json:"pay_state" example:"结算单支付状态(0:未开始 1:待审核发票 2:发票审核中 3:发票审核拒绝 4:付款中 5:已付款)"`
State string `json:"state" example:"结算单状态(0:未开始 1:核算中 2:待签订 3:完成签订)"`
Label string `json:"label"`
}
type FinanceCenterDataDetailRes struct {
Data FinanceCenterDataDetail `json:"data" `
BusinessKind []SelectData `json:"business_kind"`
SettlePayState []SelectData `json:"settle_pay_state"`
SettleState []SelectData `json:"settle_state"`
SettleType []SelectData `json:"settle_type"`
InvoiceCate []SelectData `json:"invoice_cate"`
InvoiceState []SelectData `json:"invoice_state"`
}

type FinanceCenterDataDetail struct {
TimeStr string `json:"time_str" example:"业务时间"`
Name string `json:"name" example:"媒体名称"`
Account string `json:"account" example:"媒体账号"`
Source string `json:"source" example:"结算标示"`
SettleFile string `json:"settle_file" example:"结算单"`
Invoice Invoice `json:"invoice"`
AllIncome string `json:"all_income" example:"合计收益"`
TopIncome string `json:"top_income" example:"上游结算"`
CommissionIncome string `json:"commission_income" example:"佣金留存"`
PlatformIncome string `json:"platform_income" example:"平台留存"`
ChangeIncome string `json:"change_income" example:"调价留存"`
MediumIncome string `json:"medium_income" example:"媒体结算"`
OtherIncome string `json:"other_income" example:"其他调整"`
PayState string `json:"pay_state" example:"结算单支付状态(0:未开始 1:待审核发票 2:发票审核中 3:发票审核拒绝 4:付款中 5:已付款)"`
State string `json:"state" example:"结算单状态(0:未开始 1:核算中 2:待签订 3:完成签订)"`
}
type Invoice struct {
Type string `json:"type"`
Time string `json:"time"`
Count string `json:"count"`
File []InvoiceFile `json:"file"`
}
type InvoiceFile struct {
Url string `json:"url"`
State string `json:"state" example:"0待确认 1审核通过 2审核失败"`
}
type SettleFileReq struct {
Id string `json:"id" example:"列表id"`
File string `json:"file" example:"七牛云链接 带http"`
}
type InvoiceReq struct {
Id string `json:"id" example:"列表id"`
State string `json:"state" example:"1审核通过 2审核失败"`
File []InvoiceFile `json:"file" `
}
type OtherIncomeReq struct {
Id string `json:"id" example:"列表id"`
Amount string `json:"amount" example:"其他收益"`
}

+ 17
- 0
app/md/md_mq.go Ver fichero

@@ -0,0 +1,17 @@
package md

const AdOriginalData = "zhios.app.ad.original.data.exchange"

const (
AdOriginalDataApplication = "ad_original_data_application" //应用数据同步
)

type ZhiosAdOriginalDataApplication struct {
AppId string `json:"app_id"`
AdId string `json:"ad_id"`
Date string `json:"date"`
IsEnd string `json:"is_end"` //用来判断哪一个是最后一个
Mid string `json:"mid"`
ComponentAppid string `json:"component_appid"`
ComponentAppsecret string `json:"component_appsecret"`
}

+ 88
- 0
app/md/md_settle_center.go Ver fichero

@@ -0,0 +1,88 @@
package md

var AccountSettleState = []SelectData{
{Name: "日结", Value: "1"},
{Name: "周结", Value: "2"},
{Name: "月结", Value: "3"},
{Name: "预付", Value: "4"},
}
var BusinessKind = []SelectData{
{Name: "广告合作", Value: "1"},
}
var InvoiceCate = []SelectData{
{Name: "电子发票", Value: "0"},
{Name: "纸质发票", Value: "1"},
}
var SettlePayState = []SelectData{
{Name: "未开始", Value: "0"},
{Name: "待审核发票", Value: "1"},
{Name: "发票审核中", Value: "2"},
{Name: "发票审核拒绝", Value: "3"},
{Name: "付款中", Value: "4"},
{Name: "已付款", Value: "5"},
}
var SettleState = []SelectData{
{Name: "未开始", Value: "0"},
{Name: "核算中", Value: "1"},
{Name: "待签订", Value: "2"},
{Name: "完成签订", Value: "3"},
}
var InvoiceState = []SelectData{
{Name: "待审核", Value: "0"},
{Name: "审核通过", Value: "1"},
{Name: "审核拒绝", Value: "2"},
}

type SettleCenterDataReq struct {
Limit string `json:"limit"`
Page string `json:"page" `
Name string `json:"name"`
Account string `json:"account"`
State string `json:"state"`
}

type SettleCenterDataRes struct {
List []SettleCenterDataData `json:"list" `
Total int64 `json:"total"`
State []SelectData `json:"state"`
}

type SettleCenterDataData struct {
Id string `json:"id"`
Name string `json:"name"`
Account string `json:"account"`
SettleType string `json:"settle_type"`
UpdateAt string `json:"update_at"`
}
type SettleCenterDataSaveReq struct {
Id string `json:"id"`
SettleType string `json:"settle_type"`
}

type SettleCenterDataDetailReq struct {
Limit string `json:"limit"`
Id string `json:"id"`
Page string `json:"page" `
StartTime string `json:"start_time" example:"2024-08-29"`
EndTime string `json:"end_time" `
}

type SettleCenterDataDetailRes struct {
List []SettleCenterDataDetailData `json:"list" `
Total int64 `json:"total"`
BusinessKind []SelectData `json:"business_kind"`
SettlePayState []SelectData `json:"settle_pay_state"`
SettleState []SelectData `json:"settle_state"`
SettleType []SelectData `json:"settle_type"`
}

type SettleCenterDataDetailData struct {
TimeStr string `json:"time_str"example:"业务时间"`
BusinessKind string `json:"business_kind" example:"业务类型(1:广告合作)"`
SettleType string `json:"settle_type" example:"结算单类型(1:日结 2:周结 3:月结 4:预付)"`
AllIncome string `json:"all_income" example:"总计"`
BasicIncome string `json:"basic_income" example:"基础收益"`
OtherIncome string `json:"other_income" example:"其他收益"`
PayState string `json:"pay_state" example:"结算单支付状态(0:未开始 1:待审核发票 2:发票审核中 3:发票审核拒绝 4:付款中 5:已付款)"`
State string `json:"state" example:"结算单状态(0:未开始 1:核算中 2:待签订 3:完成签订)"`
}

+ 48
- 0
app/router/router.go Ver fichero

@@ -68,6 +68,11 @@ func route(r *gin.RouterGroup) {
rMediumQualification(r.Group("/mediumQualification")) //媒体-资质
rSetCenter(r.Group("/setCenter")) //设置中心
rMedium(r.Group("/mediumCenter")) //媒体中心
rDivisionStrategy(r.Group("/divisionStrategy")) //分成策略
rDataCenter(r.Group("/dataCenter")) //数据中心
rSettleCenter(r.Group("/settleCenter")) //结算中心
rFinanceCenter(r.Group("/financeCenter")) //财务中心

}

func rRole(r *gin.RouterGroup) {
@@ -144,3 +149,46 @@ func rMedium(r *gin.RouterGroup) {
r.POST("/agent/list", hdl.AgentList) //代理列表
r.POST("/agent/bind/medium/list", hdl.AgentBindMediumList) //代理绑定媒体列表
}
func rDivisionStrategy(r *gin.RouterGroup) {
r.POST("/list", hdl.DivisionStrategyList) //分成策略-列表
r.POST("/detail", hdl.DivisionStrategyDetail) //分成策略-详情
r.POST("/save", hdl.DivisionStrategySave) //分成策略-保存
}
func rDataCenter(r *gin.RouterGroup) {
r.POST("/original/data/list", hdl.OriginalDataList) //数据中心-原始数据
r.POST("/original/data/del", hdl.OriginalDataDel) //数据中心-原始数据-删除
r.POST("/original/data/total", hdl.OriginalDataTotal) //数据中心-原始数据-记录应用时统计
r.POST("/original/data/doing", hdl.OriginalDataDoing) //数据中心-原始数据-记录应用时操作
r.POST("/original/data/more/application", hdl.OriginalDataMoreApplication) //数据中心-原始数据-一键导入应用列表
r.POST("/original/data/more/application/doing", hdl.OriginalDataMoreApplicationDoing) //数据中心-原始数据-一键导入操作
r.POST("/original/data/more/application/state", hdl.OriginalDataMoreApplicationState) //数据中心-原始数据-一键导入操作后的完成状态
r.GET("/original/data/one/application", hdl.OriginalDataOneApplication) //数据中心-原始数据-单个导入应用列表
r.POST("/original/data/one/application/ad/list", hdl.OriginalDataOneApplicationAdList) //数据中心-原始数据-单个导入应用-广告位列表
r.POST("/original/data/one/application/total", hdl.OriginalDataOneApplicationTotal) //数据中心-原始数据-单个应用数据统计
r.POST("/original/data/one/application/doing", hdl.OriginalDataOneApplicationDoing) //数据中心-原始数据-单个应用数据操作
r.POST("/generate/data/list", hdl.GenerateDataList) //数据中心-分成数据
r.POST("/generate/data/del", hdl.GenerateDataDel) //数据中心-分成数据-删除
r.POST("/generate/data/detail", hdl.GenerateDataDetail) //数据中心-分成数据-详情
r.POST("/generate/data/doing", hdl.GenerateDataDoing) //数据中心-分成数据-报表生成操作
r.POST("/income/data/list", hdl.IncomeDataList) //数据中心-收益报表
r.POST("/income/data/detail", hdl.IncomeDataDetail) //数据中心-收益报表-详情

}
func rSettleCenter(r *gin.RouterGroup) {
r.POST("/medium/list", hdl.SettleCenterMediumList) //结算中心-媒体列表
r.POST("/medium/save", hdl.SettleCenterMediumSave) //结算中心-媒体修复结算方式
r.POST("/medium/detail", hdl.SettleCenterMediumDetail) //结算中心-媒体结算详情

r.POST("/agent/list", hdl.SettleCenterAgentList) //结算中心-代理列表
r.POST("/agent/save", hdl.SettleCenterAgentSave) //结算中心-代理修复结算方式
r.POST("/agent/detail", hdl.SettleCenterAgentDetail) //结算中心-代理结算详情
}
func rFinanceCenter(r *gin.RouterGroup) {
r.POST("/medium/list", hdl.FinanceCenterMediumList) //财务中心-媒体列表
r.POST("/medium/detail", hdl.FinanceCenterMediumDetail) //财务中心-媒体详情
r.POST("/medium/settle/file/save", hdl.FinanceCenterMediumSettleFileSave) //财务中心-媒体详情-结算单上传
r.POST("/medium/invoice/save", hdl.FinanceCenterMediumInvoiceSave) //财务中心-媒体详情-发票审核
r.POST("/medium/other/income/save", hdl.FinanceCenterMediumOtherIncomeSave) //财务中心-媒体详情-其他收益调整
r.POST("/medium/pay/save", hdl.FinanceCenterMediumPaySave) //财务中心-媒体详情-确认支付

}

+ 1
- 3
app/svc/svc_applet_application_ad_space.go Ver fichero

@@ -70,9 +70,7 @@ func AppletApplicationAdSpaceList(c *gin.Context) {
}
engine := MasterDb(c)
NewAppletApplicationDb := implement.NewAppletApplicationAdSpaceListDb(engine)
//TODO::临时处理
//appletApplicationList, total, _ := NewAppletApplicationDb.FindAppletApplicationAdSpaceList(req.Name, req.Platform, req.CooperateState, utils.StrToInt(req.MediumId), utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
appletApplicationList, total, _ := NewAppletApplicationDb.FindAppletApplicationAdSpaceList(req.Name, req.Platform, "", req.CooperateState, utils.StrToInt(req.MediumId), utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
appletApplicationList, total, _ := NewAppletApplicationDb.FindAppletApplicationAdSpaceList(req.Name, req.Platform, req.AdType, req.CooperateState, utils.StrToInt(req.MediumId), utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.AppletApplicationAdSpaceListData, 0)
if len(appletApplicationList) > 0 {
for _, v := range appletApplicationList {


+ 263
- 0
app/svc/svc_data_center_generate_data.go Ver fichero

@@ -0,0 +1,263 @@
package svc

import (
"applet/app/e"
"applet/app/md"
"applet/app/utils"
"applet/app/utils/cache"
db "code.fnuoos.com/zhimeng/model.git/src"
implement2 "code.fnuoos.com/zhimeng/model.git/src/implement"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
"errors"
"fmt"
"github.com/gin-gonic/gin"
)

func DataCenterIncomeDataList(c *gin.Context, req md.DataCenterGenerateDataReq) md.DataCenterIncomeDataRes {
engine := db.Db
NewGenerateWxAdDataDb := implement.NewGenerateWxAdDataDb(engine)
appId := GetAppletId(c, req.Name, req.Platform)
slotId := GetSlotId(c, req.State)
MediumList, total, _ := NewGenerateWxAdDataDb.FindGenerateWxAdDataList(c.GetString("mid"), appId, slotId, req.StartTime, req.EndTime, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.DataCenterIncomeDataData, 0)
if len(MediumList) > 0 {
for _, v := range MediumList {
var tmp = md.DataCenterIncomeDataData{
AgreementSharing: utils.Float64ToStr(float64(v.AgreementSharing) / 100),
AgentRevenue: utils.Float64ToStr(float64(v.AgentRevenue) / 100),
Id: utils.IntToStr(v.Id),
ExposureCount: utils.IntToStr(v.ExposureCount),
ClickCount: utils.IntToStr(v.ClickCount),
ClickRate: v.ClickRate,
Ecpm: utils.Float64ToStr(utils.StrToFloat64(v.Ecpm) / 100),
Date: v.Date,
MediaRevenue: utils.Float64ToStr(float64(v.MediaRevenue) / 100),
SettleAmount: utils.Float64ToStr(float64(v.MediaRevenue+v.AgentRevenue+v.AgreementSharing) / 100),
}
tmpApplet := GetAppletInfo(c, v.AppId)
if tmpApplet["platform"] != "" {
tmp.Platform = tmpApplet["platform"]
}
if tmpApplet["name"] != "" {
tmp.Name = tmpApplet["name"]
}
tmpSlot := GetSlotInfo(c, v.SlotId)
if tmpSlot["state"] != "" {
tmp.State = tmpSlot["state"]
}
if tmpSlot["name"] != "" {
tmp.AdvName = tmpSlot["name"]
}
data = append(data, tmp)
}
}
res := md.DataCenterIncomeDataRes{
List: data,
Total: total,
State: md.AdState,
Platform: md.AdPlatform,
}
return res
}
func DataCenterIncomeDataDetail(c *gin.Context, req md.DataCenterGenerateDataCommReq) {
NewGenerateWxAdDataDb := implement.NewGenerateWxAdDataDb(db.Db)
data, _ := NewGenerateWxAdDataDb.GetGenerateWxAdData(utils.StrToInt(req.Id))
if data == nil {
e.OutErr(c, 400, e.NewErr(400, "记录不存在"))
return
}
agentReward := make([]md.DataCenterGenerateDataDetailAgentRewardSecond, 0)
NewGenerateWxAdDataWithAgentFlowDb := implement.NewGenerateWxAdDataWithAgentFlowDb(db.Db)
agent, _ := NewGenerateWxAdDataWithAgentFlowDb.FindGenerateWxAdDataWithAgentFlowByStrategyId(data.Id)
if agent != nil {
for _, v := range *agent {
tmp := md.DataCenterGenerateDataDetailAgentRewardSecond{
Name: "",
Account: "",
AgentRevenue: utils.Float64ToStr(float64(v.AgentRevenue) / 100),
AgentRevenueRate: utils.IntToStr(data.AgentRevenueRate),
}
tmpApplet := GetAgentInfo(c, v.AgentId)
if tmpApplet["name"] != "" {
tmp.Name = tmpApplet["name"]
}
if tmpApplet["account"] != "" {
tmp.Account = tmpApplet["account"]
}
agentReward = append(agentReward, tmp)
}
}
res := md.DataCenterIncomeDataDetail{
MediaRevenue: utils.Float64ToStr(float64(data.MediaRevenue) / 100),
AgreementSharing: utils.Float64ToStr(float64(data.AgreementSharing) / 100),
AgentRevenue: utils.Float64ToStr(float64(data.AgentRevenue) / 100),
DataSource: "手动同步",
CreateAt: data.CreateAt,
UpdateAt: data.UpdateAt,
MediaRevenueRate: utils.IntToStr(data.MediaRevenueRate),
AgentRevenueRate: utils.IntToStr(data.AgentRevenueRate),
AgreementSharingRate: utils.IntToStr(data.AgreementSharingRate),
AgentReward: agentReward,
}
tmpApplet := GetAppletInfo(c, data.AppId)
if tmpApplet["platform"] != "" {
res.Platform = tmpApplet["platform"]
}
NewAppletApplicationDb := implement2.NewAppletApplicationDb(MasterDb(c))
app, _ := NewAppletApplicationDb.GetAppletApplicationListByAppid(data.AppId)
tmp := GetMediumInfo(c, app.MediumId)
if tmp["name"] != "" {
res.MediumName = tmp["name"]
if tmp["account"] != "" {
res.MediumName += "(" + tmp["account"] + ")"
}
}
e.OutSuc(c, res, nil)
return
}

func DataCenterGenerateDataList(c *gin.Context, req md.DataCenterGenerateDataReq) md.DataCenterGenerateDataRes {
engine := db.Db
NewGenerateWxAdDataDb := implement.NewGenerateWxAdDataDb(engine)
appId := GetAppletId(c, req.Name, req.Platform)
slotId := GetSlotId(c, req.State)
MediumList, total, _ := NewGenerateWxAdDataDb.FindGenerateWxAdDataList(c.GetString("mid"), appId, slotId, req.StartTime, req.EndTime, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.DataCenterGenerateDataData, 0)
if len(MediumList) > 0 {
NewOriginalWxAdDataDb := implement.NewOriginalWxAdDataDb(engine)
for _, v := range MediumList {
wxData, _ := NewOriginalWxAdDataDb.GetOriginalWxAdData(v.Id)
var tmp = md.DataCenterGenerateDataData{
Id: utils.IntToStr(v.Id),
ExposureCount: utils.IntToStr(v.ExposureCount),
ClickCount: utils.IntToStr(v.ClickCount),
ClickRate: v.ClickRate,
Ecpm: utils.Float64ToStr(utils.StrToFloat64(v.Ecpm) / 100),
IsGenerateReport: utils.IntToStr(v.IsGenerateReport),
Date: v.Date,
PlatformRetention: utils.Float64ToStr(float64(v.PlatformRetention) / 100),
CommissionRetention: utils.Float64ToStr(float64(v.CommissionRetention) / 100),
PriceAdjustmentRetention: utils.Float64ToStr(float64(v.PriceAdjustmentRetention) / 100),
MediaRevenue: utils.Float64ToStr(float64(v.MediaRevenue) / 100),
AgentRevenue: utils.Float64ToStr(float64(v.AgentRevenue) / 100),
ExtraRevenue: utils.Float64ToStr(float64(v.ExtraRevenue) / 100),
AgreementSharing: utils.Float64ToStr(float64(v.AgreementSharing) / 100),
AgreementSharingTotal: utils.Float64ToStr(float64(v.AgreementSharingTotal) / 100),
}
if wxData != nil {
tmp.OldClickRate = wxData.ClickRate
tmp.OldClickCount = utils.IntToStr(wxData.ClickCount)
tmp.OldEcpm = utils.Float64ToStr(utils.StrToFloat64(wxData.Ecpm) / 100)
tmp.OldExposureCount = utils.IntToStr(wxData.ExposureCount)
}
tmpApplet := GetAppletInfo(c, v.AppId)
if tmpApplet["platform"] != "" {
tmp.Platform = tmpApplet["platform"]
}
if tmpApplet["name"] != "" {
tmp.Name = tmpApplet["name"]
}
tmpSlot := GetSlotInfo(c, v.SlotId)
if tmpSlot["state"] != "" {
tmp.State = tmpSlot["state"]
}
if tmpSlot["name"] != "" {
tmp.AdvName = tmpSlot["name"]
}
data = append(data, tmp)
}
}
res := md.DataCenterGenerateDataRes{
List: data,
Total: total,
State: md.AdState,
Platform: md.AdPlatform,
}
return res
}

func DataCenterGenerateDataDel(c *gin.Context, req md.DataCenterGenerateDataCommReq) error {
NewGenerateWxAdDataDb := implement.NewGenerateWxAdDataDb(db.Db)
data, _ := NewGenerateWxAdDataDb.GetGenerateWxAdData(utils.StrToInt(req.Id))
if data == nil {
return errors.New("记录不存在")
}
if data.IsGenerateReport == 1 {
return errors.New("记录已应用,不能删除")
}
_, err := db.Db.Where("id=?", req.Id).Delete(&model.GenerateWxAdData{})
if err != nil {
return err
}
return nil
}
func DataCenterGenerateDataDetail(c *gin.Context, req md.DataCenterGenerateDataCommReq) {
NewGenerateWxAdDataDb := implement.NewGenerateWxAdDataDb(db.Db)
data, _ := NewGenerateWxAdDataDb.GetGenerateWxAdData(utils.StrToInt(req.Id))
if data == nil {
e.OutErr(c, 400, e.NewErr(400, "记录不存在"))
return
}
agentReward := make([]md.DataCenterGenerateDataDetailAgentReward, 0)
NewGenerateWxAdDataWithAgentFlowDb := implement.NewGenerateWxAdDataWithAgentFlowDb(db.Db)
agent, _ := NewGenerateWxAdDataWithAgentFlowDb.FindGenerateWxAdDataWithAgentFlowByStrategyId(data.Id)
if agent != nil {
for _, v := range *agent {
tmp := md.DataCenterGenerateDataDetailAgentReward{
Name: "",
Account: "",
AgentRevenue: utils.Float64ToStr(float64(v.AgentRevenue) / 100),
AgentRevenueRate: utils.IntToStr(data.AgentRevenueRate),
ExtraRevenue: utils.Float64ToStr(float64(v.ExtraRevenue) / 100),
ExtraRevenueRate: utils.IntToStr(data.ExtraRevenueRate),
}
tmpApplet := GetAgentInfo(c, v.AgentId)
if tmpApplet["name"] != "" {
tmp.Name = tmpApplet["name"]
}
if tmpApplet["account"] != "" {
tmp.Account = tmpApplet["account"]
}
agentReward = append(agentReward, tmp)
}
}
res := md.DataCenterGenerateDataDetailData{
PlatformRetentionRate: utils.IntToStr(data.PlatformRetentionRate),
CommissionRetentionRate: utils.IntToStr(data.CommissionRetentionRate),
MediaRevenueRate: utils.IntToStr(data.MediaRevenueRate),
AgentRevenueRate: utils.IntToStr(data.AgentRevenueRate),
ExtraRevenueRate: utils.IntToStr(data.ExtraRevenueRate),
AgreementSharingRate: utils.IntToStr(data.AgreementSharingRate),
AgentReward: agentReward,
}
e.OutSuc(c, res, nil)
return
}
func DataCenterGenerateDataDoing(c *gin.Context, req md.DataCenterGenerateDataCommReq) error {
NewGenerateWxAdDataDb := implement.NewGenerateWxAdDataDb(db.Db)
data, _ := NewGenerateWxAdDataDb.GetGenerateWxAdData(utils.StrToInt(req.Id))
if data == nil {
return e.NewErr(400, "记录不存在")
}
if data.IsGenerateReport == 1 {
return e.NewErr(400, "该记录已完成操作")
}
// 加锁 防止并发提取
mutexKey := fmt.Sprintf("%s:DataCenterGenerateDataDoing:%s", c.GetString("mid"), req.Id)
withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX")
if err != nil {
return err
}
if withdrawAvailable != "OK" {
return e.NewErr(400000, "请求过于频繁,请稍后再试")
}
args := md.SettlementWxAdData{
GenerateDataId: utils.StrToInt(req.Id),
}
err = SettlementWxAdData(args)
if err != nil {
return err
}
return nil
}

+ 403
- 0
app/svc/svc_data_center_original_data.go Ver fichero

@@ -0,0 +1,403 @@
package svc

import (
"applet/app/e"
"applet/app/lib/wechat"
"applet/app/md"
"applet/app/utils"
"applet/app/utils/cache"
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
db "code.fnuoos.com/zhimeng/model.git/src"
implement2 "code.fnuoos.com/zhimeng/model.git/src/implement"
model2 "code.fnuoos.com/zhimeng/model.git/src/model"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"strings"
)

func DataCenterOriginalDataList(c *gin.Context, req md.DataCenterOriginalDataReq) md.DataCenterOriginalDataRes {
engine := db.Db
NewOriginalWxAdDataDb := implement.NewOriginalWxAdDataDb(engine)
appId := GetAppletId(c, req.Name, req.Platform)
slotId := GetSlotId(c, req.State)
MediumList, total, _ := NewOriginalWxAdDataDb.FindOriginalWxAdDataList(c.GetString("mid"), appId, slotId, req.StartTime, req.EndTime, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.DataCenterOriginalDataData, 0)
if len(MediumList) > 0 {
for _, v := range MediumList {
var tmp = md.DataCenterOriginalDataData{
Id: utils.IntToStr(v.Id),
ReqSuccCount: utils.IntToStr(v.ReqSuccCount),
ExposureCount: utils.IntToStr(v.ExposureCount),
ExposureRate: v.ExposureRate,
ClickCount: utils.IntToStr(v.ClickCount),
ClickRate: v.ClickRate,
Date: v.Date,
PublisherIncome: utils.Float64ToStr(float64(v.PublisherIncome) / 100),
Ecpm: utils.Float64ToStr(utils.StrToFloat64(v.Ecpm) / 100),
IsApply: utils.IntToStr(v.IsApply),
}
tmpApplet := GetAppletInfo(c, v.AppId)
if tmpApplet["platform"] != "" {
tmp.Platform = tmpApplet["platform"]
}
if tmpApplet["name"] != "" {
tmp.Name = tmpApplet["name"]
}
tmpSlot := GetSlotInfo(c, v.SlotId)
if tmpSlot["state"] != "" {
tmp.State = tmpSlot["state"]
}
if tmpSlot["name"] != "" {
tmp.AdvName = tmpSlot["name"]
}
data = append(data, tmp)
}
}
res := md.DataCenterOriginalDataRes{
List: data,
Total: total,
State: md.AdState,
Platform: md.AdPlatform,
}
return res
}
func DataCenterOriginalDataDel(c *gin.Context, req md.DataCenterOriginalDataCommReq) error {
NewOriginalWxAdDataDb := implement.NewOriginalWxAdDataDb(db.Db)
data, _ := NewOriginalWxAdDataDb.GetOriginalWxAdData(utils.StrToInt(req.Id))
if data == nil {
return errors.New("记录不存在")
}
if data.IsApply == 1 {
return errors.New("记录已应用,不能删除")
}
_, err := db.Db.Where("id=?", req.Id).Delete(&model.OriginalWxAdData{})
if err != nil {
return err
}
return nil
}
func OriginalDataMoreApplication(c *gin.Context, req md.DataCenterOriginalDataMoreApplicationReq) md.DataCenterOriginalDataMoreApplicationRes {
engine := MasterDb(c)
NewAppletApplicationAdSpaceListDb := implement2.NewAppletApplicationAdSpaceListDb(engine)
MediumList, total, _ := NewAppletApplicationAdSpaceListDb.FindAppletApplicationAdSpaceList(req.Name, "", "", "", 0, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.DataCenterOriginalDataMoreApplicationData, 0)
if len(MediumList) > 0 {
for _, v := range MediumList {
var tmp = md.DataCenterOriginalDataMoreApplicationData{
Id: utils.IntToStr(v.AppletApplicationAdSpaceList.Id),
AppId: v.AppletApplicationAdSpaceList.AppId,
AdId: v.AppletApplicationAdSpaceList.AdId,
Logo: v.AppletApplication.Logo,
Name: v.AppletApplication.Name,
State: utils.IntToStr(v.AppletApplicationAdSpaceList.State),
AdvName: v.AppletApplicationAdSpaceList.Name,
}
data = append(data, tmp)
}
}
res := md.DataCenterOriginalDataMoreApplicationRes{
List: data,
Total: total,
State: md.AdState,
}
return res
}
func OriginalDataOneApplication(c *gin.Context) {
list := make([]md.DataCenterOriginalDataOneApplicationData, 0)
NewAppletApplicationDb := implement2.NewAppletApplicationDb(MasterDb(c))
applicationList, _ := NewAppletApplicationDb.FindAllAppletApplicationList()
for _, v := range applicationList {
tmp := md.DataCenterOriginalDataOneApplicationData{
Id: utils.IntToStr(v.Id),
AppId: v.AppId,
Logo: v.Logo,
Name: v.Name,
}
list = append(list, tmp)
}
var res = md.DataCenterOriginalDataOneApplicationRes{
List: list,
}
e.OutSuc(c, res, nil)
return
}
func OriginalDataOneApplicationAdList(c *gin.Context, req md.DataCenterOriginalDataOneApplicationAdListReq) md.DataCenterOriginalDataOneApplicationAdListRes {
list := make([]md.DataCenterOriginalDataOneApplicationAdListData, 0)
NewAppletApplicationDb := implement2.NewAppletApplicationAdSpaceListDb(MasterDb(c))
applicationList, _ := NewAppletApplicationDb.FindAllAppletApplicationAdSpaceListList(req.AppId)
for _, v := range applicationList {
tmp := md.DataCenterOriginalDataOneApplicationAdListData{
Id: utils.IntToStr(v.Id),
AdId: v.AdId,
Name: v.Name,
State: utils.IntToStr(v.State),
}
list = append(list, tmp)
}
var res = md.DataCenterOriginalDataOneApplicationAdListRes{
List: list,
State: md.AdState,
}
return res
}
func DataCenterOriginalDataTotal(c *gin.Context, req md.DataCenterOriginalDataCommReq) {
NewOriginalWxAdDataDb := implement.NewOriginalWxAdDataDb(db.Db)
data, _ := NewOriginalWxAdDataDb.GetOriginalWxAdData(utils.StrToInt(req.Id))
if data == nil {
e.OutErr(c, 400, e.NewErr(400, "记录不存在"))
return
}
//应用
NewAppletApplicationDb := implement2.NewAppletApplicationDb(MasterDb(c))
appid, _ := NewAppletApplicationDb.GetAppletApplicationListByAppid(data.AppId)
if appid == nil {
e.OutErr(c, 400, e.NewErr(400, "应用不存在"))
return
}
//分成策略
NewMediumDivisionStrategyDb := implement.NewMediumDivisionStrategyDb(MasterDb(c))
strategy, _ := NewMediumDivisionStrategyDb.GetOriginalWxAdDataByMediumId(appid.MediumId)
if strategy == nil {
e.OutErr(c, 400, e.NewErr(400, "分成策略不存在"))
return
}
ecpmReq := md.ClacEcpmReq{
OriginalExposureCount: data.ExposureCount,
OriginalEcpm: data.Ecpm,
GenerateDataId: data.Id,
}
_, ecpm := ClacEcpm(ecpmReq)

res := md.MediumDivisionStrategy{
PlatformRetentionRate: utils.IntToStr(strategy.PlatformRetentionRate),
CommissionRetentionRate: utils.IntToStr(strategy.CommissionRetentionRate),
MediaRevenueRate: utils.IntToStr(strategy.MediaRevenueRate),
AgentRevenueRate: utils.IntToStr(strategy.AgentRevenueRate),
ExtraRevenueRate: utils.IntToStr(strategy.ExtraRevenueRate),
AgreementSharingRate: utils.IntToStr(strategy.AgreementSharingRate),
ExposureCount: utils.IntToStr(data.ExposureCount),
Ecpm: utils.Float64ToStr(utils.StrToFloat64(ecpm) / 100),
OldEcpm: utils.Float64ToStr(utils.StrToFloat64(data.Ecpm) / 100),
}
e.OutSuc(c, res, nil)
return
}
func DataCenterOriginalDataDoing(c *gin.Context, req md.DataCenterDataCenterOriginalDataDoingReq) error {
NewOriginalWxAdDataDb := implement.NewOriginalWxAdDataDb(db.Db)
data, _ := NewOriginalWxAdDataDb.GetOriginalWxAdData(utils.StrToInt(req.Id))
if data == nil {
return e.NewErr(400, "记录不存在")
}
if data.IsApply == 1 {
return e.NewErr(400, "该记录已完成操作")
}
// 加锁 防止并发提取
mutexKey := fmt.Sprintf("%s:DataCenterOriginalDataDoing:%s", c.GetString("mid"), req.Id)
withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX")
if err != nil {
return err
}
if withdrawAvailable != "OK" {
return e.NewErr(400000, "请求过于频繁,请稍后再试")
}
args := md.GenerateWxAdData{
OriginalDataId: utils.StrToInt(req.Id),
OriginalExposureCount: data.ExposureCount,
OriginalEcpm: data.Ecpm,
NowExposureCount: utils.StrToInt(req.NowExposureCount),
NowEcpm: utils.Float64ToStr(utils.StrToFloat64(req.NowEcpm) * 100),
}
err, _ = GenerateWxAdData(args)
if err != nil {
return err
}
return nil
}
func OriginalDataMoreApplicationDoing(c *gin.Context, req md.DataCenterOriginalDataMoreApplicationDoingReq) error {
state, _ := cache.GetString(c.GetString("mid") + ":original.wx.ad.data")
if state == "1" {
return e.NewErr(400000, "数据采集中~")
}
// 加锁 防止并发提取
mutexKey := fmt.Sprintf("%s:DataCenterOriginalDataDoingOriginalDataMoreApplicationDoing", c.GetString("mid"))
withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX")
if err != nil {
return err
}
if withdrawAvailable != "OK" {
return e.NewErr(400000, "请求过于频繁,请稍后再试")
}
ch, err := rabbit.Cfg.Pool.GetChannel()
if err != nil {
return err
}
defer ch.Release()
ids := make([]md.DataCenterOriginalDataOneApplicationDoingReqData, 0)

for _, v := range req.Ids {
count, _ := db.Db.Where("uuid=? and date=? and app_id=? and slot_id=?", c.GetString("mid"), req.Date, v.AppId, v.AdId).Count(&model.OriginalWxAdData{})
if count > 0 {
continue
}
ids = append(ids, v)
}
masterId := GetMasterId(c)
userWxAppletListDb := implement.NewUserWxAppletListDb(db.Db)
UserWxAppletList, err := userWxAppletListDb.GetUserWxAppletList(masterId)
if err != nil {
return e.NewErr(400000, err.Error())
}
if UserWxAppletList == nil {
return e.NewErr(400000, "未查询到对应记录")
}
wxOpenThirdPartyAppListDb := implement.NewWxOpenThirdPartyAppListDb(db.Db)
wxOpenThirdPartyAppList, err := wxOpenThirdPartyAppListDb.GetWxOpenThirdPartyAppList(utils.StrToInt(masterId))
if err != nil {
return e.NewErr(400000, err.Error())
}
if wxOpenThirdPartyAppList == nil {
return e.NewErr(400000, "未查询到对应三方应用记录")
}
for k, v := range ids {
var arg = md.ZhiosAdOriginalDataApplication{
Mid: c.GetString("mid"),
AppId: v.AppId,
AdId: v.AdId,
Date: req.Date,
ComponentAppid: wxOpenThirdPartyAppList.Appid,
ComponentAppsecret: wxOpenThirdPartyAppList.AppSecret,
}
if k+1 == len(req.Ids) {
arg.IsEnd = "1"
}
err := ch.PublishV2(md.AdOriginalData, utils.SerializeStr(arg), md.AdOriginalDataApplication)
if err != nil {
ch.PublishV2(md.AdOriginalData, utils.SerializeStr(arg), md.AdOriginalDataApplication)
}
}
if len(ids) == 0 {
return e.NewErr(400000, "选择的广告位已存在,请删除后再生成")
}
cache.SetEx(c.GetString("mid")+":original.wx.ad.data", "1", 3600)
return nil
}
func OriginalDataOneApplicationTotal(c *gin.Context, req md.DataCenterOriginalDataOneApplicationDoingReq) {
//1、查找对应 user_wx_applet_list 记录
userWxAppletListDb := implement.NewUserWxAppletListDb(db.Db)
masterId := c.GetString("mid")
UserWxAppletList, err := userWxAppletListDb.GetUserWxAppletList(masterId)
if err != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}
if UserWxAppletList == nil {
e.OutErr(c, e.ERR_NO_DATA, "未查询到对应记录")
return
}
wxOpenThirdPartyAppListDb := implement.NewWxOpenThirdPartyAppListDb(db.Db)
wxOpenThirdPartyAppList, err := wxOpenThirdPartyAppListDb.GetWxOpenThirdPartyAppList(utils.StrToInt(masterId))
if err != nil {
e.OutErr(c, e.ERR, err.Error())
return
}
if wxOpenThirdPartyAppList == nil {
e.OutErr(c, e.ERR_NOT_FAN, "未查询到对应三方应用记录")
return
}
wxApiService, err := wechat.NewWxApiService(masterId, wxOpenThirdPartyAppList.Appid, wxOpenThirdPartyAppList.AppSecret)
if err != nil {
e.OutErr(c, e.ERR, err.Error())
return
}
err, args := wxApiService.GetAdposDetail(req.AppId, 1, 1, req.Date, req.Date, req.AdId)
if err != nil {
e.OutErr(c, e.ERR, err.Error())
return
}
var res = md.DataCenterOriginalDataOneApplicationDoingRes{}
for _, v := range args.List {
res = md.DataCenterOriginalDataOneApplicationDoingRes{
AdId: v.AdUnitId,
AdSlot: v.StatItem.AdSlot,
ExposureCount: utils.Int64ToStr(v.StatItem.ExposureCount),
ReqSuccCount: utils.Int64ToStr(v.StatItem.ReqSuccCount),
PublisherIncome: utils.Float64ToStr(float64(v.StatItem.PublisherIncome) / 100),
ClickCount: utils.Int64ToStr(v.StatItem.ClickCount),
Ecpm: utils.Float64ToStr(v.StatItem.Ecpm / 100),
ExposureRate: utils.Float64ToStr(v.StatItem.ExposureRate),
ClickRate: utils.Float64ToStr(v.StatItem.ClickRate),
}
}
e.OutSuc(c, res, nil)
return
}

// 应用
func GetAppletId(c *gin.Context, name, platform string) string {
mediumId := ""
sess := MasterDb(c).Where("1=1")
if name != "" || platform != "" {
ids := []string{"-1"}
var tmp []model2.AppletApplication
if name != "" {
sess.And("name like ? ", "%"+name+"%")
}
if platform != "" {
sess.And("platform = ? ", platform)
}
sess.Find(&tmp)
for _, v := range tmp {
ids = append(ids, utils.IntToStr(v.MediumId))
}
mediumId = strings.Join(ids, ",")
}
return mediumId
}

// 广告位
func GetSlotId(c *gin.Context, state string) string {
mediumId := ""
if state != "" {
ids := []string{"-1"}
var tmp []model2.AppletApplicationAdSpaceList
MasterDb(c).Where("state=?", state).Find(&tmp)
for _, v := range tmp {
ids = append(ids, utils.IntToStr(v.MediumId))
}
mediumId = strings.Join(ids, ",")
}
return mediumId
}

// 应用
func GetAppletInfo(c *gin.Context, id string) map[string]string {
var res = map[string]string{
"platform": "",
"name": "",
}
NewAppletApplicationDb := implement2.NewAppletApplicationDb(MasterDb(c))
data, _ := NewAppletApplicationDb.GetAppletApplicationListByAppid(id)
if data != nil {
res["platform"] = data.Platform
res["name"] = data.Name
}
return res
}

// 广告位
func GetSlotInfo(c *gin.Context, id string) map[string]string {
var res = map[string]string{
"state": "",
"name": "",
}
NewAppletApplicationAdSpaceListDb := implement2.NewAppletApplicationAdSpaceListDb(MasterDb(c))
data, _ := NewAppletApplicationAdSpaceListDb.GetAppletApplicationAdSpaceListByAdId(id)
if data != nil {
res["name"] = data.Name
res["state"] = utils.IntToStr(data.State)
}
return res
}

+ 148
- 0
app/svc/svc_division_strategy.go Ver fichero

@@ -0,0 +1,148 @@
package svc

import (
"applet/app/md"
"applet/app/utils"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
"github.com/gin-gonic/gin"
"time"
)

func DivisionStrategyList(c *gin.Context, req md.DivisionStrategyReq) md.DivisionStrategyRes {
engine := db.Db
NewMediumDivisionStrategyDb := implement.NewMediumDivisionStrategyDb(engine)
mediumId := GetMediumId(c, req.Name)
MediumList, total, _ := NewMediumDivisionStrategyDb.FindMediumDivisionStrategyList(c.GetString("mid"), mediumId, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.DivisionStrategyData, 0)
if len(MediumList) > 0 {
for _, v := range MediumList {
var tmp = md.DivisionStrategyData{
Id: utils.IntToStr(v.Id),
MediumId: utils.IntToStr(v.Id),
Account: "",
Name: "",
PlatformRetentionRate: utils.IntToStr(v.PlatformRetentionRate),
CommissionRetentionRate: utils.IntToStr(v.CommissionRetentionRate),
MediaRevenueRate: utils.IntToStr(v.MediaRevenueRate),
AgentRevenueRate: utils.IntToStr(v.AgentRevenueRate),
ExtraRevenueRate: utils.IntToStr(v.ExtraRevenueRate),
AgreementSharingRate: utils.IntToStr(v.AgreementSharingRate),
}
tmpMedium := GetMediumInfo(c, v.MediumId)
if tmpMedium["account"] != "" {
tmp.Account = tmpMedium["account"]
}
if tmpMedium["name"] != "" {
tmp.Name = tmpMedium["name"]
}
data = append(data, tmp)
}
}
res := md.DivisionStrategyRes{
List: data,
Total: total,
}
return res
}
func DivisionStrategyDetail(c *gin.Context, req md.DivisionStrategyDetailReq) md.DivisionStrategyDetailRes {
eg := db.Db
NewMediumDivisionStrategyDb := implement.NewMediumDivisionStrategyDb(eg)
mediumData, _ := NewMediumDivisionStrategyDb.GetOriginalWxAdDataByMediumId(utils.StrToInt(req.MediumId))
tmpMedium := GetMediumInfo(c, mediumData.MediumId)
agentList := make([]md.DivisionStrategyDetailByAgent, 0)
res := md.DivisionStrategyDetailRes{
MediumId: req.MediumId,
Account: "",
Name: "",
PlatformRetentionRate: utils.IntToStr(mediumData.PlatformRetentionRate),
CommissionRetentionRate: utils.IntToStr(mediumData.CommissionRetentionRate),
MediaRevenueRate: utils.IntToStr(mediumData.MediaRevenueRate),
AgentRevenueRate: utils.IntToStr(mediumData.AgentRevenueRate),
ExtraRevenueRate: utils.IntToStr(mediumData.ExtraRevenueRate),
AgreementSharingRate: utils.IntToStr(mediumData.AgreementSharingRate),
AgentList: agentList,
}
if tmpMedium["account"] != "" {
res.Account = tmpMedium["account"]
}
if tmpMedium["name"] != "" {
res.Name = tmpMedium["name"]
}
NewAgentWithMediumDb := implement.NewAgentWithMediumDb(eg)
agent, _ := NewAgentWithMediumDb.FindAgentWithMediumListByMediumIdAll(mediumData.MediumId)
if agent != nil {
NewMediumDivisionStrategyWithAgentFlowDb := implement.NewMediumDivisionStrategyWithAgentFlowDb(eg)
strategy, _ := NewMediumDivisionStrategyWithAgentFlowDb.FindMediumDivisionStrategyWithAgentFlowByStrategyId(mediumData.Id)
strategyMap := make(map[int]model.MediumDivisionStrategyWithAgentFlow)
if strategy != nil {
for _, v := range *strategy {
strategyMap[v.AgentId] = v
}
}
for _, v := range agent {
tmp := md.DivisionStrategyDetailByAgent{
AgentId: utils.IntToStr(v.AgentId),
AgentRevenueRate: utils.IntToStr(strategyMap[v.AgentId].AgentRevenueRate),
ExtraRevenueRate: utils.IntToStr(strategyMap[v.AgentId].ExtraRevenueRate),
}
tmpAgent := GetAgentInfo(c, v.AgentId)
if tmpAgent["account"] != "" {
tmp.Account = tmpAgent["account"]
}
if tmpAgent["name"] != "" {
tmp.Name = tmpAgent["name"]
}
agentList = append(agentList, tmp)
}
}
res.AgentList = agentList
return res
}
func DivisionStrategySave(c *gin.Context, req md.DivisionStrategyDetailRes) error {
eg := db.Db
sess := eg.NewSession()
defer sess.Close()
sess.Begin()
NewMediumDivisionStrategyDb := implement.NewMediumDivisionStrategyDb(eg)
mediumData, _ := NewMediumDivisionStrategyDb.GetOriginalWxAdDataByMediumIdSess(sess, utils.StrToInt(req.MediumId))
mediumData.PlatformRetentionRate = utils.StrToInt(req.PlatformRetentionRate)
mediumData.CommissionRetentionRate = utils.StrToInt(req.CommissionRetentionRate)
mediumData.MediaRevenueRate = utils.StrToInt(req.MediaRevenueRate)
mediumData.AgentRevenueRate = utils.StrToInt(req.AgentRevenueRate)
mediumData.ExtraRevenueRate = utils.StrToInt(req.ExtraRevenueRate)
mediumData.AgreementSharingRate = utils.StrToInt(req.AgreementSharingRate)
_, err := sess.Where("id=?", mediumData.Id).Update(mediumData)
if err != nil {
sess.Rollback()
return err
}
NewMediumDivisionStrategyWithAgentFlowDb := implement.NewMediumDivisionStrategyWithAgentFlowDb(eg)
for _, v := range req.AgentList {
flow, _ := NewMediumDivisionStrategyWithAgentFlowDb.GetMediumDivisionStrategyWithAgentFlowSess(sess, mediumData.Id, utils.StrToInt(v.AgentId))
if flow == nil {
flow = &model.MediumDivisionStrategyWithAgentFlow{
StrategyId: mediumData.Id,
AgentId: utils.StrToInt(v.AgentId),
CreateAt: time.Now().Format("2006-01-02 15:04:05"),
UpdateAt: time.Now().Format("2006-01-02 15:04:05"),
}
_, err = sess.Insert(flow)
if err != nil {
sess.Rollback()
return err
}
}
flow.ExtraRevenueRate = utils.StrToInt(v.ExtraRevenueRate)
flow.AgentRevenueRate = utils.StrToInt(v.AgentRevenueRate)
flow.UpdateAt = time.Now().Format("2006-01-02 15:04:05")
_, err = sess.Where("id=?", flow.Id).Update(flow)
if err != nil {
sess.Rollback()
return err
}
}
sess.Commit()
return nil
}

+ 194
- 0
app/svc/svc_finance_center_medium.go Ver fichero

@@ -0,0 +1,194 @@
package svc

import (
"applet/app/e"
"applet/app/md"
"applet/app/utils"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"encoding/json"
"github.com/gin-gonic/gin"
)

func FinanceCenterMediumInvoiceSave(c *gin.Context, req md.InvoiceReq) {
engine := db.Db
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine)
data, _ := NewMediumSettlementDb.GetMediumSettlementById(utils.StrToInt(req.Id))
if data.State != 3 {
e.OutErr(c, 400, e.NewErr(400, "媒体未完成签订"))
return
}
if data.PayState == 5 {
e.OutErr(c, 400, e.NewErr(400, "结算单已付款,不能调整"))
return
}
NewMediumInvoiceDb := implement.NewMediumInvoiceDb(engine)
invoice, _ := NewMediumInvoiceDb.GetMediumInvoice(data.Id)
if req.State == "1" {
data.PayState = 4
invoice.State = 1
for k := range req.File {
req.File[k].State = "1"
}
}
if req.State == "2" {
invoice.State = 2
data.PayState = 3
for k, v := range req.File {
if v.State == "0" {
req.File[k].State = "1"
}
}
}
invoice.File = utils.SerializeStr(req.File)
engine.Where("id=?", data.Id).Cols("pay_state").Update(data)
engine.Where("id=?", invoice.Id).Cols("state,file").Update(invoice)
e.OutSuc(c, "success", nil)
return
}
func FinanceCenterMediumSettleFileSave(c *gin.Context, req md.SettleFileReq) {
engine := db.Db
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine)
data, _ := NewMediumSettlementDb.GetMediumSettlementById(utils.StrToInt(req.Id))
if data.State >= 2 {
e.OutErr(c, 400, e.NewErr(400, "已推送给媒体,不能再调整"))
return
}
data.State = 2
data.SettleFile = req.File
engine.Where("id=?", data.Id).Cols("state,settle_file").Update(data)
e.OutSuc(c, "success", nil)
return
}

func FinanceCenterMediumPaySave(c *gin.Context, req md.CommDetailReq) {
engine := db.Db
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine)
data, _ := NewMediumSettlementDb.GetMediumSettlementById(utils.StrToInt(req.Id))
if data.PayState < 4 {
e.OutErr(c, 400, e.NewErr(400, "不能再调整"))
return
}
data.PayState = 5
engine.Where("id=?", data.Id).Cols("pay_state").Update(data)
e.OutSuc(c, "success", nil)
return
}
func FinanceCenterMediumOtherIncomeSave(c *gin.Context, req md.OtherIncomeReq) {
engine := db.Db
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine)
data, _ := NewMediumSettlementDb.GetMediumSettlementById(utils.StrToInt(req.Id))
if data.State >= 2 {
e.OutErr(c, 400, e.NewErr(400, "已推送给媒体,不能再调整"))
return
}
data.OtherIncome = int(utils.StrToFloat64(req.Amount) * 100)
engine.Where("id=?", data.Id).Cols("other_income").Update(data)
e.OutSuc(c, "success", nil)
return
}
func FinanceCenterMediumDetail(c *gin.Context, req md.CommDetailReq) md.FinanceCenterDataDetailRes {
engine := db.Db
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine)
data, _ := NewMediumSettlementDb.GetMediumSettlementById(utils.StrToInt(req.Id))
file := make([]md.InvoiceFile, 0)
invoice := md.Invoice{
Type: "0",
Time: "",
Count: "0",
File: file,
}
//发票
NewMediumInvoiceDb := implement.NewMediumInvoiceDb(engine)
invoiceData, _ := NewMediumInvoiceDb.GetMediumInvoice(data.Id)
if invoiceData != nil {
invoice.Type = utils.IntToStr(invoiceData.Type)
invoice.Time = invoiceData.UpdateAt
invoice.Count = utils.IntToStr(invoiceData.Count)
json.Unmarshal([]byte(invoiceData.File), &file)
}
tmp := md.FinanceCenterDataDetail{
Source: "手动导入",
SettleFile: data.SettleFile,
Invoice: invoice,
AllIncome: utils.Float64ToStr(float64(data.OtherIncome+data.BasicIncome) / 100),
TopIncome: "",
CommissionIncome: "",
PlatformIncome: "",
ChangeIncome: "",
MediumIncome: utils.Float64ToStr(float64(data.BasicIncome) / 100),
OtherIncome: utils.Float64ToStr(float64(data.OtherIncome) / 100),
TimeStr: data.StartDate,
PayState: utils.IntToStr(data.PayState),
State: utils.IntToStr(data.State),
}
if data.EndDate != "" && data.EndDate != "0000-00-00" {
if data.EndDate != data.StartDate {
tmp.TimeStr += "~" + data.EndDate
}
}
tmpMedium := GetMediumInfo(c, data.MediumId)
if tmpMedium["name"] != "" {
tmp.Name = tmpMedium["name"]
}
if tmpMedium["account"] != "" {
tmp.Account = tmpMedium["account"]
}

res := md.FinanceCenterDataDetailRes{
Data: tmp,
InvoiceCate: md.InvoiceCate,
SettleType: md.AccountSettleState,
BusinessKind: md.BusinessKind,
SettlePayState: md.SettlePayState,
SettleState: md.SettleState,
InvoiceState: md.InvoiceState,
}
return res
}
func FinanceCenterMediumList(c *gin.Context, req md.FinanceCenterDataReq) md.FinanceCenterDataRes {
engine := db.Db
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine)
MediumList, total, _ := NewMediumSettlementDb.FindMediumSettlementList(c.GetString("mid"), "", "", req.PayState, "", req.StartTime, req.EndTime, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.FinanceCenterDataData, 0)
if len(MediumList) > 0 {
for _, v := range MediumList {
var tmp = md.FinanceCenterDataData{
Id: utils.IntToStr(v.Id),
Name: "",
AllIncome: utils.Float64ToStr(float64(v.OtherIncome+v.BasicIncome) / 100),
TopIncome: "",
CommissionIncome: "",
PlatformIncome: "",
ChangeIncome: "",
MediumIncome: utils.Float64ToStr(float64(v.BasicIncome) / 100),
OtherIncome: utils.Float64ToStr(float64(v.OtherIncome) / 100),
TimeStr: v.StartDate,
SettleType: utils.IntToStr(v.Kind),
PayState: utils.IntToStr(v.PayState),
State: utils.IntToStr(v.State),
Label: "预估",
}
tmpMedium := GetMediumInfo(c, v.MediumId)
if tmpMedium["name"] != "" {
tmp.Name = tmpMedium["name"]
}
if v.EndDate != "" && v.EndDate != "0000-00-00" {
if v.EndDate != v.StartDate {
tmp.TimeStr += "~" + v.EndDate
}
tmp.Label = ""
}
data = append(data, tmp)
}
}
res := md.FinanceCenterDataRes{
List: data,
Total: total,
SettleType: md.AccountSettleState,
BusinessKind: md.BusinessKind,
SettlePayState: md.SettlePayState,
SettleState: md.SettleState,
}
return res
}

+ 138
- 0
app/svc/svc_medium_agent.go Ver fichero

@@ -7,6 +7,7 @@ import (
"applet/app/utils"
db "code.fnuoos.com/zhimeng/model.git/src"
implement2 "code.fnuoos.com/zhimeng/model.git/src/implement"
model2 "code.fnuoos.com/zhimeng/model.git/src/model"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"code.fnuoos.com/zhimeng/model.git/src/super/model"
"github.com/gin-gonic/gin"
@@ -155,3 +156,140 @@ func MediumBindAgentDel(c *gin.Context) {
e.OutSuc(c, "success", nil)
return
}

func GetMediumId(c *gin.Context, name string) string {
mediumId := ""
if name != "" {
ids := []string{"-1"}
var tmp []model2.Medium
MasterDb(c).Where("memo like ? or username like ?", "%"+name+"%", "%"+name+"%").Find(&tmp)
for _, v := range tmp {
ids = append(ids, utils.IntToStr(v.MediumId))
}
var tmp1 []model.MediumList
MasterDb(c).Where("company_name like ? or company_abbreviation like ?", "%"+name+"%", "%"+name+"%").Find(&tmp1)
for _, v := range tmp1 {
ids = append(ids, utils.IntToStr(v.MediumId))
}
mediumId = strings.Join(ids, ",")
}
return mediumId
}
func GetMediumByAccountId(c *gin.Context, name, account string) string {
mediumId := ""
if name != "" || account != "" {
ids := []string{"-1"}
var tmp []model2.Medium
sess := MasterDb(c).Where("1=1")
if name != "" {
sess.And("memo like ?", "%"+name+"%")
var tmp1 []model.MediumList
MasterDb(c).Where("company_name like ? or company_abbreviation like ?", "%"+name+"%", "%"+name+"%").Find(&tmp1)
for _, v := range tmp1 {
ids = append(ids, utils.IntToStr(v.MediumId))
}
}
if account != "" {
sess.And(" username like ?", "%"+name+"%", "%"+name+"%")
}
sess.Find(&tmp)
for _, v := range tmp {
ids = append(ids, utils.IntToStr(v.MediumId))
}

mediumId = strings.Join(ids, ",")
}
return mediumId
}
func GetMediumInfo(c *gin.Context, mediumId int) map[string]string {
var res = map[string]string{
"account": "",
"name": "",
}
NewMediumDb := implement2.NewMediumDb(MasterDb(c))
NewMediumListDb := implement.NewMediumListDb(MasterDb(c))
medium := NewMediumDb.GetSuperAdmin(mediumId)
if medium != nil {
res["account"] = medium.Username
res["name"] = medium.Memo
}
NewMediumList, _ := NewMediumListDb.GetMediumList(mediumId)
if NewMediumList != nil {
if NewMediumList.CompanyName != "" {
res["name"] = NewMediumList.CompanyName
}
if NewMediumList.CompanyAbbreviation != "" {
res["name"] = NewMediumList.CompanyAbbreviation
}
}
return res
}

func GetAgentId(c *gin.Context, name string) string {
mediumId := ""
if name != "" {
ids := []string{"-1"}
var tmp []model2.Agent
MasterDb(c).Where("memo like ? or username like ?", "%"+name+"%", "%"+name+"%").Find(&tmp)
for _, v := range tmp {
ids = append(ids, utils.IntToStr(v.AgentId))
}
var tmp1 []model.AgentList
MasterDb(c).Where("company_name like ? or company_abbreviation like ?", "%"+name+"%", "%"+name+"%").Find(&tmp1)
for _, v := range tmp1 {
ids = append(ids, utils.IntToStr(v.AgentId))
}
mediumId = strings.Join(ids, ",")
}
return mediumId
}
func GetAgentByAccountId(c *gin.Context, name, account string) string {
mediumId := ""
if name != "" || account != "" {
ids := []string{"-1"}
var tmp []model2.Agent
sess := MasterDb(c).Where("1=1")
if name != "" {
sess.And("memo like ?", "%"+name+"%")
var tmp1 []model.AgentList
MasterDb(c).Where("company_name like ? or company_abbreviation like ?", "%"+name+"%", "%"+name+"%").Find(&tmp1)
for _, v := range tmp1 {
ids = append(ids, utils.IntToStr(v.AgentId))
}
}
if account != "" {
sess.And(" username like ?", "%"+name+"%", "%"+name+"%")
}
sess.Find(&tmp)
for _, v := range tmp {
ids = append(ids, utils.IntToStr(v.AgentId))
}

mediumId = strings.Join(ids, ",")
}
return mediumId
}

func GetAgentInfo(c *gin.Context, mediumId int) map[string]string {
var res = map[string]string{
"account": "",
"name": "",
}
NewAgentDb := implement2.NewAgentDb(MasterDb(c))
NewAgentListDb := implement.NewAgentListDb(MasterDb(c))
medium := NewAgentDb.GetSuperAdmin(mediumId)
if medium != nil {
res["account"] = medium.Username
res["name"] = medium.Memo
}
NewAgentList, _ := NewAgentListDb.GetAgentList(mediumId)
if NewAgentList != nil {
if NewAgentList.CompanyName != "" {
res["name"] = NewAgentList.CompanyName
}
if NewAgentList.CompanyAbbreviation != "" {
res["name"] = NewAgentList.CompanyAbbreviation
}
}
return res
}

+ 86
- 0
app/svc/svc_settle_center_agent.go Ver fichero

@@ -0,0 +1,86 @@
package svc

import (
"applet/app/e"
"applet/app/md"
"applet/app/utils"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"github.com/gin-gonic/gin"
)

func SettleCenterAgentList(c *gin.Context, req md.SettleCenterDataReq) md.SettleCenterDataRes {
engine := db.Db
NewOriginalWxAdDataDb := implement.NewAgentListDb(engine)
appId := GetAgentByAccountId(c, req.Name, req.Account)
AgentList, total, _ := NewOriginalWxAdDataDb.FindAgentListBySettleType(c.GetString("mid"), appId, req.State, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.SettleCenterDataData, 0)
if len(AgentList) > 0 {
for _, v := range AgentList {
var tmp = md.SettleCenterDataData{
Id: utils.IntToStr(v.AgentId),
SettleType: utils.IntToStr(v.SettlementType),
UpdateAt: v.UpdateAt,
}
tmpApplet := GetAgentInfo(c, v.AgentId)
if tmpApplet["account"] != "" {
tmp.Account = tmpApplet["account"]
}
if tmpApplet["name"] != "" {
tmp.Name = tmpApplet["name"]
}
data = append(data, tmp)
}
}
res := md.SettleCenterDataRes{
List: data,
Total: total,
State: md.AccountSettleState,
}
return res
}
func SettleCenterAgentSave(c *gin.Context, req md.SettleCenterDataSaveReq) {
NewAgentListDb := implement.NewAgentListDb(db.Db)
data, _ := NewAgentListDb.GetAgentList(utils.StrToInt(req.Id))
if data == nil {
e.OutErr(c, 400, e.NewErr(400, "记录不存在"))
return
}
data.SettlementType = utils.StrToInt(req.SettleType)
db.Db.Where("id=?", data.Id).Cols("settlement_type").Update(data)
e.OutSuc(c, "success", nil)
return
}
func SettleCenterAgentDetail(c *gin.Context, req md.SettleCenterDataDetailReq) md.SettleCenterDataDetailRes {
engine := db.Db
NewAgentSettlementDb := implement.NewAgentSettlementDb(engine)
AgentList, total, _ := NewAgentSettlementDb.FindAgentSettlementList(c.GetString("mid"), req.Id, "", "", "", req.StartTime, req.EndTime, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.SettleCenterDataDetailData, 0)
if len(AgentList) > 0 {
for _, v := range AgentList {
var tmp = md.SettleCenterDataDetailData{
TimeStr: v.StartDate,
BusinessKind: utils.IntToStr(v.BusinessKind),
SettleType: utils.IntToStr(v.Kind),
AllIncome: utils.Float64ToStr(float64(v.OtherIncome+v.BasicIncome) / 100),
BasicIncome: utils.Float64ToStr(float64(v.BasicIncome) / 100),
OtherIncome: utils.Float64ToStr(float64(v.OtherIncome) / 100),
PayState: utils.IntToStr(v.PayState),
State: utils.IntToStr(v.State),
}
if v.EndDate != "" && v.EndDate != "0000-00-00" {
tmp.TimeStr += "~" + v.EndDate
}
data = append(data, tmp)
}
}
res := md.SettleCenterDataDetailRes{
List: data,
Total: total,
SettleType: md.AccountSettleState,
BusinessKind: md.BusinessKind,
SettlePayState: md.SettlePayState,
SettleState: md.SettleState,
}
return res
}

+ 86
- 0
app/svc/svc_settle_center_medium.go Ver fichero

@@ -0,0 +1,86 @@
package svc

import (
"applet/app/e"
"applet/app/md"
"applet/app/utils"
db "code.fnuoos.com/zhimeng/model.git/src"
"code.fnuoos.com/zhimeng/model.git/src/super/implement"
"github.com/gin-gonic/gin"
)

func SettleCenterMediumList(c *gin.Context, req md.SettleCenterDataReq) md.SettleCenterDataRes {
engine := db.Db
NewOriginalWxAdDataDb := implement.NewMediumListDb(engine)
appId := GetMediumByAccountId(c, req.Name, req.Account)
MediumList, total, _ := NewOriginalWxAdDataDb.FindMediumListBySettleType(c.GetString("mid"), appId, req.State, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.SettleCenterDataData, 0)
if len(MediumList) > 0 {
for _, v := range MediumList {
var tmp = md.SettleCenterDataData{
Id: utils.IntToStr(v.MediumId),
SettleType: utils.IntToStr(v.SettlementType),
UpdateAt: v.UpdateAt,
}
tmpApplet := GetMediumInfo(c, v.MediumId)
if tmpApplet["account"] != "" {
tmp.Account = tmpApplet["account"]
}
if tmpApplet["name"] != "" {
tmp.Name = tmpApplet["name"]
}
data = append(data, tmp)
}
}
res := md.SettleCenterDataRes{
List: data,
Total: total,
State: md.AccountSettleState,
}
return res
}
func SettleCenterMediumSave(c *gin.Context, req md.SettleCenterDataSaveReq) {
NewMediumListDb := implement.NewMediumListDb(db.Db)
data, _ := NewMediumListDb.GetMediumList(utils.StrToInt(req.Id))
if data == nil {
e.OutErr(c, 400, e.NewErr(400, "记录不存在"))
return
}
data.SettlementType = utils.StrToInt(req.SettleType)
db.Db.Where("id=?", data.Id).Cols("settlement_type").Update(data)
e.OutSuc(c, "success", nil)
return
}
func SettleCenterMediumDetail(c *gin.Context, req md.SettleCenterDataDetailReq) md.SettleCenterDataDetailRes {
engine := db.Db
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine)
MediumList, total, _ := NewMediumSettlementDb.FindMediumSettlementList(c.GetString("mid"), req.Id, "", "", "", req.StartTime, req.EndTime, utils.StrToInt(req.Page), utils.StrToInt(req.Limit))
data := make([]md.SettleCenterDataDetailData, 0)
if len(MediumList) > 0 {
for _, v := range MediumList {
var tmp = md.SettleCenterDataDetailData{
TimeStr: v.StartDate,
BusinessKind: utils.IntToStr(v.BusinessKind),
SettleType: utils.IntToStr(v.Kind),
AllIncome: utils.Float64ToStr(float64(v.OtherIncome+v.BasicIncome) / 100),
BasicIncome: utils.Float64ToStr(float64(v.BasicIncome) / 100),
OtherIncome: utils.Float64ToStr(float64(v.OtherIncome) / 100),
PayState: utils.IntToStr(v.PayState),
State: utils.IntToStr(v.State),
}
if v.EndDate != "" && v.EndDate != "0000-00-00" {
tmp.TimeStr += "~" + v.EndDate
}
data = append(data, tmp)
}
}
res := md.SettleCenterDataDetailRes{
List: data,
Total: total,
SettleType: md.AccountSettleState,
BusinessKind: md.BusinessKind,
SettlePayState: md.SettlePayState,
SettleState: md.SettleState,
}
return res
}

+ 1
- 0
app/svc/svc_wx_data.go Ver fichero

@@ -92,6 +92,7 @@ func GenerateWxAdData(req md.GenerateWxAdData) (err error, generateWxAdData mode
now := time.Now()
generateWxAdData = model.GenerateWxAdData{
Uuid: originalWxAdData.Uuid,
Platform: originalWxAdData.Platform,
AppId: originalWxAdData.AppId,
OriginalDataId: originalWxAdData.Id,
SlotId: originalWxAdData.SlotId,


+ 3415
- 764
docs/docs.go
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


+ 3415
- 764
docs/swagger.json
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


+ 2121
- 330
docs/swagger.yaml
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


+ 6
- 2
go.mod Ver fichero

@@ -5,7 +5,6 @@ go 1.18
//replace code.fnuoos.com/zhimeng/model.git => E:/company/ad/models

require (
code.fnuoos.com/zhimeng/model.git v0.0.3-0.20240828084358-f52add033ca9
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5
github.com/boombuler/barcode v1.0.1
github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5
@@ -34,7 +33,11 @@ require (
xorm.io/xorm v1.3.1
)

require github.com/jinzhu/copier v0.4.0
require (
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5
code.fnuoos.com/zhimeng/model.git v0.0.3-0.20240830085315-046c30582759
github.com/jinzhu/copier v0.4.0
)

require (
filippo.io/edwards25519 v1.1.0 // indirect
@@ -67,6 +70,7 @@ require (
github.com/onsi/gomega v1.10.5 // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/streadway/amqp v1.0.0 // indirect
github.com/syndtr/goleveldb v1.0.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.9 // indirect


+ 1
- 0
main.go Ver fichero

@@ -19,6 +19,7 @@ import (
// 系统初始化
func init() {
cfg.InitCfg() //配置初始化
cfg.InitMq() //配置初始化
cfg.InitLog() //日志初始化
cfg.InitCache() //缓存初始化
if cfg.Debug { //判断是否是debug


Cargando…
Cancelar
Guardar