ice_raft.go 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125
  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. "errors"
  11. "fmt"
  12. "sort"
  13. "strings"
  14. "time"
  15. "gogs.baozhida.cn/zoie/OAuth-core/service"
  16. "gorm.io/gorm"
  17. )
  18. type IceRaft struct {
  19. service.Service
  20. }
  21. // GetPage 获取IceRaft列表
  22. func (e *IceRaft) GetPage(c *dto.IceRaftGetPageReq, list *[]model.IceRaft, count *int64, p *actions.DataPermission) error {
  23. var err error
  24. var data model.IceRaft
  25. if c.PageSize == 9999 {
  26. err = e.Orm.Model(&data).
  27. Scopes(
  28. actions.Permission(data.TableName(), p),
  29. ).Order("ice_raft.sort desc").
  30. Find(list).Limit(-1).Offset(-1).
  31. Count(count).Error
  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. ).Order("ice_raft.sort desc").
  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. return nil
  47. }
  48. func IceRaftNameRecordStatusScopes(status string) func(db *gorm.DB) *gorm.DB {
  49. return func(db *gorm.DB) *gorm.DB {
  50. if len(status) == 0 {
  51. return db
  52. }
  53. if status == "0" {
  54. return db.Where("ice_raft_record.status is null")
  55. }
  56. return db.Where("ice_raft_record.status = ?", status)
  57. }
  58. }
  59. func IceRaftNameRecordIceLockerScopes(status string) func(db *gorm.DB) *gorm.DB {
  60. return func(db *gorm.DB) *gorm.DB {
  61. if len(status) == 0 {
  62. return db.Where("ice_raft_record.status = 1 or ice_raft_record.status =2 or ice_raft_record.status =5 or ice_raft_record.status =6")
  63. }
  64. if status == "0" {
  65. return db.Where("ice_raft_record.status is null")
  66. }
  67. return db.Where("ice_raft_record.status = ?", status)
  68. }
  69. }
  70. func IceRaftNameRecordIceLockerIdScopes(iceLockerId int) func(db *gorm.DB) *gorm.DB {
  71. return func(db *gorm.DB) *gorm.DB {
  72. if iceLockerId == 0 {
  73. return db
  74. }
  75. return db.Where("ice_raft_record.ice_locker_id = ? and ice_raft_record.cooler_box_id = 0", iceLockerId)
  76. }
  77. }
  78. func IceRaftNameRecordCoolerBoxIdScopes(coolerBoxId int) func(db *gorm.DB) *gorm.DB {
  79. return func(db *gorm.DB) *gorm.DB {
  80. if coolerBoxId == 0 {
  81. return db
  82. }
  83. return db.Where("ice_raft_record.cooler_box_id = ?", coolerBoxId)
  84. }
  85. }
  86. func IceRaftStartTimeAndEndTimeScopes(startTime, endtime string) func(db *gorm.DB) *gorm.DB {
  87. return func(db *gorm.DB) *gorm.DB {
  88. if len(startTime) == 0 {
  89. return db
  90. }
  91. return db.Where("ice_raft_record.ice_use_time >= ?", startTime).Where("ice_raft_record.ice_use_time <= ?", endtime)
  92. }
  93. }
  94. func CollerStartTimeAndEndTimeScopes(startTime, endtime string) func(db *gorm.DB) *gorm.DB {
  95. return func(db *gorm.DB) *gorm.DB {
  96. if len(startTime) == 0 {
  97. return db
  98. }
  99. return db.Where("cooler_box_record.cooler_box_star_time >= ?", startTime).Where("cooler_box_record.cooler_box_star_time <= ?", endtime)
  100. }
  101. }
  102. func (e *IceRaft) GetRecordPage(c *dto.IceRaftGetNewestRecordPageReq, list *[]model.IceRaft, count *int64, p *actions.DataPermission) error {
  103. var err error
  104. var data model.IceRaft
  105. if c.PageSize == 9999 {
  106. err = e.Orm.Model(&data).
  107. Scopes(
  108. actions.Permission(data.TableName(), p),
  109. ).
  110. Where("ice_raft.status = '2'").
  111. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  112. Preload("IceRaftRecord.IceLocker").
  113. Preload("IceRaftRecord.CoolerBox").
  114. Preload("IceRaftRecord").
  115. Order("FIELD(ice_raft_record.status,'2','','1','3','4')").
  116. Find(list).Limit(-1).Offset(-1).
  117. Count(count).Error
  118. } else {
  119. err = e.Orm.Model(&data).
  120. Scopes(
  121. cDto.MakeCondition(c.GetNeedSearch()),
  122. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  123. actions.Permission(data.TableName(), p),
  124. IceRaftNameRecordStatusScopes(c.Status),
  125. IceRaftNameRecordIceLockerIdScopes(c.IceLockerId),
  126. IceRaftNameRecordCoolerBoxIdScopes(c.CoolerBoxId),
  127. ).
  128. Where("ice_raft.status = '2'").
  129. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  130. Preload("IceRaftRecord.IceLocker").
  131. Preload("IceRaftRecord.CoolerBox").
  132. Preload("IceRaftRecord").
  133. Order("FIELD(ice_raft_record.status,'2','','1','3','4')").
  134. Find(list).Limit(-1).Offset(-1).
  135. Count(count).Error
  136. }
  137. //for i, _ := range *list {
  138. // if (*list)[i].IceRaftRecord.IsSuitableForCold == 1 && len((*list)[i].IceRaftRecord.StartIceColdTime.String()) != 0 {
  139. // start, _ := time.Parse("2006-01-02 15:04:05", (*list)[i].IceRaftRecord.StartIceColdTime.String())
  140. // end, _ := time.Parse("2006-01-02 15:04:05", (*list)[i].IceRaftRecord.EndForColdTime.String())
  141. // sub := end.Sub(start)
  142. // hours := sub.Hours()
  143. // minutes := int(sub.Minutes()) % 60
  144. // sprintf := fmt.Sprintf("%vh%dm\n", hours, minutes)
  145. // (*list)[i].IceRaftRecord.CoolingTime = sprintf
  146. // }
  147. //}
  148. if err != nil {
  149. e.Log.Errorf("db error: %s", err)
  150. return global.GetFailedErr
  151. }
  152. return nil
  153. }
  154. // Get 获取IceRaft对象
  155. func (e *IceRaft) Get(d *dto.IceRaftGetReq, iceRaftModel *model.IceRaft, p *actions.DataPermission) error {
  156. err := e.Orm.
  157. Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  158. First(iceRaftModel, d.GetId()).Error
  159. if err != nil {
  160. e.Log.Errorf("db error: %s", err)
  161. if errors.Is(err, gorm.ErrRecordNotFound) {
  162. return global.GetNotFoundOrNoPermissionErr
  163. }
  164. return global.GetFailedErr
  165. }
  166. return nil
  167. }
  168. func (e *IceRaft) GetByCode(d *dto.IceRaftGetByCodeReq, iceRaftModel *model.IceRaft, p *actions.DataPermission) error {
  169. err := e.Orm.
  170. Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  171. Where("code = ?", d.Code).
  172. First(iceRaftModel).Error
  173. if err != nil {
  174. e.Log.Errorf("db error: %s", err)
  175. if errors.Is(err, gorm.ErrRecordNotFound) {
  176. return errors.New(fmt.Sprintf("冰排编号【%s】不存在!", d.Code))
  177. }
  178. return global.GetFailedErr
  179. }
  180. return nil
  181. }
  182. // Insert 创建IceRaft对象
  183. func (e *IceRaft) Insert(c *dto.IceRaftInsertReq) error {
  184. var err error
  185. var data model.IceRaft
  186. tx := e.Orm.Begin()
  187. defer func() {
  188. if err != nil {
  189. tx.Rollback()
  190. } else {
  191. tx.Commit()
  192. }
  193. }()
  194. for _, code := range c.CodeList {
  195. var k int64
  196. err = tx.Model(&data).Where("code = ? and dept_id = ?", code, c.DeptId).Count(&k).Error
  197. if err != nil {
  198. e.Log.Errorf("db error: %s", err)
  199. return global.CreateFailedErr
  200. }
  201. // 冰排编号已存在
  202. if k > 0 {
  203. err = errors.New("该编号已存在!")
  204. return err
  205. }
  206. // 添加冰排
  207. data.Id = 0
  208. c.Generate(&data, code)
  209. err = tx.Create(&data).Error
  210. if err != nil {
  211. e.Log.Errorf("db error: %s", err)
  212. return global.CreateFailedErr
  213. }
  214. }
  215. return nil
  216. }
  217. // Update 修改IceRaft对象
  218. func (e *IceRaft) Update(c *dto.IceRaftUpdateReq, p *actions.DataPermission) error {
  219. var err error
  220. tx := e.Orm.Begin()
  221. defer func() {
  222. if err != nil {
  223. tx.Rollback()
  224. } else {
  225. tx.Commit()
  226. }
  227. }()
  228. var iceRaftModel = model.IceRaft{}
  229. // 查询冰排是否存在
  230. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  231. First(&iceRaftModel, c.GetId()).Error
  232. if err != nil {
  233. e.Log.Errorf("db error: %s", err)
  234. if errors.Is(err, gorm.ErrRecordNotFound) {
  235. return global.UpdateNotFoundOrNoPermissionErr
  236. }
  237. return global.UpdateFailedErr
  238. }
  239. if iceRaftModel.Code != c.Code {
  240. var k int64
  241. var data = model.IceRaft{}
  242. err = tx.Model(&data).Where("code = ? and dept_id = ?", c.Code, iceRaftModel.DeptId).Count(&k).Error
  243. if err != nil {
  244. e.Log.Errorf("db error: %s", err)
  245. return global.CreateFailedErr
  246. }
  247. if k > 0 {
  248. err = errors.New("冰排编号已存在!")
  249. e.Log.Errorf("db error: %s", err)
  250. return err
  251. }
  252. }
  253. c.Generate(&iceRaftModel)
  254. err = tx.Save(&iceRaftModel).Error
  255. if err != nil {
  256. e.Log.Errorf("db error: %s", err)
  257. return global.UpdateFailedErr
  258. }
  259. // 查询冰排记录是否存在
  260. var iceRaftRecordModel model.IceRaftRecord
  261. var count int64
  262. e.Orm.Table(iceRaftRecordModel.TableName()).Where("ice_raft_id = ?", c.Id).Count(&count)
  263. if count > 0 {
  264. iceRaftRecordModel.Id = iceRaftModel.IceRaftRecordId
  265. iceRaftRecordModel.FreezeClaim = iceRaftModel.FreezeClaim
  266. iceRaftRecordModel.Label = iceRaftModel.Label
  267. err = tx.Updates(&iceRaftRecordModel).Error
  268. if err != nil {
  269. e.Log.Errorf("db error: %s 该冰排未使用", err)
  270. return errors.New("修改冰排记录失败")
  271. }
  272. }
  273. c.Id = iceRaftModel.Id
  274. return nil
  275. }
  276. // Remove 删除IceRaft
  277. func (e *IceRaft) Remove(c *dto.IceRaftDeleteReq, p *actions.DataPermission) error {
  278. var err error
  279. tx := e.Orm.Begin()
  280. defer func() {
  281. if err != nil {
  282. tx.Rollback()
  283. } else {
  284. tx.Commit()
  285. }
  286. }()
  287. var iceRaftModel model.IceRaft
  288. // 查询冰排是否存在
  289. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  290. First(&iceRaftModel, c.GetId()).Error
  291. if err != nil {
  292. e.Log.Errorf("db error: %s", err)
  293. if errors.Is(err, gorm.ErrRecordNotFound) {
  294. return global.DeleteNotFoundOrNoPermissionErr
  295. }
  296. return global.DeleteFailedErr
  297. }
  298. db := tx.Delete(&iceRaftModel)
  299. if err = db.Error; err != nil {
  300. e.Log.Errorf("db error: %s", err)
  301. return global.DeleteFailedErr
  302. }
  303. if db.RowsAffected == 0 {
  304. return global.DeleteNotFoundOrNoPermissionErr
  305. }
  306. return nil
  307. }
  308. func (e *IceRaft) InStorage(c *dto.IceRaftInStorageReq, p *actions.DataPermission) error {
  309. var err error
  310. tx := e.Orm.Begin()
  311. defer func() {
  312. if err != nil {
  313. tx.Rollback()
  314. } else {
  315. tx.Commit()
  316. }
  317. }()
  318. // 查询冷冻柜信息
  319. var iceLockerModel model.IceLocker
  320. err = e.Orm.Scopes(actions.Permission(iceLockerModel.TableName(), p)).
  321. First(&iceLockerModel, c.IceLockerId).Error
  322. if err != nil {
  323. e.Log.Errorf("db error: %s", err)
  324. return errors.New("获取冷冻柜信息失败")
  325. }
  326. if iceLockerModel.Status != model.IceLockerStatusNormal {
  327. err = errors.New("冷冻柜状态异常")
  328. return err
  329. }
  330. for _, code := range c.Code {
  331. // 查询冰排是否存在
  332. var iceRaftModel model.IceRaft
  333. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  334. Where("code = ?", code).
  335. Preload("IceRaftRecord").
  336. First(&iceRaftModel).Error
  337. if err != nil {
  338. e.Log.Errorf("获取冰排信息失败 %s", err)
  339. return errors.New(fmt.Sprintf("获取冰排【%s】信息失败", code))
  340. }
  341. if iceRaftModel.Status != model.IceRaftStatusNormal {
  342. err = errors.New(fmt.Sprintf("冰排【%s】状态异常", code))
  343. return err
  344. }
  345. if iceRaftModel.IceRaftRecord.Status == model.IceRaftRecordStatusFreezing || iceRaftModel.IceRaftRecord.Status == model.IceRaftRecordStatusWaitUse {
  346. err = errors.New(fmt.Sprintf("冰排【%s】状态为%s,入库失败!", code, model.GetIceRaftRecordStatus(iceRaftModel.IceRaftRecord.Status)))
  347. return err
  348. }
  349. // 更新冰排记录状态 使用中 -> 已完成
  350. err = tx.Model(&model.IceRaftRecord{}).
  351. Where("ice_raft_id = ? and status = ?", iceRaftModel.Id, model.IceRaftRecordStatusUsing).
  352. Updates(map[string]interface{}{
  353. "status": model.IceRaftRecordStatusFinish,
  354. "return_date": model2.Time(time.Now()),
  355. }).Error
  356. // 添加冰排记录
  357. var iceRaftRecordModel = model.IceRaftRecord{
  358. IceLockerId: iceLockerModel.Id,
  359. IceRaftId: iceRaftModel.Id,
  360. Status: model.IceRaftRecordStatusFreezing,
  361. Label: iceRaftModel.Label,
  362. Code: code,
  363. InStorageTime: model2.Time(time.Now()),
  364. Sort: iceRaftModel.Sort,
  365. ForColdTime: iceRaftModel.ForColdTime,
  366. //FreezeClaim: iceRaftModel.FreezeClaim,
  367. DeptBy: model2.DeptBy{
  368. DeptId: p.DeptId,
  369. },
  370. }
  371. iceRaftRecordModel.FreezeClaim = append(iceRaftRecordModel.FreezeClaim, iceRaftModel.FreezeClaim...)
  372. err = tx.Create(&iceRaftRecordModel).Error
  373. if err != nil {
  374. e.Log.Errorf("db error: %s", err)
  375. return errors.New("添加冰排记录失败")
  376. }
  377. // 更新冰排使用记录
  378. err = tx.Model(&iceRaftModel).
  379. Where("id = ?", iceRaftModel.Id).
  380. Updates(map[string]interface{}{
  381. "ice_raft_record_id": iceRaftRecordModel.Id,
  382. }).Error
  383. if err != nil {
  384. e.Log.Errorf("db error: %s", err)
  385. return errors.New("关联冰排记录失败")
  386. }
  387. }
  388. return nil
  389. }
  390. func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermission) error {
  391. var err error
  392. tx := e.Orm.Begin()
  393. defer func() {
  394. if err != nil {
  395. tx.Rollback()
  396. } else {
  397. tx.Commit()
  398. }
  399. }()
  400. // 查询保温箱信息
  401. var coolerBoxModel model.CoolerBox
  402. err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)).
  403. First(&coolerBoxModel, c.CoolerBoxId).Error
  404. if err != nil {
  405. e.Log.Errorf("db error: %s", err)
  406. return errors.New("获取保温箱信息失败")
  407. }
  408. if coolerBoxModel.Status != model.CoolerBoxStatusNormal {
  409. err = errors.New("保温箱状态异常")
  410. return err
  411. }
  412. if len(coolerBoxModel.BindIceRaftId) != 0 {
  413. is := lib.StrListEqual(coolerBoxModel.BindIceRaftId, c.Code)
  414. if !is {
  415. err = errors.New("保温箱已绑定冰排,禁止出库")
  416. return err
  417. }
  418. }
  419. falseIce := make([]string, 0)
  420. err, sysUser := GetUserProfile(e.Orm, p.UserId)
  421. if err != nil {
  422. err = errors.New("获取用户信息失败")
  423. return err
  424. }
  425. for _, code := range c.Code {
  426. // 查询冰排是否存在
  427. var iceRaftModel model.IceRaft
  428. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  429. Where("code = ?", code).
  430. Preload("IceRaftRecord").
  431. First(&iceRaftModel).Error
  432. if err != nil {
  433. e.Log.Errorf("db error: %s", err)
  434. return errors.New("获取冰排信息失败")
  435. }
  436. if iceRaftModel.Status != model.IceRaftStatusNormal {
  437. err = errors.New(fmt.Sprintf("冰排【%s】状态异常", code))
  438. return err
  439. }
  440. var iceRaftSuccess []string
  441. var iceRaftErr []string
  442. if len(iceRaftModel.BindCoolerBox) != 0 {
  443. for _, v := range iceRaftModel.BindCoolerBox {
  444. if v == coolerBoxModel.Id {
  445. iceRaftSuccess = append(iceRaftSuccess, code)
  446. } else {
  447. iceRaftErr = append(iceRaftErr, fmt.Sprintf("冰排【%s】已绑定保温箱【%v】,禁止出库!", code, iceRaftModel.CoolerBoxName))
  448. }
  449. }
  450. }
  451. if len(iceRaftErr) != 0 && len(iceRaftSuccess) == 0 {
  452. err = errors.New(strings.Join(iceRaftErr, " "))
  453. return err
  454. }
  455. // 获取冰排记录
  456. var iceRaftRecordModel model.IceRaftRecord
  457. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  458. Where("ice_raft_id = ?", iceRaftModel.Id).
  459. First(&iceRaftRecordModel, iceRaftModel.IceRaftRecordId).Error
  460. if err != nil {
  461. e.Log.Errorf("db error: %s", err)
  462. return errors.New("获取冰排记录失败,请确认冰排是否入库!")
  463. }
  464. if len(iceRaftRecordModel.OutStorageTime.String()) > 0 && iceRaftRecordModel.Status == model.IceRaftRecordStatusUsing {
  465. err = errors.New(fmt.Sprintf("冰排【%s】已出库,禁止出库!", code))
  466. return err
  467. }
  468. inTime := iceRaftRecordModel.InStorageTime.Local()
  469. sort.Slice(iceRaftRecordModel.FreezeClaim, func(i, j int) bool {
  470. return iceRaftRecordModel.FreezeClaim[i] < iceRaftRecordModel.FreezeClaim[j]
  471. })
  472. fmt.Println("冷冻要求====================", iceRaftRecordModel.FreezeClaim)
  473. //if sysUser.Dept.IsOutStorage {
  474. // for _, v := range iceRaftRecordModel.FreezeClaim {
  475. // if inTime.Add(time.Hour * time.Duration(v)).After(time.Now()) {
  476. // str := fmt.Sprintf("冰排【%s】未达到冷冻时长【%v】,禁止出库", code, v)
  477. // err = errors.New(str)
  478. // return err
  479. // }
  480. // }
  481. //}
  482. if inTime.Add(time.Hour * time.Duration(iceRaftRecordModel.FreezeClaim[0])).After(time.Now()) {
  483. str := fmt.Sprintf("冰排【%s】未达到冷冻时长【%v】,禁止出库", code, iceRaftRecordModel.FreezeClaim[0])
  484. err = errors.New(str)
  485. return err
  486. }
  487. //判断冰排释冷要求是否为0,如果不为零,则判断是否达到释冷时长,否则不允许出库
  488. if sysUser.Dept.IsIceReleaseCold && iceRaftModel.ForColdTime != 0 {
  489. if len(iceRaftRecordModel.StartIceColdTime.String()) != 0 {
  490. start, err := time.Parse("2006-01-02 15:04:05", iceRaftRecordModel.StartIceColdTime.String())
  491. if start.Add(time.Hour * time.Duration(iceRaftRecordModel.ForColdTime)).After(time.Now()) {
  492. err = errors.New(fmt.Sprintf("冰排【%s】未达到释冷时长【%v】小时,禁止出库", code, iceRaftRecordModel.ForColdTime))
  493. return err
  494. }
  495. } else {
  496. err = errors.New(fmt.Sprintf("冰排【%s】还未开始释冷,请先释冷再出库!!!", code))
  497. return err
  498. }
  499. }
  500. iceRaftRecordModel.Status = model.IceRaftRecordStatusUsing
  501. iceRaftRecordModel.CoolerBoxId = coolerBoxModel.Id
  502. iceRaftRecordModel.OutStorageTime = model2.Time(time.Now())
  503. iceRaftRecordModel.IceUseUsers = sysUser.NickName
  504. iceRaftRecordModel.IceUseTime = model2.Time(time.Now())
  505. iceRaftRecordModel.IceRaftId = iceRaftModel.Id
  506. if sysUser.Dept.IsIceReleaseCold {
  507. iceRaftRecordModel.IsSuitableForCold = 1
  508. iceRaftRecordModel.SuitableForCold = iceRaftModel.SuitableForCold
  509. iceRaftRecordModel.EndForColdTime = model2.Time(time.Now())
  510. }
  511. err = tx.Save(&iceRaftRecordModel).Error
  512. if err != nil {
  513. e.Log.Errorf("db error: %s", err)
  514. return errors.New("保存冰排记录失败")
  515. }
  516. }
  517. m := make(map[string]bool)
  518. if len(coolerBoxModel.BindIceRaftId) != 0 {
  519. for _, v := range coolerBoxModel.BindIceRaftId {
  520. m[v] = true
  521. }
  522. for _, v := range c.Code {
  523. if !m[v] {
  524. falseIce = append(falseIce, v)
  525. }
  526. }
  527. }
  528. if len(falseIce) > 0 {
  529. err = errors.New(fmt.Sprintf("冰排%s未绑定该保温箱,禁止出库!", falseIce))
  530. return err
  531. }
  532. //添加保温箱记录
  533. var cooler model.CoolerBoxRecord
  534. cooler.CoolerBoxId = coolerBoxModel.Id
  535. cooler.CoolerUserTime = model2.Time(time.Now())
  536. cooler.Sn = coolerBoxModel.Sn
  537. cooler.Status = "1" //保温箱使用状态变为使用中
  538. cooler.DeptId = p.DeptId
  539. cooler.Name = coolerBoxModel.Name
  540. cooler.HistoryCode = append(cooler.HistoryCode, c.Code...)
  541. cooler.CoolerUseUsers = sysUser.NickName
  542. cooler.ForColdCoolerTime = coolerBoxModel.ForColdCoolerTime
  543. //查询是否有正在使用中的保温箱记录
  544. var count int64
  545. var coolerBoxRecordModel model.CoolerBoxRecord
  546. err = tx.Model(&model.CoolerBoxRecord{}).Where("cooler_box_id = ?", coolerBoxModel.Id).Where("status = ?", "1").First(&coolerBoxRecordModel).Count(&count).Error
  547. if err != nil {
  548. if errors.Is(err, gorm.ErrRecordNotFound) {
  549. err = e.Orm.Create(&cooler).Error
  550. if err != nil {
  551. e.Log.Errorf("db 创建保温箱记录失败: %s", err)
  552. return errors.New("创建保温箱记录失败")
  553. }
  554. } else {
  555. e.Log.Errorf("获取保温箱信息失败: %s", err)
  556. return errors.New("获取保温箱信息失败")
  557. }
  558. }
  559. if sysUser.Dept.IsCoolerReleaseCold && coolerBoxModel.ForColdCoolerTime != 0 {
  560. start, err := time.Parse("2006-01-02 15:04:05", coolerBoxRecordModel.CoolerBoxStarTime.String())
  561. if start.Add(time.Hour * time.Duration(coolerBoxModel.ForColdCoolerTime)).After(time.Now()) {
  562. err = errors.New(fmt.Sprintf("保温箱未达到释冷时长【%v】分钟,禁止装箱", coolerBoxModel.ForColdCoolerTime))
  563. return err
  564. }
  565. }
  566. //更新保温箱状态为使用中 2
  567. err = e.Orm.Table(model.CoolerBox{}.TableName()).Where("id =?", coolerBoxModel.Id).Update("use_status", "2").Error
  568. if err != nil {
  569. e.Log.Errorf("更新保温箱状态失败: %s", err)
  570. return errors.New("更新保温箱状态失败")
  571. }
  572. //如果有正在使用中的保温箱记录,就更新
  573. if count > 0 {
  574. err = tx.Where("id = ?", coolerBoxRecordModel.Id).Updates(&cooler).Error
  575. if err != nil {
  576. e.Log.Errorf("db 更新保温箱记录失败: %s", err)
  577. return errors.New("更新保温箱记录失败")
  578. }
  579. }
  580. return nil
  581. }
  582. // BindCookerBox 冰排绑定保温箱
  583. func (e *IceRaft) BindCookerBox(c *dto.BindCoolerBox, p *actions.DataPermission) error {
  584. var err error
  585. tx := e.Orm.Begin()
  586. defer func() {
  587. if err != nil {
  588. tx.Rollback()
  589. } else {
  590. tx.Commit()
  591. }
  592. }()
  593. // 查询保温箱信息
  594. for _, v := range c.CoolerBoxId {
  595. var coolerBoxModel model.CoolerBox
  596. err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)).Where("id =?", v).
  597. First(&coolerBoxModel).Error
  598. if err != nil {
  599. e.Log.Errorf("db error: %s", err)
  600. return errors.New("获取保温箱信息失败")
  601. }
  602. if coolerBoxModel.Status != model.CoolerBoxStatusNormal {
  603. err = errors.New("保温箱状态不可用")
  604. return err
  605. }
  606. for _, code := range c.Code {
  607. // 查询冰排是否存在
  608. var iceRaftModel model.IceRaft
  609. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  610. Where("code = ?", code).
  611. Preload("IceRaftRecord").
  612. First(&iceRaftModel).Error
  613. if err != nil {
  614. e.Log.Errorf("获取冰排信息失败: %s", err)
  615. return errors.New("获取冰排信息失败")
  616. }
  617. if iceRaftModel.Status != model.IceRaftStatusNormal {
  618. err = errors.New(fmt.Sprintf("冰排【%s】状态异常", code))
  619. return err
  620. }
  621. iceRaftModel.CoolerBoxName = append(iceRaftModel.CoolerBoxName, coolerBoxModel.Name)
  622. iceRaftModel.BindCoolerBox = append(iceRaftModel.BindCoolerBox, coolerBoxModel.Id)
  623. iceRaftModel.CoolerBoxName = cDto.UniqueSlice(iceRaftModel.CoolerBoxName)
  624. iceRaftModel.BindCoolerBox = cDto.UniqueSliceInt(iceRaftModel.BindCoolerBox)
  625. err = e.Orm.Model(&iceRaftModel).Where("id =?", iceRaftModel.Id).Update("bind_cooler_box", iceRaftModel.BindCoolerBox).Update("cooler_box_name", iceRaftModel.CoolerBoxName).Error
  626. if err != nil {
  627. e.Log.Errorf("绑定保温箱失败: %s", err)
  628. return errors.New("绑定保温箱失败")
  629. }
  630. coolerBoxModel.BindIceRaftId = append(coolerBoxModel.BindIceRaftId, code)
  631. coolerBoxModel.BindIceRaftId = cDto.UniqueSlice(coolerBoxModel.BindIceRaftId)
  632. err = e.Orm.Model(&coolerBoxModel).Where("id =?", coolerBoxModel.Id).Update("bind_ice_raft_id", coolerBoxModel.BindIceRaftId).Error
  633. if err != nil {
  634. e.Log.Errorf("绑定保温箱失败: %s", err)
  635. return errors.New("绑定保温箱失败")
  636. }
  637. }
  638. }
  639. return nil
  640. }
  641. func (e *IceRaft) UnBindCookerBox(c *dto.UnBindCoolerBox, p *actions.DataPermission) error {
  642. var err error
  643. tx := e.Orm.Begin()
  644. defer func() {
  645. if err != nil {
  646. tx.Rollback()
  647. } else {
  648. tx.Commit()
  649. }
  650. }()
  651. // 查询冰排是否存在
  652. var iceRaftModel model.IceRaft
  653. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  654. Where("code = ?", c.Code).
  655. Preload("IceRaftRecord").
  656. First(&iceRaftModel).Error
  657. if err != nil {
  658. e.Log.Errorf("获取冰排信息失败: %s", err)
  659. return errors.New("获取冰排信息失败")
  660. }
  661. for _, v := range iceRaftModel.BindCoolerBox {
  662. var coolerBoxModel model.CoolerBox
  663. err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)).Where("id =?", v).First(&coolerBoxModel).Error
  664. if err != nil {
  665. e.Log.Errorf("获取保温箱信息失败: %s", err)
  666. return errors.New("获取保温箱信息失败")
  667. }
  668. coolerBoxModel.BindIceRaftId = cDto.RemoveValue(coolerBoxModel.BindIceRaftId, c.Code)
  669. err = e.Orm.Model(&coolerBoxModel).Where("id =?", coolerBoxModel.Id).Update("bind_ice_raft_id", coolerBoxModel.BindIceRaftId).Error
  670. if err != nil {
  671. e.Log.Errorf("解绑保温箱失败: %s", err)
  672. return errors.New("解绑保温箱失败")
  673. }
  674. }
  675. iceRaftModel.CoolerBoxName = []string{}
  676. iceRaftModel.BindCoolerBox = []int{}
  677. for _, v := range c.CoolerBoxId {
  678. var coolerBoxModel model.CoolerBox
  679. err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)).Where("id =?", v).First(&coolerBoxModel).Error
  680. if err != nil {
  681. e.Log.Errorf("获取保温箱信息失败: %s", err)
  682. return errors.New("获取保温箱信息失败")
  683. }
  684. iceRaftModel.CoolerBoxName = append(iceRaftModel.CoolerBoxName, coolerBoxModel.Name)
  685. iceRaftModel.BindCoolerBox = append(iceRaftModel.BindCoolerBox, coolerBoxModel.Id)
  686. coolerBoxModel.BindIceRaftId = append(coolerBoxModel.BindIceRaftId, c.Code)
  687. coolerBoxModel.BindIceRaftId = cDto.UniqueSlice(coolerBoxModel.BindIceRaftId)
  688. err = e.Orm.Model(&coolerBoxModel).Where("id =?", coolerBoxModel.Id).Update("bind_ice_raft_id", coolerBoxModel.BindIceRaftId).Error
  689. if err != nil {
  690. e.Log.Errorf("修改保温箱失败: %s", err)
  691. return errors.New("修改保温箱失败")
  692. }
  693. }
  694. err = e.Orm.Model(&iceRaftModel).Where("id =?", iceRaftModel.Id).Update("bind_cooler_box", iceRaftModel.BindCoolerBox).Update("cooler_box_name", iceRaftModel.CoolerBoxName).Error
  695. if err != nil {
  696. e.Log.Errorf("绑定保温箱失败: %s", err)
  697. return errors.New("绑定保温箱失败")
  698. }
  699. return nil
  700. }
  701. // IsOutStorage 判断冰排是否达到冷冻时长
  702. func (e *IceRaft) IsOutStorage(c *dto.IceOutStorageReq, p *actions.DataPermission) (error, string) {
  703. var err error
  704. var str string
  705. msg := make([]string, 0)
  706. sussce := make([]string, 0)
  707. FreezeDuration := make([]int, 0)
  708. // 获取冰排记录
  709. for _, v := range c.Code {
  710. var iceRaftRecordModel model.IceRaftRecord
  711. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  712. Where("code = ?", v).
  713. Where("status = ?", model.IceRaftRecordStatusFreezing).Where("status != ?", 0).
  714. First(&iceRaftRecordModel).Error
  715. if err != nil {
  716. if errors.Is(err, gorm.ErrRecordNotFound) {
  717. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  718. Where("code = ?", v).
  719. Where("status != ?", 0).
  720. Where("status = ?", model.IceRaftRecordStatusWaitUse).
  721. Or("status=?", model.IceRaftRecordStatusUsing).
  722. First(&iceRaftRecordModel).Error
  723. if err != nil {
  724. e.Log.Errorf("db error: %s", err)
  725. return errors.New("当前冰排不存在" + v), ""
  726. } else {
  727. //记录达到冷冻要求的冰排
  728. msg = append(msg, v)
  729. continue
  730. //return errors.New("冰排已达到冷冻要求"), "冰排已达到冷冻要求"
  731. }
  732. } else {
  733. e.Log.Errorf("db error: %s", err)
  734. return errors.New("当前冰排不存在" + v), ""
  735. }
  736. }
  737. if len(iceRaftRecordModel.OutStorageTime.String()) > 0 {
  738. err = errors.New(fmt.Sprintf("冰排【%s】已出库,禁止出库!", v))
  739. return err, ""
  740. }
  741. //(001,002,003)未到达 xxx要求 已达到冷冻时长【%v】小时【%v】分钟
  742. inTime := iceRaftRecordModel.InStorageTime.Local()
  743. sort.Slice(iceRaftRecordModel.FreezeClaim, func(i, j int) bool {
  744. return iceRaftRecordModel.FreezeClaim[i] < iceRaftRecordModel.FreezeClaim[j]
  745. })
  746. for _, vs := range iceRaftRecordModel.FreezeClaim {
  747. if inTime.Add(time.Hour * time.Duration(vs)).After(time.Now()) {
  748. hour := iceRaftRecordModel.FreezeDuration / 60
  749. minutes := iceRaftRecordModel.FreezeDuration % 60
  750. str = fmt.Sprintf("冰排编号【%s】未达到冷冻时长【%v】小时,已达到冷冻时长【%v】小时【%v】分钟,是否继续出库", v, vs, hour, minutes)
  751. sussce = append(sussce, v)
  752. FreezeDuration = append(FreezeDuration, iceRaftRecordModel.FreezeDuration)
  753. break
  754. }
  755. }
  756. }
  757. if len(sussce) == 0 && len(msg) > 0 {
  758. return errors.New("冰排已达到冷冻要求"), "冰排已达到冷冻要求"
  759. } else if len(sussce) > 0 {
  760. sort.Slice(FreezeDuration, func(i, j int) bool {
  761. return FreezeDuration[i] < FreezeDuration[j]
  762. })
  763. str = fmt.Sprintf("冰排%v未达到冷冻要求,已达到冷冻时长【%v】小时【%v】分钟", sussce, FreezeDuration[0]/60, FreezeDuration[0]%60)
  764. }
  765. return nil, str
  766. }
  767. // GetPageByCoolerBoxId 查询保温箱关联的冰排
  768. func (e *IceRaft) GetPageByCoolerBoxId(coolerBoxId int, list *[]string, p *actions.DataPermission) error {
  769. var data model.IceRaft
  770. err := e.Orm.Model(&data).
  771. Select("ice_raft.code").
  772. Scopes(
  773. actions.Permission(data.TableName(), p),
  774. IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusUsing),
  775. IceRaftNameRecordCoolerBoxIdScopes(coolerBoxId),
  776. ).
  777. Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
  778. Find(list).Error
  779. if err != nil {
  780. e.Log.Errorf("db error: %s", err)
  781. return global.GetFailedErr
  782. }
  783. return nil
  784. }
  785. type IceRaftRecord struct {
  786. service.Service
  787. }
  788. // GetPage 获取IceRaft列表
  789. func (e *IceRaftRecord) GetPage(c *dto.IceRaftRecordGetPageReq, list *[]model.IceRaftRecord, count *int64, p *actions.DataPermission) error {
  790. var err error
  791. var data model.IceRaftRecord
  792. if c.PageSize == 9999 {
  793. err = e.Orm.Model(&data).
  794. Scopes(
  795. actions.Permission(data.TableName(), p),
  796. ).
  797. Preload("IceLocker").
  798. Preload("CoolerBox").
  799. Find(list).Limit(-1).Offset(-1).
  800. Count(count).Error
  801. } else {
  802. err = e.Orm.Model(&data).
  803. Scopes(
  804. cDto.MakeCondition(c.GetNeedSearch()),
  805. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  806. actions.Permission(data.TableName(), p),
  807. ).
  808. Preload("IceLocker").
  809. Preload("CoolerBox").
  810. Find(list).Limit(-1).Offset(-1).
  811. Count(count).Error
  812. }
  813. if err != nil {
  814. e.Log.Errorf("db error: %s", err)
  815. return global.GetFailedErr
  816. }
  817. return nil
  818. }
  819. // Update 修改IceRaft对象
  820. func (e *IceRaftRecord) Update(c *dto.IceRaftRecordUpdateReq, p *actions.DataPermission) error {
  821. var err error
  822. tx := e.Orm.Begin()
  823. defer func() {
  824. if err != nil {
  825. tx.Rollback()
  826. } else {
  827. tx.Commit()
  828. }
  829. }()
  830. var iceRaftRecordModel = model.IceRaftRecord{}
  831. // 查询冰排是否存在
  832. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  833. First(&iceRaftRecordModel, c.GetId()).Error
  834. if err != nil {
  835. e.Log.Errorf("db error: %s", err)
  836. if errors.Is(err, gorm.ErrRecordNotFound) {
  837. return global.UpdateNotFoundOrNoPermissionErr
  838. }
  839. return global.UpdateFailedErr
  840. }
  841. iceRaftRecordModel.IceLockerId = c.IceLockerId
  842. iceRaftRecordModel.FreezeClaim = c.FreezeClaim
  843. if len(iceRaftRecordModel.OutStorageTime.String()) > 0 {
  844. iceRaftRecordModel.CoolerBoxId = c.CoolerBoxId
  845. }
  846. err = tx.Save(&iceRaftRecordModel).Error
  847. if err != nil {
  848. e.Log.Errorf("db error: %s", err)
  849. return global.UpdateFailedErr
  850. }
  851. c.Id = iceRaftRecordModel.Id
  852. return nil
  853. }
  854. // Remove 删除IceRaft
  855. func (e *IceRaftRecord) Remove(c *dto.IceRaftRecordDeleteReq, p *actions.DataPermission) error {
  856. var err error
  857. tx := e.Orm.Begin()
  858. defer func() {
  859. if err != nil {
  860. tx.Rollback()
  861. } else {
  862. tx.Commit()
  863. }
  864. }()
  865. var iceRaftRecordModel model.IceRaftRecord
  866. // 查询冰排是否存在
  867. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  868. First(&iceRaftRecordModel, c.GetId()).Error
  869. if err != nil {
  870. e.Log.Errorf("db error: %s", err)
  871. if errors.Is(err, gorm.ErrRecordNotFound) {
  872. return global.DeleteNotFoundOrNoPermissionErr
  873. }
  874. return global.DeleteFailedErr
  875. }
  876. db := tx.Delete(&iceRaftRecordModel)
  877. if err = db.Error; err != nil {
  878. e.Log.Errorf("db error: %s", err)
  879. return global.DeleteFailedErr
  880. }
  881. if db.RowsAffected == 0 {
  882. return global.DeleteNotFoundOrNoPermissionErr
  883. }
  884. // 更改冰排关联状态
  885. var iceRaftModel model.IceRaft
  886. var secondIceRaftRecordModel model.IceRaftRecord
  887. err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
  888. First(&iceRaftModel, iceRaftRecordModel.IceRaftId).Error
  889. if err != nil {
  890. e.Log.Errorf("db error: %s", err)
  891. return global.DeleteFailedErr
  892. }
  893. err = e.Orm.Scopes(actions.Permission(secondIceRaftRecordModel.TableName(), p)).
  894. Where("ice_raft_id = ? and id != ?", iceRaftRecordModel.IceRaftId, iceRaftRecordModel.Id).
  895. First(&secondIceRaftRecordModel).Error
  896. if err != nil {
  897. if errors.Is(err, gorm.ErrRecordNotFound) {
  898. iceRaftModel.IceRaftRecordId = 0
  899. }
  900. }
  901. iceRaftModel.IceRaftRecordId = secondIceRaftRecordModel.Id
  902. err = tx.Save(&iceRaftModel).Error
  903. if err != nil {
  904. e.Log.Errorf("db error: %s", err)
  905. return global.UpdateFailedErr
  906. }
  907. return nil
  908. }
  909. func (e *IceRaftRecord) EndForCold(c *dto.IceRaftRecordEedReq, p *actions.DataPermission) error {
  910. var err error
  911. tx := e.Orm.Begin()
  912. defer func() {
  913. if err != nil {
  914. tx.Rollback()
  915. } else {
  916. tx.Commit()
  917. }
  918. }()
  919. // 查询冰排是否存在
  920. for _, v := range c.Id {
  921. var iceRaftRecordModel model.IceRaftRecord
  922. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  923. First(&iceRaftRecordModel, v).Error
  924. if err != nil {
  925. e.Log.Errorf("db error: %s", err)
  926. if errors.Is(err, gorm.ErrRecordNotFound) {
  927. return global.UpdateNotFoundOrNoPermissionErr
  928. }
  929. return global.UpdateFailedErr
  930. }
  931. iceRaftRecordModel.IsSuitableForCold = 1 // 是否适冷
  932. iceRaftRecordModel.EndForColdTime = model2.Time(time.Now())
  933. iceRaftRecordModel.Id = v
  934. updates := tx.Where("id = ?", iceRaftRecordModel.Id).Updates(&iceRaftRecordModel)
  935. if err = updates.Error; err != nil {
  936. e.Log.Errorf("db error: %s", err)
  937. return global.UpdateFailedErr
  938. }
  939. }
  940. return nil
  941. }
  942. // StartForCold 冰排开始释冷
  943. func (e *IceRaftRecord) StartForCold(c *dto.IceStartbleForColfTimReq, p *actions.DataPermission) error {
  944. var err error
  945. tx := e.Orm.Begin()
  946. defer func() {
  947. if err != nil {
  948. tx.Rollback()
  949. } else {
  950. tx.Commit()
  951. }
  952. }()
  953. var user model.SysUser
  954. first := e.Orm.Model(&model.SysUser{}).Where("id = ?", p.UserId).First(&user)
  955. if first.Error != nil {
  956. return global.GetFailedErr
  957. }
  958. //查询冰排是否存在
  959. for _, v := range c.Id {
  960. var iceRaftRecordModel model.IceRaftRecord
  961. var iceRaft model.IceRaft
  962. err = e.Orm.Scopes(actions.Permission(iceRaftRecordModel.TableName(), p)).
  963. First(&iceRaftRecordModel, v).Error
  964. if err != nil {
  965. e.Log.Errorf("db error: %s", err)
  966. if errors.Is(err, gorm.ErrRecordNotFound) {
  967. return errors.New("获取数据失败")
  968. }
  969. return errors.New("获取冰排失败")
  970. }
  971. err = e.Orm.Model(&iceRaft).Where("id = ?", iceRaftRecordModel.IceRaftId).First(&iceRaft).Error
  972. if err != nil {
  973. return global.GetFailedErr
  974. }
  975. // 获取冰排记录
  976. if iceRaftRecordModel.Status == model.IceRaftRecordReleasedInTheCold || iceRaftRecordModel.Status == model.IceRaftRecordReleasedInTheColdEnd {
  977. err = errors.New(fmt.Sprintf("冰排【%s】已释冷!", iceRaftRecordModel.Code))
  978. return err
  979. }
  980. inTime := iceRaftRecordModel.InStorageTime.Local()
  981. sort.Slice(iceRaftRecordModel.FreezeClaim, func(i, j int) bool {
  982. return iceRaftRecordModel.FreezeClaim[i] < iceRaftRecordModel.FreezeClaim[j]
  983. })
  984. if user.Dept.IsOutStorage {
  985. for _, vs := range iceRaftRecordModel.FreezeClaim {
  986. if inTime.Add(time.Hour * time.Duration(vs)).After(time.Now()) {
  987. str := fmt.Sprintf("冰排【%s】未达到冷冻时长【%v】,禁止出库", iceRaftRecordModel.Code, vs)
  988. err = errors.New(str)
  989. return err
  990. }
  991. }
  992. }
  993. iceRaftRecordModel.StartIceColdTime = model2.Time(time.Now())
  994. iceRaftRecordModel.Status = model.IceRaftRecordReleasedInTheCold //释冷中
  995. iceRaftRecordModel.IceColdUsers = user.NickName
  996. iceRaftRecordModel.IceColdAddress = iceRaft.IceColdAddress
  997. iceRaftRecordModel.SuitableForCold = iceRaft.SuitableForCold
  998. iceRaftRecordModel.OutStorageTime = model2.Time(time.Now()) //出库时间
  999. updates := tx.Where("id = ?", iceRaftRecordModel.Id).Updates(&iceRaftRecordModel)
  1000. if err = updates.Error; err != nil {
  1001. e.Log.Errorf("db error: %s", err)
  1002. return global.UpdateFailedErr
  1003. }
  1004. }
  1005. return nil
  1006. }
  1007. // IceRaftRecordRecording 获取冰排的历史记录
  1008. func (e *IceRaft) IceRaftRecordRecording(c *dto.IceRaftRecordRecording, list *[]model.IceRaftRecord, count *int64, p *actions.DataPermission) error {
  1009. var err error
  1010. var data model.IceRaftRecord
  1011. if c.PageSize == 9999 {
  1012. err = e.Orm.Model(&data).
  1013. Scopes(
  1014. cDto.MakeCondition(c.GetNeedSearch()),
  1015. actions.Permission(data.TableName(), p),
  1016. IceRaftStartTimeAndEndTimeScopes(c.StartTime, c.EndTime),
  1017. ).
  1018. Where("status =?", model.IceRaftRecordStatusFinish).
  1019. Preload("IceLocker").
  1020. Preload("CoolerBox").
  1021. Find(list).Limit(-1).Offset(-1).
  1022. Count(count).Error
  1023. } else {
  1024. err = e.Orm.Model(&data).
  1025. Scopes(
  1026. cDto.MakeCondition(c.GetNeedSearch()),
  1027. cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
  1028. actions.Permission(data.TableName(), p),
  1029. IceRaftStartTimeAndEndTimeScopes(c.StartTime, c.EndTime),
  1030. ).
  1031. Where("status =?", model.IceRaftRecordStatusFinish).
  1032. Preload("IceLocker").
  1033. Preload("CoolerBox").
  1034. Find(list).Limit(-1).Offset(-1).
  1035. Count(count).Error
  1036. }
  1037. if err != nil {
  1038. e.Log.Errorf("db error: %s", err)
  1039. return global.GetFailedErr
  1040. }
  1041. var Ice model.IceRaftOmit
  1042. for i := range *list {
  1043. err = e.Orm.Model(&Ice).Where("id = ?", (*list)[i].IceRaftId).Find(&(*list)[i].IceRafts).Error
  1044. if err != nil {
  1045. return global.GetFailedErr
  1046. }
  1047. }
  1048. return nil
  1049. }