Files
ai_wht_wechat/go_backend/controller/employee_controller.go
2025-12-19 22:36:48 +08:00

258 lines
6.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"ai_xhs/common"
"ai_xhs/service"
"strconv"
"github.com/gin-gonic/gin"
)
type EmployeeController struct {
service *service.EmployeeService
}
func NewEmployeeController() *EmployeeController {
return &EmployeeController{
service: &service.EmployeeService{},
}
}
// SendXHSCode 发送小红书验证码
func (ctrl *EmployeeController) SendXHSCode(c *gin.Context) {
var req struct {
XHSPhone string `json:"xhs_phone" binding:"required"`
}
if err := c.ShouldBindJSON(&req); err != nil {
common.Error(c, common.CodeInvalidParams, "参数错误:手机号不能为空")
return
}
err := ctrl.service.SendXHSCode(req.XHSPhone)
if err != nil {
common.Error(c, common.CodeInternalError, err.Error())
return
}
common.SuccessWithMessage(c, "验证码已发送请在小红书APP中查看", nil)
}
// GetProfile 获取员工个人信息
func (ctrl *EmployeeController) GetProfile(c *gin.Context) {
employeeID := c.GetInt("employee_id")
employee, err := ctrl.service.GetProfile(employeeID)
if err != nil {
common.Error(c, common.CodeNotFound, "员工不存在")
return
}
// 获取用户显示名称(优先使用真实姓名,其次用户名)
displayName := employee.RealName
if displayName == "" {
displayName = employee.Username
}
data := map[string]interface{}{
"id": employee.ID,
"name": displayName,
"username": employee.Username,
"real_name": employee.RealName,
"phone": employee.Phone,
"role": employee.Role,
"enterprise_id": employee.EnterpriseID,
"enterprise_name": employee.Enterprise.Name,
"is_bound_xhs": employee.IsBoundXHS,
"xhs_account": employee.XHSAccount,
"xhs_phone": employee.XHSPhone,
"has_xhs_cookie": employee.XHSCookie != "", // 标识是否有Cookie不返回完整Cookie
}
if employee.BoundAt != nil {
data["bound_at"] = employee.BoundAt.Format("2006-01-02 15:04:05")
}
common.Success(c, data)
}
// BindXHS 绑定小红书账号
func (ctrl *EmployeeController) BindXHS(c *gin.Context) {
employeeID := c.GetInt("employee_id")
var req struct {
XHSPhone string `json:"xhs_phone" binding:"required"`
Code string `json:"code" binding:"required"`
}
if err := c.ShouldBindJSON(&req); err != nil {
common.Error(c, common.CodeInvalidParams, "参数错误")
return
}
xhsAccount, err := ctrl.service.BindXHS(employeeID, req.XHSPhone, req.Code)
if err != nil {
common.Error(c, common.CodeBindXHSFailed, err.Error())
return
}
common.SuccessWithMessage(c, "绑定成功", map[string]interface{}{
"xhs_account": xhsAccount,
})
}
// UnbindXHS 解绑小红书账号
func (ctrl *EmployeeController) UnbindXHS(c *gin.Context) {
employeeID := c.GetInt("employee_id")
if err := ctrl.service.UnbindXHS(employeeID); err != nil {
common.Error(c, common.CodeInternalError, err.Error())
return
}
common.SuccessWithMessage(c, "解绑成功", nil)
}
// GetAvailableCopies 获取可领取文案列表
func (ctrl *EmployeeController) GetAvailableCopies(c *gin.Context) {
employeeID := c.GetInt("employee_id")
productID, err := strconv.Atoi(c.Query("product_id"))
if err != nil {
common.Error(c, common.CodeInvalidParams, "产品ID参数错误")
return
}
data, err := ctrl.service.GetAvailableCopies(employeeID, productID)
if err != nil {
common.Error(c, common.CodeInternalError, err.Error())
return
}
common.Success(c, data)
}
// ClaimCopy 领取文案
func (ctrl *EmployeeController) ClaimCopy(c *gin.Context) {
employeeID := c.GetInt("employee_id")
var req struct {
CopyID int `json:"copy_id" binding:"required"`
ProductID int `json:"product_id" binding:"required"`
}
if err := c.ShouldBindJSON(&req); err != nil {
common.Error(c, common.CodeInvalidParams, "参数错误")
return
}
data, err := ctrl.service.ClaimCopy(employeeID, req.CopyID, req.ProductID)
if err != nil {
common.Error(c, common.CodeAlreadyClaimed, err.Error())
return
}
common.SuccessWithMessage(c, "领取成功", data)
}
// ClaimRandomCopy 随机领取文案
func (ctrl *EmployeeController) ClaimRandomCopy(c *gin.Context) {
employeeID := c.GetInt("employee_id")
var req struct {
ProductID int `json:"product_id" binding:"required"`
}
if err := c.ShouldBindJSON(&req); err != nil {
common.Error(c, common.CodeInvalidParams, "参数错误")
return
}
data, err := ctrl.service.ClaimRandomCopy(employeeID, req.ProductID)
if err != nil {
common.Error(c, common.CodeCopyNotAvailable, err.Error())
return
}
common.SuccessWithMessage(c, "领取成功", data)
}
// Publish 发布内容
func (ctrl *EmployeeController) Publish(c *gin.Context) {
employeeID := c.GetInt("employee_id")
var req service.PublishRequest
if err := c.ShouldBindJSON(&req); err != nil {
common.Error(c, common.CodeInvalidParams, "参数错误")
return
}
recordID, err := ctrl.service.Publish(employeeID, req)
if err != nil {
common.Error(c, common.CodeInternalError, err.Error())
return
}
common.SuccessWithMessage(c, "发布成功", map[string]interface{}{
"record_id": recordID,
})
}
// GetMyPublishRecords 获取我的发布记录
func (ctrl *EmployeeController) GetMyPublishRecords(c *gin.Context) {
employeeID := c.GetInt("employee_id")
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "10"))
data, err := ctrl.service.GetMyPublishRecords(employeeID, page, pageSize)
if err != nil {
common.Error(c, common.CodeInternalError, err.Error())
return
}
common.Success(c, data)
}
// GetPublishRecordDetail 获取发布记录详情
func (ctrl *EmployeeController) GetPublishRecordDetail(c *gin.Context) {
employeeID := c.GetInt("employee_id")
recordID, err := strconv.Atoi(c.Param("id"))
if err != nil {
common.Error(c, common.CodeInvalidParams, "记录ID参数错误")
return
}
data, err := ctrl.service.GetPublishRecordDetail(employeeID, recordID)
if err != nil {
common.Error(c, common.CodeNotFound, err.Error())
return
}
common.Success(c, data)
}
// CheckXHSStatus 检查小红书绑定与Cookie状态
func (ctrl *EmployeeController) CheckXHSStatus(c *gin.Context) {
employeeID := c.GetInt("employee_id")
status, err := ctrl.service.CheckXHSStatus(employeeID)
if err != nil {
common.Error(c, common.CodeInternalError, err.Error())
return
}
common.Success(c, status)
}
// GetProducts 获取产品列表
func (ctrl *EmployeeController) GetProducts(c *gin.Context) {
data, err := ctrl.service.GetProducts()
if err != nil {
common.Error(c, common.CodeInternalError, err.Error())
return
}
common.Success(c, map[string]interface{}{
"list": data,
})
}