Prechádzať zdrojové kódy

update:优化订单pdf

zoie 2 rokov pred
rodič
commit
8aff3bb02d

+ 2 - 1
.gitignore

@@ -34,4 +34,5 @@ lastupdate.tmp
 Cold_GoodsOrder
 Cold_GoodsOrder6250
 Makefile
-main
+main
+ofile

+ 1 - 1
Nats/Nats.go

@@ -7,7 +7,7 @@ import (
 	"github.com/nats-io/nats.go"
 )
 
-func Init() {
+func init() {
 	fmt.Println("============Nats init============")
 	var err error
 	// 连接Nats服务器

+ 1 - 1
Nats/NatsServer/NatsDevice.go

@@ -94,7 +94,7 @@ func ReadDeviceDataListBy_T_snid(T_snid string, Time_start string, Time_end stri
 		return r, cnt
 	}
 
-	fmt.Printf("Cold_ReadDeviceDataListBy_T_snid : %+v\n", t_R)
+	//fmt.Printf("Cold_ReadDeviceDataListBy_T_snid : %+v\n", t_R)
 
 	return t_R.Data, t_R.Count
 

+ 71 - 16
Nats/NatsServer/NatsQiniu.go

@@ -3,8 +3,12 @@ package NatsServer
 import (
 	"Cold_GoodsOrder/lib"
 	"Cold_GoodsOrder/logs"
+	"context"
 	"fmt"
+	"github.com/qiniu/go-sdk/v7/auth/qbox"
+	"github.com/qiniu/go-sdk/v7/storage"
 	"github.com/vmihailenco/msgpack/v5"
+	"strings"
 	"time"
 )
 
@@ -34,27 +38,78 @@ func Qiniu_UploadToken(T_suffix string, T_MimeLimit string) (string, bool) {
 	return string(msg.Data), false
 }
 
+//func Qiniu_UploadFile(localFile string, name string) (string, bool) {
+//	logs.Println("Nats =>", lib.FuncName(), localFile, name)
+//	type Qiniu_UploadFile struct {
+//		File string
+//		Name string
+//	}
+//	RR := Qiniu_UploadFile{File: localFile, Name: name}
+//	println("localFile:", RR.File)
+//	b, err := msgpack.Marshal(&RR)
+//	if err != nil {
+//		panic(err)
+//	}
+//
+//	// 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
+//	msg, err := lib.Nats.Request("Qiniu_UploadFile", b, 3*time.Second)
+//	if err != nil {
+//		fmt.Println("Qiniu_UploadFile Err:", err)
+//	} else {
+//		fmt.Printf("Qiniu_UploadFile : %s\n", string(msg.Data))
+//		return string(msg.Data), true
+//	}
+//
+//	return string(msg.Data), false
+//}
+
 func Qiniu_UploadFile(localFile string, name string) (string, bool) {
-	logs.Println("Nats =>", lib.FuncName(), localFile, name)
-	type Qiniu_UploadFile struct {
-		File string
-		Name string
-	}
-	RR := Qiniu_UploadFile{File: localFile, Name: name}
-	println(":", RR.File)
-	b, err := msgpack.Marshal(&RR)
+	logs.Println("Qiniu_UploadFile =>", localFile, name)
+
+	// 获取 七牛云的 配置信息
+	msg, err := lib.Nats.Request("Qiniu_Token", []byte(""), 3*time.Second)
 	if err != nil {
-		panic(err)
+		return string(msg.Data), false
 	}
+	fmt.Printf("Qiniu_Token : %s\n", string(msg.Data))
+	Qiniu_cs := strings.Split(string(msg.Data), "|")
+	Qiniu_AccessKey := Qiniu_cs[0]
+	Qiniu_SecretKey := Qiniu_cs[1]
+	Qiniu_BUCKET := Qiniu_cs[2]
+	Qiniu_Url := Qiniu_cs[3]
 
-	// 请求-响应, 向 test3 发布一个 `help me` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
-	msg, err := lib.Nats.Request("Qiniu_UploadFile", b, 3*time.Second)
+	// 开始上传 七牛云
+	Qiniu := qbox.NewMac(Qiniu_AccessKey, Qiniu_SecretKey)
+	// 自定义返回值结构体
+	type MyPutRet struct {
+		Key    string
+		Hash   string
+		Fsize  int
+		Bucket string
+		Name   string
+	}
+	//key := "your file save key"
+	// 使用 returnBody 自定义回复格式
+	putPolicy := storage.PutPolicy{
+		Scope:      Qiniu_BUCKET,
+		ReturnBody: `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
+	}
+	//mac := qbox.NewMac(conf.Qiniu_AccessKey, conf.Qiniu_SecretKey)
+	upToken := putPolicy.UploadToken(Qiniu)
+	cfg := storage.Config{}
+	formUploader := storage.NewFormUploader(&cfg)
+	ret := MyPutRet{}
+	putExtra := storage.PutExtra{
+		Params: map[string]string{
+			"x:name": "github logo",
+		},
+	}
+	err = formUploader.PutFile(context.Background(), &ret, upToken, name, localFile, &putExtra)
 	if err != nil {
-		fmt.Println("Qiniu_UploadFile Err:", err)
-	} else {
-		fmt.Printf("Qiniu_UploadFile : %s\n", string(msg.Data))
-		return string(msg.Data), true
+		logs.Println("七牛云", "上传文件失败"+localFile, err.Error())
+		return "", false
 	}
+	fmt.Println(ret.Bucket, ret.Key, ret.Fsize, ret.Hash, ret.Name)
+	return Qiniu_Url + name, true
 
-	return string(msg.Data), false
 }

+ 9 - 7
Nats/NatsServer/NatsUser.go

@@ -3,25 +3,27 @@ package NatsServer
 import (
 	"Cold_GoodsOrder/lib"
 	"Cold_GoodsOrder/models/Account"
+	"fmt"
 	"github.com/vmihailenco/msgpack/v5"
 	"time"
 )
 
 // 验证TOKEY
-func Verification(GetCookie string, GetString string) (bool, Account.User) {
+func Verification(GetCookie string, GetString string) (bool, Account.User, int) {
 
 	User_tokey := GetCookie
 	if len(User_tokey) == 0 {
 		User_tokey = GetString
 	}
 	if len(User_tokey) == 0 {
-		return false, Account.User{}
+		return false, Account.User{}, 0
 	}
 	// 请求-响应, 向 verification 发布一个 `ToKey` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
 	msg, err := lib.Nats.Request("Cold_User_verification", []byte(User_tokey), 3*time.Second)
 	if err != nil {
-		return false, Account.User{}
+		return false, Account.User{}, 0
 	}
+	fmt.Printf("Cold_User_verification : %s\n", string(msg.Data))
 	type T_R struct {
 		Code int16        `xml:"Code"`
 		Msg  string       `xml:"Msg"`
@@ -32,11 +34,11 @@ func Verification(GetCookie string, GetString string) (bool, Account.User) {
 	var t_R T_R
 
 	err = msgpack.Unmarshal(msg.Data, &t_R)
-	if err != nil || t_R.Code != 200 {
-		return false, Account.User{}
+	if err != nil {
+		return false, Account.User{}, 0
 	}
-	Account.T_pid = t_R.Pid
-	return true, t_R.Data
+
+	return true, t_R.Data, t_R.Pid
 
 }
 

+ 84 - 68
controllers/GoodsOrder.go

@@ -26,16 +26,8 @@ type GoodsOrderController struct {
 }
 
 func (c *GoodsOrderController) Prepare() {
-	GetCookie := c.Ctx.GetCookie("User_tokey")
-	GetString := c.GetString("User_tokey")
-
-	User_tokey := GetCookie
-	if len(User_tokey) == 0 {
-		User_tokey = GetString
-	}
-
-	c.User_r = Account.User_r
-	c.T_pid = Account.T_pid
+	c.User_r = *Account.User_r
+	c.T_pid = *Account.T_pid
 }
 
 func (c *GoodsOrderController) GoodsOrder_List() {
@@ -280,6 +272,12 @@ func (c *GoodsOrderController) GoodsOrder_PDF() {
 	var DeviceSensor_data []Device.DeviceData_R
 	DeviceSensor_data, _ = NatsServer.ReadDeviceDataListBy_T_snid(GoodsOrder_r.T_sn+","+strconv.Itoa(DeviceSensor_r[0].T_id), GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05"), GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"), 0, 9999)
 
+	if len(DeviceSensor_data) == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
+		c.ServeJSON()
+		return
+	}
+
 	pdf := &gopdf.GoPdf{}
 	pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4
 	//err = GetFont(pdf, "LiberationSerif-Regular.ttf")
@@ -293,13 +291,13 @@ func (c *GoodsOrderController) GoodsOrder_PDF() {
 
 	err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: err.Error()}
 		c.ServeJSON()
 		return
 	}
 	err = pdf.SetFont("simsun", "", 24)
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: err.Error()}
 		c.ServeJSON()
 		return
 	}
@@ -324,13 +322,13 @@ func (c *GoodsOrderController) GoodsOrder_PDF() {
 
 	err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
+		c.Data["json"] = lib.JSONS{Code: 206, Msg: err.Error()}
 		c.ServeJSON()
 		return
 	}
 	err = pdf.SetFont("wts", "", 10)
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
 		c.ServeJSON()
 		return
 	}
@@ -390,6 +388,65 @@ func (c *GoodsOrderController) GoodsOrder_PDF() {
 	lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
 	x += w2
 
+	// 数据汇总--------------------------------
+
+	// 最低温度
+	var T_t_l float32 = 100.0
+	// 最高温度
+	var T_t_u float32 = 0.0
+	var T_t_v float32 = 0.0
+	for n := 0; len(DeviceSensor_data) > n; n++ {
+		// -计算温度
+		if DeviceSensor_data[n].T_t < T_t_l {
+			T_t_l = DeviceSensor_data[n].T_t
+		}
+		if DeviceSensor_data[n].T_t > T_t_u {
+			T_t_u = DeviceSensor_data[n].T_t
+		}
+		T_t_v += DeviceSensor_data[n].T_t
+	}
+
+	var y float64 = 160
+	x = 22.0
+	w1 = 60.0
+	w2 = 50.0
+
+	err = pdf.SetFont("wts", "", 10)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
+		c.ServeJSON()
+		return
+	}
+	T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
+	lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
+	T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
+	lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
+	T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
+	lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
+	T_t = fmt.Sprintf(" %.1f℃ ", T_t_v/float32(len(DeviceSensor_data)))
+	lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
+	T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
+	lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
 	// -----------
 	textw, _ = pdf.MeasureTextWidth("历史数据")
 	pdf.SetX(20)
@@ -397,7 +454,8 @@ func (c *GoodsOrderController) GoodsOrder_PDF() {
 	pdf.Text("历史数据:")
 
 	// 数据展示--------------------------------
-	var y float64 = 220
+	//var y float64 = 220
+	y = 220
 	x = 22.0
 	w1 = 94.0
 	w2 = 43.0
@@ -424,26 +482,13 @@ func (c *GoodsOrderController) GoodsOrder_PDF() {
 
 	err = pdf.SetFont("wts", "", 8)
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
 		c.ServeJSON()
 		return
 	}
 	nln := 0
 	x = 22.0
-	var T_t_l float32 = 100.0
-	var T_t_u float32 = 0.0
-	var T_t_v float32 = 0.0
 	for n := 0; len(DeviceSensor_data) > n; n++ {
-		// -计算温度
-		if DeviceSensor_data[n].T_t < T_t_l {
-			T_t_l = DeviceSensor_data[n].T_t
-		}
-		if DeviceSensor_data[n].T_t > T_t_u {
-			T_t_u = DeviceSensor_data[n].T_t
-		}
-		T_t_v += DeviceSensor_data[n].T_t
-
-		//text := fmt.Sprintf(" %d ", i+1)
 		var textH float64 = 25 // if text height is 25px.
 		pdf.SetNewY(y, textH)
 		y = pdf.GetY()
@@ -455,8 +500,14 @@ func (c *GoodsOrderController) GoodsOrder_PDF() {
 			y += 18
 		}
 
+		if y >= 794 {
+			pdf.AddPage()
+			x = 22.0
+			y = 20
+		}
+
 		// ------------------
-		T_t := fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
+		T_t = fmt.Sprintf(" %.1f ", DeviceSensor_data[n].T_t)
 		T_time = fmt.Sprintf("%s", DeviceSensor_data[n].T_time)
 
 		lib.RectFillColor(pdf, T_time, 10, x, y, w1, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
@@ -468,57 +519,22 @@ func (c *GoodsOrderController) GoodsOrder_PDF() {
 
 	err = pdf.SetFont("wts", "", 10)
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
 		c.ServeJSON()
 		return
 	}
-	// 数据汇总--------------------------------
-	y = 160
-	x = 22.0
-	w1 = 60.0
-	w2 = 50.0
-
-	T_t := fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[len(DeviceSensor_data)-1].T_t)
-	lib.RectFillColor(pdf, "起送温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", DeviceSensor_data[0].T_t)
-	lib.RectFillColor(pdf, "送达温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", T_t_l)
-	lib.RectFillColor(pdf, "最低温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", float32(T_t_v/float32(len(DeviceSensor_data)-1)))
-	lib.RectFillColor(pdf, "平均温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
-
-	T_t = fmt.Sprintf(" %.1f℃ ", T_t_u)
-	lib.RectFillColor(pdf, "最高温度", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w1
-	lib.RectFillColor(pdf, T_t, 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
-	x += w2
 
 	//----------------
 	timeStr := "ofile/" + time.Now().Format("20060102150405") + ".pdf"
 
 	err = pdf.WritePdf(timeStr)
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: err.Error()}
 		c.ServeJSON()
 		return
 	}
 
-	// 上传 OSS
+	//上传 OSS
 	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}

+ 1 - 3
main.go

@@ -1,7 +1,7 @@
 package main
 
 import (
-	"Cold_GoodsOrder/Nats"
+	_ "Cold_GoodsOrder/Nats"
 	"Cold_GoodsOrder/conf"
 	"Cold_GoodsOrder/routers"
 	_ "Cold_GoodsOrder/routers"
@@ -22,8 +22,6 @@ func init() {
 		conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
 		conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
 	orm.RunSyncdb("default", false, true) // 创建本地数据库
-
-	Nats.Init()
 }
 
 func main() {

+ 2 - 2
models/Account/Admin.go

@@ -5,8 +5,8 @@ import (
 	_ "github.com/go-sql-driver/mysql"
 )
 
-var User_r User
-var T_pid int
+var User_r *User
+var T_pid *int
 
 type User struct {
 	T_uuid  string `xml:"T_uuid"`

+ 4 - 2
routers/filter.go

@@ -8,13 +8,15 @@ import (
 )
 
 func RBACFilter(ctx *context.Context) {
-	var b_ bool
-	b_, Account.User_r = NatsServer.Verification(ctx.GetCookie("User_tokey"), ctx.Input.Query("User_tokey"))
+	b_, User_r, T_pid := NatsServer.Verification(ctx.GetCookie("User_tokey"), ctx.Input.Query("User_tokey"))
 	if !b_ {
 		ctx.Output.JSON(lib.JSONS{Code: 201, Msg: "请重新登陆!"}, true, false)
 		return
 	}
 
+	Account.User_r = &User_r
+	Account.T_pid = &T_pid
+
 	flag := NatsServer.CheckUserPermissions(Account.User_r.T_power, ctx.Request.URL.Path)
 
 	if !flag {