|
@@ -278,7 +278,8 @@ func (e *Waybill) Get(d *dto.WaybillGetReq, waybillModel *model.Waybill, p *acti
|
|
|
func (e *Waybill) GetByWaybillNo(d *dto.WaybillGetByWaybillPdfReq, waybillModel *model.Waybill, p *actions.DataPermission) error {
|
|
|
err := e.Orm.
|
|
|
Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
|
- Where("waybill_no = ?", d.WaybillNo).
|
|
|
+ Where("waybill.waybill_no = ?", d.WaybillNo).
|
|
|
+ Joins("left join drug on drug.waybill_no = waybill.waybill_no").
|
|
|
Preload("Dept").
|
|
|
Preload("CoolerBox").
|
|
|
Preload("Delivery").
|
|
@@ -291,6 +292,9 @@ func (e *Waybill) GetByWaybillNo(d *dto.WaybillGetByWaybillPdfReq, waybillModel
|
|
|
}
|
|
|
return global.GetFailedErr
|
|
|
}
|
|
|
+ var drugs []model.Drug
|
|
|
+ e.Orm.Where("drug.waybill_no = ?", waybillModel.WaybillNo).Find(&drugs)
|
|
|
+ waybillModel.Drugs = drugs
|
|
|
|
|
|
return nil
|
|
|
}
|
|
@@ -331,6 +335,10 @@ func (e *Waybill) Insert(c *dto.WaybillInsertReq) error {
|
|
|
}
|
|
|
data.OrderNo = sole
|
|
|
c.Generate(&data)
|
|
|
+ if c.IsPhone {
|
|
|
+ data.Status = model.WaybillStatusInDeliverys
|
|
|
+ data.AssignmentStatus = 2
|
|
|
+ }
|
|
|
err = tx.Create(&data).Error
|
|
|
if err != nil {
|
|
|
e.Log.Errorf("db error: %s", err)
|
|
@@ -338,26 +346,6 @@ func (e *Waybill) Insert(c *dto.WaybillInsertReq) error {
|
|
|
}
|
|
|
c.Id = data.Id
|
|
|
|
|
|
- // 保存收货地址
|
|
|
- //if c.SaveSenderAddress {
|
|
|
- // // 查询地址是否存在
|
|
|
- // address := model.Address{}
|
|
|
- // err = e.Orm.Where("address = ? and phone = ? and name = ? and dept_id = ? and address_type = 'sender'",
|
|
|
- // c.SenderAddressDetails, c.SenderAddressPhone, c.SenderAddressName, c.DeptId).First(&address).Error
|
|
|
- // if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
- // address.Address = c.SenderAddressDetails
|
|
|
- // address.Phone = c.SenderAddressPhone
|
|
|
- // address.Name = c.SenderAddressName
|
|
|
- // address.DeptId = c.DeptId
|
|
|
- // address.AddressType = "sender"
|
|
|
- // err = tx.Create(&address).Error
|
|
|
- // if err != nil {
|
|
|
- // e.Log.Errorf("创建地址失败: %s", err)
|
|
|
- // return global.CreateFailedErr
|
|
|
- // }
|
|
|
- // }
|
|
|
- //}
|
|
|
-
|
|
|
// 保存发货地址
|
|
|
if c.SaveConsigneeAddress {
|
|
|
// 查询地址是否存在
|
|
@@ -655,7 +643,7 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
|
err = tx.Scopes(actions.Permission(coolerBox.TableName(), p)).
|
|
|
First(&coolerBox, c.CoolerBoxId).Error
|
|
|
if err != nil {
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
+ e.Log.Errorf("获取保温箱信息失败: %s", err)
|
|
|
return errors.New("获取保温箱信息失败")
|
|
|
}
|
|
|
}
|
|
@@ -694,13 +682,13 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
|
if c.Status == model.WaybillStatusInShippeds {
|
|
|
waybillModel.Status = c.Status
|
|
|
// 查询保温箱信息
|
|
|
- var coolerBoxModel model.CoolerBox
|
|
|
- err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)).
|
|
|
- First(&coolerBoxModel, waybillModel.CoolerBoxId).Error
|
|
|
- if err != nil {
|
|
|
- e.Log.Errorf("获取保温箱信息失败: %s", err)
|
|
|
- return errors.New("获取保温箱信息失败")
|
|
|
- }
|
|
|
+ //var coolerBoxModel model.CoolerBox
|
|
|
+ //err = e.Orm.Scopes(actions.Permission(coolerBoxModel.TableName(), p)).
|
|
|
+ // First(&coolerBoxModel, c.CoolerBoxId).Error
|
|
|
+ //if err != nil {
|
|
|
+ // e.Log.Errorf("查询保温箱信息失败: %s", err)
|
|
|
+ // return errors.New("查询保温箱信息失败")
|
|
|
+ //}
|
|
|
var data model.IceRaft
|
|
|
var list []string
|
|
|
err := e.Orm.Model(&data).
|
|
@@ -708,7 +696,7 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
|
Scopes(
|
|
|
actions.Permission(data.TableName(), p),
|
|
|
IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusUsing),
|
|
|
- IceRaftNameRecordCoolerBoxIdScopes(coolerBoxModel.Id),
|
|
|
+ IceRaftNameRecordCoolerBoxIdScopes(coolerBox.Id),
|
|
|
).
|
|
|
Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
|
|
|
Find(&list).Error
|
|
@@ -718,20 +706,31 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
|
}
|
|
|
//查询保温箱记录信息状态为1使用中
|
|
|
var cooler model.CoolerBoxRecord
|
|
|
- err = e.Orm.Scopes(actions.Permission(cooler.TableName(), p)).
|
|
|
- First(&cooler).Where("cooler_box_id = ?", coolerBoxModel.Id).Where("status = ?", 1).Error
|
|
|
- if err != nil {
|
|
|
- e.Log.Errorf("db 获取保温箱记录信息失败: %s", err)
|
|
|
- return errors.New("获取保温箱记录信息失败")
|
|
|
- }
|
|
|
- cooler.CoolerUseUsers = user.NickName
|
|
|
- cooler.HistoryCode = append(cooler.HistoryCode, list...)
|
|
|
- cooler.CoolerUserTime = model2.Time(time.Now())
|
|
|
- cooler.Status = "2" //使用结束
|
|
|
- err = e.Orm.Updates(&cooler).Where("id = ?", cooler.Id).Error
|
|
|
- if err != nil {
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
- return errors.New("保存保温箱记录失败")
|
|
|
+ var count int64
|
|
|
+ e.Orm.Scopes(actions.Permission(cooler.TableName(), p)).
|
|
|
+ First(&cooler).Where("cooler_box_id = ?", coolerBox.Id).Where("status = ?", 1).Count(&count)
|
|
|
+ if count == 0 {
|
|
|
+ cooler.CoolerUseUsers = user.NickName
|
|
|
+ cooler.HistoryCode = append(cooler.HistoryCode, list...)
|
|
|
+ cooler.HistoryCode = cDto.UniqueSlice(cooler.HistoryCode)
|
|
|
+ cooler.CoolerUserTime = model2.Time(time.Now())
|
|
|
+ cooler.Status = "2" //使用结束
|
|
|
+ err := e.Orm.Save(&cooler).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("保存保温箱记录失败: %s", err)
|
|
|
+ return errors.New("保存保温箱记录失败")
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cooler.CoolerUseUsers = user.NickName
|
|
|
+ cooler.HistoryCode = append(cooler.HistoryCode, list...)
|
|
|
+ cooler.HistoryCode = cDto.UniqueSlice(cooler.HistoryCode)
|
|
|
+ cooler.CoolerUserTime = model2.Time(time.Now())
|
|
|
+ cooler.Status = "2" //使用结束
|
|
|
+ err = e.Orm.Updates(&cooler).Where("id = ?", cooler.Id).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("保存保温箱记录失败: %s", err)
|
|
|
+ return errors.New("保存保温箱记录失败")
|
|
|
+ }
|
|
|
}
|
|
|
// 配送中状态下才发送短信
|
|
|
ss := sms.NewSMS(conf.ExtConfig.SubMail.Appid, conf.ExtConfig.SubMail.Signature)
|
|
@@ -1654,3 +1653,115 @@ func (e *Waybill) WaybillTurnarounds(c *dto.WaybillTurnarounds, p *actions.DataP
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+// SecondaryDistribution 二次分配订单
|
|
|
+func (e *Waybill) SecondaryDistribution(c *dto.WaybillAssignment, 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("订单不存在")
|
|
|
+ }
|
|
|
+ if !waybillModel.IsSecondaryDistribution {
|
|
|
+ return errors.New("该订单不允许二次分配")
|
|
|
+ }
|
|
|
+ var waybil model.Waybill
|
|
|
+ sole, err := e.CreateSole()
|
|
|
+ var no string
|
|
|
+ for {
|
|
|
+ no = time.Now().Format("200601021504") + utils.GetRandString(6, "0123456789", 0)
|
|
|
+ var j int64
|
|
|
+ err = e.Orm.Model(&waybil).Where("waybill_no = ?", no).Count(&j).Error
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if j == 0 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 添加运单
|
|
|
+ waybil.WaybillNo = no
|
|
|
+ sole, err = e.CreateSole()
|
|
|
+ if err != nil {
|
|
|
+ err = errors.New("生成运单号失败")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ waybil.OrderNo = sole
|
|
|
+ waybil.Status = model.WaybillStatusInShippeds
|
|
|
+ waybil.DeptId = waybillModel.DeptId
|
|
|
+ waybil.DeliveryName = waybillModel.DeliveryName
|
|
|
+ waybil.DeliveryId = waybillModel.DeliveryId
|
|
|
+ waybil.DeliveryPhone = waybillModel.DeliveryPhone
|
|
|
+ waybil.OrderTime = model2.Time(time.Now())
|
|
|
+ c.Generate(&waybil)
|
|
|
+ err = tx.Create(&waybil).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
+ // 保存发货地址
|
|
|
+ if c.SaveConsigneeAddress {
|
|
|
+ // 查询地址是否存在
|
|
|
+ address := model.Address{}
|
|
|
+ err = e.Orm.Where("address = ? and phone = ? and name = ? and dept_id = ? and address_type = 'consignee'",
|
|
|
+ c.ConsigneeAddressDetails, c.ConsigneeAddressPhone, c.ConsigneeAddressName, c.DeptId).First(&address).Error
|
|
|
+ if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ address.Address = c.ConsigneeAddressDetails
|
|
|
+ address.Phone = c.ConsigneeAddressPhone
|
|
|
+ address.Name = c.ConsigneeAddressName
|
|
|
+ address.DeptId = c.DeptId
|
|
|
+ address.AddressType = "consignee"
|
|
|
+ err = tx.Create(&address).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("创建地址失败: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(c.Drugs) > 0 {
|
|
|
+ for _, drug := range c.Drugs {
|
|
|
+ var drugs model.Drug
|
|
|
+ drugs.WaybillNo = no
|
|
|
+ drugs.Drug_ent_base_info_id = drug.Drug_ent_base_info_id
|
|
|
+ drugs.Ent_name = drug.Ent_name
|
|
|
+ drugs.Physic_name = drug.Physic_name
|
|
|
+ drugs.Approval_licence_no = drug.Approval_licence_no
|
|
|
+ drugs.Prepn_spec = drug.Prepn_spec
|
|
|
+ drugs.Physic_type_desc = drug.Physic_type_desc
|
|
|
+ drugs.Pkg_spec_crit = drug.Pkg_spec_crit
|
|
|
+ drugs.Prepn_type_desc = drug.Prepn_type_desc
|
|
|
+ drugs.Code = drug.Code
|
|
|
+ err = tx.Save(&drugs).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New("保存药品信息失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ waybillModel.ChildWaybills = append(waybillModel.ChildWaybills, waybil.WaybillNo)
|
|
|
+ err = tx.Save(&waybillModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("更新运单失败: %s", err)
|
|
|
+ return global.UpdateFailedErr
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|