package stdlib import ( jyDocsRpcUtil "app.yhyue.com/moapp/jy_docs/services/util" elastic "app.yhyue.com/moapp/jybase/esv7" "errors" "gorm.io/gorm" "log" "time" ) const DocOn = 1 const DocOff = 0 // 上架文档 func ChangeDocumentOn(id string, reason int32) bool { // 查文档 docData := map[string]interface{}{} rs := jyDocsRpcUtil.GetJyDocsDB().Table("doc").Where("id=? and isDelete=0 and downOrUp=0", id).Find(&docData) if rs.Error != nil { log.Println("上架文档 error:"+id, rs.Error) return false } else { if docData["id"] == nil { log.Println("上架文档 error:"+id, "文档不存在或已经被上架") return false } } statisticsData := map[string]interface{}{} var downTimes int64 var viewTimes int64 result := jyDocsRpcUtil.GetJyDocsDB().Table("doc_statistics").Where("docId=?", id).Find(&statisticsData) if result.Error != nil { log.Println("上架文档 查询浏览次数下载量出错 error:"+id, result.Error) return false } else { if statisticsData["id"] != nil { if statisticsData["downTimes"] != nil { downTimes = statisticsData["downTimes"].(int64) } if statisticsData["viewTimes"] != nil { viewTimes = statisticsData["viewTimes"].(int64) } } } // 上架 err := jyDocsRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error { // 更新大库状态为上架 1-上架 if err := tx.Exec("update doc set downOrUp=? where id=? ", DocOn, id).Error; err != nil { return err } // 存上架记录 date := time.Now().Local().Format("2006-01-02 15:04:05") if err := tx.Exec("insert into doc_change_record (docId,date,downOrUp,reason) values (?,?,?,?)", id, date, DocOn, reason).Error; err != nil { return err } docData["_id"] = docData["id"] saveData := map[string]interface{}{ "_id": docData["id"], "docName": docData["docName"], "docTags": docData["docTags"], "docClassLevelOne": docData["docClassLevelOne"], "docClassLevelTwo": docData["docClassLevelTwo"], "price": docData["price"], "downTimes": downTimes, "viewTimes": viewTimes, "docSummary": docData["docSummary"], "create_at": docData["uploadDate"].(time.Time).Format("2006-01-02 15:04:05"), } if rs := elastic.Save("jydoc", "_doc", saveData); rs != true { return errors.New("发布到检索库失败") } return nil }) if err != nil { log.Println("上架文档 error:"+id, err) return false } log.Println("上架文档成功:" + id) return true } // 下架文档 func ChangeDocumentOff(id string, reason int32) bool { // 查文档 docData := map[string]interface{}{} rs := jyDocsRpcUtil.GetJyDocsDB().Table("doc").Where("id=? and isDelete=0 and downOrUp=1", id).Find(&docData) if rs.Error != nil { log.Println("下架文档 error:"+id, rs.Error) return false } else { if docData["id"] == nil { log.Println("下架文档 error:"+id, "文档不存在或已经被下架") return false } } // 下架 err := jyDocsRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error { // 更新大库状态为下架 0-下架 if err := tx.Exec("update doc set downOrUp=? where id=? ", DocOff, id).Error; err != nil { return err } // 存下架记录 date := time.Now().Local().Format("2006-01-02 15:04:05") if err := tx.Exec("insert into doc_change_record (docId,date,downOrUp,reason) values (?,?,?,?)", id, date, DocOff, reason).Error; err != nil { return err } //todo 从es删除数据 索引待替换 及测试 if rs := elastic.DelById("jydoc", "doc", id); rs != true { return errors.New("从检索库删除失败") } return nil }) if err != nil { log.Println("下架文档 error:"+id, err) return false } log.Println("下架文档成功:" + id) return true }