ice_locker.go 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  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/nats/nats_server"
  9. "errors"
  10. "gogs.baozhida.cn/zoie/OAuth-core/service"
  11. "gorm.io/gorm"
  12. "math"
  13. )
  14. type IceLocker struct {
  15. service.Service
  16. }
  17. // GetPage 获取IceLocker列表
  18. func (e *IceLocker) GetPage(c *dto.IceLockerGetPageReq, list *[]model.IceLocker, count *int64, p *actions.DataPermission) error {
  19. var err error
  20. var data model.IceLocker
  21. if c.PageSize == 9999 {
  22. err = e.Orm.Model(&data).
  23. Scopes(
  24. actions.Permission(data.TableName(), p),
  25. ).
  26. Find(list).Limit(-1).Offset(-1).
  27. Count(count).Error
  28. if err != nil {
  29. e.Log.Errorf("db error: %s", err)
  30. return global.GetFailedErr
  31. }
  32. } else {
  33. err = e.Orm.Model(&data).
  34. Scopes(
  35. cDto.MakeCondition(c.GetNeedSearch()),
  36. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  37. actions.Permission(data.TableName(), p),
  38. ).
  39. Find(list).Limit(-1).Offset(-1).
  40. Count(count).Error
  41. }
  42. if err != nil {
  43. e.Log.Errorf("db error: %s", err)
  44. return global.GetFailedErr
  45. }
  46. if c.ShowTemp {
  47. // 获取公司秘钥
  48. var company model.SysDept
  49. company, err = model.GetCompanyById(p.DeptId)
  50. if err != nil {
  51. e.Log.Errorf("db error: %s", err)
  52. return model.GetCompanyKeyErr
  53. }
  54. for i := 0; i < len(*list); i++ {
  55. deviceData, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey((*list)[i].Sn, company.ColdKey)
  56. if len(deviceData) > 0 {
  57. (*list)[i].DeviceData = deviceData[0].T_DeviceSensorData
  58. }
  59. }
  60. }
  61. return nil
  62. }
  63. // Get 获取IceLocker对象
  64. func (e *IceLocker) Get(d *dto.IceLockerGetReq, iceLockerModel *model.IceLocker, p *actions.DataPermission) error {
  65. err := e.Orm.
  66. Scopes(actions.Permission(iceLockerModel.TableName(), p)).
  67. First(iceLockerModel, d.GetId()).Error
  68. if err != nil {
  69. e.Log.Errorf("db error: %s", err)
  70. if errors.Is(err, gorm.ErrRecordNotFound) {
  71. return global.GetNotFoundOrNoPermissionErr
  72. }
  73. return global.GetFailedErr
  74. }
  75. return nil
  76. }
  77. // Insert 创建IceLocker对象
  78. func (e *IceLocker) Insert(c *dto.IceLockerInsertReq, p *actions.DataPermission) error {
  79. var err error
  80. var data model.IceLocker
  81. tx := e.Orm.Begin()
  82. defer func() {
  83. if err != nil {
  84. tx.Rollback()
  85. } else {
  86. tx.Commit()
  87. }
  88. }()
  89. var k int64
  90. err = tx.Model(&data).Where("name = ? and dept_id = ?", c.Name, c.DeptId).Count(&k).Error
  91. if err != nil {
  92. e.Log.Errorf("db error: %s", err)
  93. return global.CreateFailedErr
  94. }
  95. if k > 0 {
  96. err = errors.New("冷冻柜名称已存在!")
  97. e.Log.Errorf("db error: %s", err)
  98. return err
  99. }
  100. //var device nats_server.Device
  101. //var company model.SysDept
  102. //device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
  103. //if err != nil {
  104. // err = errors.New("获取SN信息失败,请检查SN是否正确!")
  105. // e.Log.Errorf("db error: %s", err)
  106. // return err
  107. //}
  108. //company, err = model.GetCompanyById(p.DeptId)
  109. //if err != nil {
  110. // e.Log.Errorf("db error: %s", err)
  111. // return err
  112. //}
  113. //if device.T_pid != company.Id {
  114. // err = errors.New("获取SN信息失败,请检查SN是否正确!")
  115. // e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
  116. // return err
  117. //}
  118. // 添加冷冻柜
  119. c.Generate(&data)
  120. err = tx.Create(&data).Error
  121. if err != nil {
  122. e.Log.Errorf("db error: %s", err)
  123. return global.CreateFailedErr
  124. }
  125. c.Id = data.Id
  126. return nil
  127. }
  128. // Update 修改IceLocker对象
  129. func (e *IceLocker) Update(c *dto.IceLockerUpdateReq, p *actions.DataPermission) error {
  130. var err error
  131. tx := e.Orm.Begin()
  132. defer func() {
  133. if err != nil {
  134. tx.Rollback()
  135. } else {
  136. tx.Commit()
  137. }
  138. }()
  139. var iceLockerModel = model.IceLocker{}
  140. // 查询冷冻柜是否存在
  141. err = e.Orm.Scopes(actions.Permission(iceLockerModel.TableName(), p)).
  142. First(&iceLockerModel, c.GetId()).Error
  143. if err != nil {
  144. e.Log.Errorf("db error: %s", err)
  145. if errors.Is(err, gorm.ErrRecordNotFound) {
  146. return global.UpdateNotFoundOrNoPermissionErr
  147. }
  148. return global.UpdateFailedErr
  149. }
  150. if iceLockerModel.Name != c.Name {
  151. var k int64
  152. var data = model.IceLocker{}
  153. err = tx.Model(&data).Where("name = ? and dept_id = ?", c.Name, iceLockerModel.DeptId).Count(&k).Error
  154. if err != nil {
  155. e.Log.Errorf("db error: %s", err)
  156. return global.CreateFailedErr
  157. }
  158. if k > 0 {
  159. err = errors.New("冷冻柜名称已存在!")
  160. e.Log.Errorf("db error: %s", err)
  161. return err
  162. }
  163. }
  164. if iceLockerModel.Sn != c.Sn && len(c.Sn) > 0 {
  165. var k int64
  166. var data = model.IceLocker{}
  167. err = tx.Model(&data).Where("sn = ?", c.Sn).Count(&k).Error
  168. if err != nil {
  169. e.Log.Errorf("db error: %s", err)
  170. return global.CreateFailedErr
  171. }
  172. if k > 0 {
  173. err = errors.New("该Sn已绑定!")
  174. e.Log.Errorf("db error: %s", err)
  175. return err
  176. }
  177. //var device nats_server.Device
  178. //var company model.SysDept
  179. //device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
  180. //if err != nil {
  181. // err = errors.New("获取SN信息失败,请检查SN是否正确!")
  182. // e.Log.Errorf("db error: %s", err)
  183. // return err
  184. //}
  185. //company, err = model.GetCompanyById(p.DeptId)
  186. //if err != nil {
  187. // e.Log.Errorf("db error: %s", err)
  188. // return err
  189. //}
  190. //if device.T_pid != company.Id {
  191. // err = errors.New("获取SN信息失败,请检查SN是否正确!")
  192. // e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
  193. // return err
  194. //}
  195. iceLockerModel.HistorySn = append(iceLockerModel.HistorySn, c.Sn)
  196. }
  197. c.Generate(&iceLockerModel)
  198. err = tx.Save(&iceLockerModel).Error
  199. if err != nil {
  200. e.Log.Errorf("db error: %s", err)
  201. return global.UpdateFailedErr
  202. }
  203. c.Id = iceLockerModel.Id
  204. return nil
  205. }
  206. // Remove 删除IceLocker
  207. func (e *IceLocker) Remove(c *dto.IceLockerDeleteReq, p *actions.DataPermission) error {
  208. var err error
  209. tx := e.Orm.Begin()
  210. defer func() {
  211. if err != nil {
  212. tx.Rollback()
  213. } else {
  214. tx.Commit()
  215. }
  216. }()
  217. var iceRaftModel model.IceRaft
  218. var count int64
  219. err = e.Orm.Model(&iceRaftModel).
  220. Scopes(
  221. actions.Permission(iceRaftModel.TableName(), p),
  222. IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusWaitUse),
  223. IceRaftNameRecordIceLockerIdScopes(c.Id),
  224. ).
  225. Where("ice_raft.status = '2'").
  226. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  227. Count(&count).Error
  228. if err != nil {
  229. e.Log.Errorf("db error: %s", err)
  230. return global.DeleteFailedErr
  231. }
  232. if count > 0 {
  233. err = errors.New("该冷冻柜下有冰排待使用中,无法删除!")
  234. return err
  235. }
  236. var iceLockerModel model.IceLocker
  237. // 查询冷冻柜是否存在
  238. err = e.Orm.Scopes(actions.Permission(iceLockerModel.TableName(), p)).
  239. First(&iceLockerModel, c.GetId()).Error
  240. if err != nil {
  241. e.Log.Errorf("db error: %s", err)
  242. if errors.Is(err, gorm.ErrRecordNotFound) {
  243. return global.DeleteNotFoundOrNoPermissionErr
  244. }
  245. return global.DeleteFailedErr
  246. }
  247. db := tx.Delete(&iceLockerModel)
  248. if err = db.Error; err != nil {
  249. e.Log.Errorf("db error: %s", err)
  250. return global.DeleteFailedErr
  251. }
  252. if db.RowsAffected == 0 {
  253. return global.DeleteNotFoundOrNoPermissionErr
  254. }
  255. return nil
  256. }
  257. func (e *IceLocker) BatchInsert(c *dto.IceLockerBatchInsertReq) error {
  258. var err error
  259. tx := e.Orm.Begin()
  260. defer func() {
  261. if err != nil {
  262. tx.Rollback()
  263. } else {
  264. tx.Commit()
  265. }
  266. }()
  267. for _, iceLocker := range c.List {
  268. var data model.IceLocker
  269. var k int64
  270. err = tx.Model(&data).Where("sn = ?", iceLocker.Sn).Count(&k).Error
  271. if err != nil {
  272. e.Log.Errorf("db error: %s", err)
  273. return global.CreateFailedErr
  274. }
  275. if k > 0 {
  276. //err = errors.New("该Sn已绑定!")
  277. continue
  278. }
  279. // 添加冷冻柜
  280. iceLocker.CreateBy = c.CreateBy
  281. iceLocker.DeptId = c.DeptId
  282. iceLocker.Status = c.Status
  283. iceLocker.Generate(&data)
  284. data.HistorySn = []string{data.Sn}
  285. err = tx.Create(&data).Error
  286. if err != nil {
  287. e.Log.Errorf("db error: %s", err)
  288. return global.CreateFailedErr
  289. }
  290. }
  291. return nil
  292. }
  293. func (e *IceLocker) GetIceLocker(c *dto.GetIceLockerReq, list *[]model.IceRaft, p *actions.DataPermission, count *int64) error {
  294. var err error
  295. tx := e.Orm.Begin()
  296. defer func() {
  297. if err != nil {
  298. tx.Rollback()
  299. } else {
  300. tx.Commit()
  301. }
  302. }()
  303. //查询冷冻柜是否存在
  304. var icerecord model.IceRaft
  305. err = e.Orm.Model(&icerecord).
  306. Scopes(
  307. cDto.MakeCondition(c.GetNeedSearch()),
  308. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  309. actions.Permission(icerecord.TableName(), p),
  310. IceRaftNameRecordIceLockerScopes(c.Status),
  311. IceRaftNameRecordIceLockerIdScopes(c.Locker),
  312. ).
  313. //Where("ice_raft.status = '2'").
  314. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  315. Preload("IceRaftRecord.IceLocker").
  316. Preload("IceRaftRecord.CoolerBox").
  317. Preload("IceRaftRecord").
  318. //Order("FIELD(ice_raft_record.status,'2','','1','3','4')").
  319. Find(list).Limit(-1).Offset(-1).
  320. Count(count).Error
  321. if err != nil {
  322. e.Log.Errorf("db error: %s", err)
  323. if errors.Is(err, gorm.ErrRecordNotFound) {
  324. return global.GetFailedErr
  325. }
  326. return global.GetFailedErr
  327. }
  328. for i := range *list {
  329. (*list)[i].IceRaftRecord.ForColdTimeActual = math.Floor((*list)[i].IceRaftRecord.ForColdTimeActual)
  330. }
  331. return nil
  332. }