|
@@ -121,8 +121,8 @@ func (e *Waybill) GetPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count
|
|
db := e.Orm.Model(&data).
|
|
db := e.Orm.Model(&data).
|
|
Scopes(
|
|
Scopes(
|
|
cDto.MakeCondition(c.GetNeedSearch()),
|
|
cDto.MakeCondition(c.GetNeedSearch()),
|
|
- orStatus(c.Status),
|
|
|
|
actions.Permission(data.TableName(), p),
|
|
actions.Permission(data.TableName(), p),
|
|
|
|
+ orStatus(c.Status),
|
|
).
|
|
).
|
|
Preload("CoolerBox").
|
|
Preload("CoolerBox").
|
|
Preload("Delivery").
|
|
Preload("Delivery").
|
|
@@ -151,7 +151,6 @@ func (e *Waybill) GetPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count
|
|
func (e *Waybill) GetUserPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
|
|
func (e *Waybill) GetUserPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
|
|
var err error
|
|
var err error
|
|
var data model.Waybill
|
|
var data model.Waybill
|
|
-
|
|
|
|
// 构建基础查询
|
|
// 构建基础查询
|
|
db := e.Orm.Model(&data).
|
|
db := e.Orm.Model(&data).
|
|
Scopes(
|
|
Scopes(
|
|
@@ -509,15 +508,45 @@ func (e *Waybill) UpdateStatus(c *dto.UpdateStatusReq, p *actions.DataPermission
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
return global.UpdateFailedErr
|
|
return global.UpdateFailedErr
|
|
}
|
|
}
|
|
|
|
+ // 查询任务
|
|
|
|
+ //var logistics model.WaybillLogistics
|
|
|
|
+ //err = tx.Model(&logistics).Where("waybill_no = ? and status = ?", waybillModel.WaybillNo, model.WaybillStatusInDeliverys).
|
|
|
|
+ // Last(&logistics).Error
|
|
|
|
+ //if err != nil {
|
|
|
|
+ // if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
|
+ // // 添加物流
|
|
|
|
+ // logisticsObj := model.WaybillLogistics{
|
|
|
|
+ // WaybillNo: waybillModel.WaybillNo,
|
|
|
|
+ // Status: waybillModel.Status,
|
|
|
|
+ // ControlBy: model2.ControlBy{
|
|
|
|
+ // CreateBy: p.UserId,
|
|
|
|
+ // },
|
|
|
|
+ // DeptBy: model2.DeptBy{
|
|
|
|
+ // DeptId: p.DeptId,
|
|
|
|
+ // },
|
|
|
|
+ // }
|
|
|
|
+ // err = tx.Create(&logisticsObj).Error
|
|
|
|
+ // if err != nil {
|
|
|
|
+ // e.Log.Errorf("db error: %s", err)
|
|
|
|
+ // return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ // }
|
|
|
|
+ // } else {
|
|
|
|
+ // e.Log.Errorf("db error: %s", err)
|
|
|
|
+ // return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ // }
|
|
|
|
+ //}
|
|
|
|
+ //err = tx.Save(&logistics).Error
|
|
|
|
+ //if err != nil {
|
|
|
|
+ // e.Log.Errorf("db error: %s", err)
|
|
|
|
+ // return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ //}
|
|
}
|
|
}
|
|
-
|
|
|
|
//err = tx.Save(&waybillModel).Error
|
|
//err = tx.Save(&waybillModel).Error
|
|
//if err != nil {
|
|
//if err != nil {
|
|
// e.Log.Errorf("db error: %s", err)
|
|
// e.Log.Errorf("db error: %s", err)
|
|
// return global.UpdateFailedErr
|
|
// return global.UpdateFailedErr
|
|
//}
|
|
//}
|
|
|
|
|
|
- //c.Id = waybillModel.Id
|
|
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
@@ -635,6 +664,46 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
waybillModel.IceRaftCode = c.IceRaftCode
|
|
waybillModel.IceRaftCode = c.IceRaftCode
|
|
if c.Status == model.WaybillStatusInShippeds {
|
|
if c.Status == model.WaybillStatusInShippeds {
|
|
waybillModel.Status = c.Status
|
|
waybillModel.Status = c.Status
|
|
|
|
+ // 配送中状态下才发送短信
|
|
|
|
+ if waybillModeStatus == model.WaybillStatusInShippeds {
|
|
|
|
+ ss := sms.NewSMS(conf.ExtConfig.SubMail.Appid, conf.ExtConfig.SubMail.Signature)
|
|
|
|
+ addr := conf.ExtConfig.Applet.WaybillUrl + url.QueryEscape(lib.AesEncryptCBC(waybillModel.WaybillNo, lib.AesKey))
|
|
|
|
+ res, err1 := ss.SmsXSend(waybillModel.ConsigneeAddressPhone, addr)
|
|
|
|
+ if err1 != nil || res.Status != sms.SUCCESS {
|
|
|
|
+ e.Log.Errorf("派单短信发送失败", zap.Any("res", res), zap.Error(err1))
|
|
|
|
+ err = errors.New("派单短信发送失败,请检查收件人电话是否正确!")
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ waybillModel.SendLog = model.WaybillSendLog{
|
|
|
|
+ Phone: waybillModel.ConsigneeAddressPhone,
|
|
|
|
+ Content: "【冷链送药追溯平台】您的运单正在派送中,点击查看详情:" + addr,
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 查询任务
|
|
|
|
+ var logistics model.WaybillLogistics
|
|
|
|
+ // 添加物流
|
|
|
|
+ logisticsObj := model.WaybillLogistics{
|
|
|
|
+ WaybillNo: waybillModel.WaybillNo,
|
|
|
|
+ Status: waybillModel.Status,
|
|
|
|
+ CoolerBoxId: coolerBox.Id,
|
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
|
+ CreateBy: p.UserId,
|
|
|
|
+ },
|
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
|
+ DeptId: p.DeptId,
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+ err = tx.Create(&logisticsObj).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ }
|
|
|
|
+ logistics.CoolerBoxId = coolerBox.Id
|
|
|
|
+ err = tx.Save(&logistics).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ }
|
|
}
|
|
}
|
|
err = tx.Save(&waybillModel).Error
|
|
err = tx.Save(&waybillModel).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -644,7 +713,7 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
|
|
|
|
// 查询任务
|
|
// 查询任务
|
|
var logistics model.WaybillLogistics
|
|
var logistics model.WaybillLogistics
|
|
- err = tx.Model(&logistics).Where("waybill_no = ? and status = ?", waybillModel.WaybillNo, model.WaybillStatusInDeliverys).
|
|
|
|
|
|
+ err = tx.Model(&logistics).Where("waybill_no = ?", waybillModel.WaybillNo).
|
|
Last(&logistics).Error
|
|
Last(&logistics).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
@@ -669,14 +738,13 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
}
|
|
}
|
|
|
|
+ logistics.CoolerBoxId = coolerBox.Id
|
|
|
|
+ err = tx.Save(&logistics).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- logistics.CoolerBoxId = coolerBox.Id
|
|
|
|
- err = tx.Save(&logistics).Error
|
|
|
|
- if err != nil {
|
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
|
- return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// 查询任务
|
|
// 查询任务
|
|
var task model.WaybillTask
|
|
var task model.WaybillTask
|
|
err = tx.Model(&task).Where("waybill_no = ? ", waybillModel.WaybillNo).
|
|
err = tx.Model(&task).Where("waybill_no = ? ", waybillModel.WaybillNo).
|
|
@@ -706,38 +774,18 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
return errors.New(fmt.Sprintf("查询运单任务信息失败:%s", err))
|
|
return errors.New(fmt.Sprintf("查询运单任务信息失败:%s", err))
|
|
}
|
|
}
|
|
|
|
+ task.StartTime = model2.Time(time.Now())
|
|
|
|
+ task.UpdateBy = p.UserId
|
|
|
|
+ task.CoolerBoxId = coolerBox.Id
|
|
|
|
+ task.Sn = coolerBox.Sn
|
|
|
|
+ err = tx.Save(&task).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单任务信息失败:%s", err))
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
- task.StartTime = model2.Time(time.Now())
|
|
|
|
- task.UpdateBy = p.UserId
|
|
|
|
- task.CoolerBoxId = coolerBox.Id
|
|
|
|
- task.Sn = coolerBox.Sn
|
|
|
|
- err = tx.Save(&task).Error
|
|
|
|
- if err != nil {
|
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
|
- return errors.New(fmt.Sprintf("保存运单任务信息失败:%s", err))
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 待配送时状态下才发送短信 ------目前不需要发送短信
|
|
|
|
- if waybillModeStatus == model.WaybillStatusInDeliverys {
|
|
|
|
- ss := sms.NewSMS(conf.ExtConfig.SubMail.Appid, conf.ExtConfig.SubMail.Signature)
|
|
|
|
- addr := conf.ExtConfig.Applet.WaybillUrl + url.QueryEscape(lib.AesEncryptCBC(waybillModel.WaybillNo, lib.AesKey))
|
|
|
|
- res, err1 := ss.SmsXSend(waybillModel.ConsigneeAddressPhone, addr)
|
|
|
|
- if err1 != nil || res.Status != sms.SUCCESS {
|
|
|
|
- e.Log.Errorf("派单短信发送失败", zap.Any("res", res), zap.Error(err1))
|
|
|
|
- err = errors.New("派单短信发送失败,请检查收件人电话是否正确!")
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
- //waybillModel.SendLog = model.WaybillSendLog{
|
|
|
|
- // Phone: waybillModel.ConsigneeAddressPhone,
|
|
|
|
- // Content: "【冷链送药追溯平台】您的运单正在派送中,点击查看详情:" + addr,
|
|
|
|
- //}
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1460,3 +1508,81 @@ func (e *Waybill) InsertByOrderId(c *dto.WeianGetWaybillNoReq) error {
|
|
return nil
|
|
return nil
|
|
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// CreateSole 生成唯一订单编号
|
|
|
|
+func (e *Waybill) CreateSole() (string, error) {
|
|
|
|
+ var waybill model.Waybill
|
|
|
|
+ var err error
|
|
|
|
+ var count int64
|
|
|
|
+ format := time.Now().Format("20060102")
|
|
|
|
+ un := time.Now().Unix()
|
|
|
|
+ waybillno := fmt.Sprintf("%v%v", format, un)
|
|
|
|
+ err = e.Orm.Model(&waybill).Where("waybill_no = ?", waybillno).Count(&count).Error
|
|
|
|
+ if count > 0 {
|
|
|
|
+ return e.CreateSole()
|
|
|
|
+ }
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("生成订单号错误: %s", err)
|
|
|
|
+ err = errors.New("生成订单号错误,请重新生成")
|
|
|
|
+ return "", err
|
|
|
|
+ }
|
|
|
|
+ return waybillno, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// WaybillTurnarounds 订单转门店
|
|
|
|
+func (e *Waybill) WaybillTurnarounds(c *dto.WaybillTurnarounds, p *actions.DataPermission) error {
|
|
|
|
+ var err error
|
|
|
|
+ var waybillModel model.Waybill
|
|
|
|
+ var count int64
|
|
|
|
+ //查询订单是否存在
|
|
|
|
+ tx := e.Orm.Begin()
|
|
|
|
+ defer func() {
|
|
|
|
+ if err != nil {
|
|
|
|
+ tx.Rollback()
|
|
|
|
+ } else {
|
|
|
|
+ tx.Commit()
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+ err = tx.Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
|
|
+ Where("waybill_no = ?", c.WaybillNo).
|
|
|
|
+ First(&waybillModel).Count(&count).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
|
+ return global.GetNotFoundOrNoPermissionErr
|
|
|
|
+ }
|
|
|
|
+ return global.GetFailedErr
|
|
|
|
+ }
|
|
|
|
+ if count == 0 {
|
|
|
|
+ return errors.New("订单不存在")
|
|
|
|
+ }
|
|
|
|
+ //查询门店是否存在可以转换
|
|
|
|
+ var data model.SysDept
|
|
|
|
+ var Depts []model.SysDept
|
|
|
|
+ err = e.Orm.Model(&data).
|
|
|
|
+ Scopes(
|
|
|
|
+ CompanyIdScopesUser(p.DeptId),
|
|
|
|
+ ).Find(&Depts).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return global.GetFailedErr
|
|
|
|
+ }
|
|
|
|
+ contains := false
|
|
|
|
+ for _, v := range Depts {
|
|
|
|
+ if v.Id == c.DeptId {
|
|
|
|
+ contains = true
|
|
|
|
+ } else {
|
|
|
|
+ contains = false
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if !contains {
|
|
|
|
+ return errors.New("转门店不存在")
|
|
|
|
+ }
|
|
|
|
+ waybillModel.DeptId = c.DeptId
|
|
|
|
+ update := tx.Updates(&waybillModel)
|
|
|
|
+ if update.Error != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", update.Error)
|
|
|
|
+ return global.UpdateFailedErr
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
|
|
+}
|