ice_raft.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  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. model2 "cold-delivery/common/model"
  9. "errors"
  10. "fmt"
  11. "gogs.baozhida.cn/zoie/OAuth-core/service"
  12. "gorm.io/gorm"
  13. "time"
  14. )
  15. type IceRaft struct {
  16. service.Service
  17. }
  18. // GetPage 获取IceRaft列表
  19. func (e *IceRaft) GetPage(c *dto.IceRaftGetPageReq, list *[]model.IceRaft, count *int64, p *actions.DataPermission) error {
  20. var err error
  21. var data model.IceRaft
  22. if c.PageSize == 9999 {
  23. err = e.Orm.Model(&data).
  24. Scopes(
  25. actions.Permission(data.TableName(), p),
  26. ).
  27. Find(list).Limit(-1).Offset(-1).
  28. Count(count).Error
  29. } else {
  30. err = e.Orm.Model(&data).
  31. Scopes(
  32. cDto.MakeCondition(c.GetNeedSearch()),
  33. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  34. actions.Permission(data.TableName(), p),
  35. ).
  36. Find(list).Limit(-1).Offset(-1).
  37. Count(count).Error
  38. }
  39. if err != nil {
  40. e.Log.Errorf("db error: %s", err)
  41. return global.GetFailedErr
  42. }
  43. return nil
  44. }
  45. func IceRaftNameRecordStatusScopes(status string) func(db *gorm.DB) *gorm.DB {
  46. return func(db *gorm.DB) *gorm.DB {
  47. if len(status) == 0 {
  48. return db
  49. }
  50. return db.Where("ice_raft_record.status = ?", status)
  51. }
  52. }
  53. func IceRaftNameRecordIceLockerIdScopes(iceLockerId int) func(db *gorm.DB) *gorm.DB {
  54. return func(db *gorm.DB) *gorm.DB {
  55. if iceLockerId == 0 {
  56. return db
  57. }
  58. return db.Where("ice_raft_record.ice_locker_id = ? and ice_raft_record.cooler_box_id = 0", iceLockerId)
  59. }
  60. }
  61. func IceRaftNameRecordCoolerBoxIdScopes(coolerBoxId int) func(db *gorm.DB) *gorm.DB {
  62. return func(db *gorm.DB) *gorm.DB {
  63. if coolerBoxId == 0 {
  64. return db
  65. }
  66. return db.Where("ice_raft_record.cooler_box_id = ?", coolerBoxId)
  67. }
  68. }
  69. func (e *IceRaft) GetRecordPage(c *dto.IceRaftGetNewestRecordPageReq, list *[]model.IceRaft, count *int64, p *actions.DataPermission) error {
  70. var err error
  71. var data model.IceRaft
  72. if c.PageSize == 9999 {
  73. err = e.Orm.Model(&data).
  74. Scopes(
  75. actions.Permission(data.TableName(), p),
  76. ).
  77. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  78. Preload("IceRaftRecord.IceLocker").
  79. Preload("IceRaftRecord.CoolerBox").
  80. Find(list).Limit(-1).Offset(-1).
  81. Count(count).Error
  82. } else {
  83. err = e.Orm.Model(&data).
  84. Scopes(
  85. cDto.MakeCondition(c.GetNeedSearch()),
  86. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  87. actions.Permission(data.TableName(), p),
  88. IceRaftNameRecordStatusScopes(c.Status),
  89. IceRaftNameRecordIceLockerIdScopes(c.IceLockerId),
  90. IceRaftNameRecordCoolerBoxIdScopes(c.CoolerBoxId),
  91. ).
  92. Where("ice_raft_record.deleted_at is null").
  93. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  94. Preload("IceRaftRecord.IceLocker").
  95. Preload("IceRaftRecord.CoolerBox").
  96. Find(list).Limit(-1).Offset(-1).
  97. Count(count).Error
  98. }
  99. if err != nil {
  100. e.Log.Errorf("db error: %s", err)
  101. return global.GetFailedErr
  102. }
  103. return nil
  104. }
  105. // Get 获取IceRaft对象
  106. func (e *IceRaft) Get(d *dto.IceRaftGetReq, iceRaftModel *model.IceRaft, p *actions.DataPermission) error {
  107. err := e.Orm.
  108. Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  109. First(iceRaftModel, d.GetId()).Error
  110. if err != nil {
  111. e.Log.Errorf("db error: %s", err)
  112. if errors.Is(err, gorm.ErrRecordNotFound) {
  113. return global.GetNotFoundOrNoPermissionErr
  114. }
  115. return global.GetFailedErr
  116. }
  117. return nil
  118. }
  119. // Insert 创建IceRaft对象
  120. func (e *IceRaft) Insert(c *dto.IceRaftInsertReq) error {
  121. var err error
  122. var data model.IceRaft
  123. tx := e.Orm.Begin()
  124. defer func() {
  125. if err != nil {
  126. tx.Rollback()
  127. } else {
  128. tx.Commit()
  129. }
  130. }()
  131. var k int64
  132. err = tx.Model(&data).Where("code = ? and dept_id = ?", c.Code, c.DeptId).Count(&k).Error
  133. if err != nil {
  134. e.Log.Errorf("db error: %s", err)
  135. return global.CreateFailedErr
  136. }
  137. if k > 0 {
  138. err = errors.New("冰排编号已存在!")
  139. e.Log.Errorf("db error: %s", err)
  140. return err
  141. }
  142. // 添加冰柜
  143. c.Generate(&data)
  144. err = tx.Create(&data).Error
  145. if err != nil {
  146. e.Log.Errorf("db error: %s", err)
  147. return global.CreateFailedErr
  148. }
  149. c.Id = data.Id
  150. return nil
  151. }
  152. // Update 修改IceRaft对象
  153. func (e *IceRaft) Update(c *dto.IceRaftUpdateReq, p *actions.DataPermission) error {
  154. var err error
  155. tx := e.Orm.Begin()
  156. defer func() {
  157. if err != nil {
  158. tx.Rollback()
  159. } else {
  160. tx.Commit()
  161. }
  162. }()
  163. var iceRaftModel = model.IceRaft{}
  164. // 查询冰柜是否存在
  165. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  166. First(&iceRaftModel, c.GetId()).Error
  167. if err != nil {
  168. e.Log.Errorf("db error: %s", err)
  169. if errors.Is(err, gorm.ErrRecordNotFound) {
  170. return global.UpdateNotFoundOrNoPermissionErr
  171. }
  172. return global.UpdateFailedErr
  173. }
  174. if iceRaftModel.Code != c.Code {
  175. var k int64
  176. var data = model.IceRaft{}
  177. err = tx.Model(&data).Where("code = ? and dept_id = ?", c.Code, iceRaftModel.DeptId).Count(&k).Error
  178. if err != nil {
  179. e.Log.Errorf("db error: %s", err)
  180. return global.CreateFailedErr
  181. }
  182. if k > 0 {
  183. err = errors.New("冰排编号已存在!")
  184. e.Log.Errorf("db error: %s", err)
  185. return err
  186. }
  187. }
  188. c.Generate(&iceRaftModel)
  189. err = tx.Save(&iceRaftModel).Error
  190. if err != nil {
  191. e.Log.Errorf("db error: %s", err)
  192. return global.UpdateFailedErr
  193. }
  194. c.Id = iceRaftModel.Id
  195. return nil
  196. }
  197. // Remove 删除IceRaft
  198. func (e *IceRaft) Remove(c *dto.IceRaftDeleteReq, p *actions.DataPermission) error {
  199. var err error
  200. tx := e.Orm.Begin()
  201. defer func() {
  202. if err != nil {
  203. tx.Rollback()
  204. } else {
  205. tx.Commit()
  206. }
  207. }()
  208. var iceRaftModel model.IceRaft
  209. // 查询冰柜是否存在
  210. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  211. First(&iceRaftModel, c.GetId()).Error
  212. if err != nil {
  213. e.Log.Errorf("db error: %s", err)
  214. if errors.Is(err, gorm.ErrRecordNotFound) {
  215. return global.DeleteNotFoundOrNoPermissionErr
  216. }
  217. return global.DeleteFailedErr
  218. }
  219. db := tx.Delete(&iceRaftModel)
  220. if err = db.Error; err != nil {
  221. e.Log.Errorf("db error: %s", err)
  222. return global.DeleteFailedErr
  223. }
  224. if db.RowsAffected == 0 {
  225. return global.DeleteNotFoundOrNoPermissionErr
  226. }
  227. return nil
  228. }
  229. func (e *IceRaft) InStorage(c *dto.IceRaftInStorageReq, p *actions.DataPermission) error {
  230. var err error
  231. tx := e.Orm.Begin()
  232. defer func() {
  233. if err != nil {
  234. tx.Rollback()
  235. } else {
  236. tx.Commit()
  237. }
  238. }()
  239. // 查询冷藏柜信息
  240. var iceLockerModel model.IceLocker
  241. err = e.Orm.Scopes(actions.Permission(iceLockerModel.TableName(), p)).
  242. First(&iceLockerModel, c.IceLockerId).Error
  243. if err != nil {
  244. e.Log.Errorf("db error: %s", err)
  245. return errors.New("获取冷藏柜信息失败")
  246. }
  247. if iceLockerModel.Status != model.IceLockerStatusNormal {
  248. err = errors.New("冷藏柜状态异常")
  249. return err
  250. }
  251. for _, code := range c.Code {
  252. // 查询冰排是否存在
  253. var iceRaftModel model.IceRaft
  254. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  255. Where("code = ?", code).
  256. Preload("IceRaftRecord").
  257. First(&iceRaftModel).Error
  258. if err != nil {
  259. // 冰排编号不存在,添加
  260. if errors.Is(err, gorm.ErrRecordNotFound) {
  261. iceRaftModel.Code = code
  262. iceRaftModel.Status = model.IceRaftStatusNormal
  263. iceRaftModel.DeptId = p.DeptId
  264. iceRaftModel.CreateBy = p.UserId
  265. err = tx.Create(&iceRaftModel).Error
  266. if err != nil {
  267. e.Log.Errorf("db error: %s", err)
  268. return errors.New(fmt.Sprintf("添加冰排【%s】信息失败", code))
  269. }
  270. }else {
  271. e.Log.Errorf("db error: %s", err)
  272. return errors.New("获取冰排信息失败")
  273. }
  274. }
  275. if iceRaftModel.Status != model.IceRaftStatusNormal {
  276. err = errors.New(fmt.Sprintf("冰排【%s】状态异常", code))
  277. return err
  278. }
  279. if iceRaftModel.IceRaftRecord.Status == model.IceRaftRecordStatusFreezing || iceRaftModel.IceRaftRecord.Status == model.IceRaftRecordStatusWaitUse {
  280. err = errors.New(fmt.Sprintf("冰排【%s】状态为%s,入库失败!", code, model.GetIceRaftRecordStatus(iceRaftModel.IceRaftRecord.Status)))
  281. return err
  282. }
  283. // 更新冰排状态 使用中 -> 已完成
  284. err = tx.Model(&model.IceRaftRecord{}).
  285. Where("ice_raft_id = ? and status = ?", iceRaftModel.Id, model.IceRaftRecordStatusUsing).
  286. Updates(map[string]interface{}{
  287. "status": model.IceRaftRecordStatusFinish,
  288. }).Error
  289. // 添加冰排记录
  290. var iceRaftRecordModel = model.IceRaftRecord{
  291. IceLockerId: iceLockerModel.Id,
  292. IceRaftId: iceRaftModel.Id,
  293. Status: model.IceRaftRecordStatusFreezing,
  294. InStorageTime: model2.Time(time.Now()),
  295. FreezeClaim: c.FreezeClaim,
  296. DeptBy: model2.DeptBy{
  297. DeptId: p.DeptId,
  298. },
  299. }
  300. err = tx.Create(&iceRaftRecordModel).Error
  301. if err != nil {
  302. e.Log.Errorf("db error: %s", err)
  303. return errors.New("添加冰排记录失败")
  304. }
  305. // 更新冰排使用记录
  306. err = tx.Model(&iceRaftModel).
  307. Where("id = ?", iceRaftModel.Id).
  308. Updates(map[string]interface{}{
  309. "ice_raft_record_id": iceRaftRecordModel.Id,
  310. }).Error
  311. if err != nil {
  312. e.Log.Errorf("db error: %s", err)
  313. return errors.New("关联冰排记录失败")
  314. }
  315. }
  316. return nil
  317. }
  318. func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermission) error {
  319. var err error
  320. tx := e.Orm.Begin()
  321. defer func() {
  322. if err != nil {
  323. tx.Rollback()
  324. } else {
  325. tx.Commit()
  326. }
  327. }()
  328. // 查询保温箱信息
  329. var coolerBoxModel model.CoolerBox
  330. err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)).
  331. First(&coolerBoxModel, c.CoolerBoxId).Error
  332. if err != nil {
  333. e.Log.Errorf("db error: %s", err)
  334. return errors.New("获取保温箱信息失败")
  335. }
  336. if coolerBoxModel.Status != model.CoolerBoxStatusNormal {
  337. err = errors.New("保温箱状态异常")
  338. return err
  339. }
  340. for _, code := range c.Code {
  341. // 查询冰排是否存在
  342. var iceRaftModel model.IceRaft
  343. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  344. Where("code = ?", code).
  345. Preload("IceRaftRecord").
  346. First(&iceRaftModel).Error
  347. if err != nil {
  348. e.Log.Errorf("db error: %s", err)
  349. return errors.New("获取冰排信息失败")
  350. }
  351. if iceRaftModel.Status != model.IceRaftStatusNormal {
  352. err = errors.New(fmt.Sprintf("冰排【%s】状态异常", code))
  353. return err
  354. }
  355. // 获取冰排记录
  356. var iceRaftRecordModel model.IceRaftRecord
  357. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  358. Where("ice_raft_id = ?", iceRaftModel.Id).
  359. First(&iceRaftRecordModel, iceRaftModel.IceRaftRecordId).Error
  360. if err != nil {
  361. e.Log.Errorf("db error: %s", err)
  362. return errors.New("获取冰排记录失败")
  363. }
  364. if len(iceRaftRecordModel.OutStorageTime.String()) > 0 {
  365. err = errors.New(fmt.Sprintf("冰排【%s】已出库,禁止出库!", code))
  366. return err
  367. }
  368. inTime := iceRaftRecordModel.InStorageTime.Local()
  369. if inTime.Add(time.Hour * time.Duration(iceRaftRecordModel.FreezeClaim)).After(time.Now()) {
  370. err = errors.New(fmt.Sprintf("冰排【%s】未达到冷冻时长,禁止出库", code))
  371. return err
  372. }
  373. iceRaftRecordModel.Status = model.IceRaftRecordStatusUsing
  374. iceRaftRecordModel.CoolerBoxId = coolerBoxModel.Id
  375. iceRaftRecordModel.OutStorageTime = model2.Time(time.Now())
  376. err = tx.Save(&iceRaftRecordModel).Error
  377. if err != nil {
  378. e.Log.Errorf("db error: %s", err)
  379. return errors.New("保存冰排记录失败")
  380. }
  381. }
  382. return nil
  383. }
  384. // 查询保温箱关联的冰排
  385. func (e *IceRaft) GetPageByCoolerBoxId(coolerBoxId int, list *[]string, p *actions.DataPermission) error {
  386. var data model.IceRaft
  387. err := e.Orm.Model(&data).
  388. Select("code").
  389. Scopes(
  390. actions.Permission(data.TableName(), p),
  391. IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusUsing),
  392. IceRaftNameRecordCoolerBoxIdScopes(coolerBoxId),
  393. ).
  394. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  395. Find(list).Error
  396. if err != nil {
  397. e.Log.Errorf("db error: %s", err)
  398. return global.GetFailedErr
  399. }
  400. return nil
  401. }
  402. type IceRaftRecord struct {
  403. service.Service
  404. }
  405. // GetPage 获取IceRaft列表
  406. func (e *IceRaftRecord) GetPage(c *dto.IceRaftRecordGetPageReq, list *[]model.IceRaftRecord, count *int64, p *actions.DataPermission) error {
  407. var err error
  408. var data model.IceRaftRecord
  409. if c.PageSize == 9999 {
  410. err = e.Orm.Model(&data).
  411. Scopes(
  412. actions.Permission(data.TableName(), p),
  413. ).
  414. Preload("IceLocker").
  415. Preload("CoolerBox").
  416. Find(list).Limit(-1).Offset(-1).
  417. Count(count).Error
  418. } else {
  419. err = e.Orm.Model(&data).
  420. Scopes(
  421. cDto.MakeCondition(c.GetNeedSearch()),
  422. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  423. actions.Permission(data.TableName(), p),
  424. ).
  425. Preload("IceLocker").
  426. Preload("CoolerBox").
  427. Find(list).Limit(-1).Offset(-1).
  428. Count(count).Error
  429. }
  430. if err != nil {
  431. e.Log.Errorf("db error: %s", err)
  432. return global.GetFailedErr
  433. }
  434. return nil
  435. }
  436. // Update 修改IceRaft对象
  437. func (e *IceRaftRecord) Update(c *dto.IceRaftRecordUpdateReq, p *actions.DataPermission) error {
  438. var err error
  439. tx := e.Orm.Begin()
  440. defer func() {
  441. if err != nil {
  442. tx.Rollback()
  443. } else {
  444. tx.Commit()
  445. }
  446. }()
  447. var iceRaftRecordModel = model.IceRaftRecord{}
  448. // 查询冰柜是否存在
  449. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  450. First(&iceRaftRecordModel, c.GetId()).Error
  451. if err != nil {
  452. e.Log.Errorf("db error: %s", err)
  453. if errors.Is(err, gorm.ErrRecordNotFound) {
  454. return global.UpdateNotFoundOrNoPermissionErr
  455. }
  456. return global.UpdateFailedErr
  457. }
  458. iceRaftRecordModel.IceLockerId = c.IceLockerId
  459. iceRaftRecordModel.FreezeClaim = c.FreezeClaim
  460. if len(iceRaftRecordModel.OutStorageTime.String()) > 0 {
  461. iceRaftRecordModel.CoolerBoxId = c.CoolerBoxId
  462. }
  463. err = tx.Save(&iceRaftRecordModel).Error
  464. if err != nil {
  465. e.Log.Errorf("db error: %s", err)
  466. return global.UpdateFailedErr
  467. }
  468. c.Id = iceRaftRecordModel.Id
  469. return nil
  470. }
  471. // Remove 删除IceRaft
  472. func (e *IceRaftRecord) Remove(c *dto.IceRaftRecordDeleteReq, p *actions.DataPermission) error {
  473. var err error
  474. tx := e.Orm.Begin()
  475. defer func() {
  476. if err != nil {
  477. tx.Rollback()
  478. } else {
  479. tx.Commit()
  480. }
  481. }()
  482. var iceRaftRecordModel model.IceRaftRecord
  483. // 查询冰柜是否存在
  484. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  485. First(&iceRaftRecordModel, c.GetId()).Error
  486. if err != nil {
  487. e.Log.Errorf("db error: %s", err)
  488. if errors.Is(err, gorm.ErrRecordNotFound) {
  489. return global.DeleteNotFoundOrNoPermissionErr
  490. }
  491. return global.DeleteFailedErr
  492. }
  493. db := tx.Delete(&iceRaftRecordModel)
  494. if err = db.Error; err != nil {
  495. e.Log.Errorf("db error: %s", err)
  496. return global.DeleteFailedErr
  497. }
  498. if db.RowsAffected == 0 {
  499. return global.DeleteNotFoundOrNoPermissionErr
  500. }
  501. // 更改冰排关联状态
  502. var iceRaftModel model.IceRaft
  503. var secondIceRaftRecordModel model.IceRaftRecord
  504. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  505. First(&iceRaftModel, iceRaftRecordModel.IceRaftId).Error
  506. if err != nil {
  507. e.Log.Errorf("db error: %s", err)
  508. return global.DeleteFailedErr
  509. }
  510. err = e.Orm.Scopes(actions.Permission(secondIceRaftRecordModel.TableName(), p)).
  511. Where("ice_raft_id = ? and id != ?", iceRaftRecordModel.IceRaftId, iceRaftRecordModel.Id).
  512. First(&secondIceRaftRecordModel).Error
  513. if err != nil {
  514. if errors.Is(err, gorm.ErrRecordNotFound) {
  515. iceRaftModel.IceRaftRecordId = 0
  516. }
  517. }
  518. iceRaftModel.IceRaftRecordId = secondIceRaftRecordModel.Id
  519. err = tx.Save(&iceRaftModel).Error
  520. if err != nil {
  521. e.Log.Errorf("db error: %s", err)
  522. return global.UpdateFailedErr
  523. }
  524. return nil
  525. }