Browse Source

update:增加公司秘钥,sn验证

zoie 10 months ago
parent
commit
76e07f6755

+ 1 - 1
app/admin/controller/cooler_box.go

@@ -116,7 +116,7 @@ func (e CoolerBoxController) Insert(c *gin.Context) {
 	// 设置创建人
 	req.SetCreateBy(user.GetUserId(c))
 	req.SetDeptId(p.DeptId)
-	err = s.Insert(&req)
+	err = s.Insert(&req, p)
 	if err != nil {
 		e.Error(500, err, err.Error())
 		return

+ 2 - 1
app/admin/controller/sys_user.go

@@ -124,9 +124,10 @@ func (e SysUser) Insert(c *gin.Context) {
 		e.Error(500, err, err.Error())
 		return
 	}
+	p := actions.GetPermissionFromContext(c)
 	// 设置创建人
 	req.SetCreateBy(user.GetUserId(c))
-	err = s.Insert(&req)
+	err = s.Insert(&req, p)
 	if err != nil {
 		e.Error(500, err, err.Error())
 		return

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

@@ -20,6 +20,7 @@ type SysDept struct {
 	Status   int       `json:"-" gorm:"size:4;"`                        // 状态 1-停用 2-正常
 	Remark   string    `json:"remark"  gorm:"size:1024;"`               // 备注
 	ColdKey  string    `json:"coldKey"  gorm:"size:128;"`               // 冷链3.0key
+	ColdPid  int       `json:"coldPid"  gorm:"size:128;"`               // 冷链3.0公司id
 	Children []SysDept `json:"children" gorm:"-"`
 	model2.ControlBy
 	model2.ModelTime

+ 6 - 5
app/admin/service/company.go

@@ -105,14 +105,14 @@ func (e *Company) Insert(c *dto.CompanyInsertReq) error {
 		e.Log.Errorf("db error: %s", err)
 		return err
 	}
-
-	_, err = nats_server.Cold_ReadCompanyByT_key(c.ColdKey)
+	var coldCompany nats_server.Company_R
+	coldCompany, err = nats_server.Cold_ReadCompanyByT_key(c.ColdKey)
 	if err != nil {
 		e.Log.Errorf("获取3.0秘钥失败: %s", err)
 		err = errors.New("冷链3.0公司秘钥错误!")
 		return err
 	}
-
+	data.ColdPid = coldCompany.Id
 	c.Generate(&data)
 	err = tx.Create(&data).Error
 	if err != nil {
@@ -163,12 +163,14 @@ func (e *Company) Update(c *dto.CompanyUpdateReq) error {
 	}
 
 	if c.ColdKey != deptModel.ColdKey {
-		_, err = nats_server.Cold_ReadCompanyByT_key(c.ColdKey)
+		var coldCompany nats_server.Company_R
+		coldCompany, err = nats_server.Cold_ReadCompanyByT_key(c.ColdKey)
 		if err != nil {
 			e.Log.Errorf("获取3.0秘钥失败: %s", err)
 			err = errors.New("冷链3.0公司秘钥错误!")
 			return err
 		}
+		deptModel.ColdPid = coldCompany.Id
 	}
 
 	c.Generate(&deptModel)
@@ -301,7 +303,6 @@ func (e *Company) getList(c *dto.CompanyGetPageReq, list *[]model.SysDept, p *ac
 			Scopes(
 				cDto.MakeCondition(c.GetNeedSearch()),
 			).
-			Order("id desc").
 			Find(list).Error
 		if err != nil {
 			e.Log.Errorf("db error:%s", err)

+ 40 - 1
app/admin/service/cooler_box.go

@@ -77,7 +77,7 @@ func (e *CoolerBox) Get(d *dto.CoolerBoxGetReq, CoolerBoxModel *model.CoolerBox,
 }
 
 // Insert 创建CoolerBox对象
-func (e *CoolerBox) Insert(c *dto.CoolerBoxInsertReq) error {
+func (e *CoolerBox) Insert(c *dto.CoolerBoxInsertReq, p *actions.DataPermission) error {
 	var err error
 	var data model.CoolerBox
 
@@ -102,6 +102,25 @@ func (e *CoolerBox) Insert(c *dto.CoolerBoxInsertReq) error {
 		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)
 	data.HistorySn = []string{data.Sn}
@@ -224,6 +243,26 @@ func (e *CoolerBox) Remove(c *dto.CoolerBoxDeleteReq, p *actions.DataPermission)
 		}
 	}()
 
+	var iceRaftModel model.IceRaft
+	var count int64
+	err = e.Orm.Model(&iceRaftModel).
+		Scopes(
+			actions.Permission(iceRaftModel.TableName(), p),
+			IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusUsing),
+			IceRaftNameRecordCoolerBoxIdScopes(c.Id),
+		).
+		Where("ice_raft.status = '2'").
+		Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
+		Count(&count).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.DeleteFailedErr
+	}
+	if count > 0 {
+		err = errors.New("该保温箱下有冰排正在使用中,无法删除!")
+		return err
+	}
+
 	var CoolerBoxModel model.CoolerBox
 
 	// 查询保温箱是否存在

+ 7 - 1
app/admin/service/device.go

@@ -7,6 +7,7 @@ import (
 	"cold-delivery/common/nats/nats_server"
 	"fmt"
 	"gogs.baozhida.cn/zoie/OAuth-core/service"
+	"strings"
 )
 
 type Device struct {
@@ -33,7 +34,12 @@ func (e *Device) GetDeviceSensorList(c *dto.DeviceSensorGetPageReq, p *actions.D
 	return list, count, nil
 }
 func (e *Device) GetData(c *dto.DeviceSensorGetDataReq, p *actions.DataPermission) (list []nats_server.DeviceData_R, count int64, err error) {
-	T_snid := fmt.Sprintf("%s,%d|", c.T_sn, c.T_id)
+	T_snid := ""
+	ids := strings.Split(strings.Trim(c.T_ids, ","), ",")
+	for _, id := range ids {
+		T_snid += fmt.Sprintf("%s,%s|", c.T_sn, id)
+	}
+
 	list, count, err = nats_server.Cold_ReadDeviceDataListBy_T_snid(T_snid, c.StartTime, c.EndTime, c.GetPageIndex(), c.GetPageSize())
 	if err != nil {
 		e.Log.Errorf("db error: %s", err)

+ 1 - 1
app/admin/service/dto/device.go

@@ -5,7 +5,7 @@ import "cold-delivery/common/dto"
 type DeviceSensorGetDataReq struct {
 	dto.Pagination `search:"-"`
 	T_sn           string `form:"t_sn"`
-	T_id           int    `form:"t_id"`
+	T_ids          string `form:"t_ids"`
 	StartTime      string `form:"startTime"`
 	EndTime        string `form:"endTime"`
 }

+ 1 - 1
app/admin/service/dto/sys_user.go

@@ -88,7 +88,7 @@ type SysUserInsertReq struct {
 	Username         string `json:"username" example:"username" vd:"@:len($)>0;msg:'用户名不能为空'"` // 用户名
 	Password         string `json:"password" example:"123456" vd:"@:len($)>5;msg:'密码格式不正确'"`   // 密码
 	Name             string `json:"name" vd:"@:len($)>0;msg:'姓名不能为空'"`                         // 姓名
-	Phone            string `json:"phone"`                                                     // 电话号码
+	Phone            string `json:"phone" vd:"regexp('^1[3-9]\\d{9}$');msg:'电话号码格式不正确'"`       // 电话号码
 	RoleId           int    `json:"roleId" example:"1" swaggerignore:"true"`                   // 角色id
 	DeptId           int    `json:"deptId" example:"1"`                                        // 机构id
 	Status           string `json:"status" example:"2" swaggerignore:"true"`                   // 状态 	// 货车司机绑定《道路运输从业人员从业资格证》信息

+ 21 - 21
app/admin/service/dto/waybill.go

@@ -43,27 +43,27 @@ func (m *WaybillGetCustomerPageReq) GetNeedSearch() interface{} {
 }
 
 type WaybillInsertReq struct {
-	Id                      int    `json:"id" comment:"编码" swaggerignore:"true"` // 编码
-	No                      string `json:"no" swaggerignore:"true"`              //单号
-	OrderNo                 string `json:"orderNo"`                              // 订单号
-	Status                  int    `json:"status" swaggerignore:"true"`          //订单状态:1-待处理;102-待装车 103-运输中 104-已签收
-	SaveSenderAddress       bool   `json:"saveSenderAddress"`                    //保存发货地址
-	SenderAddressDetails    string `json:"senderAddressDetails"`                 //发货地址详情
-	SenderAddressName       string `json:"senderAddressName"`                    //发货地址名称
-	SenderAddressPhone      string `json:"senderAddressPhone"`                   //发货地址电话
-	SaveConsigneeAddress    bool   `json:"SaveConsigneeAddress"`                 //保存收货地址
-	ConsigneeAddressDetails string `json:"consigneeAddressDetails"`              //收发货地址详情
-	ConsigneeAddressName    string `json:"consigneeAddressName"`                 //收发货地址名称
-	ConsigneeAddressPhone   string `json:"consigneeAddressPhone"`                //收发货地址电话
-	DeliveryName            string `json:"deliveryName"`                         // 配送姓名
-	DeliveryPhone           string `json:"deliveryPhone"`                        // 配送电话
-	DeliveryId              int    `json:"deliveryId"`                           // 配送人id
-	ReCheckId               int    `json:"reCheckId"`                            // 复核人id
-	Quantity                int    `json:"quantity"`                             // 药品数量
-	Remark                  string `json:"remark"`                               // 运输备注
-	TamperProofLabel        string `json:"tamperProofLabel"`                     // 防拆码标签
-	TamperProofLabelImg     string `json:"tamperProofLabelImg"`                  // 防拆码标签图片
-	CoolerBoxId             int    `json:"coolerBoxId"`                          // 保温箱id
+	Id                      int    `json:"id" comment:"编码" swaggerignore:"true"`                                 // 编码
+	No                      string `json:"no" swaggerignore:"true"`                                              //单号
+	OrderNo                 string `json:"orderNo"`                                                              // 订单号
+	Status                  int    `json:"status" swaggerignore:"true"`                                          //订单状态:1-待处理;102-待装车 103-运输中 104-已签收
+	SaveSenderAddress       bool   `json:"saveSenderAddress"`                                                    //保存发货地址
+	SenderAddressDetails    string `json:"senderAddressDetails"`                                                 //发货地址详情
+	SenderAddressName       string `json:"senderAddressName"`                                                    //发货地址名称
+	SenderAddressPhone      string `json:"senderAddressPhone" vd:"regexp('^1[3-9]\\d{9}$');msg:'配送人电话格式不正确'"`    //发货地址电话
+	SaveConsigneeAddress    bool   `json:"SaveConsigneeAddress"`                                                 //保存收货地址
+	ConsigneeAddressDetails string `json:"consigneeAddressDetails"`                                              //收发货地址详情
+	ConsigneeAddressName    string `json:"consigneeAddressName"`                                                 //收发货地址名称
+	ConsigneeAddressPhone   string `json:"consigneeAddressPhone" vd:"regexp('^1[3-9]\\d{9}$');msg:'收件人电话格式不正确'"` //收发货地址电话
+	DeliveryName            string `json:"deliveryName"`                                                         // 配送姓名
+	DeliveryPhone           string `json:"deliveryPhone"`                                                        // 配送电话
+	DeliveryId              int    `json:"deliveryId"`                                                           // 配送人id
+	ReCheckId               int    `json:"reCheckId"`                                                            // 复核人id
+	Quantity                int    `json:"quantity"`                                                             // 药品数量
+	Remark                  string `json:"remark"`                                                               // 运输备注
+	TamperProofLabel        string `json:"tamperProofLabel"`                                                     // 防拆码标签
+	TamperProofLabelImg     string `json:"tamperProofLabelImg"`                                                  // 防拆码标签图片
+	CoolerBoxId             int    `json:"coolerBoxId"`                                                          // 保温箱id
 	model2.ControlBy        `swaggerignore:"true"`
 	model2.DeptBy
 }

+ 20 - 0
app/admin/service/ice_locker.go

@@ -203,6 +203,26 @@ func (e *IceLocker) Remove(c *dto.IceLockerDeleteReq, p *actions.DataPermission)
 		}
 	}()
 
+	var iceRaftModel model.IceRaft
+	var count int64
+	err = e.Orm.Model(&iceRaftModel).
+		Scopes(
+			actions.Permission(iceRaftModel.TableName(), p),
+			IceRaftNameRecordStatusScopes(model.IceRaftRecordStatusWaitUse),
+			IceRaftNameRecordIceLockerIdScopes(c.Id),
+		).
+		Where("ice_raft.status = '2'").
+		Joins("left join ice_raft_record on ice_raft.ice_raft_record_id = ice_raft_record.id").
+		Count(&count).Error
+	if err != nil {
+		e.Log.Errorf("db error: %s", err)
+		return global.DeleteFailedErr
+	}
+	if count > 0 {
+		err = errors.New("该冷冻柜下有冰排待使用中,无法删除!")
+		return err
+	}
+
 	var iceLockerModel model.IceLocker
 
 	// 查询冷冻柜是否存在

+ 47 - 22
app/admin/service/sys_user.go

@@ -66,6 +66,18 @@ func (e *SysUser) GetPageByDeptId(c *dto.SysUserGetPageByDeptIdReq, p *actions.D
 	var err error
 	var userList []model.SysUser
 
+	var operatingUser model.SysUser
+	err = e.Orm.Model(&operatingUser).
+		Scopes(actions.UserPermission(operatingUser.TableName(), p)).
+		Find(&operatingUser, p.UserId).Error
+	if err != nil {
+		e.Log.Errorf("获取操作用户信息失败: %s", err)
+		return errors.New("获取操作用户信息失败")
+	}
+	if operatingUser.Type != model.SysUserTypeSys {
+		return nil
+	}
+
 	err = e.Orm.
 		Scopes(
 			cDto.MakeCondition(c.GetNeedSearch()),
@@ -89,9 +101,7 @@ func (e *SysUser) GetPageByDeptId(c *dto.SysUserGetPageByDeptIdReq, p *actions.D
 // Get 获取SysUser对象
 func (e *SysUser) Get(d *dto.SysUserGetReq, p *actions.DataPermission, userModel *model.SysUser) error {
 	var data model.SysUser
-	//var dept model.SysDept
-	//var role model.SysRole
-	//var post model.SysPost
+
 	err := e.Orm.Model(&data).
 		Scopes(actions.UserPermission(data.TableName(), p)).
 		Preload("Dept").
@@ -103,20 +113,12 @@ func (e *SysUser) Get(d *dto.SysUserGetReq, p *actions.DataPermission, userModel
 		}
 		return global.GetFailedErr
 	}
-	//err = e.Orm.First(&dept, userModel.DeptId).Error
-	//userModel.Dept = dept
-	//
-	//err = e.Orm.First(&role, userModel.RoleId).Error
-	//userModel.Role = role
-
-	//err = e.Orm.First(&post, userModel.PostId).Error
-	//userModel.Post = post
 
 	return nil
 }
 
 // Insert 创建SysUser对象
-func (e *SysUser) Insert(c *dto.SysUserInsertReq) error {
+func (e *SysUser) Insert(c *dto.SysUserInsertReq, p *actions.DataPermission) error {
 	var err error
 	tx := e.Orm.Begin()
 	defer func() {
@@ -140,6 +142,19 @@ func (e *SysUser) Insert(c *dto.SysUserInsertReq) error {
 		return err
 	}
 
+	var operatingUser model.SysUser
+	err = e.Orm.Model(&operatingUser).
+		Scopes(actions.UserPermission(operatingUser.TableName(), p)).
+		Find(&operatingUser, p.UserId).Error
+	if err != nil {
+		e.Log.Errorf("获取操作用户信息失败: %s", err)
+		return errors.New("获取操作用户信息失败")
+	}
+	if operatingUser.Type != model.SysUserTypeSys || operatingUser.Id != 1 {
+		err = errors.New("无权添加用户,请联系管理员!")
+		return err
+	}
+
 	var data model.SysUser
 	var i int64
 	err = e.Orm.Model(&data).Where("username = ?", c.Username).Count(&i).Error
@@ -273,22 +288,32 @@ func (e *SysUser) Remove(c *dto.SysUserDeleteReq, p *actions.DataPermission) err
 			tx.Commit()
 		}
 	}()
+
+	var operatingUser model.SysUser
+	err = e.Orm.Model(&operatingUser).
+		Scopes(actions.UserPermission(operatingUser.TableName(), p)).
+		Find(&operatingUser, p.UserId).Error
+	if err != nil {
+		e.Log.Errorf("获取操作用户信息失败: %s", err)
+		return errors.New("获取操作用户信息失败")
+	}
+
 	var data model.SysUser
-	db := e.Orm.Model(&data).
+	err = e.Orm.Model(&data).
 		Scopes(actions.UserPermission(data.TableName(), p)).
-		Find(&data, c.GetId())
+		Find(&data, c.GetId()).Error
+	if err != nil {
+		e.Log.Errorf("获取操作用户信息失败: %s", err)
+		return errors.New("获取操作用户信息失败")
+	}
 	if p.UserId != 1 {
-		if data.CreateBy == 1 && data.Type == 1 {
+		if data.CreateBy == 1 && data.Type == model.SysUserTypeSys {
 			return errors.New("禁止删除管理员")
 		}
 	}
-
-	if err = db.Error; err != nil {
-		e.Log.Errorf("db error: %s", err)
-		return err
-	}
-	if db.RowsAffected == 0 {
-		return global.DeleteNotFoundOrNoPermissionErr
+	// 管理员1 门店管理员2 配送员3
+	if operatingUser.Type != model.SysUserTypeSys && data.Type == model.SysUserTypeSys {
+		return errors.New("禁止删除管理员")
 	}
 
 	var car model.Car

+ 6 - 6
app/admin/service/waybill.go

@@ -90,7 +90,7 @@ func (e *Waybill) GetUserPage(c *dto.WaybillGetPageReq, list *[]model.Waybill, c
 			cDto.MakeCondition(c.GetNeedSearch()),
 			cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
 		).
-		Where("delivery_id = ? or re_check_id = ?", p.UserId, p.UserId).
+		Where("delivery_id = ? or re_check_id = ? or create_by = ?", p.UserId, p.UserId, p.UserId).
 		Preload("CoolerBox").
 		Preload("Delivery").
 		Preload("ReCheck").
@@ -559,7 +559,7 @@ func (e *Waybill) Delivery(c *dto.WaybillDeliveryReq, p *actions.DataPermission)
 			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("派单短信发送失败,请重试")
+				err = errors.New("派单短信发送失败,请检查收件人电话是否正确!")
 				return err
 			}
 			waybillModel.SendLog = model.WaybillSendLog{
@@ -830,7 +830,7 @@ func (e *Waybill) GetBasicsStats(c *dto.WaybillStatsReq, p *actions.DataPermissi
 
 	if c.Type == "month" {
 		// 获取上个月第一天
-		month, _ := time.Parse("2006-01", c.Date)
+		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)).
@@ -907,7 +907,7 @@ func GetUserBasicsStatsScopes(userId int) func(db *gorm.DB) *gorm.DB {
 		if userId == 0 {
 			return db
 		}
-		return db.Where("delivery_id = ? or re_check_id = ? ", userId, userId)
+		return db.Where("delivery_id = ? or re_check_id = ? or create_by = ?", userId, userId, userId)
 	}
 }
 func (e *Waybill) GetUserBasicsStats(c *dto.WaybillStatsReq, p *actions.DataPermission, scopes func(*gorm.DB) *gorm.DB) dto.WaybillStatsRes {
@@ -985,7 +985,7 @@ func (e *Waybill) GetUserBasicsStats(c *dto.WaybillStatsReq, p *actions.DataPerm
 
 	if c.Type == "month" {
 		// 获取上个月第一天
-		month, _ := time.Parse("2006-01", c.Date)
+		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.Parse("2006-01", c.Date)
+		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).

+ 2 - 2
app/admin/service/waybill_task.go

@@ -87,7 +87,7 @@ func (e *WaybillTask) GetDataPage(c *dto.WaybillTaskGetDataPageReq) (list []nats
 
 	if len(c.StartTime) > 0 {
 		var st time.Time
-		st, err = time.Parse("2006-01-02 15:04:05", c.StartTime)
+		st, err = time.ParseInLocation("2006-01-02 15:04:05", c.StartTime, time.Local)
 		if err != nil {
 			err = errors.New("解析时间字符串出错!")
 			return
@@ -100,7 +100,7 @@ func (e *WaybillTask) GetDataPage(c *dto.WaybillTaskGetDataPageReq) (list []nats
 	}
 	if len(c.EndTime) > 0 {
 		var et time.Time
-		et, err = time.Parse("2006-01-02 15:04:05", c.EndTime)
+		et, err = time.ParseInLocation("2006-01-02 15:04:05", c.EndTime, time.Local)
 		if err != nil {
 			err = errors.New("解析时间字符串出错!")
 			return

+ 27 - 0
common/nats/nats_server/NatsColdApi.go

@@ -249,3 +249,30 @@ func Cold_ReadCompanyByT_key(T_key string) (data Company_R, err error) {
 
 	return t_R.Data, nil
 }
+
+func Cold_ReadDeviceByT_sn(T_sn string) (data Device, err error) {
+
+	msg, err := nats.Nats.Request("Cold_ReadDeviceByT_sn", []byte(T_sn), 3*time.Second)
+	if err != nil {
+		return
+	}
+
+	type T_R struct {
+		Code int16  `xml:"Code"`
+		Msg  string `xml:"Msg"`
+		Data Device `xml:"Data"` // 泛型
+	}
+	var t_R T_R
+
+	err = msgpack.Unmarshal(msg.Data, &t_R)
+	if err != nil {
+		return
+	}
+	if t_R.Code != 200 {
+		err = errors.New(t_R.Msg)
+		return
+	}
+	data = t_R.Data
+
+	return data, nil
+}

+ 34 - 0
common/nats/nats_server/models.go

@@ -156,3 +156,37 @@ type Company_R struct {
 	T_Charging int
 	Children   []Company_R
 }
+
+type Device struct {
+	T_sn              string    // 设备序列号
+	T_pid             int       // Account.Company 绑定公司
+	T_devName         string    // 设备名称  20字
+	T_protocol        int       // 冷链通讯协议 1 :1.0协议   2 :2.0协议    3 :3.0协议
+	T_mqttid          string    // MQTT 服务ID
+	T_VerifyTime      time.Time // 验证时间
+	T_CalibrationTime time.Time // 校准时间
+	T_PatrolTime      time.Time // 巡检时间
+	T_abandonTime     time.Time // 弃用时间
+	T_ist             int       // 温度   1开启   2关闭
+	T_ish             int       // 湿度   1开启   2关闭
+
+	T_State int // 0 屏蔽   1 正常  (屏蔽后 只有内部管理员才能看到,用户 输入SN\名称 搜索时 也能看到)
+
+	// 设备同步参数
+	T_Dattery  int    // 电量
+	T_Site     string // GPS
+	T_monitor  int    // 监控状态 0 未监控 1 监控  停止记录
+	T_online   int    // 在线状态 0 未启用  1 在线  2 离线
+	T_online_s int    // 在线状态-备用  0 未启用  1 在线  2 离线
+
+	// 硬件信息
+	T_model string // KF200BG  设备型号
+	T_sver  string // "1.0.0",//软件版本
+	T_hver  string // "1.0.0",//硬件版本
+	T_imei  string // "867387060327718",//模组imei
+	T_iccid string // "89860477102170049750",//sim卡号
+	T_rssi  string // "80",//信号强度
+
+	CreateTime time.Time //auto_now_add 第一次保存时才设置时间
+	UpdateTime time.Time //auto_now 每次 model 保存时都会对时间自动更新
+}

+ 2 - 0
go.mod

@@ -89,6 +89,8 @@ require (
 	github.com/klauspost/compress v1.17.2 // indirect
 	github.com/klauspost/cpuid/v2 v2.0.9 // indirect
 	github.com/leodido/go-urn v1.2.1 // indirect
+	github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible // indirect
+	github.com/lestrrat-go/strftime v1.0.6 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
 	github.com/mattn/go-colorable v0.1.7 // indirect
 	github.com/mattn/go-isatty v0.0.17 // indirect

+ 5 - 0
go.sum

@@ -406,6 +406,11 @@ 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/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=
+github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
+github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
 github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE=
 github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8=
 github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0=

+ 3 - 1
setting.yml

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