cooler_box.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. package service
  2. import (
  3. "cold-delivery/app/admin/model"
  4. "cold-delivery/app/admin/service/dto"
  5. "cold-delivery/common/actions"
  6. cDto "cold-delivery/common/dto"
  7. "cold-delivery/common/global"
  8. "cold-delivery/common/lib"
  9. model2 "cold-delivery/common/model"
  10. "cold-delivery/common/nats/nats_server"
  11. "errors"
  12. "fmt"
  13. "gogs.baozhida.cn/zoie/OAuth-core/service"
  14. "gorm.io/gorm"
  15. "sort"
  16. "strconv"
  17. "strings"
  18. "sync"
  19. "time"
  20. )
  21. type CoolerBox struct {
  22. service.Service
  23. }
  24. // GetPage 获取CoolerBox列表
  25. func (e *CoolerBox) GetPage(c *dto.CoolerBoxGetPageReq, list *[]model.CoolerBox, count *int64, p *actions.DataPermission) error {
  26. var err error
  27. var data model.CoolerBox
  28. if c.PageSize == 9999 {
  29. err = e.Orm.Model(&data).
  30. Scopes(
  31. actions.Permission(data.TableName(), p),
  32. ).
  33. Find(list).Limit(-1).Offset(-1).
  34. Count(count).Error
  35. } else {
  36. err = e.Orm.Model(&data).
  37. Scopes(
  38. cDto.MakeCondition(c.GetNeedSearch()),
  39. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  40. actions.Permission(data.TableName(), p),
  41. ).
  42. Find(list).Limit(-1).Offset(-1).
  43. Count(count).Error
  44. }
  45. if err != nil {
  46. e.Log.Errorf("db error: %s", err)
  47. return global.GetFailedErr
  48. }
  49. if c.ShowTemp {
  50. // 获取公司秘钥
  51. var company model.SysDept
  52. company, err = model.GetCompanyById(p.DeptId)
  53. if err != nil {
  54. e.Log.Errorf("db error: %s", err)
  55. return model.GetCompanyKeyErr
  56. }
  57. for i := 0; i < len(*list); i++ {
  58. deviceData, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey((*list)[i].Sn, company.ColdKey)
  59. if len(deviceData) > 0 {
  60. (*list)[i].DeviceData = deviceData[0].T_DeviceSensorData
  61. }
  62. }
  63. }
  64. for i := range *list {
  65. var dataIce model.IceRaft
  66. var dataIces []model.IceRaft
  67. err := e.Orm.Model(&dataIce).
  68. Scopes(
  69. actions.Permission(dataIce.TableName(), p),
  70. IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusUsing),
  71. IceRaftNameRecordCoolerBoxIdScopes((*list)[i].Id),
  72. ).
  73. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  74. Preload("IceRaftRecord").
  75. Find(&dataIces).Error
  76. if err != nil {
  77. e.Log.Errorf("db error: %s", err)
  78. return global.GetFailedErr
  79. }
  80. (*list)[i].IceRaft = dataIces
  81. err = e.Orm.Model(&model.CoolerBoxRecord{}).Where("cooler_box_id = ?", (*list)[i].Id).Where("status = ?", 1).First(&(*list)[i].CoolerBoxRecords).Error
  82. if err != nil {
  83. if errors.Is(err, gorm.ErrRecordNotFound) {
  84. continue
  85. } else {
  86. e.Log.Errorf("查询保温箱记录失败: %s", err)
  87. return global.GetFailedErr
  88. }
  89. }
  90. }
  91. //排序
  92. sort.SliceStable(*list, func(i, j int) bool {
  93. return len((*list)[i].IceRaft) > len((*list)[j].IceRaft)
  94. })
  95. return nil
  96. }
  97. // Get 获取CoolerBox对象
  98. func (e *CoolerBox) Get(d *dto.CoolerBoxGetReq, CoolerBoxModel *model.CoolerBox, p *actions.DataPermission) error {
  99. err := e.Orm.
  100. Scopes(actions.Permission(CoolerBoxModel.TableName(), p)).
  101. First(CoolerBoxModel, d.GetId()).Error
  102. if err != nil {
  103. e.Log.Errorf("db error: %s", err)
  104. if errors.Is(err, gorm.ErrRecordNotFound) {
  105. return global.GetNotFoundOrNoPermissionErr
  106. }
  107. return global.GetFailedErr
  108. }
  109. return nil
  110. }
  111. // Insert 创建CoolerBox对象
  112. func (e *CoolerBox) Insert(c *dto.CoolerBoxInsertReq, p *actions.DataPermission) error {
  113. var err error
  114. var data model.CoolerBox
  115. tx := e.Orm.Begin()
  116. defer func() {
  117. if err != nil {
  118. tx.Rollback()
  119. } else {
  120. tx.Commit()
  121. }
  122. }()
  123. var k int64
  124. if len(c.Sn) > 0 {
  125. err = tx.Model(&data).Where("sn = ?", c.Sn).Count(&k).Error
  126. if err != nil {
  127. e.Log.Errorf("db error: %s", err)
  128. return global.CreateFailedErr
  129. }
  130. if k > 0 {
  131. err = errors.New("该Sn已绑定!")
  132. e.Log.Errorf("db error: %s", err)
  133. return err
  134. }
  135. }
  136. //var device nats_server.Device
  137. //var company model.SysDept
  138. //device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
  139. //if err != nil {
  140. // err = errors.New("获取SN信息失败,请检查SN是否正确!")
  141. // e.Log.Errorf("db error: %s", err)
  142. // return err
  143. //}
  144. //company, err = model.GetCompanyById(p.DeptId)
  145. //if err != nil {
  146. // e.Log.Errorf("db error: %s", err)
  147. // return err
  148. //}
  149. //if device.T_pid != company.Id {
  150. // err = errors.New("获取SN信息失败,请检查SN是否正确!")
  151. // e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
  152. // return err
  153. //}
  154. // 添加保温箱
  155. c.Generate(&data)
  156. data.HistorySn = []string{data.Sn}
  157. err = tx.Create(&data).Error
  158. if err != nil {
  159. e.Log.Errorf("db error: %s", err)
  160. return global.CreateFailedErr
  161. }
  162. c.Id = data.Id
  163. return nil
  164. }
  165. func (e *CoolerBox) BatchInsert(c *dto.CoolerBoxBatchInsertReq) error {
  166. var err error
  167. tx := e.Orm.Begin()
  168. defer func() {
  169. if err != nil {
  170. tx.Rollback()
  171. } else {
  172. tx.Commit()
  173. }
  174. }()
  175. for _, coolerBox := range c.List {
  176. var data model.CoolerBox
  177. var k int64
  178. err = tx.Model(&data).Where("sn = ?", coolerBox.Sn).Count(&k).Error
  179. if err != nil {
  180. e.Log.Errorf("db error: %s", err)
  181. return global.CreateFailedErr
  182. }
  183. if k > 0 {
  184. //err = errors.New("该Sn已绑定!")
  185. continue
  186. }
  187. // 添加保温箱
  188. coolerBox.CreateBy = c.CreateBy
  189. coolerBox.DeptId = c.DeptId
  190. coolerBox.Status = c.Status
  191. coolerBox.Generate(&data)
  192. data.HistorySn = []string{data.Sn}
  193. err = tx.Create(&data).Error
  194. if err != nil {
  195. e.Log.Errorf("db error: %s", err)
  196. return global.CreateFailedErr
  197. }
  198. }
  199. return nil
  200. }
  201. // Update 修改CoolerBox对象
  202. func (e *CoolerBox) Update(c *dto.CoolerBoxUpdateReq, p *actions.DataPermission) error {
  203. var err error
  204. tx := e.Orm.Begin()
  205. defer func() {
  206. if err != nil {
  207. tx.Rollback()
  208. } else {
  209. tx.Commit()
  210. }
  211. }()
  212. var CoolerBoxModel = model.CoolerBox{}
  213. // 查询保温箱是否存在
  214. err = e.Orm.Scopes(actions.Permission(CoolerBoxModel.TableName(), p)).
  215. First(&CoolerBoxModel, c.GetId()).Error
  216. if err != nil {
  217. e.Log.Errorf("db error: %s", err)
  218. if errors.Is(err, gorm.ErrRecordNotFound) {
  219. return global.UpdateNotFoundOrNoPermissionErr
  220. }
  221. return global.UpdateFailedErr
  222. }
  223. if CoolerBoxModel.Sn != c.Sn && len(c.Sn) > 0 {
  224. var k int64
  225. var data = model.CoolerBox{}
  226. err = tx.Model(&data).Where("sn = ?", c.Sn).Count(&k).Error
  227. if err != nil {
  228. e.Log.Errorf("db error: %s", err)
  229. return global.CreateFailedErr
  230. }
  231. if k > 0 {
  232. err = errors.New("该Sn已绑定!")
  233. e.Log.Errorf("db error: %s", err)
  234. return err
  235. }
  236. //var device nats_server.Device
  237. //var company model.SysDept
  238. //device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
  239. //if err != nil {
  240. // err = errors.New("获取SN信息失败,请检查SN是否正确!")
  241. // e.Log.Errorf("db error: %s", err)
  242. // return err
  243. //}
  244. //company, err = model.GetCompanyById(p.DeptId)
  245. //if err != nil {
  246. // e.Log.Errorf("db error: %s", err)
  247. // return err
  248. //}
  249. //if device.T_pid != company.Id {
  250. // err = errors.New("获取SN信息失败,请检查SN是否正确!")
  251. // e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
  252. // return err
  253. //}
  254. CoolerBoxModel.HistorySn = append(CoolerBoxModel.HistorySn, c.Sn)
  255. }
  256. c.Generate(&CoolerBoxModel)
  257. err = tx.Save(&CoolerBoxModel).Error
  258. if err != nil {
  259. e.Log.Errorf("db error: %s", err)
  260. return global.UpdateFailedErr
  261. }
  262. c.Id = CoolerBoxModel.Id
  263. return nil
  264. }
  265. // Remove 删除CoolerBox
  266. func (e *CoolerBox) Remove(c *dto.CoolerBoxDeleteReq, p *actions.DataPermission) error {
  267. var err error
  268. tx := e.Orm.Begin()
  269. defer func() {
  270. if err != nil {
  271. tx.Rollback()
  272. } else {
  273. tx.Commit()
  274. }
  275. }()
  276. var iceRaftModel model.IceRaft
  277. var count int64
  278. err = e.Orm.Model(&iceRaftModel).
  279. Scopes(
  280. actions.Permission(iceRaftModel.TableName(), p),
  281. IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusUsing),
  282. IceRaftNameRecordCoolerBoxIdScopes(c.Id),
  283. ).
  284. Where("ice_raft.status = '2'").
  285. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  286. Count(&count).Error
  287. if err != nil {
  288. e.Log.Errorf("db error: %s", err)
  289. return global.DeleteFailedErr
  290. }
  291. if count > 0 {
  292. err = errors.New("该保温箱下有冰排正在使用中,无法删除!")
  293. return err
  294. }
  295. var CoolerBoxModel model.CoolerBox
  296. // 查询保温箱是否存在
  297. err = e.Orm.Scopes(actions.Permission(CoolerBoxModel.TableName(), p)).
  298. First(&CoolerBoxModel, c.GetId()).Error
  299. if err != nil {
  300. e.Log.Errorf("db error: %s", err)
  301. if errors.Is(err, gorm.ErrRecordNotFound) {
  302. return global.DeleteNotFoundOrNoPermissionErr
  303. }
  304. return global.DeleteFailedErr
  305. }
  306. db := tx.Delete(&CoolerBoxModel)
  307. if err = db.Error; err != nil {
  308. e.Log.Errorf("db error: %s", err)
  309. return global.DeleteFailedErr
  310. }
  311. if db.RowsAffected == 0 {
  312. return global.DeleteNotFoundOrNoPermissionErr
  313. }
  314. return nil
  315. }
  316. // GetHistory 获取保温箱历史信息
  317. func (e *CoolerBox) GetHistory(c *dto.CoolerBoxBatchReqSN, p *actions.DataPermission) ([]dto.HistoricalData, error) {
  318. var err error
  319. var taskList []model.WaybillTask
  320. var historical []dto.HistoricalData
  321. if c.Page == 0 {
  322. c.Page = 1
  323. }
  324. if c.PageZ == 0 {
  325. c.PageZ = 10
  326. }
  327. // 查询运单任务信息
  328. err = e.Orm.Model(&model.WaybillTask{}).
  329. Where("cooler_box_id = ?", c.Id).
  330. Find(&taskList).Error
  331. if err != nil {
  332. e.Log.Errorf("db error: %s", err)
  333. return nil, errors.New("获取运单任务信息失败")
  334. }
  335. // 获取公司秘钥
  336. var dataDept model.SysDept
  337. var Depts []model.SysDept
  338. err = e.Orm.Model(&dataDept).
  339. Scopes(
  340. CompanyIdScopesUser(p.DeptId),
  341. ).
  342. Find(&Depts).Limit(-1).Offset(-1).Error
  343. if err != nil {
  344. e.Log.Errorf("db error: %s", err)
  345. return nil, model.GetCompanyKeyErr
  346. }
  347. //company, err := model.GetCompanyById(p.DeptId)
  348. //if err != nil {
  349. // e.Log.Errorf("db error: %s", err)
  350. // return nil, model.GetCompanyKeyErr
  351. //}
  352. // 限制并发请求数量
  353. const maxConcurrentRequests = 10
  354. semaphore := make(chan struct{}, maxConcurrentRequests)
  355. var deviceSensorList []nats_server.DeviceSensor_R
  356. var wg sync.WaitGroup
  357. for _, task := range taskList {
  358. wg.Add(1)
  359. go func(task model.WaybillTask) {
  360. defer wg.Done()
  361. semaphore <- struct{}{}
  362. defer func() { <-semaphore }()
  363. for _, v := range Depts {
  364. deviceSensorList, _, _ = nats_server.Cold_CompanyDeviceSensor_List_ByKey(task.Sn, v.ColdKey)
  365. if len(deviceSensorList) > 0 {
  366. historical = append(historical, dto.HistoricalData{
  367. Sn: task.Sn,
  368. T_id: strconv.Itoa(deviceSensorList[0].T_id) + "|",
  369. StartTime: task.StartTime.String(),
  370. EndTime: task.EndTime.String(),
  371. CompanyName: v.Name,
  372. })
  373. break
  374. }
  375. }
  376. if len(deviceSensorList) == 0 {
  377. return
  378. }
  379. if err != nil {
  380. e.Log.Errorf("nats 获取轨迹信息失败: %s", err)
  381. return
  382. }
  383. }(task)
  384. }
  385. wg.Wait()
  386. sort.Slice(historical, func(i, j int) bool {
  387. if historical[i].StartTime < historical[j].StartTime {
  388. return true
  389. }
  390. return false
  391. })
  392. startIndex := (c.Page - 1) * c.PageZ
  393. endIndex := startIndex + c.PageZ
  394. if endIndex > len(historical) {
  395. endIndex = len(historical)
  396. }
  397. pageHistory := historical[startIndex:endIndex]
  398. return pageHistory, nil
  399. }
  400. // GetNewLocus 获取最新轨迹
  401. func (e *CoolerBox) GetNewLocus(c *dto.CoolerBoxReq, list *[]nats_server.DeviceData_) error {
  402. // 获取公司秘钥
  403. var dataDept model.SysDept
  404. var Depts []model.SysDept
  405. fmt.Println("公司ID=================", c.Id)
  406. err := e.Orm.Model(&dataDept).Where("id = ?", c.Id).Or("parent_id =?", c.Id).Find(&Depts).Error
  407. if err != nil {
  408. e.Log.Errorf("db error: %s", err)
  409. return global.GetFailedErr
  410. }
  411. var deviceSensorList []nats_server.DeviceSensor_R
  412. for _, v := range Depts {
  413. deviceSensorList, _, _ = nats_server.Cold_CompanyDeviceSensor_List_ByKey(c.T_sn, v.ColdKey)
  414. if len(deviceSensorList) > 0 {
  415. break
  416. }
  417. }
  418. if len(deviceSensorList) == 0 {
  419. return errors.New("该设备不属于该公司")
  420. }
  421. data, err := nats_server.Read_DeviceTask_List_By_Condition(c.T_sn)
  422. if err != nil {
  423. e.Log.Errorf("设备未开启监控: %s", err)
  424. return errors.New("设备未开启监控")
  425. }
  426. // 当最新设备状态为1时,证明设备正在启动中,查询大于开始时间的所有轨迹,设备状态为2时,查询开始时间到结束时间的轨迹
  427. if data.T_State == 1 {
  428. deviceData, err := nats_server.Read_Start_Time_DeviceData(c.T_sn, deviceSensorList[0].T_id, data.T_Ut_start.Format("2006-01-02 15:04:05"), "")
  429. if err != nil {
  430. e.Log.Errorf("获取设备轨迹失败: %s", err)
  431. return errors.New("获取设备轨迹失败")
  432. }
  433. *list = appendUniqueDeviceData(*list, deviceData)
  434. } else if data.T_State == 2 {
  435. deviceData, err := nats_server.Read_Start_Time_DeviceData(c.T_sn, deviceSensorList[0].T_id, data.T_Ut_start.Format("2006-01-02 15:04:05"), data.T_Ut_end.Format("2006-01-02 15:04:05"))
  436. if err != nil {
  437. e.Log.Errorf("获取设备轨迹失败: %s", err)
  438. return errors.New("获取设备轨迹失败")
  439. }
  440. *list = appendUniqueDeviceData(*list, deviceData)
  441. }
  442. return nil
  443. }
  444. // 去重并追加设备数据
  445. func appendUniqueDeviceData(list []nats_server.DeviceData_, newData []nats_server.DeviceData_) []nats_server.DeviceData_ {
  446. uniqueMap := make(map[time.Time]bool)
  447. for _, d := range list {
  448. uniqueMap[d.T_time] = true
  449. }
  450. for _, d := range newData {
  451. if !uniqueMap[d.T_time] {
  452. if len(d.T_site) > 0 && d.T_site != "0,0" {
  453. split := strings.Split(d.T_site, ",")
  454. defer func() {
  455. if r := recover(); r != nil {
  456. fmt.Println("数组下标越界:", r)
  457. }
  458. }()
  459. Lng := split[0]
  460. Lat := split[1]
  461. Lngs, _ := strconv.ParseFloat(Lng, 64)
  462. Lats, _ := strconv.ParseFloat(Lat, 64)
  463. mLng, mLat := lib.Wgs84ToGcj02(Lngs, Lats)
  464. d.T_site = fmt.Sprintf("%v,%v", mLng, mLat)
  465. list = append(list, d)
  466. }
  467. }
  468. }
  469. //排序
  470. sort.Slice(list, func(i, j int) bool {
  471. return list[i].T_time.After(list[j].T_time)
  472. })
  473. return list
  474. }
  475. // GetCoolerBoxIce 获取保温箱下的所有历史冰排
  476. func (e *CoolerBox) GetCoolerBoxIce(c *dto.GetCoolerBoxIce, list *[]model.IceRaftRecord, p *actions.DataPermission, count *int64) error {
  477. var err error
  478. tx := e.Orm.Begin()
  479. defer func() {
  480. if err != nil {
  481. tx.Rollback()
  482. } else {
  483. tx.Commit()
  484. }
  485. }()
  486. //查询保温箱是否存在
  487. var icerecord model.IceRaftRecord
  488. err = e.Orm.Scopes(
  489. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  490. actions.Permission(icerecord.TableName(), p)).
  491. Where("cooler_box_id=?", c.CoolerBoxId).
  492. Preload("IceLocker").
  493. Preload("CoolerBox").
  494. Find(&list).Count(count).Error
  495. if err != nil {
  496. e.Log.Errorf("db error: %s", err)
  497. if errors.Is(err, gorm.ErrRecordNotFound) {
  498. return global.GetFailedErr
  499. }
  500. return global.GetFailedErr
  501. }
  502. return nil
  503. }
  504. // GetCoolerBoxIceAll 获取保温箱所有历史记录
  505. func (e *CoolerBox) GetCoolerBoxIceAll(c *dto.GetCoolerBoxIceAll, list *[]model.CoolerBoxRecord, p *actions.DataPermission, count *int64) error {
  506. var err error
  507. tx := e.Orm.Begin()
  508. defer func() {
  509. if err != nil {
  510. tx.Rollback()
  511. } else {
  512. tx.Commit()
  513. }
  514. }()
  515. //查询保温箱是否存在
  516. var cooler model.CoolerBoxRecord
  517. if c.PageSize == 9999 {
  518. err = e.Orm.Scopes(
  519. cDto.MakeCondition(c.GetNeedSearch()),
  520. actions.Permission(cooler.TableName(), p),
  521. CollerStartTimeAndEndTimeScopes(c.StartTime, c.EndTime),
  522. ).
  523. Find(&list).Limit(-1).Offset(-1).Order("cooler_user_time asc").Count(count).Error
  524. } else {
  525. err = e.Orm.Scopes(
  526. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  527. cDto.MakeCondition(c.GetNeedSearch()),
  528. actions.Permission(cooler.TableName(), p),
  529. CollerStartTimeAndEndTimeScopes(c.StartTime, c.EndTime),
  530. ).
  531. Find(&list).Limit(-1).Offset(-1).Order("cooler_user_time asc").Count(count).
  532. Count(count).Error
  533. }
  534. if err != nil {
  535. e.Log.Errorf("db error: %s", err)
  536. if errors.Is(err, gorm.ErrRecordNotFound) {
  537. return global.GetFailedErr
  538. }
  539. return global.GetFailedErr
  540. }
  541. return nil
  542. }
  543. // CoolerBoxStarTime 保温箱开始遇冷
  544. func (e *CoolerBox) CoolerBoxStarTime(c *dto.IceStartbleForColfTimReq, p *actions.DataPermission) error {
  545. var err error
  546. tx := e.Orm.Begin()
  547. defer func() {
  548. if err != nil {
  549. tx.Rollback()
  550. } else {
  551. tx.Commit()
  552. }
  553. }()
  554. var user model.SysUser
  555. first := tx.Model(&model.SysUser{}).Where("id = ?", p.UserId).First(&user)
  556. if first.Error != nil {
  557. return global.GetFailedErr
  558. }
  559. //添加保温箱记录
  560. for _, v := range c.Id {
  561. var cooler model.CoolerBoxRecord
  562. var coolerBox model.CoolerBox
  563. err = tx.Model(&model.CoolerBox{}).Where("id = ?", v).First(&coolerBox).Error
  564. if err != nil {
  565. e.Log.Errorf("获取保温箱信息失败: %s", err)
  566. return errors.New("获取保温箱信息失败")
  567. }
  568. cooler.CoolerBoxStarTime = model2.Time(time.Now())
  569. cooler.CoolerColdUsers = user.NickName
  570. cooler.CoolerColdAddress = coolerBox.ColdSpots
  571. cooler.ColdTemperatures = coolerBox.ColdTemperatures
  572. cooler.Status = "1" //保温箱使用状态变为使用中
  573. CoolerBoxId, _ := strconv.Atoi(v)
  574. cooler.CoolerBoxId = CoolerBoxId
  575. cooler.DeptId = p.DeptId
  576. cooler.Sn = coolerBox.Sn
  577. cooler.Name = coolerBox.Name
  578. cooler.ForColdCoolerTime = coolerBox.ForColdCoolerTime
  579. err = tx.Create(&cooler).Error
  580. if err != nil {
  581. e.Log.Errorf("db error: %s", err)
  582. return global.CreateFailedErr
  583. }
  584. //更新保温箱状态为遇冷中
  585. if coolerBox.UseStatus != 0 {
  586. e.Log.Errorf("保温箱已经预冷,不能重复预冷: %s", err)
  587. return errors.New("保温箱已经预冷,不能重复预冷")
  588. }
  589. err = tx.Model(&model.CoolerBox{}).Where("id =?", v).Update("use_status", 1).Error
  590. if err != nil {
  591. e.Log.Errorf("更新保温箱状态失败: %s", err)
  592. return errors.New("更新保温箱状态失败")
  593. }
  594. }
  595. return nil
  596. }
  597. // CoolerBoxEndUse 保温箱结束使用
  598. func (e *CoolerBox) CoolerBoxEndUse(c *dto.IceStartbleForColfTimReq, p *actions.DataPermission) error {
  599. var err error
  600. tx := e.Orm.Begin()
  601. defer func() {
  602. if err != nil {
  603. tx.Rollback()
  604. } else {
  605. tx.Commit()
  606. }
  607. }()
  608. //添加保温箱记录
  609. for _, v := range c.Id {
  610. var coolerRecord model.CoolerBoxRecord
  611. var coolerBox model.CoolerBox
  612. err = tx.Model(&model.CoolerBox{}).Where("id = ?", v).First(&coolerBox).Error
  613. if err != nil {
  614. e.Log.Errorf("获取保温箱信息失败: %s", err)
  615. return errors.New("获取保温箱信息失败")
  616. }
  617. //if coolerBox.UseStatus != 2 {
  618. // e.Log.Errorf("保温箱未开始使用使用,不能结束使用: %s", err)
  619. // return errors.New("保温箱未开始使用使用,不能结束使用")
  620. //}
  621. //err := tx.Model(&model.CoolerBoxRecord{}).Where("cooler_box_id = ?", v).Where("status = ?", 1).First(&cooler).Error
  622. //if err != nil {
  623. // if errors.Is(err, gorm.ErrRecordNotFound) {
  624. // return errors.New("保温箱未开始使用使用,不能结束使用")
  625. // } else {
  626. // e.Log.Errorf("查询保温箱记录失败: %s", err)
  627. // return errors.New("查询保温箱记录失败")
  628. // }
  629. //}
  630. err = tx.Model(&model.CoolerBoxRecord{}).Where("cooler_box_id = ?", v).Where("status = ?", 1).First(&coolerRecord).Error
  631. if err != nil {
  632. e.Log.Errorf("获取保温箱记录失败: %s", err)
  633. return errors.New("保温箱未开始使用不能结束使用")
  634. }
  635. if len(coolerRecord.CoolerUserTime.String()) == 0 {
  636. err = tx.Model(&model.CoolerBoxRecord{}).Where("cooler_box_id = ?", v).Where("status = ?", 1).Delete(&coolerRecord).Error
  637. if err != nil {
  638. e.Log.Errorf("删除保温箱记录失败: %s", err)
  639. return errors.New("删除保温箱记录失败")
  640. }
  641. //更新保温箱信息为默认未使用状态
  642. err = tx.Model(&model.CoolerBox{}).Where("id = ?", v).Update("use_status", 0).Error
  643. if err != nil {
  644. e.Log.Errorf("保温箱状态更新失败: %s", err)
  645. return errors.New("保温箱状态更新失败")
  646. }
  647. } else {
  648. //保温箱使用状态变为结束使用
  649. coolerRecord.CoolerEndUseTime = model2.Time(time.Now())
  650. coolerRecord.Status = "2"
  651. err = tx.Model(&coolerRecord).Where("cooler_box_id = ?", v).Updates(&coolerRecord).Error
  652. if err != nil {
  653. e.Log.Errorf("db error: %s", err)
  654. return global.CreateFailedErr
  655. }
  656. //更新保温箱状态为默认状态 0
  657. err = tx.Model(&model.CoolerBox{}).Where("id =?", v).Update("use_status", 0).Error
  658. if err != nil {
  659. e.Log.Errorf("更新保温箱状态失败: %s", err)
  660. return errors.New("更新保温箱状态失败")
  661. }
  662. }
  663. }
  664. return nil
  665. }