Browse Source

update:根据市场需求屏蔽冷冻柜管理/保温箱管理添加/编辑SN的验证,冰排管理新增冷冻要求,入库无需再重复填写冷冻要求

zoie 5 months ago
parent
commit
1c1c6e11dc

+ 34 - 0
app/admin/controller/ice_raft.go

@@ -224,6 +224,40 @@ func (e IceRaftController) Get(c *gin.Context) {
 	e.OK(object, "查询成功")
 }
 
+// GetByCode 通过code获取冰排
+// @Summary 通过code获取冰排
+// @Description 通过code获取冰排
+// @Tags 冰排
+// @Param id path string true "冰排id"
+// @Success 200 {object} response.Response{data=model.IceRaft} "{"code": 200, "data": [...]}"
+// @Router /api/ice-raft/code/{code} [get]
+// @Security Bearer
+func (e IceRaftController) GetByCode(c *gin.Context) {
+	s := service.IceRaft{}
+	req := dto.IceRaftGetByCodeReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, nil).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+	var object model.IceRaft
+	p := actions.GetPermissionFromContext(c)
+
+	//数据权限检查
+	err = s.GetByCode(&req, &object, p)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.OK(object, "查询成功")
+}
+
 // Insert 添加冰排
 // @Summary 添加冰排
 // @Description 添加冰排

+ 85 - 2
app/admin/controller/weian.go

