123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package main
- import (
- "database/sql"
- "fmt"
- . "bindresume/config"
- "net/http"
- "strconv"
- "strings"
- "time"
- "github.com/gin-gonic/gin"
- _ "github.com/go-sql-driver/mysql"
- )
- // 后台简历搜索页,前端页面拆分到 templates/admin_search.html
- func adminSearchPageHandler(c *gin.Context) {
- c.HTML(http.StatusOK, "admin_search.html", nil)
- }
- // 后台绑定操作:为待绑定人员绑定简历
- func adminBindHandler(c *gin.Context) {
- resumeID := strings.TrimSpace(c.PostForm("resume_id"))
- if resumeID == "" {
- resumeID = c.Query("resume_id")
- }
- if resumeID == "" {
- c.JSON(http.StatusBadRequest, gin.H{"error": "简历ID不能为空"})
- return
- }
- // 查找最早的一条待绑定记录
- row := Db.QueryRow("SELECT id, uuid FROM bindings WHERE status = 0 ORDER BY created_at ASC LIMIT 1")
- var id int
- var waitingUUID string
- err := row.Scan(&id, &waitingUUID)
- if err != nil {
- c.JSON(http.StatusOK, gin.H{"message": "没有待绑定的人员"})
- return
- }
- now := time.Now()
- _, err = Db.Exec("UPDATE bindings SET resume_id = ?, status = ?, bound_at = ?, operator = ? WHERE id = ?",
- resumeID, 1, now, "admin", id)
- if err != nil {
- c.JSON(http.StatusInternalServerError, gin.H{"error": "绑定失败"})
- return
- }
- c.JSON(http.StatusOK, gin.H{"message": fmt.Sprintf("成功绑定 uuid: %s 与简历ID: %s", waitingUUID, resumeID)})
- }
- // 后台绑定列表页:显示所有绑定记录
- // 后台绑定列表页:显示所有绑定记录(分页查询)
- func adminListHandler(c *gin.Context) {
- // 获取页码参数
- pageStr := c.DefaultQuery("page", "1")
- page, err := strconv.Atoi(pageStr)
- if err != nil || page < 1 {
- page = 1
- }
- pageSize := 10
- offset := (page - 1) * pageSize
- // 查询总记录数
- var totalCount int
- row := Db.QueryRow("SELECT COUNT(*) FROM bindings")
- if err := row.Scan(&totalCount); err != nil {
- c.String(http.StatusInternalServerError, "查询记录总数失败")
- return
- }
- // 查询当前页的记录
- rows, err := Db.Query("SELECT id, uuid, resume_id, status, created_at, bound_at, operator FROM bindings ORDER BY id DESC LIMIT ? OFFSET ?", pageSize, offset)
- if err != nil {
- c.String(http.StatusInternalServerError, "查询失败")
- return
- }
- defer rows.Close()
- var bindings []map[string]interface{}
- for rows.Next() {
- var id, status int
- var uuidVal, resumeID, operator string
- var createdAt, boundAt sql.NullTime
- if err := rows.Scan(&id, &uuidVal, &resumeID, &status, &createdAt, &boundAt, &operator); err != nil {
- continue
- }
- b := map[string]interface{}{
- "ID": id,
- "UUID": uuidVal,
- "ResumeID": resumeID,
- "Status": status,
- "Operator": operator,
- }
- if createdAt.Valid {
- b["CreatedAt"] = createdAt.Time.Format("2006-01-02 15:04:05")
- } else {
- b["CreatedAt"] = ""
- }
- if boundAt.Valid {
- b["BoundAt"] = boundAt.Time.Format("2006-01-02 15:04:05")
- } else {
- b["BoundAt"] = ""
- }
- bindings = append(bindings, b)
- }
- // 计算总页数
- totalPage := (totalCount + pageSize - 1) / pageSize
- // 渲染模板,传递分页信息
- c.HTML(http.StatusOK, "admin_list.html", gin.H{
- "Bindings": bindings,
- "CurrPage": page,
- "TotalPage": totalPage,
- })
- }
- // 后台解绑操作,删除绑定记录
- func adminUnbindHandler(c *gin.Context) {
- idStr := c.PostForm("id")
- resume_id := c.PostForm("resume_id")
- id, err := strconv.Atoi(idStr)
- if err != nil {
- c.JSON(http.StatusBadRequest, gin.H{"error": "ID错误"})
- return
- }
- _, err = Db.Exec("UPDATE bindings SET status = 2 WHERE id = ? and resume_id = ? ", id, resume_id)
- if err != nil {
- c.JSON(http.StatusInternalServerError, gin.H{"error": "解绑失败"})
- return
- }
- c.JSON(http.StatusOK, gin.H{"message": "解绑成功"})
- }
|