Company.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package StatisticsTask
  2. import (
  3. "Cold_Data/lib"
  4. "Cold_Data/logs"
  5. "Cold_Data/models"
  6. "Cold_Data/models/Account"
  7. "Cold_Data/models/Device"
  8. "Cold_Data/models/Warning"
  9. "fmt"
  10. "time"
  11. )
  12. func init() {
  13. var err error
  14. // 从文件中加载map
  15. lib.Company_Map, err = lib.LoadMapFromFile("data.json")
  16. if err != nil {
  17. fmt.Println("Company_Map 文件不存在!,重新加载")
  18. lib.Company_Map = make(map[int]*models.Company_Project)
  19. lib.Company_Map[0] = &models.Company_Project{}
  20. } else {
  21. fmt.Println("Company_Map 加载成功")
  22. }
  23. // 定时循环 子公司归档
  24. go func() {
  25. time.Sleep(time.Second * 3)
  26. for true {
  27. // 间隔 全部统计一次
  28. StatisticsTask_GO()
  29. Company_Recursion(0)
  30. time.Sleep(time.Hour * 2)
  31. }
  32. }()
  33. }
  34. // 子公司归档
  35. func Company_Recursion(T_mid int) {
  36. Company_A := Account.Read_Company_T_mid_All(T_mid)
  37. Company_Project_r, ok := lib.Company_Map[T_mid]
  38. if !ok {
  39. return
  40. }
  41. Company_Project_r.Children = []*models.Company_Project{} // 清空
  42. for _, A_r := range Company_A {
  43. Company_Project_Br, ok := lib.Company_Map[A_r.Id]
  44. if !ok {
  45. continue
  46. }
  47. Company_Recursion(A_r.Id)
  48. Company_Project_r.Children = append(Company_Project_r.Children, Company_Project_Br)
  49. }
  50. lib.Company_Map[T_mid] = Company_Project_r
  51. }
  52. // 处理公司 h 处理类型 0 全部 1 记录数据
  53. func Company_Handle(C_r Account.Company) {
  54. _, ok := lib.GO_Handle[C_r.Id]
  55. if ok {
  56. return
  57. }
  58. lib.GO_Handle[C_r.Id] = true // 标记开始
  59. start := time.Now()
  60. logs.Println("开始处理公司:", C_r.T_name)
  61. Company_Project_r, ok := lib.Company_Map[C_r.Id]
  62. if !ok {
  63. Company_Project_r = &models.Company_Project{}
  64. }
  65. Company_Project_r.Company_name = C_r.T_name
  66. Company_Project_r.Company_key = C_r.T_key
  67. Company_Project_r.Company_plan = C_r.T_plan
  68. Company_Project_r.Company_data = C_r.T_data
  69. Company_Project_r.Company_v3d = C_r.T_v3d
  70. Company_Project_r.Company_Address = C_r.T_Address
  71. Company_Project_r.Company_coordinate = C_r.T_coordinate
  72. //Company_Project_r.Device.DeviceList = Device_Data(C_r)
  73. // 设备类
  74. Company_Project_r.Device.T_库房总数 = Device.Read_Device_库房总数(C_r.Id)
  75. Company_Project_r.Device.T_移动总数 = Device.Read_Device_移动总数(C_r.Id)
  76. if Company_Project_r.Device.T_库房总数+Company_Project_r.Device.T_移动总数 == 0 {
  77. // 没有设备,跳过数据整理
  78. lib.Company_Map[C_r.Id] = Company_Project_r
  79. return
  80. }
  81. Company_Project_r.Device.T_移动离线总数 = Device.Read_Device_设备离线总数(C_r.Id)
  82. Company_Project_r.Device.T_移动监控总数 = Device.Read_Device_设备监控总数(C_r.Id)
  83. // 报警类
  84. //Company_Project_r.Warning.T_库房报警总数 = Warning.Read_Warning_库房报警总数(C_r.Id)
  85. Company_Project_r.Warning.T_库房未处理总数 = Warning.Read_Warning_库房未处理总数(C_r.Id)
  86. Company_Project_r.Warning.T_库房设备报警数_今天 = Warning.Read_Warning_库房设备报警数(C_r.Id, "DATE (create_time) = DATE (NOW())")
  87. //Company_Project_r.Warning.T_库房设备报警数_昨天 = Warning.Read_Warning_库房设备报警数(C_r.Id,"TO_DAYS(NOW()) - TO_DAYS( create_time) <= 1")
  88. //Company_Project_r.Warning.T_库房设备报警数_近7天 = Warning.Read_Warning_库房设备报警数(C_r.Id,"DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(create_time)")
  89. //Company_Project_r.Warning.T_库房设备报警数_本月 = Warning.Read_Warning_库房设备报警数(C_r.Id,"DATE_FORMAT(create_time,'%Y%m') = DATE_FORMAT( CURDATE( ), '%Y%m' )")
  90. //Company_Project_r.Warning.T_库房设备报警数_上一月 = Warning.Read_Warning_库房设备报警数(C_r.Id,"PERIOD_DIFF(date_format(now(), '%Y%m' ), date_format( create_time,'%Y%m')) =1")
  91. Company_Project_r.Warning.T_库房报警设备数_今天 = Warning.Read_Warning_库房报警设备数(C_r.Id, "DATE (create_time) = DATE (NOW())")
  92. //Company_Project_r.Warning.T_移动警数总数 = Warning.Read_Warning_移动警数总数(C_r.Id)
  93. Company_Project_r.Warning.T_移动未处理总数 = Warning.Read_Warning_移动未处理总数(C_r.Id)
  94. Company_Project_r.Warning.T_移动设备报警数_今天 = Warning.Read_Warning_移动设备报警数(C_r.Id, "DATE (create_time) = DATE (NOW())")
  95. //Company_Project_r.Warning.T_移动设备报警数_昨天 = Warning.Read_Warning_移动设备报警数(C_r.Id,"TO_DAYS(NOW()) - TO_DAYS( create_time) <= 1")
  96. //Company_Project_r.Warning.T_移动设备报警数_近7天 = Warning.Read_Warning_移动设备报警数(C_r.Id,"DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(create_time)")
  97. //Company_Project_r.Warning.T_移动设备报警数_本月 = Warning.Read_Warning_移动设备报警数(C_r.Id,"DATE_FORMAT(create_time,'%Y%m') = DATE_FORMAT( CURDATE( ), '%Y%m' )")
  98. //Company_Project_r.Warning.T_移动设备报警数_上一月 = Warning.Read_Warning_移动设备报警数(C_r.Id,"PERIOD_DIFF(date_format(now(), '%Y%m' ), date_format( create_time,'%Y%m')) =1")
  99. Company_Project_r.Warning.T_移动报警设备数_今天 = Warning.Read_Warning_移动报警设备数(C_r.Id, "DATE (create_time) = DATE (NOW())")
  100. Company_Project_r.Warning.T_库房报警类型统计 = make(map[string]int)
  101. for _, v := range Warning.Read_Warning_库房报警类型统计(C_r.Id) {
  102. //x := models.WarningClassList_Project{T_name: Warning.Read_WarningType_Get(lib.To_int(v["t_tp"])),T_value: lib.To_int(v["COUNT(*)"])}
  103. Company_Project_r.Warning.T_库房报警类型统计[Warning.Read_WarningType_Get(lib.To_int(v["t_tp"]))] = lib.To_int(v["COUNT(*)"])
  104. }
  105. Company_Project_r.Warning.T_移动报警类型统计 = make(map[string]int)
  106. for _, v := range Warning.Read_Warning_移动端报警类型统计(C_r.Id) {
  107. Company_Project_r.Warning.T_移动报警类型统计[Warning.Read_WarningType_Get(lib.To_int(v["t_tp"]))] = lib.To_int(v["COUNT(*)"])
  108. }
  109. Company_Project_r.Warning.T_探头报警类型统计 = make(map[string]int)
  110. for _, v := range Warning.Read_Warning_探头报警统计(C_r.Id) {
  111. Company_Project_r.Warning.T_探头报警类型统计[v["t__d_s_name"].(string)] = lib.To_int(v["COUNT(*)"])
  112. }
  113. Company_Project_r.Warning.T_探头报警类型统计_30天 = make(map[string]int)
  114. sprintf30 := fmt.Sprintf("t__ut >= CURDATE() - INTERVAL %v DAY", 30)
  115. for _, v := range Warning.Read_Warning_日期探头报警统计(C_r.Id, sprintf30) {
  116. Company_Project_r.Warning.T_探头报警类型统计_30天[v["t__d_s_name"].(string)] = lib.To_int(v["COUNT(*)"])
  117. }
  118. Company_Project_r.Warning.T_探头报警类型统计_90天 = make(map[string]int)
  119. sprintf90 := fmt.Sprintf("t__ut >= CURDATE() - INTERVAL %v DAY", 90)
  120. for _, v := range Warning.Read_Warning_日期探头报警统计(C_r.Id, sprintf90) {
  121. Company_Project_r.Warning.T_探头报警类型统计_90天[v["t__d_s_name"].(string)] = lib.To_int(v["COUNT(*)"])
  122. }
  123. currentDate := time.Now().Local()
  124. //Company_Project_r.Warning.T_库房报警设备数_近7天[date.Format("01-02")] = Warning.Read_Warning_库房报警设备数(C_r.Id,"date_format(create_time,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  125. //Company_Project_r.Warning.T_移动报警设备数_近7天[date.Format("01-02")] = Warning.Read_Warning_移动报警设备数(C_r.Id,"date_format(create_time,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  126. //Company_Project_r.Warning.T_库房报警设备数_近7天 = make(map[string]int)
  127. //Company_Project_r.Warning.T_移动报警设备数_近7天 = make(map[string]int)
  128. Company_Project_r.Warning.T_报警设备数_近7天 = make(map[string]int)
  129. // 获取当前日期
  130. // 生成最近7天的日期
  131. for i := 0; i < 7; i++ {
  132. date := currentDate.AddDate(0, 0, -i)
  133. //Company_Project_r.Warning.T_库房报警设备数_近7天[date.Format("01-02")] = Warning.Read_Warning_库房报警设备数(C_r.Id,"date_format(create_time,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  134. //Company_Project_r.Warning.T_移动报警设备数_近7天[date.Format("01-02")] = Warning.Read_Warning_移动报警设备数(C_r.Id,"date_format(create_time,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  135. Company_Project_r.Warning.T_报警设备数_近7天[date.Format("01-02")] = Warning.Read_Warning_报警设备数(C_r.Id, "date_format(create_time,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  136. }
  137. Company_Project_r.Warning.T_报警设备数_近30天 = make(map[string]int)
  138. // 生成最近30天的日期
  139. for i := 0; i < 30; i++ {
  140. date := currentDate.AddDate(0, 0, -i)
  141. Company_Project_r.Warning.T_报警设备数_近30天[date.Format("01-02")] = Warning.Read_Warning_报警设备数(C_r.Id, "date_format(create_time,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  142. }
  143. Company_Project_r.Warning.T_报警设备数_近90天 = make(map[string]int)
  144. // 生成最近120天的日期
  145. for i := 0; i < 90; i++ {
  146. date := currentDate.AddDate(0, 0, -i)
  147. Company_Project_r.Warning.T_报警设备数_近90天[date.Format("01-02")] = Warning.Read_Warning_报警设备数(C_r.Id, "date_format(create_time,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  148. }
  149. // 任务类
  150. Company_Project_r.Task.T_任务总数_今天 = Device.Read_Task_任务总数(C_r.Id, "DATE (t__ut_start) = DATE (NOW())")
  151. //Company_Project_r.Task.T_任务总数_昨天 = Device.Read_Task_任务总数(C_r.Id,"TO_DAYS(NOW()) - TO_DAYS( t__ut_start) <= 1")
  152. //Company_Project_r.Task.T_任务总数_近7天 = Device.Read_Task_任务总数(C_r.Id,"DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(t__ut_start)")
  153. Company_Project_r.Task.T_任务设备数_今天 = Device.Read_Task_任务设备数(C_r.Id, "DATE (t__ut_start) = DATE (NOW())")
  154. //Company_Project_r.Task.T_任务设备数_昨天 = Device.Read_Task_任务设备数(C_r.Id,"TO_DAYS(NOW()) - TO_DAYS( t__ut_start) <= 1")
  155. //Company_Project_r.Task.T_任务设备数_近7天 = Device.Read_Task_任务设备数(C_r.Id,"DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(t__ut_start)")
  156. //currentMonth := time.Now().Month()
  157. //currentYear := time.Now().Year()
  158. //Company_Project_r.Task.T_任务总数_近一年 = make(map[string]int)
  159. //for i := 0; i < 12; i++ {
  160. // month := currentMonth - time.Month(i)
  161. // year := currentYear
  162. //
  163. // if month <= 0 {
  164. // month += 12
  165. // year--
  166. // }
  167. // Company_Project_r.Task.T_任务总数_近一年[fmt.Sprintf("%d-%d",year,month)] = Device.Read_Task_任务总数(C_r.Id,"date_format(t__ut_start,'%Y-%m') = '"+fmt.Sprintf("%d-%02d",year, int(month))+"'")
  168. //}
  169. Company_Project_r.Task.T_任务总数_近7天 = make(map[string]int)
  170. // 获取当前日期
  171. //currentDate := time.Now().Local()
  172. // 生成最近7天的日期
  173. for i := 0; i < 7; i++ {
  174. date := currentDate.AddDate(0, 0, -i)
  175. Company_Project_r.Task.T_任务总数_近7天[date.Format("01-02")] = Device.Read_Task_任务总数(C_r.Id, "date_format(t__ut_start,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  176. }
  177. lib.Company_Map[C_r.Id] = Company_Project_r
  178. //str, _ := json.Marshal(Company_Project_r)
  179. //fmt.Println(string(str))
  180. logs.Println("处理公司完成:", C_r.T_name)
  181. logs.PrintlnData("[" + C_r.T_name + "] 耗时:" + time.Since(start).String())
  182. go func() {
  183. time.Sleep(time.Minute * 10)
  184. delete(lib.GO_Handle, C_r.Id)
  185. }()
  186. }
  187. func StatisticsTask_GO() {
  188. fmt.Println("----开始统计-----")
  189. Company_All := Account.Read_Company_All()
  190. for _, C_r := range Company_All {
  191. //内部测试
  192. if C_r.T_path[:5] == "/0/1/" {
  193. continue
  194. }
  195. _, ok := lib.GO_Handle[C_r.Id]
  196. if ok {
  197. continue
  198. }
  199. Company_Handle(C_r)
  200. }
  201. fmt.Println("----保存成功-----")
  202. // 将map保存到文件
  203. err := lib.SaveMapToFile(lib.Company_Map, "data.json")
  204. if err != nil {
  205. fmt.Println("保存失败:", err)
  206. return
  207. }
  208. }
  209. //func Device_Data(C_r Account.Company) []models.DeviceList_Project {
  210. // logs.Println("开始处理公司数据:", C_r.T_name)
  211. //
  212. // DeviceList := []models.DeviceList_Project{}
  213. // for _, ds := range Device.Read_DeviceSensor_ByT_pid(C_r.Id) {
  214. // ds_ := models.DeviceList_Project{}
  215. //
  216. // ds_.T_sn = ds.T_sn
  217. // ds_.T_id = ds.T_id
  218. // ds_.T_name = ds.T_name
  219. // ds_.T_sort = ds.T_sort
  220. // ds_.T_3dview = ds.T_3dview
  221. // ds_.T_type = ds.T_type
  222. // ds_.T_link = ds.T_link
  223. //
  224. // dd := Device.Read_DeviceData(ds.T_sn, ds.T_id)
  225. // ds_.T_t = dd.T_t
  226. // ds_.T_rh = dd.T_rh
  227. // ds_.T_time = dd.T_time.Format("2006-01-02 15:04:05")
  228. // if dsp, is := Device.Read_DeviceSensorParameter(ds.T_sn, ds.T_id); is {
  229. // ds_.T_Tlower = dsp.T_Tlower
  230. // ds_.T_Tupper = dsp.T_Tupper
  231. // ds_.T_RHlower = dsp.T_RHlower
  232. // ds_.T_RHupper = dsp.T_RHupper
  233. // }
  234. //
  235. // ds_.T_Dattery = ds.T_Dattery
  236. // ds_.T_Site = ds.T_Site
  237. // ds_.T_monitor = ds.T_monitor
  238. // ds_.T_online = ds.T_online
  239. // ds_.T_online_s = ds.T_online_s
  240. // DeviceList = append(DeviceList, ds_)
  241. //
  242. // }
  243. //
  244. // return DeviceList
  245. //
  246. //}