@@ -4,6 +4,7 @@ import (
 	"cold-delivery/app/admin/model"
 	"cold-delivery/app/admin/service"
 	"cold-delivery/app/admin/service/dto"
+	"cold-delivery/common/nats/nats_server"
 	"cold-delivery/conf"
 	"encoding/json"
 	"github.com/gin-gonic/gin"
@@ -66,10 +67,86 @@ func (e WeianController) GetOrderInfo(c *gin.Context) {
 }
 
 // 测试opeapi鉴权
-func (e WeianController) Test(c *gin.Context) {
+func (e WeianController) GetWaybillNo(c *gin.Context) {
 	s := service.Waybill{}
+	req := dto.WeianGetWaybillNoReq{}
 	err := e.MakeContext(c).
 		MakeOrm().
+		Bind(&req, binding.Query).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	err = s.InsertByOrderId(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(req.WaybillNo, "查询成功")
+}
+func (e WeianController) GetWaybillData(c *gin.Context) {
+	s := service.WaybillTask{}
+	req := dto.WeianGetWaybillDataReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.Query).
+		MakeService(&s.Service).
+		Errors
+	if err != nil {
+		e.Logger.Error(err)
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	var task model.WaybillTask
+
+	err = s.Get(&req, &task)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	var ids []int
+	for _, r := range task.DeviceSensorList {
+		ids = append(ids, r.T_id)
+	}
+	dataReq := dto.WaybillTaskGetDataPageReq{
+		Pagination: req.Pagination,
+		WaybillNo:  task.WaybillNo,
+		TaskId:     task.Id,
+		T_ids:      ids,
+		StartTime:  task.StartTime.String(),
+		EndTime:    task.EndTime.String(),
+	}
+	list, count, err := s.GetDataPage(&dataReq)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+
+	e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
+}
+
+// GetLocus 获取轨迹信息
+// @Summary 获取轨迹信息
+// @Description 获取轨迹信息
+// @Tags 运单任务
+// @Accept  application/json
+// @Product application/json
+// @Param data body dto.WaybillTaskGetNewestDataPageReq true "body"
+// @Success 200 {object} response.Response{data=response.Page{list=[]model.WaybillTask}} "{"code": 200, "data": [...]}"
+// @Router /api/waybill-task/locus [post]
+// @Security Bearer
+func (e WeianController) GetLocus(c *gin.Context) {
+	s := service.WaybillTask{}
+	req := dto.WaybillGetLocusReq{}
+	err := e.MakeContext(c).
+		MakeOrm().
+		Bind(&req, binding.Query).
 		MakeService(&s.Service).
 		Errors
 	if err != nil {
@@ -77,6 +154,12 @@ func (e WeianController) Test(c *gin.Context) {
 		e.Error(500, err, err.Error())
 		return
 	}
+	list := make([]nats_server.DeviceData_R2, 0)
 
-	e.OK(nil, "查询成功")
+	list, err = s.GetLocus(&req)
+	if err != nil {
+		e.Error(500, err, err.Error())
+		return
+	}
+	e.OK(list, "获取轨迹信息成功")
 }

+ 1 - 0
app/admin/model/ice_raft.go

@@ -13,6 +13,7 @@ type IceRaft struct {
 	Code            string            `json:"code" gorm:"size:128"`                                 // 商品名称
 	Status          string            `json:"status" gorm:"size:4;not null;default:'2';comment:状态"` // 1-停用 2-正常
 	IceRaftRecordId int               `json:"iceRaftRecordId" gorm:"size:128"`                      // 最新入库记录
+	FreezeClaim     float32           `json:"freezeClaim" gorm:"type:decimal(10,2);comment:冷冻要求"`   // 冷冻要求 单位小时
 	IceRaftRecord   IceRaftRecordOmit `json:"iceRaftRecord" gorm:"->;foreignkey:IceRaftRecordId;references:Id"`
 	model2.ControlBy
 	model2.ModelTime

+ 1 - 0
app/admin/router/ice_raft.go

@@ -19,6 +19,7 @@ func registerIceRaftRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
 		r.GET("", cont.GetPage)
 		r.GET("/newest-record", cont.GetNewestRecordPage)
 		r.GET("/:id", cont.Get)
+		r.GET("/code/:code", cont.GetByCode)
 		r.POST("", cont.Insert)
 		r.PUT("", cont.Update)
 		r.DELETE("", cont.Delete)

+ 4 - 2
app/admin/router/weian.go

@@ -24,8 +24,10 @@ func registerWeianRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewa
 
 func registerOpenApiRouter(v1 *gin.RouterGroup, openapiMiddleware gin.HandlerFunc) {
 	cont := controller.WeianController{}
-	r := v1.Group("/weian").Use(openapiMiddleware)
+	r := v1.Group("/waybill").Use(openapiMiddleware)
 	{
-		r.GET("/test", cont.Test)
+		r.GET("/waybillNoByOrderId", cont.GetWaybillNo)
+		r.GET("/data", cont.GetWaybillData)
+		r.GET("/locus", cont.GetLocus)
 	}
 }

+ 37 - 37
app/admin/service/cooler_box.go

@@ -102,24 +102,24 @@ func (e *CoolerBox) Insert(c *dto.CoolerBoxInsertReq, p *actions.DataPermission)
 		return err
 	}
 
-	var device nats_server.Device
-	var company model.SysDept
-	device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
-	if err != nil {
-		err = errors.New("获取SN信息失败,请检查SN是否正确!")
-		e.Log.Errorf("db error: %s", err)
-		return err
-	}
-	company, err = model.GetCompanyById(p.DeptId)
-	if err != nil {
-		e.Log.Errorf("db error: %s", err)
-		return err
-	}
-	if device.T_pid != company.Id {
-		err = errors.New("获取SN信息失败,请检查SN是否正确!")
-		e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
-		return err
-	}
+	//var device nats_server.Device
+	//var company model.SysDept
+	//device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
+	//if err != nil {
+	//	err = errors.New("获取SN信息失败,请检查SN是否正确!")
+	//	e.Log.Errorf("db error: %s", err)
+	//	return err
+	//}
+	//company, err = model.GetCompanyById(p.DeptId)
+	//if err != nil {
+	//	e.Log.Errorf("db error: %s", err)
+	//	return err
+	//}
+	//if device.T_pid != company.Id {
+	//	err = errors.New("获取SN信息失败,请检查SN是否正确!")
+	//	e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
+	//	return err
+	//}
 
 	// 添加保温箱
 	c.Generate(&data)
@@ -202,7 +202,7 @@ func (e *CoolerBox) Update(c *dto.CoolerBoxUpdateReq, p *actions.DataPermission)
 		return global.UpdateFailedErr
 	}
 
-	if CoolerBoxModel.Sn != c.Sn {
+	if CoolerBoxModel.Sn != c.Sn && len(c.Sn) > 0 {
 		var k int64
 		var data = model.CoolerBox{}
 		err = tx.Model(&data).Where("sn = ?", c.Sn).Count(&k).Error
@@ -216,24 +216,24 @@ func (e *CoolerBox) Update(c *dto.CoolerBoxUpdateReq, p *actions.DataPermission)
 			return err
 		}
 
-		var device nats_server.Device
-		var company model.SysDept
-		device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
-		if err != nil {
-			err = errors.New("获取SN信息失败,请检查SN是否正确!")
-			e.Log.Errorf("db error: %s", err)
-			return err
-		}
-		company, err = model.GetCompanyById(p.DeptId)
-		if err != nil {
-			e.Log.Errorf("db error: %s", err)
-			return err
-		}
-		if device.T_pid != company.Id {
-			err = errors.New("获取SN信息失败,请检查SN是否正确!")
-			e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
-			return err
-		}
+		//var device nats_server.Device
+		//var company model.SysDept
+		//device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
+		//if err != nil {
+		//	err = errors.New("获取SN信息失败,请检查SN是否正确!")
+		//	e.Log.Errorf("db error: %s", err)
+		//	return err
+		//}
+		//company, err = model.GetCompanyById(p.DeptId)
+		//if err != nil {
+		//	e.Log.Errorf("db error: %s", err)
+		//	return err
+		//}
+		//if device.T_pid != company.Id {
+		//	err = errors.New("获取SN信息失败,请检查SN是否正确!")
+		//	e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
+		//	return err
+		//}
 
 		CoolerBoxModel.HistorySn = append(CoolerBoxModel.HistorySn, c.Sn)
 	}

+ 11 - 3
app/admin/service/dto/ice_raft.go

@@ -41,6 +41,7 @@ type IceRaftInsertReq struct {
 	Id               int      `json:"id" comment:"编码" swaggerignore:"true"`  // 编码
 	CodeList         []string `json:"codeList" vd:"len($)>0;msg:'冰排编号不能为空'"` // 冰排名称
 	Status           string   `json:"status"`                                // 1-停用 2-正常
+	FreezeClaim      float32  `json:"freezeClaim"`                           // 冷冻要求 单位小时
 	common.ControlBy `swaggerignore:"true"`
 	common.DeptBy    `swaggerignore:"true"`
 }
@@ -51,6 +52,7 @@ func (s *IceRaftInsertReq) Generate(model *model.IceRaft, code string) {
 	}
 	model.Code = code
 	model.Status = s.Status
+	model.FreezeClaim = s.FreezeClaim
 	if s.ControlBy.UpdateBy != 0 {
 		model.UpdateBy = s.UpdateBy
 	}
@@ -67,9 +69,10 @@ func (s *IceRaftInsertReq) GetId() interface{} {
 }
 
 type IceRaftUpdateReq struct {
-	Id               int    `json:"id" comment:"编码"`                   // 编码
-	Code             string `json:"code" vd:"len($)>0;msg:'冰排编号不能为空'"` // 冰排名称
-	Status           string `json:"status"`                            // 1-停用 2-正常
+	Id               int     `json:"id" comment:"编码"`                   // 编码
+	Code             string  `json:"code" vd:"len($)>0;msg:'冰排编号不能为空'"` // 冰排名称
+	Status           string  `json:"status"`                            // 1-停用 2-正常
+	FreezeClaim      float32 `json:"freezeClaim"`                       // 冷冻要求 单位小时
 	common.ControlBy `swaggerignore:"true"`
 }
 
@@ -79,6 +82,7 @@ func (s *IceRaftUpdateReq) Generate(model *model.IceRaft) {
 	}
 	model.Code = s.Code
 	model.Status = s.Status
+	model.FreezeClaim = s.FreezeClaim
 	if s.ControlBy.UpdateBy != 0 {
 		model.UpdateBy = s.UpdateBy
 	}
@@ -99,6 +103,10 @@ func (s *IceRaftGetReq) GetId() interface{} {
 	return s.Id
 }
 
+type IceRaftGetByCodeReq struct {
+	Code string `uri:"code"`
+}
+
 type IceRaftDeleteReq struct {
 	Id               int `json:"id"`
 	common.ControlBy `swaggerignore:"true"`

+ 17 - 0
app/admin/service/dto/weian.go

@@ -1,5 +1,22 @@
 package dto
 
+import "cold-delivery/common/dto"
+
 type WeianGetOrderInfoReq struct {
 	OrderId string `form:"orderId"`
 }
+
+type WeianGetWaybillNoReq struct {
+	WaybillNo   string `form:"waybillNo"`
+	OrderId     string `form:"orderId" vd:"len($)>0;msg:'订单编号不能为空'"`
+	CompanyName string `form:"companyName" vd:"len($)>0;msg:'公司名称不能为空'"`
+}
+
+type WeianGetWaybillDataReq struct {
+	dto.Pagination `search:"-"`
+	WaybillNo      string `form:"waybillNo" search:"type:contains;column:waybill_no;table:waybill_task" vd:"len($)>0;msg:'订单编号不能为空'"` // 运单编号-必填
+}
+
+func (m *WeianGetWaybillDataReq) GetNeedSearch() interface{} {
+	return *m
+}

+ 37 - 37
app/admin/service/ice_locker.go

@@ -109,24 +109,24 @@ func (e *IceLocker) Insert(c *dto.IceLockerInsertReq, p *actions.DataPermission)
 		return err
 	}
 
-	var device nats_server.Device
-	var company model.SysDept
-	device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
-	if err != nil {
-		err = errors.New("获取SN信息失败,请检查SN是否正确!")
-		e.Log.Errorf("db error: %s", err)
-		return err
-	}
-	company, err = model.GetCompanyById(p.DeptId)
-	if err != nil {
-		e.Log.Errorf("db error: %s", err)
-		return err
-	}
-	if device.T_pid != company.Id {
-		err = errors.New("获取SN信息失败,请检查SN是否正确!")
-		e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
-		return err
-	}
+	//var device nats_server.Device
+	//var company model.SysDept
+	//device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
+	//if err != nil {
+	//	err = errors.New("获取SN信息失败,请检查SN是否正确!")
+	//	e.Log.Errorf("db error: %s", err)
+	//	return err
+	//}
+	//company, err = model.GetCompanyById(p.DeptId)
+	//if err != nil {
+	//	e.Log.Errorf("db error: %s", err)
+	//	return err
+	//}
+	//if device.T_pid != company.Id {
+	//	err = errors.New("获取SN信息失败,请检查SN是否正确!")
+	//	e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
+	//	return err
+	//}
 
 	// 添加冷冻柜
 	c.Generate(&data)
@@ -181,7 +181,7 @@ func (e *IceLocker) Update(c *dto.IceLockerUpdateReq, p *actions.DataPermission)
 		}
 	}
 
-	if iceLockerModel.Sn != c.Sn {
+	if iceLockerModel.Sn != c.Sn && len(c.Sn) > 0 {
 		var k int64
 		var data = model.IceLocker{}
 		err = tx.Model(&data).Where("sn = ?", c.Sn).Count(&k).Error
@@ -195,24 +195,24 @@ func (e *IceLocker) Update(c *dto.IceLockerUpdateReq, p *actions.DataPermission)
 			return err
 		}
 
-		var device nats_server.Device
-		var company model.SysDept
-		device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
-		if err != nil {
-			err = errors.New("获取SN信息失败,请检查SN是否正确!")
-			e.Log.Errorf("db error: %s", err)
-			return err
-		}
-		company, err = model.GetCompanyById(p.DeptId)
-		if err != nil {
-			e.Log.Errorf("db error: %s", err)
-			return err
-		}
-		if device.T_pid != company.Id {
-			err = errors.New("获取SN信息失败,请检查SN是否正确!")
-			e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
-			return err
-		}
+		//var device nats_server.Device
+		//var company model.SysDept
+		//device, err = nats_server.Cold_ReadDeviceByT_sn(c.Sn)
+		//if err != nil {
+		//	err = errors.New("获取SN信息失败,请检查SN是否正确!")
+		//	e.Log.Errorf("db error: %s", err)
+		//	return err
+		//}
+		//company, err = model.GetCompanyById(p.DeptId)
+		//if err != nil {
+		//	e.Log.Errorf("db error: %s", err)
+		//	return err
+		//}
+		//if device.T_pid != company.Id {
+		//	err = errors.New("获取SN信息失败,请检查SN是否正确!")
+		//	e.Log.Errorf("获取SN信息失败,device.T_pid != company.Id")
+		//	return err
+		//}
 
 		iceLockerModel.HistorySn = append(iceLockerModel.HistorySn, c.Sn)
 	}

+ 34 - 17
app/admin/service/ice_raft.go

@@ -132,6 +132,21 @@ func (e *IceRaft) Get(d *dto.IceRaftGetReq, iceRaftModel *model.IceRaft, p *acti
 
 	return nil
 }
+func (e *IceRaft) GetByCode(d *dto.IceRaftGetByCodeReq, iceRaftModel *model.IceRaft, p *actions.DataPermission) error {
+	err := e.Orm.
+		Scopes(actions.Permission(iceRaftModel.TableName(), p)).
+		Where("code = ?", d.Code).
+		First(iceRaftModel).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			return errors.New(fmt.Sprintf("冰排编号【%s】不存在!", d.Code))
+		}
+		return global.GetFailedErr
+	}
+
+	return nil
+}
 
 // Insert 创建IceRaft对象
 func (e *IceRaft) Insert(c *dto.IceRaftInsertReq) error {
@@ -295,21 +310,23 @@ func (e *IceRaft) InStorage(c *dto.IceRaftInStorageReq, p *actions.DataPermissio
 			First(&iceRaftModel).Error
 		if err != nil {
 			// 冰排编号不存在,添加
-			if errors.Is(err, gorm.ErrRecordNotFound) {
-				iceRaftModel.Code = code
-				iceRaftModel.Status = model.IceRaftStatusNormal
-				iceRaftModel.DeptId = p.DeptId
-				iceRaftModel.CreateBy = p.UserId
-				err = tx.Create(&iceRaftModel).Error
-				if err != nil {
-					e.Log.Errorf("db error: %s", err)
-					return errors.New(fmt.Sprintf("添加冰排【%s】信息失败", code))
-				}
-			} else {
-				e.Log.Errorf("db error: %s", err)
-				return errors.New("获取冰排信息失败")
-			}
+			//if errors.Is(err, gorm.ErrRecordNotFound) {
+			//	iceRaftModel.Code = code
+			//	iceRaftModel.Status = model.IceRaftStatusNormal
+			//	iceRaftModel.DeptId = p.DeptId
+			//	iceRaftModel.CreateBy = p.UserId
+			//	err = tx.Create(&iceRaftModel).Error
+			//	if err != nil {
+			//		e.Log.Errorf("db error: %s", err)
+			//		return errors.New(fmt.Sprintf("添加冰排【%s】信息失败", code))
+			//	}
+			//} else {
+			//	e.Log.Errorf("db error: %s", err)
+			//	return errors.New(fmt.Sprintf("获取冰排【%s】信息失败",code))
+			//}
 
+			e.Log.Errorf("db error: %s", err)
+			return errors.New(fmt.Sprintf("获取冰排【%s】信息失败", code))
 		}
 
 		if iceRaftModel.Status != model.IceRaftStatusNormal {
@@ -322,7 +339,7 @@ func (e *IceRaft) InStorage(c *dto.IceRaftInStorageReq, p *actions.DataPermissio
 			return err
 		}
 
-		// 更新冰排状态 使用中 -> 已完成
+		// 更新冰排记录状态 使用中 -> 已完成
 		err = tx.Model(&model.IceRaftRecord{}).
 			Where("ice_raft_id = ? and status = ?", iceRaftModel.Id, model.IceRaftRecordStatusUsing).
 			Updates(map[string]interface{}{
@@ -335,7 +352,7 @@ func (e *IceRaft) InStorage(c *dto.IceRaftInStorageReq, p *actions.DataPermissio
 			IceRaftId:     iceRaftModel.Id,
 			Status:        model.IceRaftRecordStatusFreezing,
 			InStorageTime: model2.Time(time.Now()),
-			FreezeClaim:   c.FreezeClaim,
+			FreezeClaim:   iceRaftModel.FreezeClaim,
 			DeptBy: model2.DeptBy{
 				DeptId: p.DeptId,
 			},
@@ -409,7 +426,7 @@ func (e *IceRaft) OutStorage(c *dto.IceRaftOutStorageReq, p *actions.DataPermiss
 			First(&iceRaftRecordModel, iceRaftModel.IceRaftRecordId).Error
 		if err != nil {
 			e.Log.Errorf("db error: %s", err)
-			return errors.New("获取冰排记录失败")
+			return errors.New("获取冰排记录失败,请确认冰排是否入库!")
 		}
 
 		if len(iceRaftRecordModel.OutStorageTime.String()) > 0 {

+ 61 - 3
app/admin/service/waybill.go

@@ -830,7 +830,7 @@ func (e *Waybill) GetBasicsStats(c *dto.WaybillStatsReq, p *actions.DataPermissi
 
 	if c.Type == "month" {
 		// 获取上个月第一天
-		month, _ := time.ParseInLocation("2006-01", c.Date,time.Local)
+		month, _ := time.ParseInLocation("2006-01", c.Date, time.Local)
 		firstDayOfMonth := time.Date(month.Year(), month.Month(), 1, 0, 0, 0, 0, now.Location())
 		lastDayOfMonth := time.Date(month.Year(), month.Month()+1, 1, 23, 59, 59, 0, now.Location()).Add(-time.Hour * 24)
 		e.Orm.Model(&data).Select("date_format(order_time,'%Y-%m-%d') date,count(1) as num ").Scopes(actions.Permission(data.TableName(), p)).
@@ -985,7 +985,7 @@ func (e *Waybill) GetUserBasicsStats(c *dto.WaybillStatsReq, p *actions.DataPerm
 
 	if c.Type == "month" {
 		// 获取上个月第一天
-		month, _ := time.ParseInLocation("2006-01", c.Date,time.Local)
+		month, _ := time.ParseInLocation("2006-01", c.Date, time.Local)
 		firstDayOfMonth := time.Date(month.Year(), month.Month(), 1, 0, 0, 0, 0, now.Location())
 		lastDayOfMonth := time.Date(month.Year(), month.Month()+1, 1, 23, 59, 59, 0, now.Location()).Add(-time.Hour * 24)
 		e.Orm.Model(&data).Select("date_format(order_time,'%Y-%m-%d') date,count(1) as num ").Scopes(actions.Permission(data.TableName(), p), scopes).
@@ -1021,7 +1021,7 @@ func (e *Waybill) GetUserStats(c *dto.WaybillUserStatsReq, p *actions.DataPermis
 
 	if c.Type == "month" {
 		// 获取上个月第一天
-		month, _ := time.ParseInLocation("2006-01", c.Date,time.Local)
+		month, _ := time.ParseInLocation("2006-01", c.Date, time.Local)
 		firstDayOfMonth := time.Date(month.Year(), month.Month(), 1, 0, 0, 0, 0, now.Location())
 		lastDayOfMonth := time.Date(month.Year(), month.Month()+1, 1, 23, 59, 59, 0, now.Location()).Add(-time.Hour * 24)
 		e.Orm.Model(&data).Select("date_format(order_time,'%Y-%m-%d') date,count(1) as num ").Scopes(actions.Permission(data.TableName(), p), scopes).
@@ -1230,3 +1230,61 @@ type WaybillPDF struct {
 	DeviceSensorList []nats_server.DeviceSensor_R `json:"deviceSensorList"`
 	Task             model.WaybillTask            `json:"task"`
 }
+
+// Insert 创建Waybill对象
+func (e *Waybill) InsertByOrderId(c *dto.WeianGetWaybillNoReq) error {
+	var err error
+	var data model.Waybill
+
+	tx := e.Orm.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	var company model.SysDept
+
+	var i int64
+	err = e.Orm.Model(&company).Where("name = ?", c.CompanyName).Count(&i).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+	if i == 0 {
+		err = errors.New("公司名称不存在!")
+		e.Log.Errorf("db error: %s", err)
+		return err
+	}
+
+	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
+	data.OrderNo = c.OrderId
+	data.DeptId = company.Id
+	data.Status = 1
+	data.OrderTime = model2.Time(time.Now())
+	err = tx.Create(&data).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.CreateFailedErr
+	}
+	c.WaybillNo = data.WaybillNo
+
+	return nil
+
+}

+ 32 - 0
app/admin/service/waybill_task.go

@@ -65,6 +65,38 @@ func (e *WaybillTask) GetPage(c *dto.WaybillTaskGetPageReq, list *[]model.Waybil
 	}
 	return nil
 }
+func (e *WaybillTask) Get(c *dto.WeianGetWaybillDataReq, task *model.WaybillTask) error {
+	var err error
+	var data model.WaybillTask
+	var waybill model.Waybill
+	err = e.Orm.Model(&waybill).Where("waybill_no = ? or order_no = ?", c.WaybillNo, c.WaybillNo).First(&waybill).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return errors.New("获取运单信息失败")
+	}
+
+	err = e.Orm.Model(&data).
+		Where("waybill_no = ?", c.WaybillNo).
+		Preload("CoolerBox").
+		First(task).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.GetFailedErr
+	}
+	// 获取公司秘钥
+	var company model.SysDept
+	company, err = model.GetCompanyById(waybill.DeptId)
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return model.GetCompanyKeyErr
+	}
+
+	// 获取传感器信息
+	deviceSensorList, _, _ := nats_server.Cold_CompanyDeviceSensor_List_ByKey(task.Sn, company.ColdKey)
+	task.DeviceSensorList = deviceSensorList
+
+	return nil
+}
 
 // GetPage 获取WaybillTask列表
 func (e *WaybillTask) GetDataPage(c *dto.WaybillTaskGetDataPageReq) (list []nats_server.DeviceData_R, count int64, err error) {

+ 1 - 1
go.mod

@@ -1,6 +1,6 @@
 module cold-delivery
 
-go 1.19
+go 1.21
 
 require (
 	github.com/alibaba/sentinel-golang v0.6.1

+ 14 - 0
go.sum

@@ -12,6 +12,7 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy
 contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 git.sr.ht/~sbinet/cmpimg v0.1.0 h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo=
+git.sr.ht/~sbinet/cmpimg v0.1.0/go.mod h1:FU12psLbF4TfNXkKH2ZZQ29crIqoiqTZmeQ7dkp/pxE=
 git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8=
 git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo=
 github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
@@ -169,6 +170,7 @@ github.com/fsouza/go-dockerclient v1.6.0/go.mod h1:YWwtNPuL4XTX1SKJQk86cWPmmqwx+
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4=
+github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk=
 github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
 github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
 github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
@@ -181,7 +183,9 @@ github.com/go-acme/lego/v3 v3.4.0/go.mod h1:xYbLDuxq3Hy4bMUT1t9JIuz6GWIWb3m5X+Te
 github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s=
 github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
 github.com/go-fonts/dejavu v0.3.2 h1:3XlHi0JBYX+Cp8n98c6qSoHrxPa4AUKDMKdrh/0sUdk=
+github.com/go-fonts/dejavu v0.3.2/go.mod h1:m+TzKY7ZEl09/a17t1593E4VYW8L1VaBXHzFZOIjGEY=
 github.com/go-fonts/latin-modern v0.3.2 h1:M+Sq24Dp0ZRPf3TctPnG1MZxRblqyWC/cRUL9WmdaFc=
+github.com/go-fonts/latin-modern v0.3.2/go.mod h1:9odJt4NbRrbdj4UAMuLVd4zEukf6aAEKnDaQga0whqQ=
 github.com/go-fonts/liberation v0.3.2 h1:XuwG0vGHFBPRRI8Qwbi5tIvR3cku9LUfZGq/Ar16wlQ=
 github.com/go-fonts/liberation v0.3.2/go.mod h1:N0QsDLVUQPy3UYg9XAc3Uh3UDMp2Z7M1o4+X98dXkmI=
 github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
@@ -213,6 +217,7 @@ github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw=
 github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y=
 github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
+github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
 github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
 github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
@@ -283,6 +288,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
+github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
 github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
@@ -361,6 +367,7 @@ github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/
 github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
 github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
@@ -406,6 +413,7 @@ github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL
 github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
 github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
 github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
 github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
 github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
 github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
@@ -574,6 +582,7 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
 github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
@@ -600,6 +609,7 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykE
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
 github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
 github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
@@ -623,6 +633,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE=
 github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg=
 github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M=
@@ -739,6 +750,7 @@ golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxT
 golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
 golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b h1:r+vk0EmXNmekl0S0BascoeeoHk/L7wmaW2QF90K+kYI=
+golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -762,6 +774,7 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
+golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -920,6 +933,7 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
+gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
 gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE=
 gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU=
 google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=

+ 1 - 1
setting.yml

@@ -16,7 +16,7 @@ settings:
     # 日志存放路径
     path: temp/logs
     # 日志输出,file:文件,default:命令行,其他:命令行
-    stdout: 'file' #控制台日志,启用后,不输出到文件
+    stdout: 'default' #控制台日志,启用后,不输出到文件
     # 日志等级, trace, debug, info, warn, error, fatal
     level: trace
     # 文件最多保存多少天