123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875 |
- package controllers
- import (
- "ColdVerify_server/Nats"
- "ColdVerify_server/conf"
- "ColdVerify_server/lib"
- "ColdVerify_server/logs"
- "ColdVerify_server/models/Account"
- "ColdVerify_server/models/Device"
- "ColdVerify_server/models/System"
- "ColdVerify_server/models/Task"
- "fmt"
- beego "github.com/beego/beego/v2/server/web"
- "github.com/signintech/gopdf"
- "github.com/vmihailenco/msgpack/v5"
- "github.com/xuri/excelize/v2"
- "math"
- "os"
- "strconv"
- "strings"
- "time"
- )
- type TaskDataController struct {
- beego.Controller
- }
- // 获取-
- func (c *TaskDataController) Extract_TaskData() {
- // 验证登录 User_is, User_r
- user_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- Time_start := c.GetString("Time_start")
- Time_end := c.GetString("Time_end")
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- DeviceClass_List := Device.Read_DeviceClassList_List_id(Task_r.T_class)
- if len(DeviceClass_List) == 0 {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_Class_id 分类设备列表 为空!"}
- c.ServeJSON()
- return
- }
- logs.Println("----导入 :", DeviceClass_List)
- // 清空表
- Task.Truncate_TaskData(Task_r.T_task_id)
- // 插入 数据
- for _, v := range DeviceClass_List {
- logs.Println("---- :", v.T_sn, Task_r.T_task_id, Time_start, Time_end)
- Task.Import_TaskData(v.T_sn, v.T_id, Task_r.T_task_id, Time_start, Time_end)
- }
- // 提取数据后 将 当前任务 数据采集 标志 为 1
- Task_r.T_collection_state = 1
- if !Task.Update_Task(Task_r, "T_collection_state") {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
- c.ServeJSON()
- return
- }
- System.Add_UserLogs_T(user_r.T_uuid, "任务", "修改", Task_r)
- System.Add_UserLogs(user_r.T_uuid, "提取数据", "提取数据"+Task_r.T_name, Task_r.T_task_id+"|"+Time_start+"|"+Time_end)
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
- c.ServeJSON()
- return
- }
- // 后台导出数据
- func (c *TaskDataController) Extract_TaskData_Back() {
- // 验证登录 User_is, User_r
- user_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- Time_start := c.GetString("Time_start")
- Time_end := c.GetString("Time_end")
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- // 采集中
- if Task_r.T_collection_state == 2 {
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
- c.ServeJSON()
- return
- }
- DeviceClass_List := Device.Read_DeviceClassList_List_id(Task_r.T_class)
- if len(DeviceClass_List) == 0 {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "设备列表为空,请先添加设备!"}
- c.ServeJSON()
- return
- }
- // 更新状态为采集中
- Task_r.T_collection_state = 2
- if !Task.Update_Task(Task_r, "T_collection_state") {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "导出数据失败!"}
- c.ServeJSON()
- return
- }
- data := Nats.Extract_TaskData_Back{
- T_uuid: user_r.T_uuid,
- Time_start: Time_start,
- Time_end: Time_end,
- DeviceClassList: DeviceClass_List,
- Task: Task_r,
- }
- // 后台执行打包数据
- b, _ := msgpack.Marshal(&data)
- _ = lib.Nats.Publish("ColdVerify_Server_Extract_TaskData_Back", b)
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
- c.ServeJSON()
- return
- }
- // 列表 -
- func (c *TaskDataController) TaskData_List() {
- // 验证登录 User_is, User_r
- _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- var r_jsons lib.R_JSONS
- page, _ := c.GetInt("page")
- if page < 1 {
- page = 1
- }
- page_z, _ := c.GetInt("page_z")
- if page_z < 1 {
- page_z = conf.Page_size
- }
- Time_start := c.GetString("Time_start")
- Time_end := c.GetString("Time_end")
- T_sn := c.GetString("T_sn")
- T_id, err := c.GetInt("T_id")
- if err != nil {
- T_id = -1
- }
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- if Task_r.T_delivery_state == 2 {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
- c.ServeJSON()
- return
- }
- // 查询设备列表
- dcList, _ := Device.Read_DeviceClassList_OrderList(Task_r.T_class, T_sn, "", page, 9999)
- // 保存布局编号和校准证书对应关系
- var deviceCertificateMap = make(map[string]string) // t_id, T_Certificate_sn
- for _, v := range dcList {
- deviceCertificateMap[v.T_id] = v.T_Certificate_sn
- }
- var cnt int64
- List, cnt := Task.Read_TaskData_ById_List(Task_r.T_task_id, T_sn, T_id, Time_start, Time_end, page, page_z)
- for i := 0; i < len(List); i++ {
- List[i].T_Certificate_sn = deviceCertificateMap[List[i].T_id]
- }
- page_size := math.Ceil(float64(cnt) / float64(page_z))
- r_jsons.List = List
- r_jsons.Page = page
- r_jsons.Page_size = int(page_size)
- r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
- r_jsons.Num = int(cnt)
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
- c.ServeJSON()
- return
- }
- // 列表 -
- func (c *TaskDataController) UserTaskData_List() {
- // 验证登录 User_is, User_r
- User_r, User_is := Account.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- var r_jsons lib.R_JSONS
- page, _ := c.GetInt("page")
- if page < 1 {
- page = 1
- }
- page_z, _ := c.GetInt("page_z")
- if page_z < 1 {
- page_z = conf.Page_size
- }
- Time_start := c.GetString("Time_start")
- Time_end := c.GetString("Time_end")
- T_sn := c.GetString("T_sn")
- T_id, err := c.GetInt("T_id")
- if err != nil {
- T_id = -1
- }
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- if Task_r.T_delivery_state == 2 {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
- c.ServeJSON()
- return
- }
- if Task_r.T_uuid != User_r.T_uuid {
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "无权访问!"}
- c.ServeJSON()
- return
- }
- // 查询设备列表
- dcList, _ := Device.Read_DeviceClassList_OrderList(Task_r.T_class, T_sn, "", page, 9999)
- // 保存布局编号和校准证书对应关系
- var deviceCertificateMap = make(map[string]string) // t_id, T_Certificate_sn
- for _, v := range dcList {
- deviceCertificateMap[v.T_id] = v.T_Certificate_sn
- }
- var cnt int64
- List, cnt := Task.Read_TaskData_ById_List(Task_r.T_task_id, T_sn, T_id, Time_start, Time_end, page, page_z)
- for i := 0; i < len(List); i++ {
- List[i].T_Certificate_sn = deviceCertificateMap[List[i].T_id]
- }
- page_size := math.Ceil(float64(cnt) / float64(page_z))
- r_jsons.List = List
- r_jsons.Page = page
- r_jsons.Page_size = int(page_size)
- r_jsons.Pages = lib.Func_page(int64(page), int64(page_size))
- r_jsons.Num = int(cnt)
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
- c.ServeJSON()
- return
- }
- // 列表 -
- func (c *TaskDataController) TaskDataClass_List() {
- // 验证登录 User_is, User_r
- _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- if Task_r.T_delivery_state == 2 {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "数据采集中,请稍后!"}
- c.ServeJSON()
- return
- }
- List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: List}
- c.ServeJSON()
- return
- }
- // 添加-
- func (c *TaskDataController) TaskData_AddS() {
- // 验证登录 User_is, User_r
- user_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- //T_sn|T_id|T_t|T_rh|T_time?
- T_Data := c.GetString("T_Data")
- if len(T_Data) < 5 {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "err T_Data!"}
- c.ServeJSON()
- return
- }
- T_Data_list := strings.Split(T_Data, "?")
- println(len(T_Data_list), "len(T_Data_list)")
- var T_Data_list_x = 0
- for _, v := range T_Data_list {
- // 2022-08-09 14:25:00|27.7|55.2
- if len(v) < 5 {
- println(v, "len(v) < 5")
- continue
- }
- v_list := strings.Split(v, "|")
- is = Task.Add_TaskData(Task_r.T_task_id, v_list[0], v_list[1], v_list[2], v_list[3], v_list[4])
- if is {
- T_Data_list_x += 1
- }
- }
- System.Add_UserLogs(user_r.T_uuid, "任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"结果:"+string(len(T_Data_list))+"/"+string(T_Data_list_x)+"|=> "+T_Data)
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: strconv.Itoa(T_Data_list_x)}
- c.ServeJSON()
- return
- }
- // 添加-
- func (c *TaskDataController) TaskData_Add() {
- // 验证登录 User_is, User_r
- user_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- T_sn := c.GetString("T_sn")
- T_id, _ := c.GetInt("T_id")
- T_t, _ := c.GetFloat("T_t")
- T_rh, _ := c.GetFloat("T_rh")
- T_time := c.GetString("T_time")
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- is = Task.Add_TaskData(Task_r.T_task_id, T_sn, strconv.Itoa(T_id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
- c.ServeJSON()
- return
- }
- System.Add_UserLogs(user_r.T_uuid, "任务数据", "添加数据"+Task_r.T_name, Task_r.T_task_id+"|"+T_sn+"|"+strconv.Itoa(T_id)+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
- c.ServeJSON()
- return
- }
- // 修改-
- func (c *TaskDataController) TaskData_Up() {
- // 验证登录 User_is, User_r
- user_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- Id, err := c.GetInt("Id")
- if err != nil {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
- c.ServeJSON()
- return
- }
- T_t, err := c.GetFloat("T_t")
- if err != nil {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_t 错误!"}
- c.ServeJSON()
- return
- }
- T_rh, err := c.GetFloat("T_rh")
- if err != nil {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_rh 错误!"}
- c.ServeJSON()
- return
- }
- T_time := c.GetString("T_time")
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- is = Task.Up_TaskData(Task_r.T_task_id, strconv.Itoa(Id), fmt.Sprintf("%.2f", T_t), fmt.Sprintf("%.2f", T_rh), T_time)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
- c.ServeJSON()
- return
- }
- System.Add_UserLogs(user_r.T_uuid, "任务数据", "修改数据"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id)+"|"+fmt.Sprintf("%.2f", T_t)+"|"+fmt.Sprintf("%.2f", T_rh)+T_time)
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
- c.ServeJSON()
- return
- }
- // 删除-
- func (c *TaskDataController) TaskData_Del() {
- // 验证登录 User_is, User_r
- user_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- Id, err := c.GetInt("Id")
- if err != nil {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
- c.ServeJSON()
- return
- }
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- is = Task.Del_TaskData(Task_r.T_task_id, strconv.Itoa(Id))
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
- c.ServeJSON()
- return
- }
- System.Add_UserLogs(user_r.T_uuid, "任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
- c.ServeJSON()
- return
- }
- // 删除-
- func (c *TaskDataController) TaskData_Del_t_id() {
- // 验证登录 User_is, User_r
- user_r, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- Id, err := c.GetInt("Id")
- if err != nil {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id 错误!"}
- c.ServeJSON()
- return
- }
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- is = Task.Del_TaskData_t_id(Task_r.T_task_id, strconv.Itoa(Id))
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
- c.ServeJSON()
- return
- }
- System.Add_UserLogs(user_r.T_uuid, "任务数据", "删除"+Task_r.T_name, Task_r.T_task_id+"|"+strconv.Itoa(Id))
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
- c.ServeJSON()
- return
- }
- // 列表 - 接口
- func (c *TaskDataController) Export_Data_Excel() {
- // 验证登录 User_is, User_r
- _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- Time_start := c.GetString("Time_start")
- Time_end := c.GetString("Time_end")
- T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
- //T_id, err := c.GetInt("T_id")
- //if err != nil {
- // T_id = -1
- //
- //}
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- T_sn_list := strings.Split(T_sn_str, ",")
- DeviceSensor_data_list := []Task.TaskData_{}
- for _, v := range T_sn_list {
- DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, -1, Time_start, Time_end, 1, 9999)
- DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
- }
- f := excelize.NewFile() // 设置单元格的值
- // 这里设置表头
- f.SetCellValue("Sheet1", "A1", "编号")
- f.SetCellValue("Sheet1", "B1", "SN")
- f.SetCellValue("Sheet1", "C1", "温度℃")
- f.SetCellValue("Sheet1", "D1", "湿度%")
- f.SetCellValue("Sheet1", "E1", "记录时间")
- // 设置列宽
- f.SetColWidth("Sheet1", "A", "A", 7)
- f.SetColWidth("Sheet1", "B", "B", 20)
- f.SetColWidth("Sheet1", "C", "C", 10)
- f.SetColWidth("Sheet1", "D", "D", 10)
- f.SetColWidth("Sheet1", "E", "E", 22)
- line := 1
- // 循环写入数据
- for _, v := range DeviceSensor_data_list {
- line++
- f.SetCellValue("Sheet1", fmt.Sprintf("A%d", line), v.T_id)
- f.SetCellValue("Sheet1", fmt.Sprintf("B%d", line), v.T_sn)
- f.SetCellValue("Sheet1", fmt.Sprintf("C%d", line), strconv.FormatFloat(float64(v.T_t), 'f', 1, 64))
- f.SetCellValue("Sheet1", fmt.Sprintf("D%d", line), strconv.FormatFloat(float64(v.T_rh), 'f', 1, 64))
- f.SetCellValue("Sheet1", fmt.Sprintf("E%d", line), v.T_time)
- }
- fmt.Println("DeviceSensor_data:", len(DeviceSensor_data_list))
- lib.Create_Dir("./ofile")
- timeStr := time.Now().Format("20060102150405")
- // 保存文件
- if err := f.SaveAs("ofile/" + timeStr + ".xlsx"); err != nil {
- logs.Error(lib.FuncName(), err)
- }
- if !lib.Pload_qiniu("ofile/"+timeStr+".xlsx", "ofile/"+timeStr+".xlsx") {
- c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
- c.ServeJSON()
- return
- }
- //删除目录
- //err = os.Remove("ofile/" + timeStr + ".xlsx")
- //if err != nil {
- // logs.Error(lib.FuncName(),err)
- //}
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + "ofile/" + timeStr + ".xlsx"}
- c.ServeJSON()
- return
- }
- // 列表 - 接口
- func (c *TaskDataController) Export_Data_PDF() {
- // 验证登录 User_is, User_r
- _, User_is := Account.Verification(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- Time_start := c.GetString("Time_start")
- Time_end := c.GetString("Time_end")
- T_sn_str := c.GetString("T_sn_list") //865901058809339,865901058815849,865901058818991,865901058810568
- //T_id, err := c.GetInt("T_id")
- //if err != nil {
- // T_id = -1
- //
- //}
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- dcList, _ := Device.Read_DeviceClassList_OrderList(Task_r.T_class, "", "", 0, 9999)
- // 查询设备列表
- // 保存布局编号和校准证书对应关系
- var deviceCertificateMap = make(map[string]string) // t_id, T_Certificate_sn
- for _, v := range dcList {
- deviceCertificateMap[v.T_id] = v.T_Certificate_sn
- }
- T_sn_list := strings.Split(T_sn_str, ",")
- DeviceSensor_data_list := []Task.TaskData_{}
- for _, v := range T_sn_list {
- DeviceSensor_data, _ := Task.Read_TaskData_ById_List(Task_r.T_task_id, v, -1, Time_start, Time_end, 1, 9999)
- DeviceSensor_data_list = append(DeviceSensor_data_list, DeviceSensor_data...)
- for i := 0; i < len(DeviceSensor_data_list); i++ {
- DeviceSensor_data_list[i].T_Certificate_sn = deviceCertificateMap[DeviceSensor_data_list[i].T_id]
- }
- }
- //------
- var err error
- 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(Task_r.T_name)
- pdf.SetX((595 / 2) - (textw / 2))
- pdf.SetY(40)
- pdf.Text(Task_r.T_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", "", 12)
- if err != nil {
- c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
- c.ServeJSON()
- return
- }
- t_ := Time_start + " / " + Time_end
- if len(Time_start) == 0 {
- t_ = "所有数据"
- }
- //fmt.Sprintf(" %.1f ", v.T_t)
- lib.RectFillColor(pdf, "提取数据时间段["+t_+"]", 14, 22, 80, 550, 40, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, "布局编号", 12, 22, 120, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, "证书编号", 12, 92, 120, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, "温度℃", 12, 242, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, "湿度%", 12, 342, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- //lib.RectFillColor(pdf, "温度范围", 12, 272, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- //lib.RectFillColor(pdf, "湿度范围", 12, 362, 120, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, "记录时间", 12, 442, 120, 130, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- var y float64 = 140
- err = pdf.SetFont("wts", "", 10)
- if err != nil {
- c.Data["json"] = lib.JSONS{Code: 207, Msg: "ok!", Data: err}
- c.ServeJSON()
- return
- }
- for _, v := range DeviceSensor_data_list {
- //text := fmt.Sprintf(" %d ", i+1)
- var textH float64 = 25 // if text height is 25px.
- pdf.SetNewY(y, textH)
- y = pdf.GetY()
- //pdf.SetX(x) // must after pdf.SetNewY() called.
- //err = pdf.Text(text)
- //if err != nil {
- // log.Fatalln(err)
- //}
- T_t := fmt.Sprintf(" %.1f ", v.T_t)
- T_rh := fmt.Sprintf(" %.1f ", v.T_rh)
- T_time := fmt.Sprintf("%s", v.T_time)
- lib.RectFillColor(pdf, v.T_id, 10, 22, y, 80, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, v.T_Certificate_sn, 10, 92, y, 150, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, T_t, 10, 242, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, T_rh, 10, 342, y, 100, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- lib.RectFillColor(pdf, T_time, 10, 442, y, 130, 20, 255, 255, 255, lib.AlignCenter, lib.ValignMiddle)
- y += 20
- }
- 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
- }
- if !lib.Pload_qiniu(timeStr, timeStr) {
- c.Data["json"] = lib.JSONS{Code: 203, Msg: "oss!"}
- c.ServeJSON()
- return
- }
- //删除目录
- err = os.Remove(timeStr)
- if err != nil {
- logs.Error(lib.FuncName(), err)
- }
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: "https://bzdcoldverifyoss.baozhida.cn/" + timeStr}
- c.ServeJSON()
- return
- }
- // 列表 - 接口
- func (c *TaskDataController) Check() {
- // 验证登录 User_is, User_r
- _, User_is := Account.Verification_Admin(c.Ctx.GetCookie("User_tokey"), c.GetString("User_tokey"))
- if !User_is {
- c.Data["json"] = lib.JSONS{Code: 201, Msg: "请重新登录!"}
- c.ServeJSON()
- return
- }
- T_task_id := c.GetString("T_task_id")
- Task_r, is := Task.Read_Task(T_task_id)
- if !is {
- c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_task_id 错误!"}
- c.ServeJSON()
- return
- }
- type R_JSONS struct {
- T_sn string // SN
- T_id string // 编号
- T_unm int // 数据量
- T_time_interval int64 // 时间间隔
- Time_start string // 开始
- Time_end string // 结束
- Result int // 200 OK, 201 可以补 , 202 不能补
- Result_str string // 提示内容
- Result_Time_start string // 2022-8-05 21:01
- Result_Time_defect int64 // 缺失时间间隔
- }
- var r_jsons []R_JSONS
- List := Task.Read_TaskData_ById_ClassList(Task_r.T_task_id)
- for _, v := range List {
- var r_json R_JSONS
- r_json.T_sn = v.T_sn
- r_json.Result = 200
- DeviceSensor_data := Task.Read_TaskData_ById_List_(Task_r.T_task_id, v.T_sn)
- r_json.T_unm = len(DeviceSensor_data)
- if r_json.T_unm > 2 {
- r_json.T_id = DeviceSensor_data[0].T_id
- r_json.Time_end = DeviceSensor_data[len(DeviceSensor_data)-1].T_time
- r_json.Time_start = DeviceSensor_data[0].T_time
- formatTime_a, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[0].T_time)
- formatTime_b, _ := time.Parse("2006-1-2 15:04", DeviceSensor_data[1].T_time)
- formatTime_x := formatTime_b.Unix() - formatTime_a.Unix()
- r_json.T_time_interval = formatTime_x
- println("formatTime_x:", v.T_id, v.T_sn, formatTime_x)
- if formatTime_x > 60*30 || formatTime_x < 60 {
- r_json.Result = 202
- r_json.Result_str = "数据异常(数据的第一个时间与第二个时间相差 " + strconv.FormatInt(formatTime_x, 10) + "秒),必须大于60秒,小于30分钟"
- r_jsons = append(r_jsons, r_json)
- continue
- }
- for data_i := 2; data_i < len(DeviceSensor_data); data_i++ {
- formatTime_a = formatTime_b
- formatTime_b, _ = time.Parse("2006-1-2 15:04", DeviceSensor_data[data_i].T_time)
- formatTime_ := formatTime_b.Unix() - formatTime_a.Unix()
- println("formatTime_x-:", formatTime_)
- if formatTime_ < formatTime_x {
- r_json.Result = 202
- r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,间隔小于时间间隔,不能自动补充"
- break
- }
- if formatTime_x != formatTime_ {
- if formatTime_ > 60*30 {
- r_json.Result = 202
- r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒,相差时间大于30分钟,不能自动补充"
- break
- }
- r_json.Result = 201
- r_json.Result_str = "开始时间:" + DeviceSensor_data[data_i-1].T_time + " 离下一条时间间隔:" + strconv.FormatInt(formatTime_, 10) + "秒"
- r_json.Result_Time_start = DeviceSensor_data[data_i-1].T_time
- r_json.Result_Time_defect = formatTime_
- println(r_json.Result_str)
- break
- }
- }
- } else {
- r_json.Result = 202
- r_json.Result_str = "数据量太少 必须大于 2条以上!"
- }
- r_jsons = append(r_jsons, r_json)
- }
- c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
- c.ServeJSON()
- return
- }
|