cooler_box.go 18 KB

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