ice_locker.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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. )
  13. type IceLocker struct {
  14. service.Service
  15. }
  16. // GetPage 获取IceLocker列表
  17. func (e *IceLocker) GetPage(c *dto.IceLockerGetPageReq, list *[]model.IceLocker, count *int64, p *actions.DataPermission) error {
  18. var err error
  19. var data model.IceLocker
  20. if c.PageSize == 9999 {
  21. err = e.Orm.Model(&data).
  22. Scopes(
  23. actions.Permission(data.TableName(), p),
  24. ).
  25. Find(list).Limit(-1).Offset(-1).
  26. Count(count).Error
  27. if err != nil {
  28. e.Log.Errorf("db error: %s", err)
  29. return global.GetFailedErr
  30. }
  31. } else {
  32. err = e.Orm.Model(&data).
  33. Scopes(
  34. cDto.MakeCondition(c.GetNeedSearch()),
  35. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  36. actions.Permission(data.TableName(), p),
  37. ).
  38. Find(list).Limit(-1).Offset(-1).
  39. Count(count).Error
  40. }
  41. if err != nil {
  42. e.Log.Errorf("db error: %s", err)
  43. return global.GetFailedErr
  44. }
  45. if c.ShowTemp {
  46. // 获取公司秘钥
  47. var company model.SysDept
  48. company, err = model.GetCompanyById(p.DeptId)
  49. if err != nil {
  50. e.Log.Errorf("db error: %s", err)
  51. return model.GetCompanyKeyErr
  52. }
  53. for i := 0; i < len(*list); i++ {
  54. deviceData, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey((*list)[i].Sn, company.ColdKey)
  55. if len(deviceData) > 0 {
  56. (*list)[i].DeviceData = deviceData[0].T_DeviceSensorData
  57. }
  58. }
  59. }
  60. return nil
  61. }
  62. // Get 获取IceLocker对象
  63. func (e *IceLocker) Get(d *dto.IceLockerGetReq, iceLockerModel *model.IceLocker, p *actions.DataPermission) error {
  64. err := e.Orm.
  65. Scopes(actions.Permission(iceLockerModel.TableName(), p)).
  66. First(iceLockerModel, d.GetId()).Error
  67. if err != nil {
  68. e.Log.Errorf("db error: %s", err)
  69. if errors.Is(err, gorm.ErrRecordNotFound) {
  70. return global.GetNotFoundOrNoPermissionErr
  71. }
  72. return global.GetFailedErr
  73. }
  74. return nil
  75. }
  76. // Insert 创建IceLocker对象
  77. func (e *IceLocker) Insert(c *dto.IceLockerInsertReq) error {
  78. var err error
  79. var data model.IceLocker
  80. tx := e.Orm.Begin()
  81. defer func() {
  82. if err != nil {
  83. tx.Rollback()
  84. } else {
  85. tx.Commit()
  86. }
  87. }()
  88. var k int64
  89. err = tx.Model(&data).Where("name = ? and dept_id = ?", c.Name, c.DeptId).Count(&k).Error
  90. if err != nil {
  91. e.Log.Errorf("db error: %s", err)
  92. return global.CreateFailedErr
  93. }
  94. if k > 0 {
  95. err = errors.New("冷冻柜名称已存在!")
  96. e.Log.Errorf("db error: %s", err)
  97. return err
  98. }
  99. // 添加冷冻柜
  100. c.Generate(&data)
  101. err = tx.Create(&data).Error
  102. if err != nil {
  103. e.Log.Errorf("db error: %s", err)
  104. return global.CreateFailedErr
  105. }
  106. c.Id = data.Id
  107. return nil
  108. }
  109. // Update 修改IceLocker对象
  110. func (e *IceLocker) Update(c *dto.IceLockerUpdateReq, p *actions.DataPermission) error {
  111. var err error
  112. tx := e.Orm.Begin()
  113. defer func() {
  114. if err != nil {
  115. tx.Rollback()
  116. } else {
  117. tx.Commit()
  118. }
  119. }()
  120. var iceLockerModel = model.IceLocker{}
  121. // 查询冷冻柜是否存在
  122. err = e.Orm.Scopes(actions.Permission(iceLockerModel.TableName(), p)).
  123. First(&iceLockerModel, c.GetId()).Error
  124. if err != nil {
  125. e.Log.Errorf("db error: %s", err)
  126. if errors.Is(err, gorm.ErrRecordNotFound) {
  127. return global.UpdateNotFoundOrNoPermissionErr
  128. }
  129. return global.UpdateFailedErr
  130. }
  131. if iceLockerModel.Name != c.Name {
  132. var k int64
  133. var data = model.IceLocker{}
  134. err = tx.Model(&data).Where("name = ? and dept_id = ?", c.Name, iceLockerModel.DeptId).Count(&k).Error
  135. if err != nil {
  136. e.Log.Errorf("db error: %s", err)
  137. return global.CreateFailedErr
  138. }
  139. if k > 0 {
  140. err = errors.New("冷冻柜名称已存在!")
  141. e.Log.Errorf("db error: %s", err)
  142. return err
  143. }
  144. }
  145. if iceLockerModel.Sn != c.Sn {
  146. var k int64
  147. var data = model.IceLocker{}
  148. err = tx.Model(&data).Where("sn = ?", c.Sn).Count(&k).Error
  149. if err != nil {
  150. e.Log.Errorf("db error: %s", err)
  151. return global.CreateFailedErr
  152. }
  153. if k > 0 {
  154. err = errors.New("该Sn已绑定!")
  155. e.Log.Errorf("db error: %s", err)
  156. return err
  157. }
  158. iceLockerModel.HistorySn = append(iceLockerModel.HistorySn, c.Sn)
  159. }
  160. c.Generate(&iceLockerModel)
  161. err = tx.Save(&iceLockerModel).Error
  162. if err != nil {
  163. e.Log.Errorf("db error: %s", err)
  164. return global.UpdateFailedErr
  165. }
  166. c.Id = iceLockerModel.Id
  167. return nil
  168. }
  169. // Remove 删除IceLocker
  170. func (e *IceLocker) Remove(c *dto.IceLockerDeleteReq, p *actions.DataPermission) error {
  171. var err error
  172. tx := e.Orm.Begin()
  173. defer func() {
  174. if err != nil {
  175. tx.Rollback()
  176. } else {
  177. tx.Commit()
  178. }
  179. }()
  180. var iceRaftModel model.IceRaft
  181. var count int64
  182. err = e.Orm.Model(&iceRaftModel).
  183. Scopes(
  184. actions.Permission(iceRaftModel.TableName(), p),
  185. IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusWaitUse),
  186. IceRaftNameRecordIceLockerIdScopes(c.Id),
  187. ).
  188. Where("ice_raft.status = '2'").
  189. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  190. Count(&count).Error
  191. if err != nil {
  192. e.Log.Errorf("db error: %s", err)
  193. return global.DeleteFailedErr
  194. }
  195. if count > 0 {
  196. err = errors.New("该冷冻柜下有冰排待使用中,无法删除!")
  197. return err
  198. }
  199. var iceLockerModel model.IceLocker
  200. // 查询冷冻柜是否存在
  201. err = e.Orm.Scopes(actions.Permission(iceLockerModel.TableName(), p)).
  202. First(&iceLockerModel, c.GetId()).Error
  203. if err != nil {
  204. e.Log.Errorf("db error: %s", err)
  205. if errors.Is(err, gorm.ErrRecordNotFound) {
  206. return global.DeleteNotFoundOrNoPermissionErr
  207. }
  208. return global.DeleteFailedErr
  209. }
  210. db := tx.Delete(&iceLockerModel)
  211. if err = db.Error; err != nil {
  212. e.Log.Errorf("db error: %s", err)
  213. return global.DeleteFailedErr
  214. }
  215. if db.RowsAffected == 0 {
  216. return global.DeleteNotFoundOrNoPermissionErr
  217. }
  218. return nil
  219. }
  220. func (e *IceLocker) BatchInsert(c *dto.IceLockerBatchInsertReq) error {
  221. var err error
  222. tx := e.Orm.Begin()
  223. defer func() {
  224. if err != nil {
  225. tx.Rollback()
  226. } else {
  227. tx.Commit()
  228. }
  229. }()
  230. for _, iceLocker := range c.List {
  231. var data model.IceLocker
  232. var k int64
  233. err = tx.Model(&data).Where("sn = ?", iceLocker.Sn).Count(&k).Error
  234. if err != nil {
  235. e.Log.Errorf("db error: %s", err)
  236. return global.CreateFailedErr
  237. }
  238. if k > 0 {
  239. //err = errors.New("该Sn已绑定!")
  240. continue
  241. }
  242. // 添加冷冻柜
  243. iceLocker.CreateBy = c.CreateBy
  244. iceLocker.DeptId = c.DeptId
  245. iceLocker.Status = c.Status
  246. iceLocker.Generate(&data)
  247. data.HistorySn = []string{data.Sn}
  248. err = tx.Create(&data).Error
  249. if err != nil {
  250. e.Log.Errorf("db error: %s", err)
  251. return global.CreateFailedErr
  252. }
  253. }
  254. return nil
  255. }