ice_raft.go 16 KB

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