|
@@ -1,135 +0,0 @@
|
|
-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": "解绑成功"})
|
|
|
|
-}
|
|
|