@@ -1,6 +1,15 @@ | |||||
package enum | package enum | ||||
import "applet/app/md" | |||||
type AdunitType string //广告单元类型 | type AdunitType string //广告单元类型 | ||||
var AdTypeList = []md.SelectData{ | |||||
{Name: "banner", Value: AdunitTypeForBanner}, | |||||
{Name: "激励视频", Value: AdunitTypeForRewardVideo}, | |||||
{Name: "插屏广告", Value: AdunitTypeForInterstitial}, | |||||
{Name: "视频广告", Value: AdunitTypeForVideoFeeds}, | |||||
//{Name: "视频贴片广告", Value: "5"}, | |||||
} | |||||
const ( | const ( | ||||
AdunitTypeForBanner = "SLOT_ID_WEAPP_BANNER" | AdunitTypeForBanner = "SLOT_ID_WEAPP_BANNER" | ||||
@@ -0,0 +1,98 @@ | |||||
package hdl | |||||
import ( | |||||
"applet/app/e" | |||||
"applet/app/lib/validate" | |||||
"applet/app/md" | |||||
"applet/app/svc" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
// DataCenterTable | |||||
// @Summary 数据图表 | |||||
// @Tags 数据中心------嘉俊 | |||||
// @Description 数据中心-数据图表 | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Accept json | |||||
// @Produce json | |||||
// @Param args body md.DataCenterTableReq true "请求参数" | |||||
// @Success 200 {object} md.DataCenterTableRes "具体看返回内容 这是data里面的数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/dataCenter/table [POST] | |||||
func DataCenterTable(c *gin.Context) { | |||||
var req md.DataCenterTableReq | |||||
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.DataCenterTable(c, req) | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
// DataCenterRecordTotal | |||||
// @Summary 数据明细合计 | |||||
// @Tags 数据中心------嘉俊 | |||||
// @Description 数据中心-数据明细合计 | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Accept json | |||||
// @Produce json | |||||
// @Param args body md.DataCenterTableReq true "请求参数" | |||||
// @Success 200 {object} md.DataCenterTotalData "具体看返回内容 这是data里面的数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/dataCenter/record/total [POST] | |||||
func DataCenterRecordTotal(c *gin.Context) { | |||||
var req md.DataCenterTableReq | |||||
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.DataCenterRecordTotal(c, req) | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
// DataCenterRecordList | |||||
// @Summary 数据明细 | |||||
// @Tags 数据中心------嘉俊 | |||||
// @Description 数据中心-数据明细 | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Accept json | |||||
// @Produce json | |||||
// @Param args body md.DataCenterRecordReq true "请求参数" | |||||
// @Success 200 {object} md.DataCenterRecordRes "具体看返回内容 这是data里面的数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/dataCenter/record/list [POST] | |||||
func DataCenterRecordList(c *gin.Context) { | |||||
var req md.DataCenterRecordReq | |||||
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.DataCenterRecordList(c, req) | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
// DataCenterSelectData | |||||
// @Summary 筛选条件 | |||||
// @Tags 数据中心------嘉俊 | |||||
// @Description 数据中心-筛选条件 | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Accept json | |||||
// @Produce json | |||||
// @Success 200 {string} "具体看返回内容 这是data里面的数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/dataCenter/select/data [GET] | |||||
func DataCenterSelectData(c *gin.Context) { | |||||
svc.DataCenterSelectData(c) | |||||
} |
@@ -0,0 +1,59 @@ | |||||
package hdl | |||||
import ( | |||||
"applet/app/e" | |||||
"applet/app/lib/validate" | |||||
"applet/app/md" | |||||
"applet/app/svc" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
// InvoiceCenterList | |||||
// @Summary 发票列表 | |||||
// @Tags 发票中心------嘉俊 | |||||
// @Description 发票中心-发票列表 | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Accept json | |||||
// @Produce json | |||||
// @Param args body md.InvoiceCenterDataReq true "请求参数" | |||||
// @Success 200 {object} md.InvoiceCenterDataRes "具体看返回内容 这是data里面的数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/invoiceCenter/list [POST] | |||||
func InvoiceCenterList(c *gin.Context) { | |||||
var req md.InvoiceCenterDataReq | |||||
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.InvoiceCenterList(c, req) | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
// InvoiceCenterDetail | |||||
// @Summary 发票详情 | |||||
// @Tags 发票中心------嘉俊 | |||||
// @Description 发票中心-发票详情 | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Accept json | |||||
// @Produce json | |||||
// @Param args body md.CommDetailReq true "请求参数" | |||||
// @Success 200 {object} md.InvoiceCenterDataDetailRes "具体看返回内容 这是data里面的数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/invoiceCenter/detail [POST] | |||||
func InvoiceCenterDetail(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.InvoiceCenterDetail(c, req) | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} |
@@ -200,6 +200,21 @@ func Register(c *gin.Context) { | |||||
e.OutErr(c, e.ERR_DB_ORM, "新增 medium 记录失败") | e.OutErr(c, e.ERR_DB_ORM, "新增 medium 记录失败") | ||||
return | return | ||||
} | } | ||||
//4、新增 MediumDivisionStrategy 记录 | |||||
MediumDivisionStrategyModel := model.MediumDivisionStrategy{ | |||||
MediumId: utils.StrToInt(mediumId), | |||||
Uuid: utils.StrToInt(c.GetString("mid")), | |||||
CreateAt: now.Format("2006-01-02 15:04:05"), | |||||
UpdateAt: now.Format("2006-01-02 15:04:05"), | |||||
} | |||||
insertAffected, err = db.Db.Insert(&MediumDivisionStrategyModel) | |||||
if err != nil { | |||||
return | |||||
} | |||||
if insertAffected <= 0 { | |||||
e.OutErr(c, e.ERR_DB_ORM, "新增 记录失败") | |||||
return | |||||
} | |||||
ip := utils.GetIP(c.Request) | ip := utils.GetIP(c.Request) | ||||
key := fmt.Sprintf(md.JwtTokenKey, ip, utils.AnyToString(mediumModel.Id)) | key := fmt.Sprintf(md.JwtTokenKey, ip, utils.AnyToString(mediumModel.Id)) | ||||
token, err := svc.HandleLoginToken(key, &mediumModel) | token, err := svc.HandleLoginToken(key, &mediumModel) | ||||
@@ -0,0 +1,105 @@ | |||||
package hdl | |||||
import ( | |||||
"applet/app/e" | |||||
"applet/app/lib/validate" | |||||
"applet/app/md" | |||||
"applet/app/svc" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
// SettleCenterList | |||||
// @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/list [POST] | |||||
func SettleCenterList(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.SettleCenterList(c, req) | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
// SettleCenterDetail | |||||
// @Summary 结算报表-详情 | |||||
// @Tags 结算中心------嘉俊 | |||||
// @Description 结算中心-结算报表-详情 | |||||
// @param Authorization header string true "验证参数Bearer和token空格拼接" | |||||
// @Accept json | |||||
// @Produce json | |||||
// @Param args body md.CommDetailReq true "请求参数" | |||||
// @Success 200 {object} md.SettleCenterDataDetailRes "具体看返回内容 这是data里面的数据" | |||||
// @Failure 400 {object} md.Response "具体错误" | |||||
// @Router /api/settleCenter/detail [POST] | |||||
func SettleCenterDetail(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.SettleCenterDetail(c, req) | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
// SettleCenterSettleFileSave | |||||
// @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/settleCenter/settle/file/save [POST] | |||||
func SettleCenterSettleFileSave(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.SettleCenterSettleFileSave(c, req) | |||||
} | |||||
// SettleCenterInvoiceSave | |||||
// @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/settleCenter/invoice/save [POST] | |||||
func SettleCenterInvoiceSave(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.SettleCenterInvoiceSave(c, req) | |||||
} |
@@ -1,6 +1,17 @@ | |||||
package md | package md | ||||
var AppletPlatform = []SelectData{ | |||||
{Name: "微信小程序", Value: "wx_applet"}, | |||||
} | |||||
var AppletPlatformMap = map[string]string{ | |||||
"wx_applet": "微信小程序", | |||||
} | |||||
type SelectData struct { | type SelectData struct { | ||||
Name string `json:"name" example:"名称"` | Name string `json:"name" example:"名称"` | ||||
Value string `json:"value" example:"值"` | Value string `json:"value" example:"值"` | ||||
} | } | ||||
type CommDetailReq struct { | |||||
Id string `json:"id" example:"列表id"` | |||||
} |
@@ -28,6 +28,7 @@ type AppletApplicationAdSpaceListData struct { | |||||
AdId string `json:"ad_id" example:"广告位id"` | AdId string `json:"ad_id" example:"广告位id"` | ||||
State string `json:"state" example:"应用状态 state=2 才能再次编辑"` | State string `json:"state" example:"应用状态 state=2 才能再次编辑"` | ||||
CooperateState string `json:"cooperate_state" example:"合作状态"` | CooperateState string `json:"cooperate_state" example:"合作状态"` | ||||
AppName string `json:"app_name"` | |||||
} | } | ||||
type AppletApplicationAdSpaceSaveReq struct { | type AppletApplicationAdSpaceSaveReq struct { | ||||
Name string `json:"name" example:"应用名称"` | Name string `json:"name" example:"应用名称"` | ||||
@@ -0,0 +1,45 @@ | |||||
package md | |||||
type DataCenterTableReq struct { | |||||
StartDate string `json:"start_date" example:"2024-08-30"` | |||||
EndDate string `json:"end_date" example:"2024-08-30"` | |||||
Platform string `json:"platform" example:"平台"` | |||||
AppId string `json:"app_id" example:"应用"` | |||||
AdType string `json:"ad_type" example:"广告位类型"` | |||||
} | |||||
type DataCenterRecordReq struct { | |||||
StartDate string `json:"start_date" example:"2024-08-30"` | |||||
EndDate string `json:"end_date" example:"2024-08-30"` | |||||
Platform string `json:"platform" example:"平台"` | |||||
AppId string `json:"app_id" example:"应用"` | |||||
AdType string `json:"ad_type" example:"广告位类型"` | |||||
Limit string `json:"limit"` | |||||
Page string `json:"page" ` | |||||
} | |||||
type DataCenterTableRes struct { | |||||
List []DataCenterTableData `json:"list" ` | |||||
} | |||||
type DataCenterTableData struct { | |||||
Date string `json:"date" example:"日期"` | |||||
ExposureCount string `json:"exposure_count" example:"曝光量"` | |||||
MediaRevenue string `json:"media_revenue" example:"预估收益"` | |||||
Ecpm string `json:"ecpm" example:"ecpm"` | |||||
} | |||||
type DataCenterRecordRes struct { | |||||
List []DataCenterTotalData `json:"list" ` | |||||
Total int64 `json:"total" ` | |||||
} | |||||
type DataCenterTotalData struct { | |||||
Date string `json:"date" example:"日期"` | |||||
AppName string `json:"app_name"` | |||||
PlatformName string `json:"platform_name"` | |||||
AdvName string `json:"adv_name"` | |||||
ExposureCount string `json:"exposure_count" example:"曝光量"` | |||||
MediaRevenue string `json:"media_revenue" example:"预估收益"` | |||||
Ecpm string `json:"ecpm" example:"ecpm"` | |||||
ClickRate string `json:"click_rate" example:"点击率"` | |||||
ClickCount string `json:"click_count" example:"点击量"` | |||||
} |
@@ -0,0 +1,32 @@ | |||||
package md | |||||
type InvoiceCenterDataReq struct { | |||||
Limit string `json:"limit"` | |||||
Page string `json:"page" ` | |||||
Type string `json:"type" example:"0电子发票 1纸质发票"` | |||||
} | |||||
type InvoiceCenterDataRes struct { | |||||
List []InvoiceCenterDataData `json:"list" ` | |||||
Total int64 `json:"total"` | |||||
State []SelectData `json:"state"` | |||||
} | |||||
type InvoiceCenterDataData struct { | |||||
Id string `json:"id"` | |||||
TimeStr string `json:"time_str" example:"上传时间"` | |||||
State string `json:"state" example:"结算单状态(0:待审核 1:审核通过 2:审核拒绝)"` | |||||
Count string `json:"count" example:"数量"` | |||||
Month string `json:"month" example:"订单月份"` | |||||
Amount string `json:"amount" example:"结算金额"` | |||||
} | |||||
type InvoiceCenterDataDetailRes struct { | |||||
Data InvoiceCenterDataDetailData `json:"data" ` | |||||
State []SelectData `json:"state"` | |||||
} | |||||
type InvoiceCenterDataDetailData struct { | |||||
TimeStr string `json:"time_str" example:"上传时间"` | |||||
State string `json:"state" example:"结算单状态(0:待审核 1:审核通过 2:审核拒绝)"` | |||||
Count string `json:"count" example:"数量"` | |||||
File []InvoiceFile `json:"file"` | |||||
} |
@@ -0,0 +1,104 @@ | |||||
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" ` | |||||
StartTime string `json:"start_time" example:"2024-08-29"` | |||||
EndTime string `json:"end_time" ` | |||||
} | |||||
type SettleCenterDataRes struct { | |||||
List []SettleCenterDataData `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 SettleCenterDataData struct { | |||||
Id string `json:"id"` | |||||
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:"合计收益"` | |||||
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"` | |||||
SettleFile string `json:"settle_file" example:"结算单"` | |||||
} | |||||
type SettleCenterDataDetailRes struct { | |||||
Data SettleCenterDataDetail `json:"data" ` | |||||
BusinessKind []SelectData `json:"business_kind"` | |||||
SettlePayState []SelectData `json:"settle_pay_state"` | |||||
InvoiceState []SelectData `json:"invoice_state"` | |||||
SettleState []SelectData `json:"settle_state"` | |||||
SettleType []SelectData `json:"settle_type"` | |||||
InvoiceCate []SelectData `json:"invoice_cate"` | |||||
} | |||||
type SettleCenterDataDetail struct { | |||||
TimeStr string `json:"time_str" example:"业务时间"` | |||||
BusinessKind string `json:"business_kind" example:"业务类型(1:广告合作)"` | |||||
SettleFile string `json:"settle_file" example:"结算单"` | |||||
Invoice Invoice `json:"invoice"` | |||||
AllIncome string `json:"all_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"` | |||||
Type string `json:"type" example:"0电子发票 1纸质发票"` | |||||
File []InvoiceFile `json:"file"` | |||||
} |
@@ -67,8 +67,11 @@ func route(r *gin.RouterGroup) { | |||||
r.Use(mw.Auth) // 以下接口需要JWT验证 | r.Use(mw.Auth) // 以下接口需要JWT验证 | ||||
rRole(r.Group("/role")) //权限管理 | rRole(r.Group("/role")) //权限管理 | ||||
rApplication(r.Group("/application")) //应用管理 | |||||
rAccount(r.Group("/account")) //账号中心 | |||||
rApplication(r.Group("/application")) //应用管理 | |||||
rAccount(r.Group("/account")) //账号中心 | |||||
rSettleCenter(r.Group("/settleCenter")) //结算中心 | |||||
rInvoiceCenter(r.Group("/invoiceCenter")) //发票中心 | |||||
rDataCenter(r.Group("/dataCenter")) //数据中心 | |||||
} | } | ||||
func rRole(r *gin.RouterGroup) { | func rRole(r *gin.RouterGroup) { | ||||
@@ -102,3 +105,20 @@ func rApplication(r *gin.RouterGroup) { | |||||
r.POST("/applet/ad/space/list", hdl.AppletApplicationAdSpaceList) //小程序应用-广告位列表数据 | r.POST("/applet/ad/space/list", hdl.AppletApplicationAdSpaceList) //小程序应用-广告位列表数据 | ||||
r.POST("/applet/ad/space/save", hdl.AppletApplicationAdSpaceSave) //小程序应用-广告位新增 | r.POST("/applet/ad/space/save", hdl.AppletApplicationAdSpaceSave) //小程序应用-广告位新增 | ||||
} | } | ||||
func rSettleCenter(r *gin.RouterGroup) { | |||||
r.POST("/list", hdl.SettleCenterList) //结算中心-结算报表 | |||||
r.POST("/detail", hdl.SettleCenterDetail) //结算中心-结算报表-详情 | |||||
r.POST("/settle/file/save", hdl.SettleCenterSettleFileSave) //结算中心-结算报表-结算单上传 | |||||
r.POST("/invoice/save", hdl.SettleCenterInvoiceSave) //结算中心-结算报表-发票上传 | |||||
} | |||||
func rInvoiceCenter(r *gin.RouterGroup) { | |||||
r.POST("/list", hdl.InvoiceCenterList) //发票中心-列表 | |||||
r.POST("/detail", hdl.InvoiceCenterDetail) //发票中心-详情 | |||||
} | |||||
func rDataCenter(r *gin.RouterGroup) { | |||||
r.GET("/select/data", hdl.DataCenterSelectData) //数据中心-筛选条件 | |||||
r.POST("/table", hdl.DataCenterTable) //数据中心-数据图表 | |||||
r.POST("/record/total", hdl.DataCenterRecordTotal) //数据中心-数据明细合计 | |||||
r.POST("/record/list", hdl.DataCenterRecordList) //数据中心-数据明细 | |||||
} |
@@ -32,6 +32,7 @@ func AppletApplicationAdSpaceList(c *gin.Context) { | |||||
var tmp = md.AppletApplicationAdSpaceListData{ | var tmp = md.AppletApplicationAdSpaceListData{ | ||||
Id: utils.IntToStr(v.AppletApplicationAdSpaceList.Id), | Id: utils.IntToStr(v.AppletApplicationAdSpaceList.Id), | ||||
Name: v.AppletApplicationAdSpaceList.Name, | Name: v.AppletApplicationAdSpaceList.Name, | ||||
AppName: v.AppletApplication.Name, | |||||
Platform: v.Platform, | Platform: v.Platform, | ||||
Kind: v.Kind, | Kind: v.Kind, | ||||
Memo: v.AppletApplicationAdSpaceList.Memo, | Memo: v.AppletApplicationAdSpaceList.Memo, | ||||
@@ -60,13 +61,7 @@ func AppletApplicationAdSpaceList(c *gin.Context) { | |||||
List: data, | List: data, | ||||
Total: total, | Total: total, | ||||
Application: application, | Application: application, | ||||
AdType: []md.SelectData{ | |||||
{Name: "banner", Value: enum.AdunitTypeForBanner}, | |||||
{Name: "激励视频", Value: enum.AdunitTypeForRewardVideo}, | |||||
{Name: "插屏广告", Value: enum.AdunitTypeForInterstitial}, | |||||
{Name: "视频广告", Value: enum.AdunitTypeForVideoFeeds}, | |||||
//{Name: "视频贴片广告", Value: "5"}, | |||||
}, | |||||
AdType: enum.AdTypeList, | |||||
Platform: []md.SelectData{ | Platform: []md.SelectData{ | ||||
{Name: "微信小程序", Value: "wx_applet"}, | {Name: "微信小程序", Value: "wx_applet"}, | ||||
}, | }, | ||||
@@ -0,0 +1,205 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/e" | |||||
"applet/app/enum" | |||||
"applet/app/md" | |||||
"applet/app/utils" | |||||
db "code.fnuoos.com/zhimeng/model.git/src" | |||||
"code.fnuoos.com/zhimeng/model.git/src/implement" | |||||
model2 "code.fnuoos.com/zhimeng/model.git/src/model" | |||||
"fmt" | |||||
"github.com/gin-gonic/gin" | |||||
"github.com/jinzhu/copier" | |||||
"strings" | |||||
) | |||||
func DataCenterTable(c *gin.Context, req md.DataCenterTableReq) md.DataCenterTableRes { | |||||
var req1 md.DataCenterRecordReq | |||||
copier.Copy(&req1, &req) | |||||
nativeString, _ := comm(c, 0, req1) | |||||
list := make([]md.DataCenterTableData, 0) | |||||
for _, v := range nativeString { | |||||
tmp := md.DataCenterTableData{ | |||||
Date: v["date"], | |||||
ExposureCount: v["exposure_count"], | |||||
MediaRevenue: v["media_revenue"], | |||||
Ecpm: v["ecpm"], | |||||
} | |||||
list = append(list, tmp) | |||||
} | |||||
res := md.DataCenterTableRes{ | |||||
List: list, | |||||
} | |||||
return res | |||||
} | |||||
func DataCenterRecordTotal(c *gin.Context, req md.DataCenterTableReq) md.DataCenterTotalData { | |||||
appId := GetAppletId(c, req.AppId, req.Platform) | |||||
sql := ` | |||||
SELECT | |||||
SUM(exposure_count) as exposure_count, | |||||
SUM(click_count) as click_count, | |||||
SUM(click_rate) as click_rate, | |||||
SUM(ecpm) as ecpm, | |||||
SUM(media_revenue) as media_revenue | |||||
FROM generate_wx_ad_data | |||||
where %s | |||||
` | |||||
where := "uuid=" + c.GetString("mid") | |||||
if req.AppId != "" || req.Platform != "" { | |||||
where += " and app_id in(" + appId + ")" | |||||
} | |||||
if req.AdType != "" { | |||||
where += " and ad_slot='" + req.AdType + "'" | |||||
} | |||||
if req.StartDate != "" { | |||||
where += " and date>='" + req.StartDate + "'" | |||||
} | |||||
if req.EndDate != "" { | |||||
where += " and date<='" + req.EndDate + "'" | |||||
} | |||||
sql = fmt.Sprintf(sql, where) | |||||
nativeString, _ := db.QueryNativeString(db.Db, sql) | |||||
res := md.DataCenterTotalData{} | |||||
for _, v := range nativeString { | |||||
res = md.DataCenterTotalData{ | |||||
Date: "-", | |||||
AppName: "-", | |||||
PlatformName: "-", | |||||
AdvName: "-", | |||||
ExposureCount: v["exposure_count"], | |||||
MediaRevenue: v["media_revenue"], | |||||
Ecpm: v["ecpm"], | |||||
ClickRate: v["click_rate"], | |||||
ClickCount: v["click_count"], | |||||
} | |||||
} | |||||
return res | |||||
} | |||||
func DataCenterRecordList(c *gin.Context, req md.DataCenterRecordReq) md.DataCenterRecordRes { | |||||
nativeString, total := comm(c, 1, req) | |||||
list := make([]md.DataCenterTotalData, 0) | |||||
for _, v := range nativeString { | |||||
NewAppletApplicationDb := implement.NewAppletApplicationDb(MasterDb(c)) | |||||
app, _ := NewAppletApplicationDb.GetAppletApplicationListByAppid(v["app_id"]) | |||||
platform := "" | |||||
name := "" | |||||
if app != nil { | |||||
name = app.Name | |||||
platform = app.Platform | |||||
} | |||||
tmp := md.DataCenterTotalData{ | |||||
Date: v["date"], | |||||
AppName: name, | |||||
PlatformName: md.AppletPlatformMap[platform], | |||||
AdvName: enum.AdunitType(v["ad_slot"]).String(), | |||||
ExposureCount: v["exposure_count"], | |||||
MediaRevenue: v["media_revenue"], | |||||
Ecpm: v["ecpm"], | |||||
ClickRate: v["click_rate"], | |||||
ClickCount: v["click_count"], | |||||
} | |||||
list = append(list, tmp) | |||||
} | |||||
res := md.DataCenterRecordRes{ | |||||
List: list, | |||||
Total: total, | |||||
} | |||||
return res | |||||
} | |||||
func comm(c *gin.Context, isTotal int, req md.DataCenterRecordReq) ([]map[string]string, int64) { | |||||
appId := GetAppletId(c, req.AppId, req.Platform) | |||||
sql := ` | |||||
SELECT | |||||
%s | |||||
FROM generate_wx_ad_data | |||||
where %s %s | |||||
` | |||||
where := "uuid=" + c.GetString("mid") | |||||
if req.AppId != "" || req.Platform != "" { | |||||
where += " and app_id in(" + appId + ")" | |||||
} | |||||
if req.AdType != "" { | |||||
where += " and ad_slot='" + req.AdType + "'" | |||||
} | |||||
if req.StartDate != "" { | |||||
where += " and date>='" + req.StartDate + "'" | |||||
} | |||||
if req.EndDate != "" { | |||||
where += " and date<='" + req.EndDate + "'" | |||||
} | |||||
field := `*` | |||||
start := (utils.StrToInt(req.Page) - 1) * utils.StrToInt(req.Limit) | |||||
groupBy := "" | |||||
if req.Page != "" { | |||||
groupBy = " group by date,app_id,slot_id order by date desc,id desc limit " + utils.IntToStr(start) + "," + req.Limit | |||||
} else { | |||||
groupBy = " group by date order by date asc" | |||||
} | |||||
sql1 := fmt.Sprintf(sql, field, where, groupBy) | |||||
nativeString, _ := db.QueryNativeString(db.Db, sql1) | |||||
var total int64 = 0 | |||||
if isTotal == 1 { | |||||
sqlTotal := fmt.Sprintf(sql, "COUNT(*) as count ", where) | |||||
nativeStringTotal, _ := db.QueryNativeString(db.Db, sqlTotal) | |||||
for _, v := range nativeStringTotal { | |||||
total = utils.StrToInt64(v["count"]) | |||||
} | |||||
} | |||||
return nativeString, total | |||||
} | |||||
func DataCenterSelectData(c *gin.Context) { | |||||
NewAppletApplicationDb := implement.NewAppletApplicationDb(MasterDb(c)) | |||||
appList, _ := NewAppletApplicationDb.FindAllAppletApplicationList() | |||||
appMap := make(map[string][]map[string]interface{}) | |||||
for _, v := range appList { | |||||
_, ok := appMap[v.Platform] | |||||
if ok == false { | |||||
appMap[v.Platform] = make([]map[string]interface{}, 0) | |||||
} | |||||
tmp := map[string]interface{}{ | |||||
"name": v.Name, | |||||
"app_id": v.AppId, | |||||
"ad_type": enum.AdTypeList, | |||||
} | |||||
appMap[v.Platform] = append(appMap[v.Platform], tmp) | |||||
} | |||||
platform := []map[string]interface{}{ | |||||
{ | |||||
"name": "微信小程序", | |||||
"platform": "wx_applet", | |||||
"app_list": appMap["wx_applet"], | |||||
}, | |||||
} | |||||
e.OutSuc(c, platform, nil) | |||||
return | |||||
} | |||||
// 应用 | |||||
func GetAppletId(c *gin.Context, appId, platform string) string { | |||||
mediumId := "" | |||||
sess := MasterDb(c).Where("1=1") | |||||
var ids = make([]string, 0) | |||||
if appId != "" || platform != "" { | |||||
ids = append(ids, "-1") | |||||
} | |||||
if platform != "" { | |||||
var tmp []model2.AppletApplication | |||||
if platform != "" { | |||||
sess.And("platform = ? ", platform) | |||||
} | |||||
sess.Find(&tmp) | |||||
for _, v := range tmp { | |||||
ids = append(ids, utils.IntToStr(v.MediumId)) | |||||
} | |||||
} | |||||
if appId != "" { | |||||
ids = []string{appId} | |||||
} | |||||
if appId != "" || platform != "" { | |||||
mediumId = strings.Join(ids, ",") | |||||
} | |||||
return mediumId | |||||
} |
@@ -0,0 +1,55 @@ | |||||
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" | |||||
"encoding/json" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
func InvoiceCenterList(c *gin.Context, req md.InvoiceCenterDataReq) md.InvoiceCenterDataRes { | |||||
user := GetUser(c) | |||||
engine := db.Db | |||||
NewMediumInvoiceDb := implement.NewMediumInvoiceDb(engine) | |||||
MediumList, total, _ := NewMediumInvoiceDb.FindMediumInvoiceList(c.GetString("mid"), req.Type, utils.IntToStr(user.MediumId), utils.StrToInt(req.Page), utils.StrToInt(req.Limit)) | |||||
data := make([]md.InvoiceCenterDataData, 0) | |||||
if len(MediumList) > 0 { | |||||
for _, v := range MediumList { | |||||
var tmp = md.InvoiceCenterDataData{ | |||||
Id: utils.IntToStr(v.MediumInvoice.Id), | |||||
TimeStr: v.MediumInvoice.UpdateAt, | |||||
Month: v.StartDate, | |||||
Count: utils.IntToStr(v.MediumInvoice.Count), | |||||
Amount: utils.Float64ToStr(float64(v.MediumSettlement.OtherIncome+v.MediumSettlement.BasicIncome) / 100), | |||||
State: utils.IntToStr(v.MediumInvoice.State), | |||||
} | |||||
data = append(data, tmp) | |||||
} | |||||
} | |||||
res := md.InvoiceCenterDataRes{ | |||||
List: data, | |||||
Total: total, | |||||
State: md.InvoiceState, | |||||
} | |||||
return res | |||||
} | |||||
func InvoiceCenterDetail(c *gin.Context, req md.CommDetailReq) md.InvoiceCenterDataDetailRes { | |||||
engine := db.Db | |||||
NewMediumInvoiceDb := implement.NewMediumInvoiceDb(engine) | |||||
data, _ := NewMediumInvoiceDb.GetMediumInvoiceById(utils.StrToInt(req.Id)) | |||||
file := make([]md.InvoiceFile, 0) | |||||
json.Unmarshal([]byte(data.File), &file) | |||||
tmp := md.InvoiceCenterDataDetailData{ | |||||
TimeStr: data.UpdateAt, | |||||
State: utils.IntToStr(data.State), | |||||
Count: utils.IntToStr(data.Count), | |||||
File: file, | |||||
} | |||||
res := md.InvoiceCenterDataDetailRes{ | |||||
Data: tmp, | |||||
State: md.InvoiceState, | |||||
} | |||||
return res | |||||
} |
@@ -0,0 +1,147 @@ | |||||
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" | |||||
"code.fnuoos.com/zhimeng/model.git/src/super/model" | |||||
"encoding/json" | |||||
"github.com/gin-gonic/gin" | |||||
"time" | |||||
) | |||||
func SettleCenterList(c *gin.Context, req md.SettleCenterDataReq) md.SettleCenterDataRes { | |||||
user := GetUser(c) | |||||
engine := db.Db | |||||
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine) | |||||
MediumList, total, _ := NewMediumSettlementDb.FindMediumSettlementList(c.GetString("mid"), utils.IntToStr(user.MediumId), "", "", "", req.StartTime, req.EndTime, 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.Id), | |||||
AllIncome: utils.Float64ToStr(float64(v.OtherIncome+v.BasicIncome) / 100), | |||||
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: "预估", | |||||
SettleFile: v.SettleFile, | |||||
} | |||||
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.SettleCenterDataRes{ | |||||
List: data, | |||||
Total: total, | |||||
SettleType: md.AccountSettleState, | |||||
BusinessKind: md.BusinessKind, | |||||
SettlePayState: md.SettlePayState, | |||||
SettleState: md.SettleState, | |||||
} | |||||
return res | |||||
} | |||||
func SettleCenterDetail(c *gin.Context, req md.CommDetailReq) md.SettleCenterDataDetailRes { | |||||
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.SettleCenterDataDetail{ | |||||
SettleFile: data.SettleFile, | |||||
Invoice: invoice, | |||||
AllIncome: utils.Float64ToStr(float64(data.OtherIncome+data.BasicIncome) / 100), | |||||
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), | |||||
BusinessKind: utils.IntToStr(data.BusinessKind), | |||||
} | |||||
if data.EndDate != "" && data.EndDate != "0000-00-00" { | |||||
if data.EndDate != data.StartDate { | |||||
tmp.TimeStr += "~" + data.EndDate | |||||
} | |||||
} | |||||
res := md.SettleCenterDataDetailRes{ | |||||
Data: tmp, | |||||
InvoiceCate: md.InvoiceCate, | |||||
SettleType: md.AccountSettleState, | |||||
BusinessKind: md.BusinessKind, | |||||
SettlePayState: md.SettlePayState, | |||||
SettleState: md.SettleState, | |||||
InvoiceState: md.InvoiceState, | |||||
} | |||||
return res | |||||
} | |||||
func SettleCenterSettleFileSave(c *gin.Context, req md.SettleFileReq) { | |||||
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 | |||||
} | |||||
data.State = 3 | |||||
data.PayState = 1 | |||||
data.SettleFile = req.File | |||||
engine.Where("id=?", data.Id).Cols("state,settle_file,pay_state").Update(data) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func SettleCenterInvoiceSave(c *gin.Context, req md.InvoiceReq) { | |||||
engine := db.Db | |||||
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine) | |||||
data, _ := NewMediumSettlementDb.GetMediumSettlementById(utils.StrToInt(req.Id)) | |||||
if data.PayState > 3 { | |||||
e.OutErr(c, 400, e.NewErr(400, "已完成审核,不能再调整")) | |||||
return | |||||
} | |||||
data.PayState = 2 | |||||
engine.Where("id=?", data.Id).Cols("pay_sate").Update(data) | |||||
NewMediumInvoiceDb := implement.NewMediumInvoiceDb(engine) | |||||
invoice, _ := NewMediumInvoiceDb.GetMediumInvoice(data.Id) | |||||
if invoice == nil { | |||||
invoice = &model.MediumInvoice{ | |||||
SettlementId: data.Id, | |||||
CreateAt: time.Now().Format("2006-01-02 15:04:05"), | |||||
UpdateAt: time.Now().Format("2006-01-02 15:04:05"), | |||||
} | |||||
engine.Insert(invoice) | |||||
} | |||||
for k := range req.File { | |||||
req.File[k].State = "0" | |||||
} | |||||
invoice.File = utils.SerializeStr(req.File) | |||||
invoice.UpdateAt = time.Now().Format("2006-01-02 15:04:05") | |||||
invoice.State = 0 | |||||
invoice.Type = utils.StrToInt(req.Type) | |||||
invoice.Count = len(req.File) | |||||
engine.Where("id=?", invoice.Id).AllCols().Update(invoice) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} |
@@ -31,22 +31,16 @@ func RandNum() string { | |||||
return fmt.Sprintf("%05v", rand.New(rand.NewSource(seed)).Int31n(1000000)) | return fmt.Sprintf("%05v", rand.New(rand.NewSource(seed)).Int31n(1000000)) | ||||
} | } | ||||
func GenerateUniqueRandomNumbers(n int) string { | func GenerateUniqueRandomNumbers(n int) string { | ||||
rand.Seed(time.Now().UnixNano()) // 初始化随机种子 | |||||
numbers := make([]int, n) // 创建一个切片来保存随机数 | |||||
for i := range numbers { | |||||
j := 0 | |||||
for { | |||||
b := rand.Intn(10) // 生成0-9之间的随机数 | |||||
numbers[i] = b | |||||
for _, num := range numbers[:i] { | |||||
if num == b { | |||||
j++ | |||||
break | |||||
} | |||||
} | |||||
if j == 0 { | |||||
break | |||||
} | |||||
rand.Seed(time.Now().UnixNano() + rand.Int63()) // 初始化随机种子 | |||||
numbers := make([]int, 0, n) // 创建一个切片来保存随机数,初始容量为n | |||||
used := make(map[int]bool) // 跟踪已使用的数字 | |||||
for len(numbers) < n { | |||||
b := rand.Intn(10) // 生成0-9之间的随机数 | |||||
if !used[b] { | |||||
numbers = append(numbers, b) | |||||
used[b] = true | |||||
} | } | ||||
} | } | ||||
@@ -54,5 +48,6 @@ func GenerateUniqueRandomNumbers(n int) string { | |||||
for _, v := range numbers { | for _, v := range numbers { | ||||
numbersStr += strconv.Itoa(v) | numbersStr += strconv.Itoa(v) | ||||
} | } | ||||
return numbersStr | return numbersStr | ||||
} | } |
@@ -85,6 +85,8 @@ definitions: | |||||
app_id: | app_id: | ||||
example: 小程序appid | example: 小程序appid | ||||
type: string | type: string | ||||
app_name: | |||||
type: string | |||||
cooperate_state: | cooperate_state: | ||||
example: 合作状态 | example: 合作状态 | ||||
type: string | type: string | ||||
@@ -267,6 +269,110 @@ definitions: | |||||
required: | required: | ||||
- id | - id | ||||
type: object | type: object | ||||
md.CommDetailReq: | |||||
properties: | |||||
id: | |||||
example: 列表id | |||||
type: string | |||||
type: object | |||||
md.DataCenterRecordReq: | |||||
properties: | |||||
ad_type: | |||||
example: 广告位类型 | |||||
type: string | |||||
app_id: | |||||
example: 应用 | |||||
type: string | |||||
end_date: | |||||
example: "2024-08-30" | |||||
type: string | |||||
limit: | |||||
type: string | |||||
page: | |||||
type: string | |||||
platform: | |||||
example: 平台 | |||||
type: string | |||||
start_date: | |||||
example: "2024-08-30" | |||||
type: string | |||||
type: object | |||||
md.DataCenterRecordRes: | |||||
properties: | |||||
list: | |||||
items: | |||||
$ref: '#/definitions/md.DataCenterTotalData' | |||||
type: array | |||||
total: | |||||
type: integer | |||||
type: object | |||||
md.DataCenterTableData: | |||||
properties: | |||||
date: | |||||
example: 日期 | |||||
type: string | |||||
ecpm: | |||||
example: ecpm | |||||
type: string | |||||
exposure_count: | |||||
example: 曝光量 | |||||
type: string | |||||
media_revenue: | |||||
example: 预估收益 | |||||
type: string | |||||
type: object | |||||
md.DataCenterTableReq: | |||||
properties: | |||||
ad_type: | |||||
example: 广告位类型 | |||||
type: string | |||||
app_id: | |||||
example: 应用 | |||||
type: string | |||||
end_date: | |||||
example: "2024-08-30" | |||||
type: string | |||||
platform: | |||||
example: 平台 | |||||
type: string | |||||
start_date: | |||||
example: "2024-08-30" | |||||
type: string | |||||
type: object | |||||
md.DataCenterTableRes: | |||||
properties: | |||||
list: | |||||
items: | |||||
$ref: '#/definitions/md.DataCenterTableData' | |||||
type: array | |||||
type: object | |||||
md.DataCenterTotalData: | |||||
properties: | |||||
adv_name: | |||||
type: string | |||||
app_name: | |||||
type: string | |||||
click_count: | |||||
example: 点击量 | |||||
type: string | |||||
click_rate: | |||||
example: 点击率 | |||||
type: string | |||||
date: | |||||
example: 日期 | |||||
type: string | |||||
ecpm: | |||||
example: ecpm | |||||
type: string | |||||
exposure_count: | |||||
example: 曝光量 | |||||
type: string | |||||
media_revenue: | |||||
example: 预估收益 | |||||
type: string | |||||
platform_name: | |||||
type: string | |||||
type: object | |||||
md.ImgReqUpload: | md.ImgReqUpload: | ||||
properties: | properties: | ||||
dir: | dir: | ||||
@@ -277,6 +383,108 @@ definitions: | |||||
description: 文件大小, 单位byte | description: 文件大小, 单位byte | ||||
type: integer | type: integer | ||||
type: object | type: object | ||||
md.Invoice: | |||||
properties: | |||||
count: | |||||
type: string | |||||
file: | |||||
items: | |||||
$ref: '#/definitions/md.InvoiceFile' | |||||
type: array | |||||
time: | |||||
type: string | |||||
type: | |||||
type: string | |||||
type: object | |||||
md.InvoiceCenterDataData: | |||||
properties: | |||||
amount: | |||||
example: 结算金额 | |||||
type: string | |||||
count: | |||||
example: 数量 | |||||
type: string | |||||
id: | |||||
type: string | |||||
month: | |||||
example: 订单月份 | |||||
type: string | |||||
state: | |||||
example: 结算单状态(0:待审核 1:审核通过 2:审核拒绝) | |||||
type: string | |||||
time_str: | |||||
example: 上传时间 | |||||
type: string | |||||
type: object | |||||
md.InvoiceCenterDataDetailData: | |||||
properties: | |||||
count: | |||||
example: 数量 | |||||
type: string | |||||
file: | |||||
items: | |||||
$ref: '#/definitions/md.InvoiceFile' | |||||
type: array | |||||
state: | |||||
example: 结算单状态(0:待审核 1:审核通过 2:审核拒绝) | |||||
type: string | |||||
time_str: | |||||
example: 上传时间 | |||||
type: string | |||||
type: object | |||||
md.InvoiceCenterDataDetailRes: | |||||
properties: | |||||
data: | |||||
$ref: '#/definitions/md.InvoiceCenterDataDetailData' | |||||
state: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
type: object | |||||
md.InvoiceCenterDataReq: | |||||
properties: | |||||
limit: | |||||
type: string | |||||
page: | |||||
type: string | |||||
type: | |||||
example: 0电子发票 1纸质发票 | |||||
type: string | |||||
type: object | |||||
md.InvoiceCenterDataRes: | |||||
properties: | |||||
list: | |||||
items: | |||||
$ref: '#/definitions/md.InvoiceCenterDataData' | |||||
type: array | |||||
state: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
total: | |||||
type: integer | |||||
type: object | |||||
md.InvoiceFile: | |||||
properties: | |||||
state: | |||||
example: 0待确认 1审核通过 2审核失败 | |||||
type: string | |||||
url: | |||||
type: string | |||||
type: object | |||||
md.InvoiceReq: | |||||
properties: | |||||
file: | |||||
items: | |||||
$ref: '#/definitions/md.InvoiceFile' | |||||
type: array | |||||
id: | |||||
example: 列表id | |||||
type: string | |||||
type: | |||||
example: 0电子发票 1纸质发票 | |||||
type: string | |||||
type: object | |||||
md.LoginPhoneReq: | md.LoginPhoneReq: | ||||
properties: | properties: | ||||
captcha: | captcha: | ||||
@@ -431,6 +639,144 @@ definitions: | |||||
example: 值 | example: 值 | ||||
type: string | type: string | ||||
type: object | type: object | ||||
md.SettleCenterDataData: | |||||
properties: | |||||
all_income: | |||||
example: 合计收益 | |||||
type: string | |||||
business_kind: | |||||
example: 业务类型(1:广告合作) | |||||
type: string | |||||
id: | |||||
type: string | |||||
label: | |||||
type: string | |||||
medium_income: | |||||
example: 媒体结算 | |||||
type: string | |||||
other_income: | |||||
example: 其他调整 | |||||
type: string | |||||
pay_state: | |||||
example: 结算单支付状态(0:未开始 1:待审核发票 2:发票审核中 3:发票审核拒绝 4:付款中 5:已付款) | |||||
type: string | |||||
settle_file: | |||||
example: 结算单 | |||||
type: string | |||||
settle_type: | |||||
example: 结算单类型(1:日结 2:周结 3:月结 4:预付) | |||||
type: string | |||||
state: | |||||
example: 结算单状态(0:未开始 1:核算中 2:待签订 3:完成签订) | |||||
type: string | |||||
time_str: | |||||
example: 业务时间 | |||||
type: string | |||||
type: object | |||||
md.SettleCenterDataDetail: | |||||
properties: | |||||
all_income: | |||||
example: 合计收益 | |||||
type: string | |||||
business_kind: | |||||
example: 业务类型(1:广告合作) | |||||
type: string | |||||
invoice: | |||||
$ref: '#/definitions/md.Invoice' | |||||
medium_income: | |||||
example: 媒体结算 | |||||
type: string | |||||
other_income: | |||||
example: 其他调整 | |||||
type: string | |||||
pay_state: | |||||
example: 结算单支付状态(0:未开始 1:待审核发票 2:发票审核中 3:发票审核拒绝 4:付款中 5:已付款) | |||||
type: string | |||||
settle_file: | |||||
example: 结算单 | |||||
type: string | |||||
state: | |||||
example: 结算单状态(0:未开始 1:核算中 2:待签订 3:完成签订) | |||||
type: string | |||||
time_str: | |||||
example: 业务时间 | |||||
type: string | |||||
type: object | |||||
md.SettleCenterDataDetailRes: | |||||
properties: | |||||
business_kind: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
data: | |||||
$ref: '#/definitions/md.SettleCenterDataDetail' | |||||
invoice_cate: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
invoice_state: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
settle_pay_state: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
settle_state: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
settle_type: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
type: object | |||||
md.SettleCenterDataReq: | |||||
properties: | |||||
end_time: | |||||
type: string | |||||
limit: | |||||
type: string | |||||
page: | |||||
type: string | |||||
start_time: | |||||
example: "2024-08-29" | |||||
type: string | |||||
type: object | |||||
md.SettleCenterDataRes: | |||||
properties: | |||||
business_kind: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
list: | |||||
items: | |||||
$ref: '#/definitions/md.SettleCenterDataData' | |||||
type: array | |||||
settle_pay_state: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
settle_state: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
settle_type: | |||||
items: | |||||
$ref: '#/definitions/md.SelectData' | |||||
type: array | |||||
total: | |||||
type: integer | |||||
type: object | |||||
md.SettleFileReq: | |||||
properties: | |||||
file: | |||||
example: 七牛云链接 带http | |||||
type: string | |||||
id: | |||||
example: 列表id | |||||
type: string | |||||
type: object | |||||
md.SmsReq: | md.SmsReq: | ||||
properties: | properties: | ||||
phone: | phone: | ||||
@@ -824,6 +1170,186 @@ paths: | |||||
summary: 新增或保存 | summary: 新增或保存 | ||||
tags: | tags: | ||||
- 小程序应用------嘉俊 | - 小程序应用------嘉俊 | ||||
/api/dataCenter/record/list: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 数据中心-数据明细 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.DataCenterRecordReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
$ref: '#/definitions/md.DataCenterRecordRes' | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 数据明细 | |||||
tags: | |||||
- 数据中心------嘉俊 | |||||
/api/dataCenter/record/total: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 数据中心-数据明细合计 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.DataCenterTableReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
$ref: '#/definitions/md.DataCenterTotalData' | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 数据明细合计 | |||||
tags: | |||||
- 数据中心------嘉俊 | |||||
/api/dataCenter/select/data: | |||||
get: | |||||
consumes: | |||||
- application/json | |||||
description: 数据中心-筛选条件 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
type: string | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 筛选条件 | |||||
tags: | |||||
- 数据中心------嘉俊 | |||||
/api/dataCenter/table: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 数据中心-数据图表 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.DataCenterTableReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
$ref: '#/definitions/md.DataCenterTableRes' | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 数据图表 | |||||
tags: | |||||
- 数据中心------嘉俊 | |||||
/api/invoiceCenter/detail: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 发票中心-发票详情 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.CommDetailReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
$ref: '#/definitions/md.InvoiceCenterDataDetailRes' | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 发票详情 | |||||
tags: | |||||
- 发票中心------嘉俊 | |||||
/api/invoiceCenter/list: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 发票中心-发票列表 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.InvoiceCenterDataReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
$ref: '#/definitions/md.InvoiceCenterDataRes' | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 发票列表 | |||||
tags: | |||||
- 发票中心------嘉俊 | |||||
/api/login: | /api/login: | ||||
post: | post: | ||||
consumes: | consumes: | ||||
@@ -1352,6 +1878,130 @@ paths: | |||||
summary: 修改角色状态 | summary: 修改角色状态 | ||||
tags: | tags: | ||||
- ADMIN-权限管理 | - ADMIN-权限管理 | ||||
/api/settleCenter/detail: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 结算中心-结算报表-详情 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.CommDetailReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
$ref: '#/definitions/md.SettleCenterDataDetailRes' | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 结算报表-详情 | |||||
tags: | |||||
- 结算中心------嘉俊 | |||||
/api/settleCenter/invoice/save: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 财务中心-媒体详情-发票上传 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.InvoiceReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
type: string | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 媒体详情-发票上传 | |||||
tags: | |||||
- 财务中心------嘉俊 | |||||
/api/settleCenter/list: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 结算中心-结算报表 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.SettleCenterDataReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
$ref: '#/definitions/md.SettleCenterDataRes' | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 结算报表 | |||||
tags: | |||||
- 结算中心------嘉俊 | |||||
/api/settleCenter/settle/file/save: | |||||
post: | |||||
consumes: | |||||
- application/json | |||||
description: 财务中心-媒体详情-结算单保存 | |||||
parameters: | |||||
- description: 验证参数Bearer和token空格拼接 | |||||
in: header | |||||
name: Authorization | |||||
required: true | |||||
type: string | |||||
- description: 请求参数 | |||||
in: body | |||||
name: args | |||||
required: true | |||||
schema: | |||||
$ref: '#/definitions/md.SettleFileReq' | |||||
produces: | |||||
- application/json | |||||
responses: | |||||
"200": | |||||
description: 具体看返回内容 这是data里面的数据 | |||||
schema: | |||||
type: string | |||||
"400": | |||||
description: 具体错误 | |||||
schema: | |||||
$ref: '#/definitions/md.Response' | |||||
summary: 媒体详情-结算单保存 | |||||
tags: | |||||
- 财务中心------嘉俊 | |||||
/api/sms: | /api/sms: | ||||
post: | post: | ||||
consumes: | consumes: | ||||
@@ -3,9 +3,9 @@ module applet | |||||
go 1.18 | go 1.18 | ||||
//replace code.fnuoos.com/zhimeng/model.git => E:/company/ad/models | //replace code.fnuoos.com/zhimeng/model.git => E:/company/ad/models | ||||
// | |||||
require ( | require ( | ||||
code.fnuoos.com/zhimeng/model.git v0.0.3-0.20240828073010-6ec681bcb45d | |||||
code.fnuoos.com/zhimeng/model.git v0.0.3-0.20240830085315-046c30582759 | |||||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | ||||
github.com/boombuler/barcode v1.0.1 | github.com/boombuler/barcode v1.0.1 | ||||
github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 | github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 | ||||