TaskData.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. package Task
  2. import (
  3. "ColdVerify_local/conf"
  4. "ColdVerify_local/lib"
  5. "ColdVerify_local/logs"
  6. "fmt"
  7. _ "github.com/astaxie/beego/cache/redis"
  8. "github.com/beego/beego/v2/adapter/orm"
  9. orm2 "github.com/beego/beego/v2/client/orm"
  10. _ "github.com/go-sql-driver/mysql"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. // 模板
  16. type TaskData struct {
  17. Id int `orm:"column(ID);size(11);auto;pk"`
  18. T_id string `orm:"size(256);null"` // 标题
  19. T_t float32 `orm:"size(10);null"` // 温度
  20. T_rh float32 `orm:"size(10);null"` // 湿度
  21. T_time time.Time `orm:"type(timestamp);null;"` // 采集时间
  22. 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 保存时都会对时间自动更新
  23. }
  24. func (t *TaskData) TableName() string {
  25. return "task_data" // 数据库名称 // ************** 替换 FormulaList **************
  26. }
  27. func init() {
  28. orm2.Debug = true
  29. }
  30. // 创建数据库 Device.CREATE_TaskData("")
  31. func CREATE_TaskData(alias_name, T_task_id string) bool {
  32. o := orm2.NewOrmUsingDB(alias_name)
  33. sql := "DROP TABLE IF EXISTS `z_task_data_" + T_task_id + "`"
  34. o.Raw(sql).Exec()
  35. sql = "CREATE TABLE IF NOT EXISTS `z_task_data_" + T_task_id + "` ( " +
  36. " `ID` int(11) NOT NULL AUTO_INCREMENT," +
  37. " `t_sn` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL," +
  38. " `t_id` varchar(256) DEFAULT NULL," +
  39. " `t_t` float(6, 1) NULL DEFAULT NULL," +
  40. " `t_rh` float(6, 1) NULL DEFAULT NULL," +
  41. " `t_time` datetime(0) NULL DEFAULT NULL," +
  42. " PRIMARY KEY (`ID`) USING BTREE," +
  43. " KEY `t_sn` (`t_sn`)," +
  44. " KEY `t_id` (`t_id`)," +
  45. " KEY `t_time` (`t_time`)" +
  46. ") ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;"
  47. _, err := o.Raw(sql).Exec()
  48. if err != nil {
  49. return false
  50. }
  51. //sqlIndex := "ALTER TABLE `z_task_data_" + T_task_id + "` add unique index(`t_sn`,`t_id`,`t_time`);"
  52. //logs.Debug(sqlIndex)
  53. //o.Raw(sqlIndex).Exec()
  54. return true
  55. }
  56. // ---------------- 特殊方法 -------------------
  57. // 清空
  58. func Truncate_TaskData(alias_name, T_task_id string) bool {
  59. o := orm2.NewOrmUsingDB(alias_name)
  60. sql := "truncate table z_task_data_" + T_task_id
  61. logs.Println(sql)
  62. _, err := o.Raw(sql).Exec()
  63. if err != nil {
  64. logs.Error(lib.FuncName(), err)
  65. return false
  66. }
  67. return true
  68. }
  69. type TaskData_ struct {
  70. ID int `orm:"column(ID);size(100);null"` // ID
  71. T_sn string `orm:"column(t_sn);size(256);null"` // sn
  72. T_id string `orm:"column(t_id);size(256);null"` // 标题
  73. T_t float32 `orm:"column(t_t);size(10);null"` // 温度
  74. T_rh float32 `orm:"column(t_rh);size(10);null"` // 湿度
  75. T_time string `orm:"column(t_times);null;"` // 采集时间
  76. }
  77. type TaskDataClass_ struct {
  78. T_sn string `orm:"column(t_sn);size(256);null"` // 标题
  79. T_id string `orm:"column(t_id);size(256);null"` // 名称
  80. }
  81. func Read_TaskData_ById_List(T_task_id string, SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int) ([]TaskData_, int64) {
  82. o := orm.NewOrm()
  83. var maps []TaskData_
  84. var maps_z []orm2.ParamsList
  85. pagez := page_z
  86. var offset int
  87. if page <= 1 {
  88. offset = 0
  89. } else {
  90. page -= 1
  91. offset = page * pagez
  92. }
  93. sql_condition := ""
  94. if len(Time_start_) > 1 {
  95. sql_condition += " AND t_time >= '" + Time_start_ + "'"
  96. }
  97. if len(Time_end_) > 1 {
  98. sql_condition += " AND t_time <= '" + Time_end_ + "'"
  99. }
  100. if T_id != -1 {
  101. sql_condition += " AND t_id = '" + strconv.Itoa(T_id) + "'"
  102. }
  103. if len(SN) > 0 {
  104. sql_condition += " AND t_sn = '" + SN + "'"
  105. }
  106. if len(sql_condition) > 0 {
  107. sql_condition = " WHERE " + strings.TrimLeft(sql_condition, " AND ")
  108. }
  109. sql := "SELECT COUNT(ID) FROM z_task_data_" + T_task_id + sql_condition
  110. fmt.Println(sql)
  111. _, err := o.Raw(sql).ValuesList(&maps_z)
  112. if err != nil {
  113. return maps, 0
  114. }
  115. if len(maps_z) == 0 {
  116. return maps, 0
  117. }
  118. //fmt.Println("maps_z;",maps_z[0][0])
  119. sql = "SELECT ID,t_sn,t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_times,t_time FROM z_task_data_" + T_task_id + sql_condition + " ORDER BY t_time DESC"
  120. if page_z != 9999 {
  121. sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(pagez)
  122. }
  123. fmt.Println(sql)
  124. _, err = o.Raw(sql).QueryRows(&maps)
  125. if err != nil {
  126. logs.Error(lib.FuncName(), err)
  127. }
  128. //value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
  129. key, _ := strconv.Atoi(maps_z[0][0].(string))
  130. return maps, int64(key)
  131. }
  132. func Read_TaskData_ById_List_AES(T_task_id string, SN string, T_id int, Time_start_ string, Time_end_ string, page int, page_z int) ([]TaskData_, int64) {
  133. o := orm.NewOrm()
  134. var maps []TaskData_
  135. var maps_z []orm2.ParamsList
  136. pagez := page_z
  137. var offset int
  138. if page <= 1 {
  139. offset = 0
  140. } else {
  141. page -= 1
  142. offset = page * pagez
  143. }
  144. sql_condition := ""
  145. if len(Time_start_) > 1 {
  146. sql_condition += " AND t_time >= '" + Time_start_ + "'"
  147. }
  148. if len(Time_end_) > 1 {
  149. sql_condition += " AND t_time <= '" + Time_end_ + "'"
  150. }
  151. if T_id != -1 {
  152. sql_condition += " AND t_id = '" + strconv.Itoa(T_id) + "'"
  153. }
  154. if len(SN) > 0 {
  155. sql_condition += " AND t_sn = '" + SN + "'"
  156. }
  157. if len(sql_condition) > 0 {
  158. sql_condition = " WHERE " + strings.TrimLeft(sql_condition, " AND ")
  159. }
  160. sql := "SELECT COUNT(ID) FROM z_task_data_" + T_task_id + sql_condition
  161. fmt.Println(sql)
  162. _, err := o.Raw(sql).ValuesList(&maps_z)
  163. if err != nil {
  164. return maps, 0
  165. }
  166. if len(maps_z) == 0 {
  167. return maps, 0
  168. }
  169. //fmt.Println("maps_z;",maps_z[0][0])
  170. sql = "SELECT ID,t_sn,t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_times,t_time FROM z_task_data_" + T_task_id + sql_condition + " ORDER BY t_time"
  171. if page_z != 9999 {
  172. sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(pagez)
  173. }
  174. fmt.Println(sql)
  175. _, err = o.Raw(sql).QueryRows(&maps)
  176. if err != nil {
  177. logs.Error(lib.FuncName(), err)
  178. }
  179. //value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
  180. key, _ := strconv.Atoi(maps_z[0][0].(string))
  181. return maps, int64(key)
  182. }
  183. func Read_TaskData_ById_List_(T_task_id string, SN string) []TaskData_ {
  184. o := orm.NewOrm()
  185. var maps []TaskData_
  186. sql_condition := ""
  187. sql_condition += " t_sn ='" + SN + "'"
  188. //fmt.Println("maps_z;",maps_z[0][0])
  189. sql := "SELECT ID,t_sn,t_id,t_t,t_rh,DATE_FORMAT(t_time,'%Y-%c-%d %H:%i') AS t_times,t_time FROM z_task_data_" + T_task_id + " WHERE " + sql_condition + " ORDER BY t_time "
  190. fmt.Println(sql)
  191. _, err := o.Raw(sql).QueryRows(&maps)
  192. if err != nil {
  193. logs.Error(lib.FuncName(), err)
  194. return maps
  195. }
  196. return maps
  197. }
  198. func Read_TaskData_ById_ClassList(T_task_id string) []TaskDataClass_ {
  199. o := orm.NewOrm()
  200. var maps []TaskDataClass_
  201. //fmt.Println("maps_z;",maps_z[0][0])
  202. //sql := "SELECT DISTINCT t_sn,t_id FROM z_task_data_" + T_task_id + " ORDER BY t_id "
  203. //sql := "SELECT DISTINCT t_sn FROM z_task_data_" + T_task_id + " ORDER BY t_id "
  204. sql := "SELECT t_sn,t_id FROM z_task_data_" + T_task_id + " GROUP BY t_sn ORDER BY t_id+0 "
  205. fmt.Println(sql)
  206. _, err := o.Raw(sql).QueryRows(&maps)
  207. if err != nil {
  208. logs.Error(lib.FuncName(), err)
  209. return maps
  210. }
  211. return maps
  212. }
  213. func Read_TaskData_sn(T_task_id string) []TaskDataClass_ {
  214. o := orm.NewOrm()
  215. var maps []TaskDataClass_
  216. sql := "SELECT DISTINCT t_sn FROM z_task_data_" + T_task_id + " ORDER BY t_sn "
  217. fmt.Println(sql)
  218. _, err := o.Raw(sql).QueryRows(&maps)
  219. if err != nil {
  220. logs.Error(lib.FuncName(), err)
  221. return maps
  222. }
  223. return maps
  224. }
  225. func Update_TaskData_ByT_sn(T_task_id, T_sn, T_id string) error {
  226. o := orm.NewOrm()
  227. // 修改id
  228. sql := "UPDATE z_task_data_" + T_task_id + " SET `t_id` = '" + T_id + "' WHERE `t_sn` = '" + T_sn + "'"
  229. logs.Println(sql)
  230. _, err := o.Raw(sql).Exec()
  231. if err != nil {
  232. logs.Error(lib.FuncName(), err)
  233. return err
  234. }
  235. return nil
  236. }
  237. func Delete_TaskData_ByT_sn(T_task_id, T_sn string) error {
  238. o := orm.NewOrm()
  239. // 修改id
  240. sql := "DELETE FROM z_task_data_" + T_task_id + " WHERE `t_sn` = " + T_sn
  241. logs.Println(sql)
  242. _, err := o.Raw(sql).Exec()
  243. if err != nil {
  244. logs.Error(lib.FuncName(), err)
  245. return err
  246. }
  247. return nil
  248. }
  249. // 添加
  250. func Add_TaskData(T_task_id string, T_sn string, T_id string, T_t string, T_rh string, T_time string) bool {
  251. o := orm.NewOrm()
  252. // 开始插入数据
  253. //
  254. //sql := "INSERT INTO z_task_data_" + T_task_id + " (`t_sn`, `t_id`, `t_time`) " +
  255. // "VALUES ('" + T_sn + "', " + T_id + ", '" + T_time + "') " +
  256. // "ON DUPLICATE KEY UPDATE t_t=" + T_t + ", t_rh="+ T_rh +";"
  257. // 去重复数据
  258. //sql := "DELETE FROM z_task_data_" + T_task_id + " WHERE " + " t_id = " + T_id + " AND "+ " t_sn = '"+T_sn+"' " + "AND t_time = '" + T_time + "' "
  259. //
  260. //// 这里有时间优化 用于一次 prepare 多次 exec,以提高批量执行的速度
  261. //fmt.Println(sql)
  262. //res, err := o.Raw(sql).Exec()
  263. //if err != nil {
  264. // fmt.Println(err)
  265. // return false
  266. //}
  267. //res.RowsAffected()
  268. sql := "INSERT INTO z_task_data_" + T_task_id + " (`t_sn`, `t_id`, `t_t`, `t_rh`, `t_time`) " +
  269. "VALUES ('" + T_sn + "', " + T_id + ", " + T_t + "," + T_rh + ", '" + T_time + "')"
  270. // 更新数据
  271. //sql := "INSERT INTO z_task_data_" + T_task_id + " (`t_sn`, `t_id`, `t_t`, `t_rh`, `t_time`) " +
  272. // "VALUES ('" + T_sn + "', " + T_id + ", " + T_t + "," + T_rh + ", '" + T_time + "')" +
  273. // "on duplicate key update `t_t`=" + T_t + ",`t_rh`=" + T_rh
  274. fmt.Println(sql)
  275. res, err := o.Raw(sql).Exec()
  276. if err != nil {
  277. logs.Error(lib.FuncName(), err)
  278. return false
  279. }
  280. res.RowsAffected()
  281. //fmt.Println("mysql row affected nums: ", num)
  282. return true
  283. }
  284. // 修改
  285. func Up_TaskData(T_task_id string, Id string, T_t string, T_rh string, T_time string) bool {
  286. o := orm.NewOrm()
  287. SET_str := " SET "
  288. if len(T_t) > 0 {
  289. SET_str = SET_str + " t_t = " + T_t + " ,"
  290. }
  291. if len(T_rh) > 0 {
  292. SET_str = SET_str + " t_rh = " + T_rh + " ,"
  293. }
  294. if len(T_time) > 0 {
  295. SET_str = SET_str + " t_time = '" + T_time + "' ,"
  296. }
  297. if len(SET_str) > 7 {
  298. SET_str = SET_str[:(len(SET_str) - 1)]
  299. }
  300. // 开始插入数据 UPDATE `cold_verify`.`Z_TaskData_d8qMyeXLzIxn` SET `t_t` = 20.2 WHERE `ID` = 69
  301. sql := "UPDATE z_task_data_" + T_task_id + " " + SET_str + " WHERE ID = " + Id
  302. // 这里有时间优化 用于一次 prepare 多次 exec,以提高批量执行的速度
  303. //fmt.Println(sql)
  304. res, err := o.Raw(sql).Exec()
  305. if err != nil {
  306. logs.Error(lib.FuncName(), err)
  307. return false
  308. }
  309. res.RowsAffected()
  310. //fmt.Println("mysql row affected nums: ", num)
  311. return true
  312. }
  313. // 添加
  314. func Del_TaskData(T_task_id string, Id string) bool {
  315. o := orm.NewOrm()
  316. // 开始插入数据 UPDATE `cold_verify`.`Z_TaskData_d8qMyeXLzIxn` SET `t_t` = 20.2 WHERE `ID` = 69
  317. sql := "DELETE FROM z_task_data_" + T_task_id + " WHERE ID = " + Id
  318. // 这里有时间优化 用于一次 prepare 多次 exec,以提高批量执行的速度
  319. logs.Println(sql)
  320. res, err := o.Raw(sql).Exec()
  321. if err != nil {
  322. logs.Error(lib.FuncName(), err)
  323. return false
  324. }
  325. res.RowsAffected()
  326. //fmt.Println("mysql row affected nums: ", num)
  327. return true
  328. }
  329. // 添加
  330. func Del_TaskData_t_id(T_task_id string, Id string) bool {
  331. o := orm.NewOrm()
  332. // 开始插入数据 UPDATE `cold_verify`.`Z_TaskData_d8qMyeXLzIxn` SET `t_t` = 20.2 WHERE `ID` = 69
  333. sql := "DELETE FROM z_task_data_" + T_task_id + " WHERE t_id = " + Id
  334. // 这里有时间优化 用于一次 prepare 多次 exec,以提高批量执行的速度
  335. logs.Println(sql)
  336. res, err := o.Raw(sql).Exec()
  337. if err != nil {
  338. logs.Error(lib.FuncName(), err)
  339. return false
  340. }
  341. res.RowsAffected()
  342. //fmt.Println("mysql row affected nums: ", num)
  343. return true
  344. }
  345. // 检查导出表总数
  346. func Check_TaskData_Num(T_task_id string) bool {
  347. o1 := orm2.NewOrmUsingDB(conf.Local_AliasName)
  348. o2 := orm2.NewOrmUsingDB(conf.Server_AliasName)
  349. var maps_z1, maps_z2 []orm2.ParamsList
  350. sql := "SELECT COUNT(ID) FROM z_task_data_" + T_task_id
  351. fmt.Println(sql)
  352. _, err := o1.Raw(sql).ValuesList(&maps_z1)
  353. if err != nil {
  354. return false
  355. }
  356. _, err = o2.Raw(sql).ValuesList(&maps_z2)
  357. if err != nil {
  358. return false
  359. }
  360. if len(maps_z1) != len(maps_z2) {
  361. return false
  362. }
  363. return true
  364. }
  365. func Read_TaskData_Num(T_task_id string) int {
  366. o1 := orm2.NewOrmUsingDB(conf.Local_AliasName)
  367. var maps_z []orm2.ParamsList
  368. sql := "SELECT COUNT(ID) FROM z_task_data_" + T_task_id
  369. fmt.Println(sql)
  370. _, err := o1.Raw(sql).ValuesList(&maps_z)
  371. if err != nil {
  372. logs.Error(lib.FuncName(), err)
  373. return 0
  374. }
  375. key, _ := strconv.Atoi(maps_z[0][0].(string))
  376. return key
  377. }
  378. func Dump_TaskData(T_task_id, root, password, url_port, database, sql_file string) (string, error) {
  379. // url_port 127.0.0.1:3306
  380. // mysql8.0 以上加 --column-statistics=0
  381. // mysqldump --column-statistics=0 -uroot -proot -h127.0.0.1 -P3306 cold_verify Z_TaskData_ixEfo5zk2Oeb > /Data/Z_TaskData_ixEfo5zk2Oeb.sql
  382. v := Read_Local_Mysql_Version()
  383. host_port := strings.Split(url_port, ":")
  384. table_name := "z_task_data_" + T_task_id
  385. org := "mysqldump "
  386. if v >= 8 {
  387. org += "--column-statistics=0 "
  388. }
  389. //--no-create-info 只导出数据,而不添加 CREATE TABLE 语句。
  390. //--single-transaction 在备份库的时候并不锁定数据表
  391. //--add-locks:在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)
  392. //--compact:压缩模式,产生更少的输出;
  393. org = org + fmt.Sprintf("-u%s -p%s -h%s -P%s --no-create-info --set-gtid-purged=OFF --skip-add-locks --compact --quick %s %s > %s ",
  394. root, password, host_port[0], host_port[1], database, table_name, sql_file)
  395. logs.Println(org)
  396. _, err := lib.Command(org)
  397. if err != nil {
  398. logs.Error(lib.FuncName(), err)
  399. }
  400. return org, err
  401. }
  402. func Insert_TaskData(root, password, url_port, database, sql_file string) (string, error) {
  403. // url_port 127.0.0.1:3306
  404. // mysql -u root -p root -h127.0.0.1 -P3306 cold_verify_local < /data/Z_TaskData_ixEfo5zk2Oeb.sql
  405. host_port := strings.Split(url_port, ":")
  406. org := fmt.Sprintf("mysql -u%s -p%s -h%s -P%s %s < %s",
  407. root, password, host_port[0], host_port[1], database, sql_file)
  408. logs.Println(org)
  409. _, err := lib.Command(org)
  410. if err != nil {
  411. logs.Error(lib.FuncName(), err)
  412. }
  413. return org, err
  414. }
  415. func Read_Local_Mysql_Version() int {
  416. o := orm2.NewOrmUsingDB(conf.Local_AliasName)
  417. var params []orm2.Params
  418. o.Raw("select version();").Values(&params)
  419. version, _ := strconv.Atoi(params[0]["version()"].(string)[0:1])
  420. return version
  421. }
  422. func Import_TaskData(T_task_id string, offset, pagez int) bool {
  423. var maps []TaskData_
  424. serverOrm := orm2.NewOrmUsingDB(conf.Server_AliasName)
  425. localOrm := orm2.NewOrmUsingDB(conf.Local_AliasName)
  426. tb_name := "z_task_data_" + T_task_id
  427. // 开从先上版查询数据
  428. sql := "select `ID`, `t_sn`, `t_id`, `t_t`, `t_rh`, DATE_FORMAT(t_time,'%Y-%m-%d %H:%i:%s') AS t_times from " + tb_name + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(pagez)
  429. logs.Println(sql)
  430. _, err := serverOrm.Raw(sql).QueryRows(&maps)
  431. if err != nil {
  432. logs.Error(lib.FuncName(), err)
  433. return false
  434. }
  435. values := []string{}
  436. for _, row := range maps {
  437. // 处理数据
  438. values = append(values, fmt.Sprintf("('%s',%d,%v,%v,'%s')", row.T_sn, row.T_id, row.T_t, row.T_rh, row.T_time))
  439. }
  440. // 向本地版插入数据
  441. sql = "INSERT IGNORE INTO " + tb_name + "( `t_sn`, `t_id`, `t_t`, `t_rh`, `t_time`) VALUES " + strings.Join(values, ",")
  442. //logs.Println(sql)
  443. _, err = localOrm.Raw(sql).Exec()
  444. if err != nil {
  445. logs.Error(lib.FuncName(), err)
  446. return false
  447. }
  448. return true
  449. }
  450. // InsertTaskData 添加设备数据
  451. func InsertTaskData(T_task_id string, d TaskData_) {
  452. o := orm.NewOrm()
  453. var maps TaskData_
  454. sql := fmt.Sprintf("SELECT * FROM z_task_data_%s where t_time='%s' and t_id = '%s' and t_sn = '%s'", T_task_id, d.T_time, d.T_id, d.T_sn)
  455. err := o.Raw(sql).QueryRow(&maps)
  456. if err != nil && err.Error() != orm.ErrNoRows.Error() {
  457. logs.Error(lib.FuncName(), err)
  458. }
  459. // 添加
  460. if maps.ID == 0 {
  461. sqlStatement := fmt.Sprintf("insert into z_task_data_%s(t_sn, t_id, t_t, t_rh, t_time) value('%s','%s',%f,%f,'%s')", T_task_id, d.T_sn, d.T_id, d.T_t, d.T_rh, d.T_time)
  462. _, err = o.Raw(sqlStatement).Exec()
  463. if err != nil {
  464. logs.Error(lib.FuncName(), err)
  465. }
  466. return
  467. }
  468. //已经存在该条目,更新
  469. sqlStatement := fmt.Sprintf("update z_task_data_%s set t_t = %f,t_rh = %f where t_time= '%s' and t_id = '%s' and t_sn = '%s'", T_task_id, d.T_t, d.T_rh, d.T_time, d.T_id, d.T_sn)
  470. _, err = o.Raw(sqlStatement).Exec()
  471. if err != nil {
  472. logs.Error(lib.FuncName(), err)
  473. }
  474. }
  475. // DeleteTaskDataByTimeRange 删除时间范围内的数据
  476. func DeleteTaskDataByTimeRange(T_task_id, sn string, id int, start, end string) {
  477. sqlStatement := fmt.Sprintf("delete from z_task_data_%s where t_time between '%s' and '%s' and t_id = '%d' and t_sn = '%s'", T_task_id, start, end, id, sn)
  478. o := orm.NewOrm()
  479. exec, err := o.Raw(sqlStatement).Exec()
  480. if err != nil {
  481. fmt.Println(err.Error())
  482. }
  483. affected, _ := exec.RowsAffected()
  484. fmt.Printf("从%s~%s时间段删除了%d条数据", start, end, affected)
  485. }
  486. // UpdateTaskDataTemperatureAndHumidityRandom 随机更新
  487. func UpdateTaskDataTemperatureAndHumidityRandom(T_task_id, sn, id, startTime, endTime string, ttMax, ttMin, trhMax, trhMin int) {
  488. //sql语句
  489. sqlStatement := fmt.Sprintf("update z_task_data_%s set t_t = t_t + FLOOR(%d + RAND() * (%d - %d + 1)) /100.0, t_rh = t_rh + FLOOR(%d + RAND() * (%d - %d + 1)) /100.0 where t_time BETWEEN '%s' AND '%s' and t_id = '%s' and t_sn = '%s'", T_task_id, ttMin, ttMax, ttMin, trhMin, trhMax, trhMin, startTime, endTime, id, sn)
  490. o := orm.NewOrm()
  491. exec, err := o.Raw(sqlStatement).Exec()
  492. if err != nil {
  493. fmt.Println("执行错误:", sqlStatement)
  494. }
  495. affected, _ := exec.RowsAffected()
  496. fmt.Println("执行更新行数:", affected)
  497. }
  498. // UpdateTaskDataTemperatureAndHumidity 更新设备探头数据温湿度
  499. func UpdateTaskDataTemperatureAndHumidity(T_task_id, sn, id, startTime, endTime string, temperature, humidity float64) {
  500. sqlStatement := fmt.Sprintf("update z_task_data_%s set t_t = t_t + %f , t_rh = t_rh + %f where t_id = '%s' and t_sn = '%s' and t_time BETWEEN '%s' and '%s'", T_task_id, temperature, humidity, id, sn, startTime, endTime)
  501. o := orm.NewOrm()
  502. exec, err := o.Raw(sqlStatement).Exec()
  503. if err != nil {
  504. fmt.Println(err.Error())
  505. }
  506. affected, err := exec.RowsAffected()
  507. if err != nil {
  508. fmt.Println(err.Error())
  509. }
  510. fmt.Printf("影响了%d行\n", affected)
  511. }
  512. // UpdateTaskData 更新设备探头数据
  513. func UpdateTaskData(T_task_id, sn, id string, old, newO TaskData_) {
  514. sqlStatement := fmt.Sprintf("update z_task_data_%s set t_t = %f , t_rh = %f where t_sn = '%s' and t_id = '%s' and t_t = %f and t_rh = %f and t_time= '%s'", T_task_id, newO.T_t, newO.T_rh, sn, id, old.T_t, old.T_rh, old.T_time)
  515. fmt.Println("执行SQL:", sqlStatement)
  516. o := orm.NewOrm()
  517. exec, err := o.Raw(sqlStatement).Exec()
  518. if err != nil {
  519. fmt.Println("执行错误:", sqlStatement, err.Error())
  520. }
  521. affected, _ := exec.RowsAffected()
  522. fmt.Println("执行更新行数:", affected)
  523. }