@@ -0,0 +1,96 @@ | |||||
package hdl | |||||
import ( | |||||
"fmt" | |||||
"github.com/boombuler/barcode" | |||||
"github.com/boombuler/barcode/code128" | |||||
"github.com/gin-gonic/gin" | |||||
"github.com/jung-kurt/gofpdf" | |||||
"image/jpeg" | |||||
"net/url" | |||||
"os" | |||||
) | |||||
func Demo1(c *gin.Context) { | |||||
// 创建一个新的PDF文件 | |||||
pdf := gofpdf.New("P", "mm", "A4", "") | |||||
// 添加一页 | |||||
pdf.AddPage() | |||||
// 设置文本颜色(参数为RGB值) | |||||
pdf.SetTextColor(0, 0, 0) | |||||
// 换行 | |||||
pdf.Ln(-1) | |||||
// 引入中文字体,需要相应的字体文件 | |||||
pdf.AddUTF8Font("SourceHanSansCN-Light", "", "./static/SourceHanSansCN-Light.ttf") | |||||
// 引入中文字体后设置中文字体和字号 | |||||
left := 15.0 | |||||
pdf.Image("./static/图片1.png", left, 25, 50, 15, false, "PNG", 0, "") | |||||
pdf.SetFont("SourceHanSansCN-Light", "", 10) | |||||
pdf.Text(130, 40, "杭州激活鸟网络科技有限公司") | |||||
//// 生成EAN-13条形码 | |||||
cs, _ := code128.Encode("jihuoniao-Ads-20240913-7653481486") | |||||
// 创建一个要输出数据的文件 | |||||
file, _ := os.Create("./static/1.jpg") | |||||
defer file.Close() | |||||
// 设置图片像素大小 | |||||
qrCode, _ := barcode.Scale(cs, 350, 100) | |||||
// 将code128的条形码编码为png图片 | |||||
jpeg.Encode(file, qrCode, nil) | |||||
pdf.Image("./static/1.jpg", left, 50, 170, 30, false, "JPEG", 0, "") | |||||
pdf.SetFont("SourceHanSansCN-Light", "", 28) | |||||
pdf.Text(left, 95, "激活鸟 · 变现中心结算对账单") | |||||
pdf.SetFont("SourceHanSansCN-Light", "", 12) | |||||
pdf.Text(left, 105, "结 算 单 号 : jihuoniao-Ads-20240913-7653481486") | |||||
pdf.Text(left, 115, "制 表 日 期 : 2024/10/29") | |||||
pdf.Text(left, 125, "结 算 日 期 : 2024.08.01 - 2024.08.31") | |||||
pdf.Text(left, 135, "客 户 名 称 : 天津公交易通科技有限公司") | |||||
// 定义表格内容 | |||||
pdf.SetFont("SourceHanSansCN-Light", "", 12) | |||||
table := []string{ | |||||
"业务类型", "基础收益(元)", "其他调整(元)", "实际结算总计(元)", | |||||
"广告合作", "1", "2", "3", | |||||
} | |||||
// 定义表格列数 | |||||
col := 4 | |||||
// 定义单元格位置 | |||||
cellWidth := 10.0 * 4 | |||||
cellHeight := 8.0 | |||||
x := left | |||||
y := 140.0 | |||||
for i := 0; i < len(table); { | |||||
pdf.SetXY(x, y) | |||||
if i == col { | |||||
cellHeight = 13 | |||||
} | |||||
for j := 0; j < col; j++ { | |||||
if i < len(table) { | |||||
// 循环绘制单元格并输入内容 | |||||
pdf.CellFormat(cellWidth, cellHeight, table[i], "1", 0, "C", false, 0, "") | |||||
} | |||||
i++ | |||||
} | |||||
y = y + cellHeight | |||||
} | |||||
pdf.SetFont("SourceHanSansCN-Light", "", 12) | |||||
pdf.Text(100, 170, "实际结算总计(元):") | |||||
pdf.Text(160, 170, "63531.08") | |||||
pdf.Text(210/2-20, 190, "数据确认回执栏") | |||||
pdf.Line(left, 193, 180, 194) | |||||
pdf.Text(left, 200, "数据确认") | |||||
pdf.Text(left, 210, "公司(盖章或手印):") | |||||
pdf.Text(left, 220, "授权人代表签字:") | |||||
pdf.Text(left, 230, "日期:") | |||||
// 保存PDF文件 | |||||
pdfName := "hello.pdf" | |||||
err := pdf.OutputFileAndClose("./static/" + pdfName) | |||||
if err != nil { | |||||
fmt.Println(err) | |||||
return | |||||
} | |||||
c.Header("Content-Type", "application/octet-stream") | |||||
c.Header("Content-Disposition", "attachment; filename="+url.QueryEscape(pdfName)) | |||||
c.Header("Content-Transfer-Encoding", "binary") | |||||
c.File("./static/" + pdfName) | |||||
return | |||||
} |
@@ -72,6 +72,7 @@ func Init() *gin.Engine { | |||||
func route(r *gin.RouterGroup) { | func route(r *gin.RouterGroup) { | ||||
r.GET("/test", hdl.Demo) | r.GET("/test", hdl.Demo) | ||||
r.GET("/test1", hdl.Demo1) | |||||
r.GET("/getAuthToken", hdl.GetAuthToken) | r.GET("/getAuthToken", hdl.GetAuthToken) | ||||
r.GET("/authorize", hdl.AppletAuthorize) | r.GET("/authorize", hdl.AppletAuthorize) | ||||
@@ -2,7 +2,6 @@ package svc | |||||
import ( | import ( | ||||
"applet/app/e" | "applet/app/e" | ||||
"applet/app/enum" | |||||
"applet/app/md" | "applet/app/md" | ||||
"applet/app/utils" | "applet/app/utils" | ||||
"applet/app/utils/cache" | "applet/app/utils/cache" | ||||
@@ -425,10 +424,22 @@ func DataCenterSelectData(c *gin.Context) { | |||||
if ok == false { | if ok == false { | ||||
appMap[v.Platform] = make([]map[string]interface{}, 0) | appMap[v.Platform] = make([]map[string]interface{}, 0) | ||||
} | } | ||||
NewAppletApplicationAdSpaceListDb := implement2.NewAppletApplicationAdSpaceListDb(MasterDb(c)) | |||||
adList, _ := NewAppletApplicationAdSpaceListDb.FindAppletApplicationAdSpaceListByAppidIds(v.AppId) | |||||
adData := make([]md.SelectData, 0) | |||||
if adList != nil { | |||||
for _, v1 := range *adList { | |||||
tmp1 := md.SelectData{ | |||||
Name: v1.Name, | |||||
Value: v1.AdId, | |||||
} | |||||
adData = append(adData, tmp1) | |||||
} | |||||
} | |||||
tmp := map[string]interface{}{ | tmp := map[string]interface{}{ | ||||
"name": v.Name, | "name": v.Name, | ||||
"app_id": v.AppId, | "app_id": v.AppId, | ||||
"ad_type": enum.AdTypeList, | |||||
"ad_type": adData, | |||||
} | } | ||||
appMap[v.Platform] = append(appMap[v.Platform], tmp) | appMap[v.Platform] = append(appMap[v.Platform], tmp) | ||||
} | } | ||||
@@ -454,7 +465,7 @@ func DataCenterTable(c *gin.Context, req md.DataCenterTableReq) md.DataCenterTab | |||||
Date: v["date"], | Date: v["date"], | ||||
ExposureCount: v["exposure_count"], | ExposureCount: v["exposure_count"], | ||||
MediaRevenue: utils.Float64ToStr(utils.StrToFloat64(v["media_revenue"]) / 100), | MediaRevenue: utils.Float64ToStr(utils.StrToFloat64(v["media_revenue"]) / 100), | ||||
Ecpm: v["ecpm"], | |||||
Ecpm: utils.Float64ToStr(utils.StrToFloat64(v["ecpm"]) / 100), | |||||
} | } | ||||
tmpMap[v["date"]] = tmp | tmpMap[v["date"]] = tmp | ||||
} | } | ||||
@@ -513,8 +524,7 @@ func comm(c *gin.Context, isTotal int, req md.DataCenterRecordReq) ([]map[string | |||||
where += " and app_id in(" + str + ")" | where += " and app_id in(" + str + ")" | ||||
} | } | ||||
if req.AdType != "" { | if req.AdType != "" { | ||||
adType, _ := GetSlotIds(c, req.AdType) | |||||
where += " and slot_id in(" + adType + ")" | |||||
where += " and slot_id in('" + req.AdType + "')" | |||||
} | } | ||||
if req.StartDate != "" { | if req.StartDate != "" { | ||||
where += " and date>='" + req.StartDate + "'" | where += " and date>='" + req.StartDate + "'" | ||||
@@ -528,9 +538,9 @@ func comm(c *gin.Context, isTotal int, req md.DataCenterRecordReq) ([]map[string | |||||
if req.Page != "" { | if req.Page != "" { | ||||
groupBy += " limit " + utils.IntToStr(start) + "," + req.Limit | groupBy += " limit " + utils.IntToStr(start) + "," + req.Limit | ||||
} else { | } else { | ||||
groupBy = " order by date asc,id asc" | |||||
field = "SUM(ecpm) AS ecpm,SUM(media_revenue) AS media_revenue,SUM(exposure_count) AS exposure_count,date" | |||||
groupBy = " group by date order by date asc,id asc" | |||||
} | } | ||||
sql1 := fmt.Sprintf(sql, field, where, groupBy) | sql1 := fmt.Sprintf(sql, field, where, groupBy) | ||||
nativeString, _ := db.QueryNativeString(db.Db, sql1) | nativeString, _ := db.QueryNativeString(db.Db, sql1) | ||||
@@ -430,6 +430,16 @@ func GetSlotId(c *gin.Context, state string) string { | |||||
return mediumId | return mediumId | ||||
} | } | ||||
func GetSlotIds(c *gin.Context, adType string) (string, string) { | func GetSlotIds(c *gin.Context, adType string) (string, string) { | ||||
adId := "" | |||||
adIds := "" | |||||
if adType != "" { | |||||
adId = "'" + adType + "'" | |||||
ids := []string{adType} | |||||
adIds = strings.Join(ids, ",") | |||||
} | |||||
return adId, adIds | |||||
} | |||||
func GetSlotIds1(c *gin.Context, adType string) (string, string) { | |||||
adId := "" | adId := "" | ||||
adIds := "" | adIds := "" | ||||
if adType != "" { | if adType != "" { | ||||
@@ -6,7 +6,6 @@ go 1.18 | |||||
require ( | require ( | ||||
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/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 | github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 | ||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible | github.com/dgrijalva/jwt-go v3.2.0+incompatible | ||||
github.com/forgoer/openssl v0.0.0-20201023062029-c3112b0c8700 | github.com/forgoer/openssl v0.0.0-20201023062029-c3112b0c8700 | ||||
@@ -36,10 +35,12 @@ require ( | |||||
require ( | require ( | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 | code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e | code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e | ||||
code.fnuoos.com/zhimeng/model.git v0.0.3-0.20241029093801-ac7d9e08df0e | |||||
code.fnuoos.com/zhimeng/model.git v0.0.3-0.20241030025944-2a0971f8eb9d | |||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1 | github.com/360EntSecGroup-Skylar/excelize v1.4.1 | ||||
github.com/gin-contrib/cors v1.7.2 | github.com/gin-contrib/cors v1.7.2 | ||||
github.com/jinzhu/copier v0.4.0 | github.com/jinzhu/copier v0.4.0 | ||||
github.com/signintech/gopdf v0.28.0 | |||||
github.com/tealeg/xlsx v1.0.5 | |||||
) | ) | ||||
require ( | require ( | ||||
@@ -47,6 +48,7 @@ require ( | |||||
github.com/KyleBanks/depth v1.2.1 // indirect | github.com/KyleBanks/depth v1.2.1 // indirect | ||||
github.com/PuerkitoBio/purell v1.1.1 // indirect | github.com/PuerkitoBio/purell v1.1.1 // indirect | ||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect | ||||
github.com/boombuler/barcode v1.0.2 // indirect | |||||
github.com/bytedance/sonic v1.11.6 // indirect | github.com/bytedance/sonic v1.11.6 // indirect | ||||
github.com/bytedance/sonic/loader v0.1.1 // indirect | github.com/bytedance/sonic/loader v0.1.1 // indirect | ||||
github.com/cloudwego/base64x v0.1.4 // indirect | github.com/cloudwego/base64x v0.1.4 // indirect | ||||
@@ -59,6 +61,7 @@ require ( | |||||
github.com/go-openapi/swag v0.19.15 // indirect | github.com/go-openapi/swag v0.19.15 // indirect | ||||
github.com/go-sql-driver/mysql v1.8.1 // indirect | github.com/go-sql-driver/mysql v1.8.1 // indirect | ||||
github.com/goccy/go-json v0.10.2 // indirect | github.com/goccy/go-json v0.10.2 // indirect | ||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect | |||||
github.com/golang/snappy v0.0.4 // indirect | github.com/golang/snappy v0.0.4 // indirect | ||||
github.com/gookit/color v1.3.8 // indirect | github.com/gookit/color v1.3.8 // indirect | ||||
github.com/gorilla/context v1.1.1 // indirect | github.com/gorilla/context v1.1.1 // indirect | ||||
@@ -66,7 +69,9 @@ require ( | |||||
github.com/gorilla/sessions v1.2.1 // indirect | github.com/gorilla/sessions v1.2.1 // indirect | ||||
github.com/josharian/intern v1.0.0 // indirect | github.com/josharian/intern v1.0.0 // indirect | ||||
github.com/json-iterator/go v1.1.12 // indirect | github.com/json-iterator/go v1.1.12 // indirect | ||||
github.com/jung-kurt/gofpdf v1.16.2 // indirect | |||||
github.com/klauspost/cpuid/v2 v2.2.7 // indirect | github.com/klauspost/cpuid/v2 v2.2.7 // indirect | ||||
github.com/ledongthuc/pdf v0.0.0-20240201131950-da5b75280b06 // indirect | |||||
github.com/leodido/go-urn v1.4.0 // indirect | github.com/leodido/go-urn v1.4.0 // indirect | ||||
github.com/mailru/easyjson v0.7.7 // indirect | github.com/mailru/easyjson v0.7.7 // indirect | ||||
github.com/mattn/go-isatty v0.0.20 // indirect | github.com/mattn/go-isatty v0.0.20 // indirect | ||||
@@ -74,6 +79,7 @@ require ( | |||||
github.com/modern-go/reflect2 v1.0.2 // indirect | github.com/modern-go/reflect2 v1.0.2 // indirect | ||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect | github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect | ||||
github.com/pelletier/go-toml/v2 v2.2.1 // indirect | github.com/pelletier/go-toml/v2 v2.2.1 // indirect | ||||
github.com/phpdave11/gofpdi v1.0.14-0.20211212211723-1f10f9844311 // indirect | |||||
github.com/pkg/errors v0.9.1 // indirect | github.com/pkg/errors v0.9.1 // indirect | ||||
github.com/streadway/amqp v1.0.0 // indirect | github.com/streadway/amqp v1.0.0 // indirect | ||||
github.com/syndtr/goleveldb v1.0.0 // indirect | github.com/syndtr/goleveldb v1.0.0 // indirect | ||||
@@ -83,6 +89,7 @@ require ( | |||||
go.uber.org/multierr v1.6.0 // indirect | go.uber.org/multierr v1.6.0 // indirect | ||||
golang.org/x/arch v0.7.0 // indirect | golang.org/x/arch v0.7.0 // indirect | ||||
golang.org/x/crypto v0.22.0 // indirect | golang.org/x/crypto v0.22.0 // indirect | ||||
golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a // indirect | |||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect | golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect | ||||
golang.org/x/net v0.24.0 // indirect | golang.org/x/net v0.24.0 // indirect | ||||
golang.org/x/sync v0.1.0 // indirect | golang.org/x/sync v0.1.0 // indirect | ||||