WarningSand.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package Warning
  2. import (
  3. "Cold_Api/controllers/lib"
  4. "Cold_Api/logs"
  5. "Cold_Api/models/Account"
  6. "fmt"
  7. "github.com/beego/beego/v2/client/orm"
  8. orm2 "github.com/beego/beego/v2/client/orm"
  9. _ "github.com/go-sql-driver/mysql"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. // 模板
  15. // 报警发送统计
  16. type WarningSand struct {
  17. Id int `orm:"column(ID);size(11);auto;pk"`
  18. T_pid int `orm:"index;size(100);null"` // Account.Company 绑定公司, -1:未知 0:管理员 >0 :绑定公司
  19. T_tp int `orm:"index;size(20);null"` // 报警类型 ->WarningList
  20. T_Notice string `orm:"size(256);null"` // 18888888888
  21. T_type int `orm:"index;size(4);null"` // 1 短信 2 电话
  22. T_Remark string `orm:"size(256);null"` // 备注
  23. CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
  24. }
  25. func (t *WarningSand) TableName() string {
  26. return "warning_sand" // 数据库名称 // ************** 替换 FormulaList **************
  27. }
  28. func init() {
  29. //注册模型
  30. orm.RegisterModel(new(WarningSand))
  31. }
  32. type WarningSand_R struct {
  33. Id int
  34. T_pid int // Account.Company 绑定公司, -1:未知 0:管理员 >0 :绑定公司
  35. T_tp int // 报警类型 ->WarningList
  36. T_tp_name string
  37. T_Notice string // 18888888888
  38. T_type int // 1 短信 2 电话
  39. T_Remark []string // 备注
  40. CreateTime string //auto_now_add 第一次保存时才设置时间
  41. }
  42. func WarningSandToWarningSand_R(t WarningSand) (r WarningSand_R) {
  43. r.Id = t.Id
  44. r.T_pid = t.T_pid
  45. r.T_tp = t.T_tp
  46. r.T_tp_name = Read_WarningType_Get(t.T_tp)
  47. r.T_Notice = t.T_Notice
  48. r.T_type = t.T_type
  49. //r.T_Remark = t.T_Remark
  50. if len(t.T_Remark) > 0 {
  51. r.T_Remark = strings.Split(strings.TrimRight(t.T_Remark, "\n"), "\n")
  52. }
  53. r.CreateTime = t.CreateTime.Format("2006-01-02 15:04:05")
  54. return r
  55. }
  56. // ---------------- 特殊方法 -------------------
  57. // 获取 ById
  58. func Read_WarningWx_ById(id int) (r WarningSand) {
  59. o := orm.NewOrm()
  60. r = WarningSand{Id: id}
  61. err := o.Read(&r) // o.Read(&r,"Tokey") 如果不是 主键 就得指定字段名
  62. if err != nil {
  63. fmt.Println(err)
  64. }
  65. return r
  66. }
  67. // 添加
  68. func Add_WarningHand(m WarningSand) {
  69. warningWxList := Read_DeviceWarning(m)
  70. if len(warningWxList) == 0 {
  71. Add_WarningHand(m)
  72. }
  73. }
  74. // 添加
  75. func Add_WarningSand(m WarningSand) (id int64, err error) {
  76. o := orm.NewOrm()
  77. id, err = o.Insert(&m)
  78. //if err != nil {
  79. // fmt.Println(err)
  80. //}
  81. return id, err
  82. }
  83. // 获取列表
  84. func Read_DeviceWarning(Warning WarningSand) (r []WarningSand) {
  85. o := orm.NewOrm()
  86. // 也可以直接使用 Model 结构体作为表名
  87. qs := o.QueryTable(new(WarningSand))
  88. now := time.Now()
  89. // N 个小时前
  90. dd, _ := time.ParseDuration("-1m") //"s", "m", "h".
  91. currentTime := now.Add(dd)
  92. qs.Filter("T_pid", Warning.T_pid).Filter("T_tp", Warning.T_tp).Filter("T_Notice", Warning.T_Notice).Filter("T_type", Warning.T_type).Filter("CreateTime__gte", currentTime.Format("2006-01-02 15:04:05")).OrderBy("-Id").All(&r)
  93. // 记录 ++
  94. if len(r) > 0 {
  95. ColAdd_DeviceWarningBy_ID(r[0].Id)
  96. }
  97. return r
  98. }
  99. // 获取时 累加 1
  100. func ColAdd_DeviceWarningBy_ID(id int) {
  101. o := orm.NewOrm()
  102. // 也可以直接使用 Model 结构体作为表名
  103. design := new(WarningSand)
  104. qs := o.QueryTable(design)
  105. // 获取时 累加 1
  106. qs.Filter("Id", id).Update(orm2.Params{"T_Filter": orm2.ColValue(orm.ColAdd, 1)})
  107. return
  108. }
  109. func Read_WarningSand_ALL_T_sn_TIME_Count(T_sn string) (cnt int) {
  110. o := orm.NewOrm()
  111. var maps_z []orm2.ParamsList
  112. now := time.Now()
  113. timeStr := now.Format("2006-01-02") + " 00:00:00"
  114. sql := "SELECT COUNT(ID) FROM warning_sand WHERE t__title NOT LIKE '%恢复%' AND t__ut > '" + timeStr + "' AND t_sn LIKE '%" + T_sn + "%' "
  115. fmt.Println(sql)
  116. _, err := o.Raw(sql).ValuesList(&maps_z)
  117. if err != nil {
  118. return 0
  119. }
  120. if len(maps_z) == 0 {
  121. return 0
  122. }
  123. //value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
  124. key, _ := strconv.Atoi(maps_z[0][0].(string))
  125. return key
  126. }
  127. func Read_WarningSand_ALL_T_Bind_TIME_Count(user_ Account.Admin, T_sn string) (cnt int) {
  128. o := orm.NewOrm()
  129. var maps_z []orm2.ParamsList
  130. now := time.Now()
  131. timeStr := now.Format("2006-01-02") + " 00:00:00"
  132. T_Bind := "U" + strconv.Itoa(user_.Id) + "|"
  133. sql := "SELECT COUNT(ID) FROM warning_sand WHERE t__title NOT LIKE '%恢复%' AND t__ut > '" + timeStr + "' AND t__bind LIKE '%" + T_Bind + "%' AND t_sn LIKE '%" + T_sn + "%'"
  134. fmt.Println(sql)
  135. _, err := o.Raw(sql).ValuesList(&maps_z)
  136. if err != nil {
  137. return 0
  138. }
  139. if len(maps_z) == 0 {
  140. return 0
  141. }
  142. //value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cnt), 64)
  143. key, _ := strconv.Atoi(maps_z[0][0].(string))
  144. return key
  145. }
  146. // 获取 发送统计数量
  147. func Get_WarningSandNum(TABLE_name string, Pid, Ntype int, StartTine, EndTime string) int {
  148. o := orm.NewOrm()
  149. var maps []orm.Params
  150. num, err := o.Raw("SELECT count(ID) AS count FROM " + TABLE_name + " WHERE `t_pid` = " + strconv.Itoa(Pid) + " AND `t__ntype` = " + strconv.Itoa(Ntype) + " AND `create_time` >= '" + StartTine + "' AND `create_time` <= '" + EndTime + "'").Values(&maps)
  151. if err == nil && num > 0 {
  152. intx, _ := strconv.Atoi(lib.To_string(maps[0]["count"]))
  153. logs.Println("Get_WarningSandNum:", TABLE_name, Pid, Ntype, StartTine, EndTime, intx) // slene
  154. return intx
  155. }
  156. logs.Error("执行错误!!!", "Get_WarningSandNum:", TABLE_name, Pid, Ntype, StartTine, EndTime, maps) // slene
  157. return 0
  158. }
  159. // 获取本月通知数量
  160. func Get_WarningSandNum_CurrentMonth(T_pid, Ntype int) int {
  161. o := orm.NewOrm()
  162. var maps []orm.Params
  163. tableName := fmt.Sprintf("warning_sand_%s", time.Now().Format("200601"))
  164. _, err := o.Raw("SELECT count(ID) AS count FROM " + tableName + " WHERE `t_pid` = " + strconv.Itoa(T_pid) + " AND `t__ntype` = " + strconv.Itoa(Ntype)).Values(&maps)
  165. if err != nil {
  166. logs.Error(lib.FuncName(), err)
  167. return 0
  168. }
  169. intx, _ := strconv.Atoi(lib.To_string(maps[0]["count"]))
  170. return intx
  171. }
  172. func Read_WarningSand_List(T_pid, Ntype int, page int, page_z int) (r []WarningSand_R, cnt int64) {
  173. o := orm.NewOrm()
  174. var offset int
  175. if page <= 1 {
  176. offset = 0
  177. } else {
  178. offset = (page - 1) * page_z
  179. }
  180. var maps []WarningSand
  181. var maps_z []orm2.ParamsList
  182. tableName := fmt.Sprintf("warning_sand_%s", time.Now().Format("200601"))
  183. sql := "SELECT count(ID) FROM " + tableName + " WHERE `t_pid` = " + strconv.Itoa(T_pid) + " AND `t__ntype` = " + strconv.Itoa(Ntype)
  184. _, err := o.Raw(sql).ValuesList(&maps_z)
  185. if err != nil {
  186. logs.Error(lib.FuncName(), err)
  187. return r, 0
  188. }
  189. if len(maps_z) == 0 {
  190. return r, 0
  191. }
  192. sql = "SELECT * FROM " + tableName + " WHERE `t_pid` = " + strconv.Itoa(T_pid) + " AND `t__ntype` = " + strconv.Itoa(Ntype)
  193. if page_z != 9999 {
  194. sql = sql + " LIMIT " + strconv.Itoa(offset) + "," + strconv.Itoa(page_z)
  195. }
  196. _, err = o.Raw(sql).QueryRows(&maps)
  197. if err != nil {
  198. logs.Error(lib.FuncName(), err)
  199. return
  200. }
  201. key, _ := strconv.ParseInt(maps_z[0][0].(string), 10, 64)
  202. for _, v := range maps {
  203. r = append(r, WarningSandToWarningSand_R(v))
  204. }
  205. return r, key
  206. }