123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package controller
- import (
- . "biBackService/config"
- "biBackService/service"
- "fmt"
- "github.com/google/uuid"
- "log"
- "net/http"
- "time"
- "github.com/gin-gonic/gin"
- _ "github.com/go-sql-driver/mysql"
- )
- // 页面1:扫码绑定页面
- func ScanCodeHandler(c *gin.Context) {
- userUUID, err := c.Cookie("uuid")
- if err != nil || userUUID == "" {
- // 如果 Cookie 中没有 UUID,则生成新 uuid,过期时间 10 分钟
- userUUID = uuid.New().String()
- c.SetCookie("uuid", userUUID, 3000, "/", "", false, true)
- if err = InsertCookie(userUUID); err != nil {
- log.Println("cookie写入数据库错误:", err)
- }
- } else {
- var (
- id int
- resumeId string
- bindStatus int
- )
- //查询简历绑定状态,如果是1 跳转至简历详情页面,2 解绑状态,删除uuid,重新生成重新绑定
- row := Db.QueryRow("select id,resume_id,status from bindings where uuid = ? ", userUUID)
- if err = row.Scan(&id, &resumeId, &bindStatus); err != nil {
- log.Println("获取数据错误:", err)
- }
- if bindStatus == 2 { //解绑
- userUUID = uuid.New().String()
- c.SetCookie("uuid", userUUID, 3000, "/", "", false, true)
- if err = InsertCookie(userUUID); err != nil {
- log.Println("cookie写入数据库错误:", err)
- }
- }
- }
- // 渲染模板,模板文件位于 templates/page1.html,此处传递 UUID 参数
- c.HTML(http.StatusOK, "page1.html", gin.H{
- "UUID": userUUID,
- })
- }
- // SSE 接口,用于推送绑定状态
- func EventsHandler(c *gin.Context) {
- userUUID := c.Query("uuid")
- log.Println("event get uuid", userUUID)
- if userUUID == "" {
- c.String(http.StatusBadRequest, "缺少 uuid 参数")
- return
- }
- // 设置 SSE 响应头
- c.Writer.Header().Set("Content-Type", "text/event-stream")
- c.Writer.Header().Set("Cache-Control", "no-cache")
- c.Writer.Header().Set("Connection", "keep-alive")
- c.Writer.Flush()
- ticker := time.NewTicker(1 * time.Second)
- timeout := time.After(30 * time.Minute)
- defer ticker.Stop()
- for {
- select {
- case <-ticker.C:
- _, resumeID, status, err := service.GetBindingByUUID(userUUID)
- if err != nil {
- continue
- }
- if status == 1 {
- data := fmt.Sprintf("{\"resume_id\":\"%s\"}", resumeID)
- fmt.Fprintf(c.Writer, "event: bind\ndata: %s\n\n", data)
- c.Writer.Flush()
- return
- }
- case <-timeout:
- return
- case <-c.Request.Context().Done():
- return
- }
- }
- }
- func InsertCookie(userUUID string) error {
- // 插入待绑定记录到数据库
- _, err := Db.Exec("INSERT INTO bindings(uuid, created_at) VALUES(?, ?)", userUUID, time.Now())
- if err != nil {
- return err
- }
- return nil
- }
|