|
@@ -21,6 +21,39 @@ type Waybill struct {
|
|
service.Service
|
|
service.Service
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func WaybillCustomerStatusScopes(status int) func(db *gorm.DB) *gorm.DB {
|
|
|
|
+ return func(db *gorm.DB) *gorm.DB {
|
|
|
|
+ // 未发货
|
|
|
|
+ if status == 1 {
|
|
|
|
+ statusList := []int{
|
|
|
|
+ model.WaybillStatusWaitDelivery,
|
|
|
|
+ model.WaybillStatusTruck,
|
|
|
|
+ model.WaybillStatusWaitStorage,
|
|
|
|
+ }
|
|
|
|
+ return db.Where("status in (?)", statusList)
|
|
|
|
+ }
|
|
|
|
+ // 已发货
|
|
|
|
+ if status == 2 {
|
|
|
|
+ statusList := []int{
|
|
|
|
+ model.WaybillStatusTruck,
|
|
|
|
+ model.WaybillStatusStorage,
|
|
|
|
+ model.WaybillStatusTruckOut,
|
|
|
|
+ model.WaybillStatusStorageOut,
|
|
|
|
+ }
|
|
|
|
+ return db.Where("status in (?)", statusList)
|
|
|
|
+ }
|
|
|
|
+ // 已签收
|
|
|
|
+ if status == 3 {
|
|
|
|
+ statusList := []int{
|
|
|
|
+ model.WaybillStatusReceipt,
|
|
|
|
+ }
|
|
|
|
+ return db.Where("status in (?)", statusList)
|
|
|
|
+ }
|
|
|
|
+ return db
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
// GetPage 获取Waybill列表
|
|
// GetPage 获取Waybill列表
|
|
func (e *Waybill) GetPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
|
|
func (e *Waybill) GetPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
|
|
var err error
|
|
var err error
|
|
@@ -32,6 +65,54 @@ func (e *Waybill) GetPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count
|
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
actions.Permission(data.TableName(), p),
|
|
actions.Permission(data.TableName(), p),
|
|
).
|
|
).
|
|
|
|
+ Preload("PrintUser").
|
|
|
|
+ Find(list).Limit(-1).Offset(-1).
|
|
|
|
+ Count(count).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return global.GetFailedErr
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
|
|
+}
|
|
|
|
+func (e *Waybill) GetAppletPage(c *dto.WaybillGetAppletPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
|
|
|
|
+ var err error
|
|
|
|
+ //var data model.Waybill
|
|
|
|
+ var logistics model.WaybillLogistics
|
|
|
|
+ err = e.Orm.Table("waybill").
|
|
|
|
+ Select("waybill.*,waybill_logistics.status as status").
|
|
|
|
+ Scopes(
|
|
|
|
+ cDto.MakeCondition(c.GetNeedSearch()),
|
|
|
|
+ cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
|
|
+ actions.Permission(logistics.TableName(), p)).
|
|
|
|
+ Where("waybill_logistics.id in (SELECT MAX(id) FROM waybill_logistics where user_id = ? group by waybill_no )", p.UserId).
|
|
|
|
+ Joins("left join waybill_logistics on waybill.waybill_no = waybill_logistics.waybill_no").
|
|
|
|
+ Find(&list).Limit(-1).Offset(-1).Count(count).Error
|
|
|
|
+
|
|
|
|
+ //err = e.Orm.Model(&data).
|
|
|
|
+ // Scopes(
|
|
|
|
+ // cDto.MakeCondition(c.GetNeedSearch()),
|
|
|
|
+ // cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
|
|
+ // actions.Permission(data.TableName(), p),
|
|
|
|
+ // ).
|
|
|
|
+ // Find(list).Limit(-1).Offset(-1).
|
|
|
|
+ // Count(count).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return global.GetFailedErr
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
|
|
+}
|
|
|
|
+func (e *Waybill) GetCustomerPage(c *dto.WaybillGetCustomerPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
|
|
|
|
+ var err error
|
|
|
|
+ var data model.Waybill
|
|
|
|
+
|
|
|
|
+ err = e.Orm.Model(&data).
|
|
|
|
+ Scopes(
|
|
|
|
+ WaybillCustomerStatusScopes(c.Status),
|
|
|
|
+ cDto.MakeCondition(c.GetNeedSearch()),
|
|
|
|
+ cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
|
|
+ actions.Permission(data.TableName(), p),
|
|
|
|
+ ).
|
|
Find(list).Limit(-1).Offset(-1).
|
|
Find(list).Limit(-1).Offset(-1).
|
|
Count(count).Error
|
|
Count(count).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -159,14 +240,36 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
|
|
}
|
|
}
|
|
return global.UpdateFailedErr
|
|
return global.UpdateFailedErr
|
|
}
|
|
}
|
|
- if waybillModel.Status != model.WaybillStatusWaitDelivery {
|
|
|
|
|
|
+ if waybillModel.Status != model.WaybillStatusWaitDelivery &&
|
|
|
|
+ waybillModel.Status != model.WaybillStatusWaitTruck &&
|
|
|
|
+ waybillModel.Status != model.WaybillStatusWaitStorage {
|
|
return errors.New(fmt.Sprintf("运单状态为%s,禁止操作!", model.WaybillStatusMap[waybillModel.Status]))
|
|
return errors.New(fmt.Sprintf("运单状态为%s,禁止操作!", model.WaybillStatusMap[waybillModel.Status]))
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ var car = model.Car{}
|
|
if c.Type == model.SysUserTypeDriver {
|
|
if c.Type == model.SysUserTypeDriver {
|
|
waybillModel.Status = model.WaybillStatusWaitTruck
|
|
waybillModel.Status = model.WaybillStatusWaitTruck
|
|
|
|
+ // 查询车辆库信息
|
|
|
|
+ err = tx.Scopes(actions.Permission(car.TableName(), p)).
|
|
|
|
+ Where("user_id = ?", c.PrintUserId).
|
|
|
|
+ First(&car).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New("获取车辆信息失败")
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ var warehouse = model.Warehouse{}
|
|
if c.Type == model.SysUserTypeWarehouse {
|
|
if c.Type == model.SysUserTypeWarehouse {
|
|
waybillModel.Status = model.WaybillStatusWaitStorage
|
|
waybillModel.Status = model.WaybillStatusWaitStorage
|
|
|
|
+ // 查询仓库信息
|
|
|
|
+ err = tx.Scopes(actions.Permission(warehouse.TableName(), p)).
|
|
|
|
+ Where("user_id = ?",c.PrintUserId).
|
|
|
|
+ First(&warehouse).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New("获取仓库信息失败")
|
|
|
|
+ }
|
|
}
|
|
}
|
|
waybillModel.PrintUserId = c.PrintUserId
|
|
waybillModel.PrintUserId = c.PrintUserId
|
|
err = tx.Save(&waybillModel).Error
|
|
err = tx.Save(&waybillModel).Error
|
|
@@ -174,6 +277,27 @@ 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 global.UpdateFailedErr
|
|
return global.UpdateFailedErr
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // 添加物流
|
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
|
+ WaybillNo: waybillModel.WaybillNo,
|
|
|
|
+ Status: waybillModel.Status,
|
|
|
|
+ CarId: car.Id,
|
|
|
|
+ WarehouseId: warehouse.Id,
|
|
|
|
+ UserId: c.PrintUserId,
|
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
|
+ CreateBy: p.UserId,
|
|
|
|
+ },
|
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
|
+ DeptId: p.DeptId,
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+ err = tx.Create(&Logistics).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
return nil
|
|
return nil
|
|
@@ -439,7 +563,7 @@ func (e *Waybill) CarIn(c *dto.WaybillInOutReq, p *actions.DataPermission) error
|
|
tx.Commit()
|
|
tx.Commit()
|
|
}
|
|
}
|
|
}()
|
|
}()
|
|
- // 查询仓库信息
|
|
|
|
|
|
+ // 查询车辆信息
|
|
var car = model.Car{}
|
|
var car = model.Car{}
|
|
// 查询运单是否存在
|
|
// 查询运单是否存在
|
|
err = tx.Scopes(actions.Permission(car.TableName(), p)).
|
|
err = tx.Scopes(actions.Permission(car.TableName(), p)).
|
|
@@ -447,7 +571,7 @@ func (e *Waybill) CarIn(c *dto.WaybillInOutReq, p *actions.DataPermission) error
|
|
First(&car).Error
|
|
First(&car).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
- return errors.New("获取仓库信息失败")
|
|
|
|
|
|
+ return errors.New("获取车辆信息失败")
|
|
}
|
|
}
|
|
|
|
|
|
for _, waybillNo := range c.WaybillNoList {
|
|
for _, waybillNo := range c.WaybillNoList {
|
|
@@ -550,7 +674,7 @@ func (e *Waybill) CarOut(c *dto.WaybillInOutReq, p *actions.DataPermission) erro
|
|
First(&car).Error
|
|
First(&car).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
- return errors.New("获取仓库信息失败")
|
|
|
|
|
|
+ return errors.New("获取车辆信息失败")
|
|
}
|
|
}
|
|
|
|
|
|
for _, waybillNo := range c.WaybillNoList {
|
|
for _, waybillNo := range c.WaybillNoList {
|
|
@@ -568,7 +692,7 @@ func (e *Waybill) CarOut(c *dto.WaybillInOutReq, p *actions.DataPermission) erro
|
|
}
|
|
}
|
|
|
|
|
|
if waybillModel.CarId != car.Id {
|
|
if waybillModel.CarId != car.Id {
|
|
- return errors.New("请选择正确仓库出库!")
|
|
|
|
|
|
+ return errors.New("请选择正确车辆下车!")
|
|
}
|
|
}
|
|
|
|
|
|
if waybillModel.CarId == car.Id && waybillModel.Status == model.WaybillStatusTruckOut {
|
|
if waybillModel.CarId == car.Id && waybillModel.Status == model.WaybillStatusTruckOut {
|
|
@@ -635,3 +759,128 @@ func (e *Waybill) CarOut(c *dto.WaybillInOutReq, p *actions.DataPermission) erro
|
|
|
|
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
+func (e *Waybill) Receipt(c *dto.WaybillInOutReq, p *actions.DataPermission) error {
|
|
|
|
+ var err error
|
|
|
|
+
|
|
|
|
+ tx := e.Orm.Begin()
|
|
|
|
+ defer func() {
|
|
|
|
+ if err != nil {
|
|
|
|
+ tx.Rollback()
|
|
|
|
+ } else {
|
|
|
|
+ tx.Commit()
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+ // 查询仓库信息
|
|
|
|
+ var car = model.Car{}
|
|
|
|
+ // 查询运单是否存在
|
|
|
|
+ err = tx.Scopes(actions.Permission(car.TableName(), p)).
|
|
|
|
+ Where("user_id = ?", p.UserId).
|
|
|
|
+ First(&car).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New("获取车辆信息失败")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for _, waybillNo := range c.WaybillNoList {
|
|
|
|
+ var waybillModel = model.Waybill{}
|
|
|
|
+ // 查询运单是否存在
|
|
|
|
+ err = tx.Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
|
|
+ Where("waybill_no = ?", waybillNo).
|
|
|
|
+ First(&waybillModel).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
|
+ return errors.New(fmt.Sprintf("运单号%s不存在", waybillNo))
|
|
|
|
+ }
|
|
|
|
+ return errors.New(fmt.Sprintf("运单号%s查询失败", waybillNo))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if waybillModel.Status == model.WaybillStatusReceipt {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ waybillModel.Status = model.WaybillStatusReceipt
|
|
|
|
+ waybillModel.CarId = car.Id
|
|
|
|
+ waybillModel.ReceiptTime = model2.Time(time.Now())
|
|
|
|
+ err = tx.Save(waybillModel).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单信息失败:%s", err))
|
|
|
|
+ }
|
|
|
|
+ // 获取传感器信息
|
|
|
|
+ deviceSensorList, count, err := nats_server.Cold_CompanyDeviceSensor_List_ByKey(car.Sn)
|
|
|
|
+ if err != nil || count == 0 {
|
|
|
|
+ return errors.New(fmt.Sprintf("查询设备定位信息失败:%s", err.Error()))
|
|
|
|
+ }
|
|
|
|
+ var lng, Lat string
|
|
|
|
+ if len(deviceSensorList[0].T_DeviceSensorData.T_site) > 0 {
|
|
|
|
+ site := strings.Split(deviceSensorList[0].T_DeviceSensorData.T_site, ",")
|
|
|
|
+ if len(site) == 2 {
|
|
|
|
+ lng = site[0]
|
|
|
|
+ Lat = site[1]
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 查询任务
|
|
|
|
+ var task model.WaybillTask
|
|
|
|
+ err = tx.Model(&task).Where("waybill_no = ? and car_id = ?", waybillNo, car.Id).
|
|
|
|
+ Last(&task).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("查询运单任务信息失败:%s", err))
|
|
|
|
+ }
|
|
|
|
+ // 未下车 直接点签收
|
|
|
|
+ if time.Time(task.EndTime).IsZero() {
|
|
|
|
+ task.EndTime = model2.Time(time.Now())
|
|
|
|
+ task.UpdateBy = p.UserId
|
|
|
|
+ err = tx.Save(&task).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单任务信息失败:%s", err))
|
|
|
|
+ }
|
|
|
|
+ // 添加下车物流记录
|
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
|
+ WaybillNo: waybillNo,
|
|
|
|
+ Status: model.WaybillStatusTruckOut,
|
|
|
|
+ CarId: car.Id,
|
|
|
|
+ UserId: p.UserId,
|
|
|
|
+ Lng: lng,
|
|
|
|
+ Lat: Lat,
|
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
|
+ CreateBy: p.UserId,
|
|
|
|
+ },
|
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
|
+ DeptId: p.DeptId,
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+ err = tx.Create(&Logistics).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 添加物流
|
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
|
+ WaybillNo: waybillNo,
|
|
|
|
+ Status: model.WaybillStatusReceipt,
|
|
|
|
+ CarId: car.Id,
|
|
|
|
+ UserId: p.UserId,
|
|
|
|
+ Lng: lng,
|
|
|
|
+ Lat: Lat,
|
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
|
+ CreateBy: p.UserId,
|
|
|
|
+ },
|
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
|
+ DeptId: p.DeptId,
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+ err = tx.Create(&Logistics).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return errors.New(fmt.Sprintf("保存运单物流信息失败:%s", err))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return nil
|
|
|
|
+}
|