在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等操作系统,支持阿里云、腾讯云、华为云、青云、七牛云等多种云架构,部署高效、更灵活。如果大家有测试需求,欢迎联系我们获取测试账号测试。