|
@@ -8,8 +8,10 @@ import (
|
|
|
"cold-delivery/common/global"
|
|
|
"cold-delivery/common/lib"
|
|
|
model2 "cold-delivery/common/model"
|
|
|
+ "database/sql"
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+ "math"
|
|
|
"sort"
|
|
|
"strings"
|
|
|
"time"
|
|
@@ -31,7 +33,7 @@ func (e *IceRaft) GetPage(c *dto.IceRaftGetPageReq, list *[]model.IceRaft, count
|
|
|
err = e.Orm.Model(&data).
|
|
|
Scopes(
|
|
|
actions.Permission(data.TableName(), p),
|
|
|
- ).Order("ice_raft.sort desc").
|
|
|
+ ).Order("ice_raft.sort asc").
|
|
|
Find(list).Limit(-1).Offset(-1).
|
|
|
Count(count).Error
|
|
|
} else {
|
|
@@ -40,7 +42,7 @@ func (e *IceRaft) GetPage(c *dto.IceRaftGetPageReq, list *[]model.IceRaft, count
|
|
|
cDto.MakeCondition(c.GetNeedSearch()),
|
|
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
|
actions.Permission(data.TableName(), p),
|
|
|
- ).Order("ice_raft.sort desc").
|
|
|
+ ).Order("ice_raft.sort asc").
|
|
|
Find(list).Limit(-1).Offset(-1).
|
|
|
Count(count).Error
|
|
|
}
|
|
@@ -155,6 +157,9 @@ func (e *IceRaft) GetRecordPage(c *dto.IceRaftGetNewestRecordPageReq, list *[]mo
|
|
|
// (*list)[i].IceRaftRecord.CoolingTime = sprintf
|
|
|
// }
|
|
|
//}
|
|
|
+ for i := range *list {
|
|
|
+ (*list)[i].IceRaftRecord.ForColdTimeActual = math.Floor((*list)[i].IceRaftRecord.ForColdTimeActual)
|
|
|
+ }
|
|
|
if err != nil {
|
|
|
e.Log.Errorf("db error: %s", err)
|
|
|
return global.GetFailedErr
|
|
@@ -381,50 +386,60 @@ func (e *IceRaft) InStorage(c *dto.IceRaftInStorageReq, p *actions.DataPermissio
|
|
|
err = errors.New(fmt.Sprintf("冰排【%s】状态为%s,入库失败!", code, model.GetIceRaftRecordStatus(iceRaftModel.IceRaftRecord.Status)))
|
|
|
return err
|
|
|
}
|
|
|
-
|
|
|
- // 更新冰排记录状态 使用中 -> 已完成
|
|
|
- err = tx.Model(&model.IceRaftRecord{}).
|
|
|
- Where("ice_raft_id = ? and status = ?", iceRaftModel.Id, model.IceRaftRecordStatusUsing).
|
|
|
- Updates(map[string]interface{}{
|
|
|
- "status": model.IceRaftRecordStatusFinish,
|
|
|
- "return_date": model2.Time(time.Now()),
|
|
|
+ if iceRaftModel.IceRaftRecord.Status == model.IceRaftRecordReleasedInTheCold || iceRaftModel.IceRaftRecord.Status == model.IceRaftRecordReleasedInTheColdEnd {
|
|
|
+ err = tx.Model(&model.IceRaftRecord{}).Where("ice_raft_id = ?", iceRaftModel.Id).
|
|
|
+ Where("status = ?", model.IceRaftRecordReleasedInTheCold).
|
|
|
+ Or("status = ?", model.IceRaftRecordReleasedInTheColdEnd).Updates(map[string]interface{}{
|
|
|
+ "status": model.IceRaftRecordStatusFreezing,
|
|
|
+ "out_storage_time": sql.NullTime{Valid: false},
|
|
|
+ "in_storage_time": model2.Time(time.Now()),
|
|
|
+ "freeze_duration": 0,
|
|
|
}).Error
|
|
|
-
|
|
|
- // 添加冰排记录
|
|
|
- var iceRaftRecordModel = model.IceRaftRecord{
|
|
|
- IceLockerId: iceLockerModel.Id,
|
|
|
- IceRaftId: iceRaftModel.Id,
|
|
|
- Status: model.IceRaftRecordStatusFreezing,
|
|
|
- Label: iceRaftModel.Label,
|
|
|
- Code: code,
|
|
|
- InStorageTime: model2.Time(time.Now()),
|
|
|
- Sort: iceRaftModel.Sort,
|
|
|
- ForColdTime: iceRaftModel.ForColdTime,
|
|
|
- //FreezeClaim: iceRaftModel.FreezeClaim,
|
|
|
- DeptBy: model2.DeptBy{
|
|
|
- DeptId: p.DeptId,
|
|
|
- },
|
|
|
- }
|
|
|
- iceRaftRecordModel.FreezeClaim = append(iceRaftRecordModel.FreezeClaim, iceRaftModel.FreezeClaim...)
|
|
|
- err = tx.Create(&iceRaftRecordModel).Error
|
|
|
- if err != nil {
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
- return errors.New("添加冰排记录失败")
|
|
|
- }
|
|
|
-
|
|
|
- // 更新冰排使用记录
|
|
|
- err = tx.Model(&iceRaftModel).
|
|
|
- Where("id = ?", iceRaftModel.Id).
|
|
|
- Updates(map[string]interface{}{
|
|
|
- "ice_raft_record_id": iceRaftRecordModel.Id,
|
|
|
- }).Error
|
|
|
- if err != nil {
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
- return errors.New("关联冰排记录失败")
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db 添加冰排记录失败: %s", err)
|
|
|
+ return errors.New("添加冰排记录失败")
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 更新冰排记录状态 使用中 -> 已完成
|
|
|
+ err = tx.Model(&model.IceRaftRecord{}).
|
|
|
+ Where("ice_raft_id = ? and status = ?", iceRaftModel.Id, model.IceRaftRecordStatusUsing).
|
|
|
+ Updates(map[string]interface{}{
|
|
|
+ "status": model.IceRaftRecordStatusFinish,
|
|
|
+ "return_date": model2.Time(time.Now()),
|
|
|
+ }).Error
|
|
|
+
|
|
|
+ // 添加冰排记录
|
|
|
+ var iceRaftRecordModel = model.IceRaftRecord{
|
|
|
+ IceLockerId: iceLockerModel.Id,
|
|
|
+ IceRaftId: iceRaftModel.Id,
|
|
|
+ Status: model.IceRaftRecordStatusFreezing,
|
|
|
+ Label: iceRaftModel.Label,
|
|
|
+ Code: code,
|
|
|
+ InStorageTime: model2.Time(time.Now()),
|
|
|
+ Sort: iceRaftModel.Sort,
|
|
|
+ ForColdTime: iceRaftModel.ForColdTime,
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
+ DeptId: p.DeptId,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ iceRaftRecordModel.FreezeClaim = append(iceRaftRecordModel.FreezeClaim, iceRaftModel.FreezeClaim...)
|
|
|
+ err = tx.Create(&iceRaftRecordModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("添加冰排记录失败")
|
|
|
+ }
|
|
|
+ // 更新冰排使用记录
|
|
|
+ err = tx.Model(&iceRaftModel).
|
|
|
+ Where("id = ?", iceRaftModel.Id).
|
|
|
+ Updates(map[string]interface{}{
|
|
|
+ "ice_raft_record_id": iceRaftRecordModel.Id,
|
|
|
+ }).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("关联冰排记录失败")
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
return nil
|
|
|
}
|
|
|
func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermission) error {
|
|
@@ -472,7 +487,7 @@ func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermiss
|
|
|
First(&iceRaftModel).Error
|
|
|
if err != nil {
|
|
|
e.Log.Errorf("db error: %s", err)
|
|
|
- return errors.New("获取冰排信息失败")
|
|
|
+ return errors.New("获取冰排信息失败,请检查该冰排是否存在")
|
|
|
}
|
|
|
|
|
|
if iceRaftModel.Status != model.IceRaftStatusNormal {
|
|
@@ -513,18 +528,8 @@ func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermiss
|
|
|
sort.Slice(iceRaftRecordModel.FreezeClaim, func(i, j int) bool {
|
|
|
return iceRaftRecordModel.FreezeClaim[i] < iceRaftRecordModel.FreezeClaim[j]
|
|
|
})
|
|
|
- fmt.Println("冷冻要求====================", iceRaftRecordModel.FreezeClaim)
|
|
|
-
|
|
|
- //if sysUser.Dept.IsOutStorage {
|
|
|
- // for _, v := range iceRaftRecordModel.FreezeClaim {
|
|
|
- // if inTime.Add(time.Hour * time.Duration(v)).After(time.Now()) {
|
|
|
- // str := fmt.Sprintf("冰排【%s】未达到冷冻时长【%v】,禁止出库", code, v)
|
|
|
- // err = errors.New(str)
|
|
|
- // return err
|
|
|
- // }
|
|
|
- // }
|
|
|
- //}
|
|
|
- if inTime.Add(time.Hour * time.Duration(iceRaftRecordModel.FreezeClaim[0])).After(time.Now()) {
|
|
|
+
|
|
|
+ if inTime.Add(time.Duration(iceRaftRecordModel.FreezeClaim[0] * float64(time.Hour))).After(time.Now()) {
|
|
|
str := fmt.Sprintf("冰排【%s】未达到冷冻时长【%v】,禁止出库", code, iceRaftRecordModel.FreezeClaim[0])
|
|
|
err = errors.New(str)
|
|
|
return err
|
|
@@ -532,9 +537,9 @@ func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermiss
|
|
|
//判断冰排释冷要求是否为0,如果不为零,则判断是否达到释冷时长,否则不允许出库
|
|
|
if sysUser.Dept.IsIceReleaseCold && iceRaftModel.ForColdTime != 0 {
|
|
|
if len(iceRaftRecordModel.StartIceColdTime.String()) != 0 {
|
|
|
- start, err := time.Parse("2006-01-02 15:04:05", iceRaftRecordModel.StartIceColdTime.String())
|
|
|
- if start.Add(time.Hour * time.Duration(iceRaftRecordModel.ForColdTime)).After(time.Now()) {
|
|
|
- err = errors.New(fmt.Sprintf("冰排【%s】未达到释冷时长【%v】小时,禁止出库", code, iceRaftRecordModel.ForColdTime))
|
|
|
+ start := iceRaftRecordModel.StartIceColdTime.Local()
|
|
|
+ if start.Add(time.Duration(iceRaftModel.ForColdTime * float64(time.Hour))).After(time.Now()) {
|
|
|
+ err = errors.New(fmt.Sprintf("冰排【%s】未达到释冷时长【%v】小时,禁止出库", code, iceRaftModel.ForColdTime))
|
|
|
return err
|
|
|
}
|
|
|
} else {
|
|
@@ -603,9 +608,9 @@ func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermiss
|
|
|
}
|
|
|
}
|
|
|
if sysUser.Dept.IsCoolerReleaseCold && coolerBoxModel.ForColdCoolerTime != 0 {
|
|
|
- start, err := time.Parse("2006-01-02 15:04:05", coolerBoxRecordModel.CoolerBoxStarTime.String())
|
|
|
- if start.Add(time.Hour * time.Duration(coolerBoxModel.ForColdCoolerTime)).After(time.Now()) {
|
|
|
- err = errors.New(fmt.Sprintf("保温箱未达到释冷时长【%v】分钟,禁止装箱", coolerBoxModel.ForColdCoolerTime))
|
|
|
+ start := coolerBoxRecordModel.CoolerBoxStarTime.Local()
|
|
|
+ if start.Add(time.Duration(coolerBoxModel.ForColdCoolerTime * float64(time.Hour))).After(time.Now()) {
|
|
|
+ err = errors.New(fmt.Sprintf("保温箱未达到预冷时长【%v】小时,禁止装箱", coolerBoxModel.ForColdCoolerTime))
|
|
|
return err
|
|
|
}
|
|
|
}
|
|
@@ -688,6 +693,87 @@ func (e *IceRaft) BindCookerBox(c *dto.BindCoolerBox, p *actions.DataPermission)
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+// GetCoolerBoxBindCieRaft 获取保温箱可绑定冰排
|
|
|
+func (e *IceRaft) GetCoolerBoxBindCieRaft(c *dto.GetCoolerBoxByIceRaft, p *actions.DataPermission, list *[]string) error {
|
|
|
+ var err error
|
|
|
+
|
|
|
+ tx := e.Orm.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ // 查询保温箱信息
|
|
|
+ var coolerBoxModel model.CoolerBox
|
|
|
+ err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)).Where("id =?", c.Id).
|
|
|
+ First(&coolerBoxModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("获取保温箱信息失败")
|
|
|
+ }
|
|
|
+ if coolerBoxModel.Status != model.CoolerBoxStatusNormal {
|
|
|
+ err = errors.New("保温箱状态不可用")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if len(coolerBoxModel.BindIceRaftId) > 0 {
|
|
|
+ for _, code := range coolerBoxModel.BindIceRaftId {
|
|
|
+ // 查询冰排是否存在
|
|
|
+ var iceRaftModel model.IceRaftRecord
|
|
|
+ err = e.Orm.Scopes(actions.Permission(iceRaftModel.TableName(), p)).
|
|
|
+ Where("code = ?", code).Where("status = ?", model.IceRaftRecordStatusWaitUse).
|
|
|
+ First(&iceRaftModel).Error
|
|
|
+ if err != nil {
|
|
|
+ if errors.Is(gorm.ErrRecordNotFound, err) {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ e.Log.Errorf("获取冰排信息失败: %s", err)
|
|
|
+ return errors.New("获取冰排信息失败")
|
|
|
+ }
|
|
|
+ *list = append(*list, iceRaftModel.Code)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ var iceRaftModel []model.IceRaftRecord
|
|
|
+ err = e.Orm.Scopes(actions.Permission(model.IceRaftRecord{}.TableName(), p)).
|
|
|
+ Where("status = ?", model.IceRaftRecordStatusWaitUse).Find(&iceRaftModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("获取冰排信息失败: %s", err)
|
|
|
+ return errors.New("获取冰排信息失败")
|
|
|
+ }
|
|
|
+ for _, v := range iceRaftModel {
|
|
|
+ *list = append(*list, v.Code)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+func (e *IceRaft) GetCoolerIceRaft(p *actions.DataPermission, list *[]model.IceRaft) error {
|
|
|
+ var err error
|
|
|
+
|
|
|
+ tx := e.Orm.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ // 查询保温箱信息
|
|
|
+ var data model.IceRaft
|
|
|
+ err = e.Orm.Model(&data).
|
|
|
+ Scopes(
|
|
|
+ actions.Permission(data.TableName(), p)).
|
|
|
+ Where("ice_raft.status = '2'").
|
|
|
+ Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
|
|
|
+ Where("ice_raft_record.`status` IS NULL").
|
|
|
+ Preload("IceRaftRecord.IceLocker").
|
|
|
+ Preload("IceRaftRecord.CoolerBox").
|
|
|
+ Preload("IceRaftRecord").
|
|
|
+ Find(list).Limit(-1).Offset(-1).Error
|
|
|
+ return nil
|
|
|
+}
|
|
|
func (e *IceRaft) UnBindCookerBox(c *dto.UnBindCoolerBox, p *actions.DataPermission) error {
|
|
|
var err error
|
|
|
|
|
@@ -757,7 +843,7 @@ func (e *IceRaft) IsOutStorage(c *dto.IceOutStorageReq, p *actions.DataPermissio
|
|
|
var str string
|
|
|
msg := make([]string, 0)
|
|
|
sussce := make([]string, 0)
|
|
|
- FreezeDuration := make([]int, 0)
|
|
|
+ FreezeDuration := make([]float64, 0)
|
|
|
// 获取冰排记录
|
|
|
for _, v := range c.Code {
|
|
|
var iceRaftRecordModel model.IceRaftRecord
|
|
@@ -772,6 +858,7 @@ func (e *IceRaft) IsOutStorage(c *dto.IceOutStorageReq, p *actions.DataPermissio
|
|
|
Where("status != ?", 0).
|
|
|
Where("status = ?", model.IceRaftRecordStatusWaitUse).
|
|
|
Or("status=?", model.IceRaftRecordStatusUsing).
|
|
|
+ Or("status=?", model.IceRaftRecordReleasedInTheColdEnd).
|
|
|
First(&iceRaftRecordModel).Error
|
|
|
if err != nil {
|
|
|
e.Log.Errorf("db error: %s", err)
|
|
@@ -798,9 +885,9 @@ func (e *IceRaft) IsOutStorage(c *dto.IceOutStorageReq, p *actions.DataPermissio
|
|
|
return iceRaftRecordModel.FreezeClaim[i] < iceRaftRecordModel.FreezeClaim[j]
|
|
|
})
|
|
|
for _, vs := range iceRaftRecordModel.FreezeClaim {
|
|
|
- if inTime.Add(time.Hour * time.Duration(vs)).After(time.Now()) {
|
|
|
+ if inTime.Add(time.Duration(vs * float64(time.Hour))).After(time.Now()) {
|
|
|
hour := iceRaftRecordModel.FreezeDuration / 60
|
|
|
- minutes := iceRaftRecordModel.FreezeDuration % 60
|
|
|
+ minutes := int(iceRaftRecordModel.FreezeDuration) % 60
|
|
|
str = fmt.Sprintf("冰排编号【%s】未达到冷冻时长【%v】小时,已达到冷冻时长【%v】小时【%v】分钟,是否继续出库", v, vs, hour, minutes)
|
|
|
sussce = append(sussce, v)
|
|
|
FreezeDuration = append(FreezeDuration, iceRaftRecordModel.FreezeDuration)
|
|
@@ -814,7 +901,7 @@ func (e *IceRaft) IsOutStorage(c *dto.IceOutStorageReq, p *actions.DataPermissio
|
|
|
sort.Slice(FreezeDuration, func(i, j int) bool {
|
|
|
return FreezeDuration[i] < FreezeDuration[j]
|
|
|
})
|
|
|
- str = fmt.Sprintf("冰排%v未达到冷冻要求,已达到冷冻时长【%v】小时【%v】分钟", sussce, FreezeDuration[0]/60, FreezeDuration[0]%60)
|
|
|
+ str = fmt.Sprintf("冰排%v未达到冷冻要求,已达到冷冻时长【%v】小时【%v】分钟", sussce, FreezeDuration[0]/60, int(FreezeDuration[0])%60)
|
|
|
}
|
|
|
return nil, str
|
|
|
}
|
|
@@ -941,7 +1028,7 @@ func (e *IceRaftRecord) Remove(c *dto.IceRaftRecordDeleteReq, p *actions.DataPer
|
|
|
return global.DeleteFailedErr
|
|
|
}
|
|
|
|
|
|
- db := tx.Delete(&iceRaftRecordModel)
|
|
|
+ db := tx.Unscoped().Delete(&iceRaftRecordModel)
|
|
|
|
|
|
if err = db.Error; err != nil {
|
|
|
e.Log.Errorf("db error: %s", err)
|
|
@@ -1051,6 +1138,10 @@ func (e *IceRaftRecord) StartForCold(c *dto.IceStartbleForColfTimReq, p *actions
|
|
|
err = errors.New(fmt.Sprintf("冰排【%s】已释冷!", iceRaftRecordModel.Code))
|
|
|
return err
|
|
|
}
|
|
|
+ if iceRaftRecordModel.Status != model.IceRaftRecordStatusWaitUse {
|
|
|
+ err = errors.New(fmt.Sprintf("冰排【%s】状态为【%v】不可释冷!", iceRaftRecordModel.Code, model.GetIceRaftRecordStatus(iceRaftRecordModel.Status)))
|
|
|
+ return err
|
|
|
+ }
|
|
|
|
|
|
inTime := iceRaftRecordModel.InStorageTime.Local()
|
|
|
sort.Slice(iceRaftRecordModel.FreezeClaim, func(i, j int) bool {
|