在TSINGSEE青犀视频开发的平台中,关于EasyDSS平台的开发和定制需求还是挺多的,因此我们最近在攻克EasyDSS定制项目的难题中,也将过程和解决方法一一记录,大家后期也可以参考一下。

在EasyDSS的定制项目中,用户反馈数据库中的数据 create_at,数据创建时间变为0001/01/01 00:00:00,如下图:

问题分析

EasyDSS程序内部数据库对接模块采用 gorm 数据模块处理数据。内部代码如下:

// 更新所有字段
func (impl *BaseDaoImpl) Save(data interface{}) error {
   err := impl.fromTable().Model(data).Save(data).Error

   if err != nil {
      return err
   }

   return impl.Get(data)
}

Save 函数会将所有的字段全部更新。因为传入的数据的 create_at 为 nil,因此自动将数据变为初始时间 0001/01/01 00:00:00。

解决方案

修改代码逻辑,首先从数据库中查询数据。如果未查询到数据,则直接在数据库中添加数据。如果查询到数据,将原数据的 create_at 获取到,然后赋值到新的数据中,然后再调用 Save() 函数,解决此问题。

for stream := range gProcessStreamChan {
   saveStream := &table.Stream{}
   saveStream.CopyData(&stream)

   dbStream := &table.Stream{}
   dbStream.ID = stream.Id
   err := gStreamDao.Get(dbStream)
   // 如果未查找到数据
   if err == gorm.ErrRecordNotFound {
      err = gStreamDao.Add(saveStream)
   } else if err == nil {
   // 如果有老数据,获取老数据的 createat 时间
      saveStream.CreateAt = dbStream.CreateAt
      err = gStreamDao.Save(saveStream)
   }
}

日期数据恢复正常。

EasyDSS视频平台支持上传视频和分享,上传视频后一键生成视频地址,以供用户分享、嵌入到网站、产品软件系统中,并且支持Flash、HTML5播放,兼容Windows、Android、iOS、Mac等操作系统,支持阿里云、腾讯云、华为云、青云、七牛云等多种云架构,部署高效、更灵活。如果大家有测试需求,欢迎联系我们获取测试账号测试。

posted on 2021-01-26 17:43  EasyDSS  阅读(100)  评论(0)    收藏  举报