Company.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  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_Id = C_r.Id
  66. Company_Project_r.Company_name = C_r.T_name
  67. Company_Project_r.Company_key = C_r.T_key
  68. Company_Project_r.Company_plan = C_r.T_plan
  69. Company_Project_r.Company_data = C_r.T_data
  70. Company_Project_r.Company_v3d = C_r.T_v3d
  71. Company_Project_r.Company_Address = C_r.T_Address
  72. Company_Project_r.Company_coordinate = C_r.T_coordinate
  73. //Company_Project_r.Device.DeviceList = Device_Data(C_r)
  74. // 设备类
  75. Company_Project_r.Device.T_库房总数 = Device.Read_Device_库房总数(C_r.Id)
  76. Company_Project_r.Device.T_移动总数 = Device.Read_Device_移动总数(C_r.Id)
  77. if Company_Project_r.Device.T_库房总数+Company_Project_r.Device.T_移动总数 == 0 {
  78. // 没有设备,跳过数据整理
  79. lib.Company_Map[C_r.Id] = Company_Project_r
  80. return
  81. }
  82. Company_Project_r.Device.T_移动离线总数 = Device.Read_Device_设备离线总数(C_r.Id)
  83. Company_Project_r.Device.T_移动监控总数 = Device.Read_Device_设备监控总数(C_r.Id)
  84. // 报警类
  85. //Company_Project_r.Warning.T_库房报警总数 = Warning.Read_Warning_库房报警总数(C_r.Id)
  86. Company_Project_r.Warning.T_库房未处理总数 = Warning.Read_Warning_库房未处理总数(C_r.Id)
  87. Company_Project_r.Warning.T_库房设备报警数_今天 = Warning.Read_Warning_库房设备报警数(C_r.Id, "DATE (create_time) = DATE (NOW())")
  88. //Company_Project_r.Warning.T_库房设备报警数_昨天 = Warning.Read_Warning_库房设备报警数(C_r.Id,"TO_DAYS(NOW()) - TO_DAYS( create_time) <= 1")
  89. //Company_Project_r.Warning.T_库房设备报警数_近7天 = Warning.Read_Warning_库房设备报警数(C_r.Id,"DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(create_time)")
  90. //Company_Project_r.Warning.T_库房设备报警数_本月 = Warning.Read_Warning_库房设备报警数(C_r.Id,"DATE_FORMAT(create_time,'%Y%m') = DATE_FORMAT( CURDATE( ), '%Y%m' )")
  91. //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")
  92. Company_Project_r.Warning.T_库房报警设备数_今天 = Warning.Read_Warning_库房报警设备数(C_r.Id, "DATE (create_time) = DATE (NOW())")
  93. //Company_Project_r.Warning.T_移动警数总数 = Warning.Read_Warning_移动警数总数(C_r.Id)
  94. Company_Project_r.Warning.T_移动未处理总数 = Warning.Read_Warning_移动未处理总数(C_r.Id)
  95. Company_Project_r.Warning.T_移动设备报警数_今天 = Warning.Read_Warning_移动设备报警数(C_r.Id, "DATE (create_time) = DATE (NOW())")
  96. //Company_Project_r.Warning.T_移动设备报警数_昨天 = Warning.Read_Warning_移动设备报警数(C_r.Id,"TO_DAYS(NOW()) - TO_DAYS( create_time) <= 1")
  97. //Company_Project_r.Warning.T_移动设备报警数_近7天 = Warning.Read_Warning_移动设备报警数(C_r.Id,"DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(create_time)")
  98. //Company_Project_r.Warning.T_移动设备报警数_本月 = Warning.Read_Warning_移动设备报警数(C_r.Id,"DATE_FORMAT(create_time,'%Y%m') = DATE_FORMAT( CURDATE( ), '%Y%m' )")
  99. //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")
  100. Company_Project_r.Warning.T_移动报警设备数_今天 = Warning.Read_Warning_移动报警设备数(C_r.Id, "DATE (create_time) = DATE (NOW())")
  101. Company_Project_r.Warning.T_库房报警类型统计 = make(map[string]int)
  102. for _, v := range Warning.Read_Warning_库房报警类型统计(C_r.Id) {
  103. //x := models.WarningClassList_Project{T_name: Warning.Read_WarningType_Get(lib.To_int(v["t_tp"])),T_value: lib.To_int(v["COUNT(*)"])}
  104. Company_Project_r.Warning.T_库房报警类型统计[Warning.Read_WarningType_Get(lib.To_int(v["t_tp"]))] = lib.To_int(v["COUNT(*)"])
  105. }
  106. Company_Project_r.Warning.T_移动报警类型统计 = make(map[string]int)
  107. for _, v := range Warning.Read_Warning_移动端报警类型统计(C_r.Id) {
  108. Company_Project_r.Warning.T_移动报警类型统计[Warning.Read_WarningType_Get(lib.To_int(v["t_tp"]))] = lib.To_int(v["COUNT(*)"])
  109. }
  110. Company_Project_r.Warning.T_探头报警类型统计 = make(map[string]int)
  111. for _, v := range Warning.Read_Warning_探头报警统计(C_r.Id) {
  112. Company_Project_r.Warning.T_探头报警类型统计[v["t__d_s_name"].(string)] = lib.To_int(v["COUNT(*)"])
  113. }
  114. Company_Project_r.Warning.T_探头报警类型统计_30天 = make(map[string]int)
  115. sprintf30 := fmt.Sprintf("t__ut >= CURDATE() - INTERVAL %v DAY", 30)
  116. for _, v := range Warning.Read_Warning_日期探头报警统计(C_r.Id, sprintf30) {
  117. Company_Project_r.Warning.T_探头报警类型统计_30天[v["t__d_s_name"].(string)] = lib.To_int(v["COUNT(*)"])
  118. }
  119. Company_Project_r.Warning.T_探头报警类型统计_90天 = make(map[string]int)
  120. sprintf90 := fmt.Sprintf("t__ut >= CURDATE() - INTERVAL %v DAY", 90)
  121. for _, v := range Warning.Read_Warning_日期探头报警统计(C_r.Id, sprintf90) {
  122. Company_Project_r.Warning.T_探头报警类型统计_90天[v["t__d_s_name"].(string)] = lib.To_int(v["COUNT(*)"])
  123. }
  124. currentDate := time.Now().Local()
  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天[date.Format("01-02")] = Warning.Read_Warning_移动报警设备数(C_r.Id,"date_format(create_time,'%Y-%m-%d') = '"+date.Format("2006-01-02")+"'")
  127. //Company_Project_r.Warning.T_库房报警设备数_近7天 = make(map[string]int)
  128. //Company_Project_r.Warning.T_移动报警设备数_近7天 = make(map[string]int)
  129. Company_Project_r.Warning.T_报警设备数_近7天 = make(map[string]int)
  130. // 获取当前日期
  131. // 生成最近7天的日期
  132. for i := 0; i < 7; i++ {
  133. date := currentDate.AddDate(0, 0, -i)
  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. 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")+"'")
  137. }
  138. Company_Project_r.Warning.T_报警设备数_近30天 = make(map[string]int)
  139. // 生成最近30天的日期
  140. for i := 0; i < 30; i++ {
  141. date := currentDate.AddDate(0, 0, -i)
  142. 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")+"'")
  143. }
  144. Company_Project_r.Warning.T_报警设备数_近90天 = make(map[string]int)
  145. // 生成最近120天的日期
  146. for i := 0; i < 90; i++ {
  147. date := currentDate.AddDate(0, 0, -i)
  148. 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")+"'")
  149. }
  150. // 任务类
  151. Company_Project_r.Task.T_任务总数_今天 = Device.Read_Task_任务总数(C_r.Id, "DATE (t__ut_start) = DATE (NOW())")
  152. //Company_Project_r.Task.T_任务总数_昨天 = Device.Read_Task_任务总数(C_r.Id,"TO_DAYS(NOW()) - TO_DAYS( t__ut_start) <= 1")
  153. //Company_Project_r.Task.T_任务总数_近7天 = Device.Read_Task_任务总数(C_r.Id,"DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(t__ut_start)")
  154. Company_Project_r.Task.T_任务设备数_今天 = Device.Read_Task_任务设备数(C_r.Id, "DATE (t__ut_start) = DATE (NOW())")
  155. //Company_Project_r.Task.T_任务设备数_昨天 = Device.Read_Task_任务设备数(C_r.Id,"TO_DAYS(NOW()) - TO_DAYS( t__ut_start) <= 1")
  156. //Company_Project_r.Task.T_任务设备数_近7天 = Device.Read_Task_任务设备数(C_r.Id,"DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(t__ut_start)")
  157. //currentMonth := time.Now().Month()
  158. //currentYear := time.Now().Year()
  159. //Company_Project_r.Task.T_任务总数_近一年 = make(map[string]int)
  160. //for i := 0; i < 12; i++ {
  161. // month := currentMonth - time.Month(i)
  162. // year := currentYear
  163. //
  164. // if month <= 0 {
  165. // month += 12
  166. // year--
  167. // }
  168. // 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))+"'")
  169. //}
  170. Company_Project_r.Task.T_任务总数_近7天 = make(map[string]int)
  171. // 获取当前日期
  172. //currentDate := time.Now().Local()
  173. // 生成最近7天的日期
  174. for i := 0; i < 7; i++ {
  175. date := currentDate.AddDate(0, 0, -i)
  176. 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")+"'")
  177. }
  178. lib.Company_Map[C_r.Id] = Company_Project_r
  179. //str, _ := json.Marshal(Company_Project_r)
  180. //fmt.Println(string(str))
  181. logs.Println("处理公司完成:", C_r.T_name)
  182. logs.PrintlnData("[" + C_r.T_name + "] 耗时:" + time.Since(start).String())
  183. go func() {
  184. time.Sleep(time.Minute * 10)
  185. delete(lib.GO_Handle, C_r.Id)
  186. }()
  187. }
  188. func StatisticsTask_GO() {
  189. fmt.Println("----开始统计-----")
  190. Company_All := Account.Read_Company_All()
  191. for _, C_r := range Company_All {
  192. //内部测试
  193. if C_r.T_path[:5] == "/0/1/" {
  194. continue
  195. }
  196. _, ok := lib.GO_Handle[C_r.Id]
  197. if ok {
  198. continue
  199. }
  200. Company_Handle(C_r)
  201. }
  202. fmt.Println("----保存成功-----")
  203. // 将map保存到文件
  204. err := lib.SaveMapToFile(lib.Company_Map, "data.json")
  205. if err != nil {
  206. fmt.Println("保存失败:", err)
  207. return
  208. }
  209. }
  210. //func Device_Data(C_r Account.Company) []models.DeviceList_Project {
  211. // logs.Println("开始处理公司数据:", C_r.T_name)
  212. //
  213. // DeviceList := []models.DeviceList_Project{}
  214. // for _, ds := range Device.Read_DeviceSensor_ByT_pid(C_r.Id) {
  215. // ds_ := models.DeviceList_Project{}
  216. //
  217. // ds_.T_sn = ds.T_sn
  218. // ds_.T_id = ds.T_id
  219. // ds_.T_name = ds.T_name
  220. // ds_.T_sort = ds.T_sort
  221. // ds_.T_3dview = ds.T_3dview
  222. // ds_.T_type = ds.T_type
  223. // ds_.T_link = ds.T_link
  224. //
  225. // dd := Device.Read_DeviceData(ds.T_sn, ds.T_id)
  226. // ds_.T_t = dd.T_t
  227. // ds_.T_rh = dd.T_rh
  228. // ds_.T_time = dd.T_time.Format("2006-01-02 15:04:05")
  229. // if dsp, is := Device.Read_DeviceSensorParameter(ds.T_sn, ds.T_id); is {
  230. // ds_.T_Tlower = dsp.T_Tlower
  231. // ds_.T_Tupper = dsp.T_Tupper
  232. // ds_.T_RHlower = dsp.T_RHlower
  233. // ds_.T_RHupper = dsp.T_RHupper
  234. // }
  235. //
  236. // ds_.T_Dattery = ds.T_Dattery
  237. // ds_.T_Site = ds.T_Site
  238. // ds_.T_monitor = ds.T_monitor
  239. // ds_.T_online = ds.T_online
  240. // ds_.T_online_s = ds.T_online_s
  241. // DeviceList = append(DeviceList, ds_)
  242. //
  243. // }
  244. //
  245. // return DeviceList
  246. //
  247. //}