siked 2 年之前
父節點
當前提交
e60d14dfd0

二進制
Cold_Api6200


二進制
Cold_Api6201


+ 0 - 0
Dockerfile


+ 48 - 0
controllers/Data.go

@@ -286,6 +286,54 @@ func (c *DataController) Device_Sensor_Data_More() {
 }
 
 // 列表 - 接口
+func (c *DataController) V2_Device_Sensor_Data_More() {
+	// 验证登录
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	page, _ := c.GetInt("page")
+	println(page)
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	T_snid := c.GetString("T_snid")
+	Time_start := c.GetString("Time_start")
+	Time_end := c.GetString("Time_end")
+
+	if len(T_snid) < 10 {
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+		c.ServeJSON()
+		return
+	}
+
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []Device.DeviceData_
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+
+	r_jsons.Data, r_jsons.Num = Device.Read_V2_DeviceSensorData_By_T_snid_List(T_snid, Time_start, Time_end, page, page_z)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+// 列表 - 接口
 func (c *DataController) Device_Sensor_Data_Excel() {
 
 	// 验证登录

+ 52 - 6
controllers/Device.go

@@ -1625,7 +1625,7 @@ func (c *DeviceController) DeviceWarning_Data_Excel() {
 		c.ServeJSON()
 		return
 	}
-	//删除目录
+	//删除文件
 	//err := os.Remove("ofile/" + timeStr + ".xlsx")
 	//if err != nil {
 	//	fmt.Println(err)
@@ -1708,7 +1708,7 @@ func (c *DeviceController) V2_DeviceWarning_Data_Excel() {
 		c.ServeJSON()
 		return
 	}
-	//删除目录
+	//删除文件
 	//err := os.Remove("ofile/" + timeStr + ".xlsx")
 	//if err != nil {
 	//	fmt.Println(err)
@@ -2354,16 +2354,62 @@ func (c *DeviceController) DeviceClass_() {
 
 func (c *DeviceController) V2_Class_Get() {
 	// 验证登录
-	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
 	if !b_ {
-		c.Ctx.Redirect(302, "Login")
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
 		return
 	}
+
 	id, _ := c.GetInt("T_id")
+	T, err := Device.Read_Class_ById(id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "T_id Err!"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_uuid != T.T_uuid {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	type DeviceClass_R struct {
+		T_name             string // 分类
+		T_Notice_wx        string //w微信公众号  appid/名字|
+		T_Notice_wx2       string //w微信公众号  appid/名字|
+		T_Notice_phone     string //p手机  1111111|
+		T_Notice_message   string //m短信   1111111|
+		T_Notice_mailbox   string //e邮箱    1111111|
+		T_Notice_mechanism string // 报警机制
+		// 湿度超下限预警,处理,w启用,数量,上限,~|
+		// 湿度超下限预警,0,0,0,0,0,0,0,0,0,0,0,0|
+
+		T_QRCode  string // 微信二维码
+		T_QRCode2 string // 微信二维码(冷链)
+	}
 
-	T, _ := Device.Read_Class_ById(id)
+	var r_jsons DeviceClass_R
 
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Device.DeviceClassToDeviceClass_R(T)}
+	r_jsons.T_name = T.T_name
+	r_jsons.T_Notice_wx = T.T_Notice_wx
+	r_jsons.T_Notice_wx2 = T.T_Notice_wx2
+	r_jsons.T_Notice_phone = T.T_Notice_phone
+	r_jsons.T_Notice_message = T.T_Notice_message
+	r_jsons.T_Notice_mailbox = T.T_Notice_mailbox
+	r_jsons.T_Notice_mechanism = T.T_Notice_mechanism
+
+	T_calss_id_str, _ := NatsServer.Wx_GenerateQRCode("-|" + lib.AesEncryptCBC(strconv.Itoa(T.Id), "0123456789012345") + "|- @宝智达 微信公众号通知")
+	if len(T_calss_id_str) > 0 {
+		r_jsons.T_QRCode = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + T_calss_id_str
+	}
+
+	T_calss_id_str, _ = NatsServer.Wx_GenerateQRCode2("-|" + lib.AesEncryptCBC(strconv.Itoa(T.Id), "0123456789012345") + "|- @宝智达 微信公众号通知")
+	if len(T_calss_id_str) > 0 {
+		r_jsons.T_QRCode2 = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + T_calss_id_str
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
 	c.ServeJSON()
 	return
 }

+ 519 - 0
controllers/GoodsOrder.go

@@ -21,6 +21,73 @@ type GoodsOrderController struct {
 	beego.Controller
 }
 
+func (c *GoodsOrderController) GoodsOrder_List() {
+	// 验证登录
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []Function.GoodsOrder
+		Num       int64
+		Page      int
+		Page_size int
+	}
+
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	println(page)
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	Name := c.GetString("T_name")
+	c.Data["Name"] = Name
+
+	r_jsons.Data, r_jsons.Num = Function.Read_GoodsOrder_List(admin_r.Admin_uuid, page, page_z, Name)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+func (c *GoodsOrderController) GoodsOrder_Get() {
+	// 验证登录
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Ctx.Redirect(302, "Login")
+		return
+	}
+
+	id, _ := c.GetInt("T_id")
+
+	r := Function.Read_GoodsOrder_ById(id)
+
+	if r.Id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_uuid != r.T_uuid {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "你没有权限 !"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: Function.GoodsOrderToGoodsOrderR(r)}
+	c.ServeJSON()
+	return
+}
+
 func (c *GoodsOrderController) GoodsOrder_html() {
 	// 验证登录
 	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
@@ -204,6 +271,161 @@ func (c *GoodsOrderController) List_Post() {
 	return
 
 }
+func (c *GoodsOrderController) GoodsOrder_Add() {
+	// 验证登录
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+	var id int64
+	var err error
+
+	id, _ = c.GetInt64("T_id")
+	T_orderid := c.GetString("T_orderid")
+	T_outorderid := c.GetString("T_outorderid")
+	T_sn := c.GetString("T_sn")
+	T_receiving := c.GetString("T_receiving")
+	T_start_Ut := c.GetString("T_start_Ut")
+	T_end_Ut := c.GetString("T_end_Ut")
+	T_start_Ut_T, _ := c.GetFloat("T_start_Ut_T")
+	T_end_Ut_T, _ := c.GetFloat("T_end_Ut_T")
+	T_text := c.GetString("T_text")
+
+	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_start_Ut, time.Local)
+	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_end_Ut, time.Local)
+	var_ := Function.GoodsOrder{
+		T_uuid:       admin_r.Admin_uuid,
+		T_orderid:    T_orderid,
+		T_outorderid: T_outorderid,
+		T_sn:         T_sn,
+		T_receiving:  T_receiving,
+		T_start_Ut:   T_start_Ut_,
+		T_end_Ut:     T_end_Ut_,
+		T_start_Ut_T: float32(T_start_Ut_T),
+		T_end_Ut_T:   float32(T_end_Ut_T),
+		T_text:       T_text,
+		T_State:      1,
+	}
+
+	if id > 0 {
+		var_.Id = int(id)
+		is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
+		if !is {
+			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
+			c.ServeJSON()
+			return
+		}
+	} else {
+		id, err = Function.Add_GoodsOrder(var_)
+		if err != nil {
+			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+			c.ServeJSON()
+			return
+		}
+
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+func (c *GoodsOrderController) GoodsOrder_Edit() {
+	// 验证登录
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+	var id int64
+	var err error
+
+	id, _ = c.GetInt64("T_id")
+	T_orderid := c.GetString("T_orderid")
+	T_outorderid := c.GetString("T_outorderid")
+	T_sn := c.GetString("T_sn")
+	T_receiving := c.GetString("T_receiving")
+	T_start_Ut := c.GetString("T_start_Ut")
+	T_end_Ut := c.GetString("T_end_Ut")
+	T_start_Ut_T, _ := c.GetFloat("T_start_Ut_T")
+	T_end_Ut_T, _ := c.GetFloat("T_end_Ut_T")
+	T_text := c.GetString("T_text")
+
+	T_start_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_start_Ut, time.Local)
+	T_end_Ut_, err := time.ParseInLocation("2006-01-02 15:04:05", T_end_Ut, time.Local)
+	var_ := Function.GoodsOrder{
+		T_uuid:       admin_r.Admin_uuid,
+		T_orderid:    T_orderid,
+		T_outorderid: T_outorderid,
+		T_sn:         T_sn,
+		T_receiving:  T_receiving,
+		T_start_Ut:   T_start_Ut_,
+		T_end_Ut:     T_end_Ut_,
+		T_start_Ut_T: float32(T_start_Ut_T),
+		T_end_Ut_T:   float32(T_end_Ut_T),
+		T_text:       T_text,
+		T_State:      1,
+	}
+
+	if id > 0 {
+		var_.Id = int(id)
+		is := Function.Update_TGoodsOrder(var_, "T_orderid", "T_outorderid", "T_sn", "T_receiving", "T_start_Ut", "T_end_Ut", "T_start_Ut_T", "T_end_Ut_T", "T_text")
+		if !is {
+			c.Data["json"] = lib.JSONS{Code: 302, Msg: "修改失败!"}
+			c.ServeJSON()
+			return
+		}
+	} else {
+		id, err = Function.Add_GoodsOrder(var_)
+		if err != nil {
+			c.Data["json"] = lib.JSONS{Code: 301, Msg: "添加失败!"}
+			c.ServeJSON()
+			return
+		}
+
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+
+func (c *GoodsOrderController) GoodsOrder_Del() {
+	// 验证登录
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	Id, _ := c.GetInt("T_id")
+	r := Function.Read_GoodsOrder_ById(Id)
+
+	if r.Id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_id !"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_uuid != r.T_uuid {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "你没有权限 !"}
+		c.ServeJSON()
+		return
+	}
+
+	r.T_State = 0
+	Function.Update_TGoodsOrder(r, "T_State")
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+
+}
+
 func (c *GoodsOrderController) List_Del() {
 	Id, _ := c.GetInt("Id")
 	if Id > 0 {
@@ -517,3 +739,300 @@ func (c *GoodsOrderController) Data_PDF() {
 	return
 
 }
+
+// 列表 - 接口
+func (c *GoodsOrderController) GoodsOrder_PDF() {
+	var err error
+	// 验证登录
+	b_, user_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+	Id, _ := c.GetInt("T_id")
+	if Id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id  e!"}
+		c.ServeJSON()
+		return
+	}
+
+	GoodsOrder_r := Function.Read_GoodsOrder_ById(Id)
+	if GoodsOrder_r.Id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: "Id  e!"}
+		c.ServeJSON()
+		return
+	}
+	Device_r, err := Device.Read_Device_ByT_sn(GoodsOrder_r.T_sn)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "T_sn Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	DeviceSensor_r := Device.Read_DeviceSensor_ALL_List_T_sn(GoodsOrder_r.T_sn)
+	if len(DeviceSensor_r) == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: GoodsOrder_r.T_sn + "设备没有数据!"}
+		c.ServeJSON()
+		return
+	}
+
+	var DeviceSensor_data []Device.DeviceData_
+	DeviceSensor_data, _ = Device.Read_DeviceSensorData_By_T_snid_List(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)
+
+	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")
+	//if err != nil {
+	//	log.Fatalln(err)
+	//}
+	//err = pdf.SetFont("Ubuntu-L", "", 14)
+	//if err != nil {
+	//	log.Fatalln(err)
+	//}
+
+	err = pdf.AddTTFFont("simsun", "static/fonts/三极行楷简体-粗.ttf")
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 204, Msg: "ok!", Data: err}
+		c.ServeJSON()
+		return
+	}
+	err = pdf.SetFont("simsun", "", 24)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "ok!", Data: err}
+		c.ServeJSON()
+		return
+	}
+
+	pdf.SetGrayFill(0.5)
+
+	pdf.SetMargins(0, 20, 0, 20)
+	pdf.AddPage()
+
+	//use path
+	//pdf.Image("logo.png", 100, 50, &gopdf.Rect{W: 50, H: 50})
+
+	textw, _ := pdf.MeasureTextWidth(user_r.Admin_name)
+	pdf.SetX((595 / 2) - (textw / 2))
+	pdf.SetY(40)
+	pdf.Text(user_r.Admin_name)
+
+	// 线
+	pdf.SetLineWidth(2)
+	pdf.SetLineType("dashed")
+	pdf.Line(10, 60, 585, 60)
+
+	err = pdf.AddTTFFont("wts", "static/fonts/MiSans-Medium.ttf")
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 206, Msg: "ok!", Data: err}
+		c.ServeJSON()
+		return
+	}
+	err = pdf.SetFont("wts", "", 10)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+		c.ServeJSON()
+		return
+	}
+	//fmt.Sprintf(" %.1f ", v.T_t)
+	//lib.RectFillColor(pdf, "历史数据["+Time_start+" / "+Time_end+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+
+	// -------------
+	x := 22.0
+	w1 := 80.0
+	w2 := 195.0
+
+	lib.RectFillColor(pdf, "订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, GoodsOrder_r.T_orderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
+	lib.RectFillColor(pdf, "出库订单号:", 12, x, 80, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, GoodsOrder_r.T_outorderid, 12, x, 80, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+	// -------------
+	x = 22.0
+	w1 = 80.0
+	w2 = 195.0
+
+	lib.RectFillColor(pdf, "设备名称:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, Device_r.T_devName, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
+	lib.RectFillColor(pdf, "设备编号:", 12, x, 100, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, Device_r.T_sn, 12, x, 100, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+	// -------------
+	x = 22.0
+	w1 = 80.0
+	w2 = 240.0
+	T_time := fmt.Sprintf("%s", GoodsOrder_r.T_start_Ut.Format("2006-01-02 15:04:05")+" - "+GoodsOrder_r.T_end_Ut.Format("2006-01-02 15:04:05"))
+	lib.RectFillColor(pdf, "送货时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, T_time, 12, x, 120, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
+	T_time = fmt.Sprintf("%s", GoodsOrder_r.CreateTime.Format("2006-01-02 15:04:05"))
+	lib.RectFillColor(pdf, "订单时间:", 12, x, 120, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, T_time, 12, x, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+
+	// -------------
+	x = 22.0
+	w1 = 80.0
+	w2 = 195.0*2 + 80
+	T_text := fmt.Sprintf("%s", GoodsOrder_r.T_receiving)
+	lib.RectFillColor(pdf, "收货单位:", 12, x, 140, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, T_text, 12, x, 140, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+
+	// -----------
+	textw, _ = pdf.MeasureTextWidth("历史数据")
+	pdf.SetX(20)
+	pdf.SetY(210)
+	pdf.Text("历史数据:")
+
+	// 数据展示--------------------------------
+	var y float64 = 220
+	x = 22.0
+	w1 = 94.0
+	w2 = 43.0
+
+	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+	lib.RectFillColor(pdf, "记录时间", 10, x, y, w1, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w1
+	lib.RectFillColor(pdf, "温度℃", 10, x, y, w2, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+	x += w2
+	// 数据展示--------------------------------
+
+	y = 240
+
+	err = pdf.SetFont("wts", "", 8)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+		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()
+
+		nln++
+		if nln > 4 {
+			nln = 1
+			x = 22.0
+			y += 18
+		}
+
+		// ------------------
+		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)
+		x += w1
+		lib.RectFillColor(pdf, T_t, 10, x, y, w2, 18, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
+		x += w2
+
+	}
+
+	err = pdf.SetFont("wts", "", 10)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
+		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.ServeJSON()
+		return
+	}
+
+	// 上传 OSS
+	url, is := NatsServer.Qiniu_UploadFile(lib.GetCurrentDirectory()+"/"+timeStr, timeStr)
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
+		c.ServeJSON()
+		return
+	}
+	//删除目录
+	err = os.Remove(timeStr)
+	if err != nil {
+		fmt.Println(err)
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: url}
+	c.ServeJSON()
+	return
+
+}

+ 125 - 6
controllers/Logs.go

@@ -20,15 +20,13 @@ func (c *LogsController) List() {
 		page = 1
 	}
 
-
 	Class_1 := c.GetString("Class_1")
 
 	c.Data["Class_1"] = Class_1
 	c.Data["Class_List"] = System.Read_Logs_Class()
 
-
 	var cnt int64
-	c.Data["List"],cnt = System.Read_Logs_ALL(page,  Class_1)
+	c.Data["List"], cnt = System.Read_Logs_ALL(page, Class_1)
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
 	c.Data["Page"] = page
 	c.Data["Page_size"] = page_size
@@ -37,6 +35,7 @@ func (c *LogsController) List() {
 
 	c.TplName = "System/Logs.html"
 }
+
 // 列表 -
 func (c *LogsController) UserLogs() {
 	page, _ := c.GetInt("page")
@@ -45,15 +44,13 @@ func (c *LogsController) UserLogs() {
 		page = 1
 	}
 
-
 	Class_1 := c.GetString("Class_1")
 
 	c.Data["Class_1"] = Class_1
 	c.Data["Class_List"] = System.Read_UserLogs_Class()
 
-
 	var cnt int64
-	c.Data["List"],cnt = System.Read_UserLogs_ALL(page,  Class_1)
+	c.Data["List"], cnt = System.Read_UserLogs_ALL(page, Class_1)
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
 	c.Data["Page"] = page
 	c.Data["Page_size"] = page_size
@@ -62,3 +59,125 @@ func (c *LogsController) UserLogs() {
 
 	c.TplName = "User/UserLogs.html"
 }
+
+// 列表 -
+func (c *LogsController) V2_UserLogsClass() {
+	// 验证登录
+	b_, _ := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: System.Read_UserLogs_Class()}
+	c.ServeJSON()
+	return
+}
+
+// 列表 -
+func (c *LogsController) V2_UserLogs() {
+	// 验证登录
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []System.UserLogs
+		Num       int64
+		Page      int
+		Page_size int
+	}
+
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	println(page)
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	Class_1 := c.GetString("T_class")
+
+	r_jsons.Data, r_jsons.Num = System.Read_V2_UserLogs_ALL(admin_r.Admin_uuid, Class_1, page, page_z)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
+// 列表 -
+func (c *LogsController) LogsClass() {
+	// 验证登录
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_power > 6 {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: System.Read_Logs_Class()}
+	c.ServeJSON()
+	return
+}
+
+// 列表 -
+func (c *LogsController) LogsList() {
+	// 验证登录
+	b_, admin_r := lib.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
+	if !b_ {
+		c.Data["json"] = lib.JSONS{Code: 201, Msg: "User_tokey Err!"}
+		c.ServeJSON()
+		return
+	}
+	if admin_r.Admin_power > 6 {
+		c.Data["json"] = lib.JSONS{Code: 205, Msg: "没有权限!"}
+		c.ServeJSON()
+		return
+	}
+
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []System.Logs
+		Num       int64
+		Page      int
+		Page_size int
+	}
+
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	println(page)
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+
+	Class_1 := c.GetString("T_class")
+
+	r_jsons.Data, r_jsons.Num = System.Read_V2_Logs_ALL(Class_1, page, page_z)
+	r_jsons.Page = page
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+
+}

+ 9 - 8
controllers/User.go

@@ -293,17 +293,16 @@ func (c *UserController) V2_User_Entry() {
 		}
 
 		User_tokey := Admin.Add_Tokey_Set(admin_r_a.Admin_uuid)
-		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)
 
+		System.Add_UserLogs(admin_r.Admin_uuid, "用户管理", "无钥匙进入", Admin_uuid)
+		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: User_tokey}
+		c.ServeJSON()
+		return
 	} else {
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "e!"}
 		c.ServeJSON()
 		return
 	}
