|
@@ -0,0 +1,637 @@
|
|
|
+package service
|
|
|
+
|
|
|
+import (
|
|
|
+ "cold-logistics/app/admin/model"
|
|
|
+ "cold-logistics/app/admin/service/dto"
|
|
|
+ "cold-logistics/common/actions"
|
|
|
+ cDto "cold-logistics/common/dto"
|
|
|
+ "cold-logistics/common/global"
|
|
|
+ model2 "cold-logistics/common/model"
|
|
|
+ "cold-logistics/common/nats/nats_server"
|
|
|
+ "errors"
|
|
|
+ "fmt"
|
|
|
+ "gogs.baozhida.cn/zoie/OAuth-core/pkg/utils"
|
|
|
+ "gogs.baozhida.cn/zoie/OAuth-core/service"
|
|
|
+ "gorm.io/gorm"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+type Waybill struct {
|
|
|
+ service.Service
|
|
|
+}
|
|
|
+
|
|
|
+// GetPage 获取Waybill列表
|
|
|
+func (e *Waybill) GetPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, count *int64, p *actions.DataPermission) error {
|
|
|
+ var err error
|
|
|
+ var data model.Waybill
|
|
|
+
|
|
|
+ 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
|
|
|
+}
|
|
|
+
|
|
|
+// Get 获取Waybill对象
|
|
|
+func (e *Waybill) Get(d *dto.WaybillGetReq, waybillModel *model.Waybill, p *actions.DataPermission) error {
|
|
|
+ err := e.Orm.
|
|
|
+ Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
|
+ Preload("User").
|
|
|
+ First(waybillModel, d.GetId()).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return global.GetNotFoundOrNoPermissionErr
|
|
|
+ }
|
|
|
+ return global.GetFailedErr
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// Insert 创建Waybill对象
|
|
|
+func (e *Waybill) Insert(c *dto.WaybillInsertReq) error {
|
|
|
+ var err error
|
|
|
+ var data model.Waybill
|
|
|
+
|
|
|
+ tx := e.Orm.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ var no string
|
|
|
+ for {
|
|
|
+ no = time.Now().Format("200601021504") + utils.GetRandString(6, "0123456789", 0)
|
|
|
+ var j int64
|
|
|
+ err = e.Orm.Model(&data).Where("waybill_no = ?", no).Count(&j).Error
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if j == 0 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加运单
|
|
|
+ data.WaybillNo = no
|
|
|
+ c.Generate(&data)
|
|
|
+ err = tx.Create(&data).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return global.CreateFailedErr
|
|
|
+ }
|
|
|
+ c.Id = data.Id
|
|
|
+
|
|
|
+ return nil
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+// Update 修改Waybill对象
|
|
|
+func (e *Waybill) Update(c *dto.WaybillUpdateReq, p *actions.DataPermission) error {
|
|
|
+ var err error
|
|
|
+
|
|
|
+ tx := e.Orm.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ var waybillModel = model.Waybill{}
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = e.Orm.Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
|
+ First(&waybillModel, c.GetId()).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return global.UpdateNotFoundOrNoPermissionErr
|
|
|
+ }
|
|
|
+ return global.UpdateFailedErr
|
|
|
+ }
|
|
|
+
|
|
|
+ c.Generate(&waybillModel)
|
|
|
+ err = tx.Save(&waybillModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return global.UpdateFailedErr
|
|
|
+ }
|
|
|
+
|
|
|
+ c.Id = waybillModel.Id
|
|
|
+ return nil
|
|
|
+}
|
|
|
+func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission) error {
|
|
|
+ var err error
|
|
|
+
|
|
|
+ tx := e.Orm.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ for _, id := range c.WaybillIds {
|
|
|
+
|
|
|
+ var waybillModel = model.Waybill{}
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = tx.Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
|
+ First(&waybillModel, id).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return global.UpdateNotFoundOrNoPermissionErr
|
|
|
+ }
|
|
|
+ return global.UpdateFailedErr
|
|
|
+ }
|
|
|
+ if waybillModel.Status != model.WaybillStatusWaitDelivery {
|
|
|
+ return errors.New(fmt.Sprintf("运单状态为%s,禁止操作!", model.WaybillStatusMap[waybillModel.Status]))
|
|
|
+ }
|
|
|
+ if c.Type == model.SysUserTypeDriver {
|
|
|
+ waybillModel.Status = model.WaybillStatusWaitTruck
|
|
|
+ }
|
|
|
+ if c.Type == model.SysUserTypeWarehouse {
|
|
|
+ waybillModel.Status = model.WaybillStatusWaitStorage
|
|
|
+ }
|
|
|
+ waybillModel.PrintUserId = c.PrintUserId
|
|
|
+ err = tx.Save(&waybillModel).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return global.UpdateFailedErr
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// Remove 删除Waybill
|
|
|
+func (e *Waybill) Remove(c *dto.WaybillDeleteReq, p *actions.DataPermission) error {
|
|
|
+ var err error
|
|
|
+
|
|
|
+ tx := e.Orm.Begin()
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tx.Rollback()
|
|
|
+ } else {
|
|
|
+ tx.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ var waybillModel model.Waybill
|
|
|
+
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = e.Orm.Scopes(actions.Permission(waybillModel.TableName(), p)).
|
|
|
+ First(&waybillModel, c.GetId()).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ return global.DeleteNotFoundOrNoPermissionErr
|
|
|
+ }
|
|
|
+ return global.DeleteFailedErr
|
|
|
+ }
|
|
|
+ if waybillModel.Status != model.WaybillStatusWaitDelivery && waybillModel.Status != model.WaybillStatusWaitTruck && waybillModel.Status != model.WaybillStatusWaitStorage {
|
|
|
+ return errors.New(fmt.Sprintf("运单状态为%s,禁止删除", model.WaybillStatusMap[waybillModel.Status]))
|
|
|
+ }
|
|
|
+
|
|
|
+ db := tx.Delete(&waybillModel)
|
|
|
+
|
|
|
+ if err = db.Error; err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return global.DeleteFailedErr
|
|
|
+ }
|
|
|
+ if db.RowsAffected == 0 {
|
|
|
+ return global.DeleteNotFoundOrNoPermissionErr
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (e *Waybill) WarehouseIn(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 warehouse = model.Warehouse{}
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = tx.Scopes(actions.Permission(warehouse.TableName(), p)).
|
|
|
+ Where("user_id = ?", p.UserId).
|
|
|
+ First(&warehouse).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.WarehouseId == warehouse.Id && waybillModel.Status == model.WaybillStatusStorage {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ waybillModel.Status = model.WaybillStatusStorage
|
|
|
+ waybillModel.WarehouseId = warehouse.Id
|
|
|
+ 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(warehouse.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]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加物流
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
+ WaybillNo: waybillNo,
|
|
|
+ Status: model.WaybillStatusStorage,
|
|
|
+ WarehouseId: warehouse.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))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加任务
|
|
|
+ task := model.WaybillTask{
|
|
|
+ WaybillNo: waybillNo,
|
|
|
+ WarehouseId: warehouse.Id,
|
|
|
+ UserId: p.UserId,
|
|
|
+ Sn: warehouse.Sn,
|
|
|
+ StartTime: model2.Time(time.Now()),
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ CreateBy: p.UserId,
|
|
|
+ },
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
+ DeptId: p.DeptId,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ err = tx.Create(&task).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单任务信息失败:%s", err))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+func (e *Waybill) WarehouseOut(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 warehouse = model.Warehouse{}
|
|
|
+ // 查询运单是否存在
|
|
|
+ err = tx.Scopes(actions.Permission(warehouse.TableName(), p)).
|
|
|
+ Where("user_id = ?", p.UserId).
|
|
|
+ First(&warehouse).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.WarehouseId != warehouse.Id {
|
|
|
+ return errors.New("请选择正确仓库出库!")
|
|
|
+ }
|
|
|
+
|
|
|
+ if waybillModel.WarehouseId == warehouse.Id && waybillModel.Status == model.WaybillStatusStorageOut {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ waybillModel.Status = model.WaybillStatusStorageOut
|
|
|
+ waybillModel.WarehouseId = warehouse.Id
|
|
|
+ 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(warehouse.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]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加物流
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
+ WaybillNo: waybillNo,
|
|
|
+ Status: model.WaybillStatusStorageOut,
|
|
|
+ WarehouseId: warehouse.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))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询任务
|
|
|
+ var task model.WaybillTask
|
|
|
+ err = tx.Model(&task).Where("waybill_no = ? and warehouse_id = ?", waybillNo, warehouse.Id).
|
|
|
+ First(&task).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("查询运单任务信息失败:%s", err))
|
|
|
+ }
|
|
|
+ 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))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+func (e *Waybill) CarIn(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.CarId == car.Id && waybillModel.Status == model.WaybillStatusTruck {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ waybillModel.Status = model.WaybillStatusTruck
|
|
|
+ waybillModel.CarId = car.Id
|
|
|
+ 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]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加物流
|
|
|
+ Logistics := model.WaybillLogistics{
|
|
|
+ WaybillNo: waybillNo,
|
|
|
+ Status: model.WaybillStatusTruck,
|
|
|
+ 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))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加任务
|
|
|
+ task := model.WaybillTask{
|
|
|
+ WaybillNo: waybillNo,
|
|
|
+ CarId: car.Id,
|
|
|
+ UserId: p.UserId,
|
|
|
+ Sn: car.Sn,
|
|
|
+ StartTime: model2.Time(time.Now()),
|
|
|
+ ControlBy: model2.ControlBy{
|
|
|
+ CreateBy: p.UserId,
|
|
|
+ },
|
|
|
+ DeptBy: model2.DeptBy{
|
|
|
+ DeptId: p.DeptId,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ err = tx.Create(&task).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("保存运单任务信息失败:%s", err))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+func (e *Waybill) CarOut(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.CarId != car.Id {
|
|
|
+ return errors.New("请选择正确仓库出库!")
|
|
|
+ }
|
|
|
+
|
|
|
+ if waybillModel.CarId == car.Id && waybillModel.Status == model.WaybillStatusTruckOut {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ waybillModel.Status = model.WaybillStatusTruckOut
|
|
|
+ waybillModel.CarId = car.Id
|
|
|
+ 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]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加物流
|
|
|
+ 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))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询任务
|
|
|
+ var task model.WaybillTask
|
|
|
+ err = tx.Model(&task).Where("waybill_no = ? and car_id = ?", waybillNo, car.Id).
|
|
|
+ First(&task).Error
|
|
|
+ if err != nil {
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
+ return errors.New(fmt.Sprintf("查询运单任务信息失败:%s", err))
|
|
|
+ }
|
|
|
+ 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))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|