@@ -5,7 +5,19 @@ import ( | |||||
"applet/app/lib/validate" | "applet/app/lib/validate" | ||||
"applet/app/md" | "applet/app/md" | ||||
"applet/app/svc" | "applet/app/svc" | ||||
"applet/app/utils" | |||||
db "code.fnuoos.com/zhimeng/model.git/src" | |||||
"code.fnuoos.com/zhimeng/model.git/src/super/implement" | |||||
"fmt" | |||||
"github.com/boombuler/barcode" | |||||
"github.com/boombuler/barcode/code128" | |||||
"github.com/gin-gonic/gin" | "github.com/gin-gonic/gin" | ||||
"github.com/jung-kurt/gofpdf" | |||||
"image/jpeg" | |||||
"net/url" | |||||
"os" | |||||
"strings" | |||||
"time" | |||||
) | ) | ||||
// SettleCenterList | // SettleCenterList | ||||
@@ -103,3 +115,105 @@ func SettleCenterInvoiceSave(c *gin.Context) { | |||||
} | } | ||||
svc.SettleCenterInvoiceSave(c, req) | svc.SettleCenterInvoiceSave(c, req) | ||||
} | } | ||||
func SettleCenterSettleFileDown(c *gin.Context) { | |||||
id := c.Query("id") | |||||
engine := db.Db | |||||
NewMediumSettlementDb := implement.NewMediumSettlementDb(engine) | |||||
data, _ := NewMediumSettlementDb.GetMediumSettlementById(utils.StrToInt(id)) | |||||
NewMediumListDb := implement.NewMediumListDb(engine) | |||||
medium, _ := NewMediumListDb.GetMediumList(data.MediumId) | |||||
// 创建一个新的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条形码 | |||||
num := "jihuoniao-Ads-" + time.Now().Format("20060102") + "-" + utils.IntToStr(data.Id) | |||||
cs, _ := code128.Encode(num) | |||||
// 创建一个要输出数据的文件 | |||||
file, _ := os.Create("./static/" + num + ".jpg") | |||||
defer file.Close() | |||||
// 设置图片像素大小 | |||||
qrCode, _ := barcode.Scale(cs, 350, 100) | |||||
// 将code128的条形码编码为png图片 | |||||
jpeg.Encode(file, qrCode, nil) | |||||
pdf.Image("./static/"+num+".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, "结 算 单 号 : "+num) | |||||
pdf.Text(left, 115, "制 表 日 期 : "+time.Now().Format("2006/01/02")) | |||||
date := "" | |||||
if data.StartDate != "0000-00-00" && data.StartDate != "" { | |||||
date = strings.ReplaceAll(data.StartDate, "-", ".") | |||||
} | |||||
if data.EndDate != "0000-00-00" && data.EndDate != "" { | |||||
date += " - " + strings.ReplaceAll(data.EndDate, "-", ".") | |||||
} | |||||
pdf.Text(left, 125, "结 算 日 期 : "+date) | |||||
pdf.Text(left, 135, "客 户 名 称 : "+medium.CompanyName) | |||||
// 定义表格内容 | |||||
pdf.SetFont("SourceHanSansCN-Light", "", 12) | |||||
table := []string{ | |||||
"业务类型", "基础收益(元)", "其他调整(元)", "实际结算总计(元)", | |||||
"广告合作", utils.Float64ToStr(float64(data.BasicIncome) / 100), utils.Float64ToStr(float64(data.OtherIncome) / 100), utils.Float64ToStr(float64(data.BasicIncome+data.OtherIncome) / 100), | |||||
} | |||||
// 定义表格列数 | |||||
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, utils.Float64ToStr(float64(data.BasicIncome+data.OtherIncome)/100)) | |||||
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 := num + ".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) | |||||
os.Remove("./static/" + pdfName) | |||||
file.Close() | |||||
err = os.Remove("./static/" + num + ".jpg") | |||||
fmt.Println(err) | |||||
return | |||||
} |
@@ -51,8 +51,9 @@ 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.POST("/qiniuyun/callback", hdl.FileImgCallback) //七牛云回调 | |||||
r.Use(mw.DB) // 以下接口需要用到数据库 | |||||
r.POST("/qiniuyun/callback", hdl.FileImgCallback) //七牛云回调 | |||||
r.GET("/settle/file/down", hdl.SettleCenterSettleFileDown) //结算中心-结算报表-结算单下载 | |||||
r.Use(mw.DB) // 以下接口需要用到数据库 | |||||
{ | { | ||||
r.GET("/base", hdl.LoginBase) | r.GET("/base", hdl.LoginBase) | ||||
r.POST("/login", hdl.Login) | r.POST("/login", hdl.Login) | ||||
@@ -112,6 +113,7 @@ func rSettleCenter(r *gin.RouterGroup) { | |||||
r.POST("/detail", hdl.SettleCenterDetail) //结算中心-结算报表-详情 | r.POST("/detail", hdl.SettleCenterDetail) //结算中心-结算报表-详情 | ||||
r.POST("/settle/file/save", hdl.SettleCenterSettleFileSave) //结算中心-结算报表-结算单上传 | r.POST("/settle/file/save", hdl.SettleCenterSettleFileSave) //结算中心-结算报表-结算单上传 | ||||
r.POST("/invoice/save", hdl.SettleCenterInvoiceSave) //结算中心-结算报表-发票上传 | r.POST("/invoice/save", hdl.SettleCenterInvoiceSave) //结算中心-结算报表-发票上传 | ||||
} | } | ||||
func rInvoiceCenter(r *gin.RouterGroup) { | func rInvoiceCenter(r *gin.RouterGroup) { | ||||
r.POST("/list", hdl.InvoiceCenterList) //发票中心-列表 | r.POST("/list", hdl.InvoiceCenterList) //发票中心-列表 | ||||
@@ -64,7 +64,16 @@ func DataCenterRecordTotal(c *gin.Context, req md.DataCenterTableReq) md.DataCen | |||||
user := GetUser(c) | user := GetUser(c) | ||||
where := "is_generate_report=1 and uuid=" + c.GetString("mid") + " and medium_id=" + utils.IntToStr(user.MediumId) | where := "is_generate_report=1 and uuid=" + c.GetString("mid") + " and medium_id=" + utils.IntToStr(user.MediumId) | ||||
if req.AppId != "" || req.Platform != "" { | if req.AppId != "" || req.Platform != "" { | ||||
where += " and app_id in('" + appId + "')" | |||||
ex := strings.Split(appId, ",") | |||||
str := "" | |||||
for _, v := range ex { | |||||
if str == "" { | |||||
str += "'" + v + "'" | |||||
} else { | |||||
str += ",'" + v + "'" | |||||
} | |||||
} | |||||
where += " and app_id in(" + str + ")" | |||||
} | } | ||||
if req.AdType != "" { | if req.AdType != "" { | ||||
where += " and ad_slot='" + req.AdType + "'" | where += " and ad_slot='" + req.AdType + "'" | ||||
@@ -197,7 +206,16 @@ func comm(c *gin.Context, isTotal int, req md.DataCenterRecordReq) ([]map[string | |||||
user := GetUser(c) | user := GetUser(c) | ||||
where := "is_generate_report=1 and uuid=" + c.GetString("mid") + " and medium_id=" + utils.IntToStr(user.MediumId) | where := "is_generate_report=1 and uuid=" + c.GetString("mid") + " and medium_id=" + utils.IntToStr(user.MediumId) | ||||
if req.AppId != "" || req.Platform != "" { | if req.AppId != "" || req.Platform != "" { | ||||
where += " and app_id in('" + appId + "')" | |||||
ex := strings.Split(appId, ",") | |||||
str := "" | |||||
for _, v := range ex { | |||||
if str == "" { | |||||
str += "'" + v + "'" | |||||
} else { | |||||
str += ",'" + v + "'" | |||||
} | |||||
} | |||||
where += " and app_id in(" + str + ")" | |||||
} | } | ||||
if req.AdType != "" { | if req.AdType != "" { | ||||
where += " and ad_slot='" + req.AdType + "'" | where += " and ad_slot='" + req.AdType + "'" | ||||
@@ -158,7 +158,15 @@ func commTotalByApp(c *gin.Context, req md.IndexAppListReq, appId []string) []ma | |||||
where += " and date<='" + req.EndDate + "'" | where += " and date<='" + req.EndDate + "'" | ||||
} | } | ||||
if len(appId) > 0 { | if len(appId) > 0 { | ||||
where += " and app_id in('" + strings.Join(appId, ",") + "')" | |||||
str := "" | |||||
for _, v := range appId { | |||||
if str == "" { | |||||
str += "'" + v + "'" | |||||
} else { | |||||
str += ",'" + v + "'" | |||||
} | |||||
} | |||||
where += " and app_id in(" + str + ")" | |||||
} | } | ||||
if req.Sort == "" { | if req.Sort == "" { | ||||
req.Sort = "media_revenue desc" | req.Sort = "media_revenue desc" | ||||
@@ -230,7 +238,15 @@ func commTotalByDate(c *gin.Context, startDate, endDate string, appId []string) | |||||
where += " and date<='" + endDate + "'" | where += " and date<='" + endDate + "'" | ||||
} | } | ||||
if len(appId) > 0 { | if len(appId) > 0 { | ||||
where += " and app_id in('" + strings.Join(appId, ",") + "')" | |||||
str := "" | |||||
for _, v := range appId { | |||||
if str == "" { | |||||
str += "'" + v + "'" | |||||
} else { | |||||
str += ",'" + v + "'" | |||||
} | |||||
} | |||||
where += " and app_id in(" + str + ")" | |||||
} | } | ||||
sql = fmt.Sprintf(sql, where) | sql = fmt.Sprintf(sql, where) | ||||
nativeString, err := db.QueryNativeString(db.Db, sql) | nativeString, err := db.QueryNativeString(db.Db, sql) | ||||
@@ -71,6 +71,7 @@ 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/kennygrant/sanitize v1.2.4 // indirect | github.com/kennygrant/sanitize v1.2.4 // indirect | ||||
github.com/klauspost/cpuid/v2 v2.0.9 // indirect | github.com/klauspost/cpuid/v2 v2.0.9 // indirect | ||||
github.com/leodido/go-urn v1.2.1 // indirect | github.com/leodido/go-urn v1.2.1 // indirect | ||||