-	System.Add_UserLogs(admin_r.Admin_uuid, "用户管理", "无钥匙进入", Admin_uuid)
-	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-	c.ServeJSON()
-	return
 
 }
 
@@ -848,7 +847,7 @@ func (c *UserController) User_v2_AEdit() {
 		r_u.Admin_text = Admin_text
 	}
 
-	is := Admin.Update_Admin(admin_r, "Admin_user", "Admin_name", "Admin_pass", "Admin_telephone", "Admin_mail", "Admin_text", "Admin_power")
+	is := Admin.Update_Admin(r_u, "Admin_user", "Admin_name", "Admin_pass", "Admin_telephone", "Admin_mail", "Admin_text", "Admin_power")
 	if !is {
 		c.Data["json"] = lib.JSONS{Code: 204, Msg: "修改失败!"}
 		c.ServeJSON()
@@ -973,7 +972,7 @@ func (c *UserController) Power_html() {
 	c.Data["Name"] = Name
 
 	var cnt int64
-	c.Data["List"], cnt = Admin.Read_Power_List_ALL(page, Name)
+	c.Data["List"], cnt = Admin.Read_Power_List_ALL(Name, page, 9999)
 	fmt.Println("cnt:", cnt)
 	page_size := math.Ceil(float64(cnt) / float64(conf.Page_size))
 	c.Data["Page"] = page
@@ -1025,7 +1024,7 @@ func (c *UserController) Power_List() {
 
 	Name := c.GetString("T_name")
 
-	r_jsons.Data, r_jsons.Num = Admin.Read_Power_List_ALL(page, Name)
+	r_jsons.Data, r_jsons.Num = Admin.Read_Power_List_ALL(Name, page, page_z)
 	r_jsons.Page = page
 	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
 
@@ -1303,6 +1302,7 @@ func (c *UserController) Power_v2_Edit() {
 	Power_name := c.GetString("Power_name")
 	Power_Administration, _ := c.GetInt("Power_Administration")
 	Power_User_r, _ := c.GetInt("Power_User_r")
+	Power_User_e, _ := c.GetInt("Power_User_e")
 	Power_User_entry, _ := c.GetInt("Power_User_entry")
 	Power_Device_r, _ := c.GetInt("Power_Device_r")
 	Power_Device_a, _ := c.GetInt("Power_Device_a")
@@ -1319,6 +1319,7 @@ func (c *UserController) Power_v2_Edit() {
 		Power_name:                      Power_name,
 		Power_Administration:            Power_Administration,
 		Power_User_r:                    Power_User_r,
+		Power_User_e:                    Power_User_e,
 		Power_User_entry:                Power_User_entry,
 		Power_Device_r:                  Power_Device_r,
 		Power_Device_a:                  Power_Device_a,

+ 1 - 1
lastupdate.tmp

@@ -1 +1 @@
-{"C:\\BZD\\Cold\\Cold_Api\\controllers":1668390880628656800}
+{"C:\\BZD\\Cold\\Cold_Api\\controllers":1668583856553654400}

+ 1 - 1
models/Admin/Admin.go

@@ -253,7 +253,7 @@ func Read_Admin_ByAdmin_uuid(Admin_uuid string) (e error, r Admin) {
 
 	o := orm.NewOrm()
 	qs := o.QueryTable(new(Admin))
-	e = qs.Filter("Admin_uuid", Admin_uuid, "T_State", 1).One(&r)
+	e = qs.Filter("Admin_uuid", Admin_uuid).Filter("T_State", 1).One(&r)
 	return e, r
 }
 

+ 4 - 4
models/Admin/AdminPower.go

@@ -107,7 +107,7 @@ func Update_AdminPower_ById_Basics(m AdminPower) (err error) {
 	if err = o.Read(&v); err == nil {
 		var num int64
 		m.Id = v.Id
-		if num, err = o.Update(&m, "Power_name", "Power_Administration", "Power_User_r", "Power_User_entry", "Power_Device_r", "Power_Device_a", "Power_Device_Parameter_e", "Power_DeviceSensor_Class", "Power_DeviceSensor_Parameter_e", "Power_DeviceSensor_Compensate_e", "Power_Device_Bind_e", "Power_DataScreen_r", "Logs_Sys_r", "Logs_User_r"); err == nil {
+		if num, err = o.Update(&m, "Power_name", "Power_Administration", "Power_User_r", "Power_User_e", "Power_User_entry", "Power_Device_r", "Power_Device_a", "Power_Device_Parameter_e", "Power_DeviceSensor_Class", "Power_DeviceSensor_Parameter_e", "Power_DeviceSensor_Compensate_e", "Power_Device_Bind_e", "Power_DataScreen_r", "Logs_Sys_r", "Logs_User_r"); err == nil {
 			fmt.Println("Number of records updated in database:", num)
 		}
 		Redis_AdminPower_Set(m)
@@ -158,7 +158,7 @@ func Read_Power_List_ALL_Power_Administration(Power_Administration int) (maps []
 }
 
 // 获取列表
-func Read_Power_List_ALL(page int, Power_name string) (maps []AdminPower, cnt int64) {
+func Read_Power_List_ALL(Power_name string, page int, page_z int) (maps []AdminPower, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -168,10 +168,10 @@ func Read_Power_List_ALL(page int, Power_name string) (maps []AdminPower, cnt in
 	if page <= 1 {
 		offset = 0
 	} else {
-		offset = int64((page - 1) * conf.Page_size)
+		offset = int64((page - 1) * page_z)
 	}
 
-	qs.Limit(conf.Page_size, offset).Filter("Power_name__icontains", Power_name).Filter("T_State", 1).OrderBy("Id").All(&maps)
+	qs.Limit(page_z, offset).Filter("Power_name__icontains", Power_name).Filter("T_State", 1).OrderBy("Id").All(&maps)
 	cnt, _ = qs.Filter("Power_name__icontains", Power_name).Filter("T_State", 1).Count()
 
 	return maps, cnt

+ 39 - 0
models/Device/DeviceData.go

@@ -367,6 +367,45 @@ func Read_DeviceSensorData_By_T_snid_List(T_snid string, Time_start_ string, Tim
 	return maps[offset:offset_z], maps_num
 }
 
+func Read_V2_DeviceSensorData_By_T_snid_List(T_snid string, Time_start_ string, Time_end_ string, page int, page_z int) ([]DeviceData_, int64) {
+	T_snid_list := strings.Split(T_snid, "|")
+	var maps []DeviceData_
+	var maps_num int64
+	var offset, offset_z int
+	for _, v := range T_snid_list {
+		sn_id := strings.Split(v, ",")
+
+		if len(sn_id) == 2 {
+			r_maps, r_maps_num := Read_DeviceSensorData_ById_List(sn_id[0], lib.To_int(sn_id[1]), Time_start_, Time_end_, 0, 9999)
+			for i, _ := range r_maps {
+				r_maps[i].T_sn = sn_id[0]
+			}
+			maps = append(maps, r_maps...)
+			maps_num = maps_num + int64(r_maps_num)
+
+			fmt.Println("加载数据:", sn_id[0], sn_id[1], r_maps_num)
+		}
+	}
+	if page <= 1 {
+		offset = 0
+	} else {
+		page -= 1
+		offset = page * page_z
+	}
+
+	offset_z = offset + page_z
+	if maps_num < int64(offset_z) {
+		offset_z = int(maps_num)
+	}
+
+	if page_z == 9999 {
+		fmt.Println("总数据:", maps_num, " 导出")
+		return maps, maps_num
+	}
+	fmt.Println("总数据:", maps_num, " 截取", offset, offset+page_z)
+	return maps[offset:offset_z], maps_num
+}
+
 //
 func Read_DeviceData_ById_Year_List(SN string) []orm2.ParamsList {
 	o := orm.NewOrm()

+ 27 - 0
models/Function/GoodsOrder.go

@@ -32,6 +32,19 @@ type GoodsOrder struct {
 	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
 }
+type GoodsOrderR struct {
+	T_id         string    // ID
+	T_orderid    string    // 订单号
+	T_outorderid string    // 出库订单号
+	T_sn         string    // 设备sn
+	T_receiving  string    // 收货单位
+	T_start_Ut   time.Time // 起运时间
+	T_start_Ut_T float32   // 起运温度
+	T_end_Ut     time.Time // 到达时间
+	T_end_Ut_T   float32   // 到达时间
+	T_text       string    // 详情
+
+}
 
 func (t *GoodsOrder) TableName() string {
 	return "GoodsOrder" // 数据库名称   // ************** 替换 FormulaList **************
@@ -43,6 +56,20 @@ func init() {
 
 }
 
+func GoodsOrderToGoodsOrderR(t GoodsOrder) (r GoodsOrderR) {
+	r.T_id = r.T_id
+	r.T_orderid = r.T_orderid
+	r.T_outorderid = r.T_outorderid
+	r.T_sn = r.T_sn
+	r.T_receiving = r.T_receiving
+	r.T_start_Ut = r.T_start_Ut
+	r.T_start_Ut_T = r.T_start_Ut_T
+	r.T_end_Ut = r.T_end_Ut
+	r.T_end_Ut_T = r.T_end_Ut_T
+	r.T_text = r.T_text
+	return
+}
+
 // ---------------- 特殊方法 -------------------
 // 获取 ById
 func Read_GoodsOrder_ById(id int) (r GoodsOrder) {

+ 30 - 12
models/System/Logs.go

@@ -10,12 +10,12 @@ import (
 
 type Logs struct {
 	Id         int    `orm:"column(ID);size(11);auto;pk"`
-	Logs_class string `orm:"size(256);null"` //
-	Logs_Title string `orm:"size(256);null"` // 标题
-	Logs_Txt string `orm:"type(text);null"` // 详情
+	Logs_class string `orm:"size(256);null"`  //
+	Logs_Title string `orm:"size(256);null"`  // 标题
+	Logs_Txt   string `orm:"type(text);null"` // 详情
 
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`     //auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now_add 第一次保存时才设置时间
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 
 func (t *Logs) TableName() string {
@@ -29,15 +29,14 @@ func init() {
 }
 
 // 添加  System.Add_Logs("MqttServer","参数请求 [Rt_Parameter]","base")
-func Add_Logs(Logs_class string,Logs_Title string,Logs_Txt string) {
+func Add_Logs(Logs_class string, Logs_Title string, Logs_Txt string) {
 	o := orm.NewOrm()
-	m := Logs{Logs_class:Logs_class,Logs_Title:Logs_Title,Logs_Txt:Logs_Txt}
+	m := Logs{Logs_class: Logs_class, Logs_Title: Logs_Title, Logs_Txt: Logs_Txt}
 	o.Insert(&m)
 }
 
-
 // 获取列表
-func Read_Logs_ALL(page int,Logs_class string) (r []Logs,cnt int64) {
+func Read_Logs_ALL(page int, Logs_class string) (r []Logs, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -53,11 +52,32 @@ func Read_Logs_ALL(page int,Logs_class string) (r []Logs,cnt int64) {
 	qs.Limit(conf.Page_size, offset).Filter("Logs_class__icontains", Logs_class).OrderBy("-Id").All(&r)
 	cnt, _ = qs.Filter("Logs_class__icontains", Logs_class).Count()
 
-	return r,cnt
+	return r, cnt
 }
+
+// 获取列表
+func Read_V2_Logs_ALL(Logs_class string, page int, page_z int) (r []Logs, cnt int64) {
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Logs))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	qs.Limit(page_z, offset).Filter("Logs_class", Logs_class).OrderBy("-Id").All(&r)
+	cnt, _ = qs.Filter("Logs_class", Logs_class).Count()
+
+	return r, cnt
+}
+
 type CLASS_lists struct {
 	Logs_class string
 }
+
 // 获取列表
 func Read_Logs_Class() (lists orm2.ParamsList) {
 	o := orm.NewOrm()
@@ -68,7 +88,5 @@ func Read_Logs_Class() (lists orm2.ParamsList) {
 	}
 	fmt.Println(len(pl_lists))
 
-
 	return pl_lists
 }
-

+ 33 - 16
models/System/UserLogs.go

@@ -11,13 +11,13 @@ import (
 
 type UserLogs struct {
 	Id         int    `orm:"column(ID);size(11);auto;pk"`
-	Logs_uuid string `orm:"size(256);null"` //
-	Logs_class string `orm:"size(256);null"` //
-	Logs_Title string `orm:"size(256);null"` // 标题
-	Logs_Txt string `orm:"type(text);null"` // 详情
+	Logs_uuid  string `orm:"size(256);null"`  //
+	Logs_class string `orm:"size(256);null"`  //
+	Logs_Title string `orm:"size(256);null"`  // 标题
+	Logs_Txt   string `orm:"type(text);null"` // 详情
 
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"`     //auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now_add 第一次保存时才设置时间
+	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now_add 第一次保存时才设置时间
 }
 
 func (t *UserLogs) TableName() string {
@@ -31,24 +31,23 @@ func init() {
 }
 
 // 添加  System.Add_UserLogs("MqttServer","参数请求 [Rt_Parameter]","base")
-func Add_UserLogs(Logs_uuid string,Logs_class string,Logs_Title string,Logs_Txt string) {
+func Add_UserLogs(Logs_uuid string, Logs_class string, Logs_Title string, Logs_Txt string) {
 	o := orm.NewOrm()
-	m := UserLogs{Logs_uuid:Logs_uuid,Logs_class:Logs_class,Logs_Title:Logs_Title,Logs_Txt:Logs_Txt}
+	m := UserLogs{Logs_uuid: Logs_uuid, Logs_class: Logs_class, Logs_Title: Logs_Title, Logs_Txt: Logs_Txt}
 	o.Insert(&m)
 }
-func Add_UserLogs_T(Logs_uuid string,Logs_class string,Logs_Title string,Logs_Txt_T interface{}) {
+func Add_UserLogs_T(Logs_uuid string, Logs_class string, Logs_Title string, Logs_Txt_T interface{}) {
 	o := orm.NewOrm()
 	jsonStu, err := json.Marshal(Logs_Txt_T)
 	if err != nil {
-		fmt.Println("Add_UserLogs_T JSON ,err=",err)
+		fmt.Println("Add_UserLogs_T JSON ,err=", err)
 	}
-	m := UserLogs{Logs_uuid:Logs_uuid,Logs_class:Logs_class,Logs_Title:Logs_Title,Logs_Txt:string(jsonStu)}
+	m := UserLogs{Logs_uuid: Logs_uuid, Logs_class: Logs_class, Logs_Title: Logs_Title, Logs_Txt: string(jsonStu)}
 	o.Insert(&m)
 }
 
-
 // 获取列表
-func Read_UserLogs_ALL(page int,Logs_class string) (r []UserLogs,cnt int64) {
+func Read_UserLogs_ALL(page int, Logs_class string) (r []UserLogs, cnt int64) {
 
 	o := orm.NewOrm()
 	// 也可以直接使用 Model 结构体作为表名
@@ -64,7 +63,27 @@ func Read_UserLogs_ALL(page int,Logs_class string) (r []UserLogs,cnt int64) {
 	qs.Limit(conf.Page_size, offset).Filter("Logs_class__icontains", Logs_class).OrderBy("-Id").All(&r)
 	cnt, _ = qs.Filter("Logs_class__icontains", Logs_class).Count()
 
-	return r,cnt
+	return r, cnt
+}
+
+// 获取列表
+func Read_V2_UserLogs_ALL(Logs_uuid string, Logs_class string, page int, page_z int) (r []UserLogs, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(UserLogs))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	qs.Limit(page_z, offset).Filter("Logs_uuid", Logs_uuid).Filter("Logs_class", Logs_class).OrderBy("-Id").All(&r)
+	cnt, _ = qs.Filter("Logs_uuid", Logs_uuid).Filter("Logs_class", Logs_class).Count()
+
+	return r, cnt
 }
 
 // 获取列表
@@ -77,7 +96,5 @@ func Read_UserLogs_Class() (lists orm2.ParamsList) {
 	}
 	fmt.Println(len(pl_lists))
 
-
 	return pl_lists
 }
-

+ 24 - 1
routers/v3.go

@@ -24,6 +24,9 @@ func init() {
 	beego.Router(version+"/User/AEdit", &controllers.UserController{}, "*:User_v2_AEdit") //
 	beego.Router(version+"/User/ADel", &controllers.UserController{}, "*:V2_User_Del")    //
 	beego.Router(version+"/User/Entry", &controllers.UserController{}, "*:V2_User_Entry") // 获取未读消息
+	// 用户日志
+	beego.Router(version+"/User/LogsClass", &controllers.LogsController{}, "*:V2_UserLogsClass") // 获取未读消息
+	beego.Router(version+"/User/LogsList", &controllers.LogsController{}, "*:V2_UserLogs")       // 获取未读消息
 
 	// 权限
 	beego.Router(version+"/Power/List", &controllers.UserController{}, "*:Power_List")    //
@@ -63,9 +66,12 @@ func init() {
 	beego.Router(version+"/Class/Add", &controllers.DeviceController{}, "*:V2_Class_Add")   // 获取未读消息
 	beego.Router(version+"/Class/Edit", &controllers.DeviceController{}, "*:V2_Class_Edit") // 获取未读消息
 	beego.Router(version+"/Class/Del", &controllers.DeviceController{}, "*:V2_Class_Del")   // 获取未读消息
-
+	// 绑定
 	beego.Router(version+"/Class/Bind_Del", &controllers.DeviceController{}, "*:V2_ClassBind_Del") // 获取未读消息
 	beego.Router(version+"/Class/Bind_Add", &controllers.DeviceController{}, "*:V2_ClassBind_Add") // 获取未读消息
+	//二维码
+	beego.Router("/Device/Get_DeviceClassId_QRCode", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode")   // 获取未读消息
+	beego.Router("/Device/Get_DeviceClassId_QRCode2", &controllers.DeviceController{}, "*:Get_DeviceClassId_QRCode2") // 获取未读消息
 
 	// 设备报警
 	beego.Router(version+"/DeviceWarning/List", &controllers.DeviceController{}, "*:V2_DeviceWarning_List")          // 获取未读消息
@@ -74,4 +80,21 @@ func init() {
 	beego.Router(version+"/DeviceWarning/Del", &controllers.DeviceController{}, "*:V2_DeviceWarning_Del")            // 获取未读消息
 	beego.Router(version+"/DeviceWarning/ToExcel", &controllers.DeviceController{}, "*:V2_DeviceWarning_Data_Excel") // 获取未读消息
 
+	// 数据展示
+	beego.Router(version+"/Data/List", &controllers.DataController{}, "*:V2_Device_Sensor_Data_More") // 获取未读消息
+	beego.Router(version+"/Data/Excel", &controllers.DataController{}, "*:Device_Sensor_Data_Excel")  // 获取未读消息
+	beego.Router(version+"/Data/PDF", &controllers.DataController{}, "*:Device_Sensor_Data_PDF")      // 获取未读消息
+
+	// 订单管理
+	beego.Router(version+"/GoodsOrder/List", &controllers.GoodsOrderController{}, "*:GoodsOrder_List") // 获取未读消息
+	beego.Router(version+"/GoodsOrder/Get", &controllers.GoodsOrderController{}, "*:GoodsOrder_Get")   // 获取未读消息
+	beego.Router(version+"/GoodsOrder/Add", &controllers.GoodsOrderController{}, "*:GoodsOrder_Add")   // 获取未读消息
+	beego.Router(version+"/GoodsOrder/Edit", &controllers.GoodsOrderController{}, "*:GoodsOrder_Edit") // 获取未读消息
+	beego.Router(version+"/GoodsOrder/Del", &controllers.GoodsOrderController{}, "*:GoodsOrder_Del")   // 获取未读消息
+	beego.Router(version+"/GoodsOrder/PDF", &controllers.GoodsOrderController{}, "*:GoodsOrder_PDF")   // 获取未读消息
+
+	// 系统日志
+	beego.Router("/System/LogsClass", &controllers.LogsController{}, "*:LogsClass") // 获取未读消息
+	beego.Router("/System/LogsList", &controllers.LogsController{}, "*:LogsList")   // 获取未读消息
+
 }

+ 1 - 1
server.pid

@@ -1 +1 @@
-19576
+20148