waybill_task.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. package service
  2. import (
  3. "cold-logistics/app/admin/model"
  4. "cold-logistics/app/admin/service/dto"
  5. cDto "cold-logistics/common/dto"
  6. "cold-logistics/common/global"
  7. model2 "cold-logistics/common/model"
  8. "cold-logistics/common/nats/nats_server"
  9. "errors"
  10. "fmt"
  11. "gogs.baozhida.cn/zoie/OAuth-core/service"
  12. "gorm.io/gorm"
  13. "sort"
  14. "time"
  15. )
  16. type WaybillTask struct {
  17. service.Service
  18. }
  19. func WaybillTaskTimeScopes(startTime, endTime string) func(db *gorm.DB) *gorm.DB {
  20. return func(db *gorm.DB) *gorm.DB {
  21. if len(startTime) == 0 && len(endTime) == 0 {
  22. return db
  23. }
  24. return db.Where("(start_time between ? and ?) or (end_time between ? and ?)",
  25. startTime, endTime, startTime, endTime)
  26. }
  27. }
  28. // GetPage 获取WaybillTask列表
  29. func (e *WaybillTask) GetPage(c *dto.WaybillTaskGetPageReq, list *[]model.WaybillTask, count *int64) error {
  30. var err error
  31. var data model.WaybillTask
  32. var waybill model.Waybill
  33. err = e.Orm.Model(&waybill).Where("waybill_no = ?", c.WaybillNo).First(&waybill).Error
  34. if err != nil {
  35. e.Log.Errorf("db error: %s", err)
  36. return errors.New("获取运单信息失败")
  37. }
  38. err = e.Orm.Model(&data).
  39. Scopes(
  40. cDto.MakeCondition(c.GetNeedSearch()),
  41. ).
  42. Preload("Warehouse").Preload("Car").
  43. Find(list).Limit(-1).Offset(-1).
  44. Count(count).Error
  45. if err != nil {
  46. e.Log.Errorf("db error: %s", err)
  47. return global.GetFailedErr
  48. }
  49. // 获取公司秘钥
  50. var company model.SysDept
  51. company, err = model.GetCompanyById(waybill.DeptId)
  52. if err != nil {
  53. e.Log.Errorf("db error: %s", err)
  54. return model.GetCompanyKeyErr
  55. }
  56. for i := 0; i < len(*list); i++ {
  57. // 获取传感器信息
  58. deviceSensorList, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey((*list)[i].Sn, company.ColdKey)
  59. (*list)[i].DeviceSensorList = deviceSensorList
  60. }
  61. return nil
  62. }
  63. // GetPage 获取WaybillTask列表
  64. func (e *WaybillTask) GetDataPage(c *dto.WaybillTaskGetDataPageReq) (list []nats_server.DeviceData_R, count int64, err error) {
  65. var task model.WaybillTask
  66. err = e.Orm.Where("id = ? and waybill_no = ?", c.TaskId, c.WaybillNo).First(&task).Error
  67. if err != nil {
  68. e.Log.Errorf("db error: %s", err)
  69. err = errors.New("获取运单信息错误!")
  70. return
  71. }
  72. if len(c.StartTime) > 0 {
  73. var st time.Time
  74. st, err = time.Parse("2006-01-02 15:04:05", c.StartTime)
  75. if err != nil {
  76. err = errors.New("解析时间字符串出错!")
  77. return
  78. }
  79. if st.Before(time.Time(task.StartTime)) {
  80. c.StartTime = task.StartTime.String()
  81. }
  82. } else {
  83. c.StartTime = task.StartTime.String()
  84. }
  85. if len(c.EndTime) > 0 {
  86. var et time.Time
  87. et, err = time.Parse("2006-01-02 15:04:05", c.EndTime)
  88. if err != nil {
  89. err = errors.New("解析时间字符串出错!")
  90. return
  91. }
  92. if et.After(time.Time(task.EndTime)) {
  93. c.EndTime = task.EndTime.String()
  94. }
  95. } else {
  96. c.EndTime = task.EndTime.String()
  97. }
  98. T_snid := ""
  99. for _, id := range c.T_ids {
  100. T_snid += fmt.Sprintf("%s,%d|", task.Sn, id)
  101. }
  102. if c.PageSize == 9999 {
  103. // 获取传感器信息
  104. list, count, err = nats_server.Cold_ReadDeviceDataListBy_T_snid(T_snid, c.StartTime, c.EndTime, 0, 9999)
  105. return
  106. }
  107. // 获取传感器信息
  108. list, count, err = nats_server.Cold_ReadDeviceDataListBy_T_snid(T_snid, c.StartTime, c.EndTime, c.Page, c.PageSize)
  109. return
  110. }
  111. func (e *WaybillTask) GetNewestDataPage(c *dto.WaybillTaskGetNewestDataPageReq) (data nats_server.DeviceData_R, err error) {
  112. var waybill model.Waybill
  113. err = e.Orm.Model(&waybill).Where("waybill_no = ?", c.WaybillNo).First(&waybill).Error
  114. if err != nil {
  115. e.Log.Errorf("db error: %s", err)
  116. err = errors.New("获取运单信息错误!")
  117. return
  118. }
  119. // 获取公司秘钥
  120. var company model.SysDept
  121. company, err = model.GetCompanyById(waybill.DeptId)
  122. if err != nil {
  123. e.Log.Errorf("db error: %s", err)
  124. err = model.GetCompanyKeyErr
  125. return
  126. }
  127. var taskList []model.WaybillTask
  128. err = e.Orm.Where("waybill_no = ?", c.WaybillNo).Order("id desc").Find(&taskList).Error
  129. if err != nil {
  130. e.Log.Errorf("db error: %s", err)
  131. err = errors.New("获取运单信息任务失败!")
  132. return
  133. }
  134. if len(taskList) == 0 {
  135. err = errors.New("获取运单信息任务失败!")
  136. return
  137. }
  138. var listAll []nats_server.DeviceData_R
  139. for _, task := range taskList {
  140. deviceSensorList, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey(task.Sn, company.ColdKey)
  141. if len(deviceSensorList) == 0 {
  142. continue
  143. }
  144. T_snid := fmt.Sprintf("%s,%d|", deviceSensorList[0].T_sn, deviceSensorList[0].T_id)
  145. if len(task.EndTime.String()) == 0 {
  146. task.EndTime = model2.Time(time.Now())
  147. }
  148. // 获取传感器信息
  149. list, _, _ := nats_server.Cold_ReadDeviceDataListBy_T_snid(T_snid, task.StartTime.String(), task.EndTime.String(), 0, 9999)
  150. if len(list) > 0 {
  151. listAll = append(listAll, list...)
  152. break
  153. }
  154. }
  155. if len(listAll) > 0 {
  156. data = listAll[0]
  157. return
  158. }
  159. err = errors.New("暂无温湿度记录信息!")
  160. return
  161. }
  162. func (e *WaybillTask) GetLocus(c *dto.WaybillGetLocusReq) ([]nats_server.DeviceData_R2, error) {
  163. var err error
  164. var data model.WaybillTask
  165. var waybill model.Waybill
  166. var taskList []model.WaybillTask
  167. locusList := make([]nats_server.DeviceData_R2, 0)
  168. err = e.Orm.Model(&waybill).Where("waybill_no = ?", c.WaybillNo).First(&waybill).Error
  169. if err != nil {
  170. e.Log.Errorf("db error: %s", err)
  171. return locusList, errors.New("获取运单信息失败")
  172. }
  173. // 获取公司秘钥
  174. var company model.SysDept
  175. company, err = model.GetCompanyById(waybill.DeptId)
  176. if err != nil {
  177. e.Log.Errorf("db error: %s", err)
  178. return locusList, model.GetCompanyKeyErr
  179. }
  180. err = e.Orm.Model(&data).
  181. Scopes(
  182. cDto.MakeCondition(c.GetNeedSearch()),
  183. ).Where("car_id > 0").
  184. Find(&taskList).Error
  185. if err != nil {
  186. e.Log.Errorf("db error: %s", err)
  187. return locusList, global.GetFailedErr
  188. }
  189. for i := 0; i < len(taskList); i++ {
  190. // 获取传感器信息
  191. deviceSensorList, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey(taskList[i].Sn, company.ColdKey)
  192. if len(deviceSensorList) > 0 {
  193. T_snid := fmt.Sprintf("%s,%d|", taskList[i].Sn, deviceSensorList[0].T_id)
  194. dataList, _, err := nats_server.Cold_ReadDeviceDataListBy_T_snidForLocus(T_snid, taskList[i].StartTime.String(), taskList[i].EndTime.String(), 0, 9999)
  195. if err != nil {
  196. e.Log.Errorf("nats 获取轨迹信息失败: %s", err)
  197. return locusList, global.GetFailedErr
  198. }
  199. // 倒序
  200. sort.Slice(dataList, func(i, j int) bool {
  201. if dataList[i].T_time < dataList[j].T_time {
  202. return true
  203. }
  204. return false
  205. })
  206. locusList = append(locusList, dataList...)
  207. }
  208. }
  209. return locusList, nil
  210. }