feat:采购日志
This commit is contained in:
@@ -2,6 +2,7 @@ package handler
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@@ -100,12 +101,70 @@ func (h *RockHandler) PurchaseTokens(c *gin.Context) {
|
||||
response.BadRequest(c, err.Error())
|
||||
return
|
||||
}
|
||||
summary := h.rockSvc.LastPurchaseSummary()
|
||||
message := "采购成功,已批量入库"
|
||||
planned := len(tokens)
|
||||
limitReason := ""
|
||||
if summary != nil {
|
||||
planned = summary.PlannedCount
|
||||
limitReason = summary.LimitReason
|
||||
switch summary.LimitReason {
|
||||
case "upstream_stock":
|
||||
message = fmt.Sprintf("上游货源不足,已按 %d 个采购", summary.PlannedCount)
|
||||
case "points":
|
||||
message = fmt.Sprintf("积分不足,已按 %d 个采购", summary.PlannedCount)
|
||||
case "points_and_stock":
|
||||
message = fmt.Sprintf("积分与上游库存不足,已按 %d 个采购", summary.PlannedCount)
|
||||
case "points_snapshot":
|
||||
message = fmt.Sprintf("积分不足(按快照估算),已按 %d 个采购", summary.PlannedCount)
|
||||
}
|
||||
}
|
||||
response.OK(c, gin.H{
|
||||
"purchased_count": len(tokens),
|
||||
"message": "采购成功,已批量入库",
|
||||
"requested_count": req.Count,
|
||||
"planned_count": planned,
|
||||
"limit_reason": limitReason,
|
||||
"log_id": summaryLogID(summary),
|
||||
"message": message,
|
||||
})
|
||||
}
|
||||
|
||||
func summaryLogID(summary *service.PurchaseSummary) uint {
|
||||
if summary == nil {
|
||||
return 0
|
||||
}
|
||||
return summary.LogID
|
||||
}
|
||||
|
||||
// ListPurchaseLogs 分页查询采购流水
|
||||
func (h *RockHandler) ListPurchaseLogs(c *gin.Context) {
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20"))
|
||||
triggerType := strings.TrimSpace(c.Query("trigger_type"))
|
||||
status := strings.TrimSpace(c.Query("status"))
|
||||
list, total, err := h.rockSvc.ListPurchaseLogs(c.Request.Context(), page, pageSize, triggerType, status)
|
||||
if err != nil {
|
||||
response.ServerError(c, err.Error())
|
||||
return
|
||||
}
|
||||
response.OK(c, gin.H{"list": list, "total": total})
|
||||
}
|
||||
|
||||
// GetPurchaseLog 查询单次采购详情(含各阶段原始报文)
|
||||
func (h *RockHandler) GetPurchaseLog(c *gin.Context) {
|
||||
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
if err != nil || id == 0 {
|
||||
response.BadRequest(c, "无效的日志 ID")
|
||||
return
|
||||
}
|
||||
entry, stages, err := h.rockSvc.GetPurchaseLog(c.Request.Context(), uint(id))
|
||||
if err != nil {
|
||||
response.NotFound(c, "采购日志不存在")
|
||||
return
|
||||
}
|
||||
response.OK(c, gin.H{"log": entry, "stages": stages})
|
||||
}
|
||||
|
||||
// ListTokens 分页获取 Token 库存列表
|
||||
func (h *RockHandler) ListTokens(c *gin.Context) {
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
|
||||
Reference in New Issue
Block a user