1、新增"游戏卡带库存调拨明细"接口;

2、CannibalizeStockTask表增加字段:maker_id、maker_name;
This commit is contained in:
chenlin 2025-05-15 14:24:18 +08:00
parent 42dfc04660
commit d8231f77a5
6 changed files with 939 additions and 25 deletions

View File

@ -7,6 +7,7 @@ import (
"go-admin/app/admin/models" "go-admin/app/admin/models"
orm "go-admin/common/global" orm "go-admin/common/global"
"go-admin/logger" "go-admin/logger"
"go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"net/http" "net/http"
"time" "time"
@ -182,14 +183,32 @@ func CannibalizeTaskCreate(c *gin.Context) {
return return
} }
sysUser, err := models.GetSysUserByCtx(c)
if err != nil {
logger.Error("sys user err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "操作失败")
return
}
// 校验入参门店是否包含在用户所有门店中,是否过期
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
if !models.CheckUserStore(req.FromStoreId, sysUser) {
app.Error(c, http.StatusInternalServerError, errors.New("操作失败:您没有该门店权限"),
"操作失败:您没有该门店权限")
return
}
}
task := &models.CannibalizeStockTask{ task := &models.CannibalizeStockTask{
FromStoreId: req.FromStoreId, FromStoreId: req.FromStoreId,
ToStoreId: req.ToStoreId, ToStoreId: req.ToStoreId,
TaskId: uint32(time.Now().Unix()), TaskId: uint32(time.Now().Unix()),
Count: 0, Count: 0,
Status: models.CannibalizeTaskStatusNotImportGoods, Status: models.CannibalizeTaskStatusNotImportGoods,
MakerId: uint32(sysUser.UserId),
MakerName: sysUser.NickName,
} }
err := orm.Eloquent.Create(task).Error err = orm.Eloquent.Create(task).Error
if err != nil { if err != nil {
logger.Error("err:", logger.Field("err", err)) logger.Error("err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "创建调拨任务错误") app.Error(c, http.StatusInternalServerError, err, "创建调拨任务错误")
@ -286,6 +305,31 @@ func CannibalizeTaskList(c *gin.Context) {
app.OK(c, resp, "") app.OK(c, resp, "")
} }
// CannibalizeTaskDetail 查询游戏卡库存调拨明细
// @Summary 查询游戏卡库存调拨明细
// @Tags 租卡系统-库存管理
// @Produce json
// @Accept json
// @Param request body models.CannibalizeTaskDetailReq true "查询游戏卡库存调拨明细"
// @Success 200 {object} models.CannibalizeTaskDetailResp
// @Router /api/v1/stock/cannibalize_task/detail [post]
func CannibalizeTaskDetail(c *gin.Context) {
req := models.CannibalizeTaskDetailReq{}
if c.ShouldBindJSON(&req) != nil {
logger.Errorf("para err")
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
return
}
resp, err := req.GetCannibalizeTaskDetail(c)
if err != nil {
logger.Error("err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "查询游戏卡库存调拨明细错误")
return
}
app.OK(c, resp, "")
}
// 6.调拨任务卡列表 // 6.调拨任务卡列表
func CannibalizeTaskGameCardGoodsList(c *gin.Context) { func CannibalizeTaskGameCardGoodsList(c *gin.Context) {
req := models.CannibalizeTaskGameCardGoodsListReq{} req := models.CannibalizeTaskGameCardGoodsListReq{}

View File

@ -2532,18 +2532,19 @@ const (
type CannibalizeStockTask struct { type CannibalizeStockTask struct {
Model Model
FromStoreId uint32 `json:"from_store_id"` FromStoreId uint32 `json:"from_store_id"` //
ToStoreId uint32 `json:"to_store_id"` ToStoreId uint32 `json:"to_store_id"` //
TaskId uint32 `json:"task_id"` // 时间戳 TaskId uint32 `json:"task_id"` // 时间戳
Count uint32 `json:"count"` // 总数量
Status uint8 `json:"status"` // 1-待填调拨卡 2-待发货 3-已发货 4-已入库
DeliveryTime time.Time `json:"delivery_time"` //
InStorageTime time.Time `json:"in_storage_time"` //
MakerId uint32 `json:"maker_id" gorm:"index"` // 制单人id
MakerName string `json:"maker_name"` // 制单人名称
FromStoreName string `json:"from_store_name" gorm:"-"` //
ToStoreName string `json:"to_store_name" gorm:"-"` //
//GameCardId uint32 `json:"game_card_id"` // 游戏卡id //GameCardId uint32 `json:"game_card_id"` // 游戏卡id
Count uint32 `json:"count"` // 总数量
Status uint8 `json:"status"` // 1-待填调拨卡 2-待发货 3-已发货 4-已入库
DeliveryTime time.Time `json:"delivery_time"`
InStorageTime time.Time `json:"in_storage_time"`
FromStoreName string `json:"from_store_name" gorm:"-"`
ToStoreName string `json:"to_store_name" gorm:"-"`
//CannibalizeStockTask int `json:"cannibalize_stock_task" gorm:"-"` //CannibalizeStockTask int `json:"cannibalize_stock_task" gorm:"-"`
} }
@ -2634,6 +2635,323 @@ func (m *CannibalizeTaskListReq) GetCannibalizeTaskList(c *gin.Context) (*Cannib
return resp, nil return resp, nil
} }
type CannibalizeTaskDetailReq struct {
TaskId uint32 `json:"task_id"` // 任务ID
DeliverStoreId []uint32 `json:"deliver_store_id"` // 调出门店id
ReceiveStoreId []uint32 `json:"receive_store_id"` // 调入门店id
GameCardId []uint32 `json:"game_card_id"` // 游戏卡id
SerialNumber string `json:"serial_number"` // 游戏卡串码
State uint32 `json:"state"` // 调拨状态1-调拨中 2-已完成
SendTimeStart string `json:"send_time_start"` // 调出开始时间
SendTimeEnd string `json:"send_time_end"` // 调出结束时间
ReceiveTimeStart string `json:"receive_time_start"` // 调入开始时间
ReceiveTimeEnd string `json:"receive_time_end"` // 调入结束时间
IsExport uint32 `json:"is_export"` // 1-导出
PageIndex int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 页面条数
}
type CannibalizeTaskDetailResp struct {
Total int64 `json:"total"` // 总条数/记录数
PageIndex int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 页面条数
ExportUrl string `json:"export_url"` // 导出excel路径
List []GameCardAllotDetailData `json:"list"` //
}
// GameCardAllotDetailData 租赁卡带库存调拨明细数据
type GameCardAllotDetailData struct {
TaskId uint32 `json:"task_id"` // 任务ID
DeliverStoreId uint32 `json:"deliver_store_id"` // 调出门店id
DeliverStoreName string `json:"deliver_store_name"` // 调出门店名称
ReceiveStoreId uint32 `json:"receive_store_id"` // 调入门店id
ReceiveStoreName string `json:"receive_store_name"` // 调入门店名称
MakerId uint32 `json:"maker_id"` // 制单人id
MakerName string `json:"maker_name"` // 制单人名称
MakerTime *time.Time `json:"maker_time"` // 制单时间/发起时间
SendTime *time.Time `json:"send_time"` // 发货时间/调出时间
ReceiveTime *time.Time `json:"receive_time"` // 收货时间/调入时间
State uint32 `json:"state"` // 调拨状态1-调拨中 2-已完成
GameCardId uint32 `json:"game_card_id"` // 游戏卡id
SerialNumber string `json:"serial_number"` // 游戏卡串码
GameCardName string `json:"game_card_name"` // 游戏卡名称
}
func (m *CannibalizeTaskDetailReq) GetCannibalizeTaskDetail(c *gin.Context) (*CannibalizeTaskDetailResp, error) {
// 用户权限校验:非管理员仅能查看自己门店的数据
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
sysUser, err := GetSysUserByCtx(c)
if err != nil {
return nil, errors.New("操作失败: " + err.Error())
}
// 获取用户绑定门店
storeList := GetValidStoreIDs(sysUser.StoreData)
if len(storeList) > 0 {
m.DeliverStoreId = CompareLists(storeList, m.DeliverStoreId)
m.ReceiveStoreId = CompareLists(storeList, m.ReceiveStoreId)
if len(m.DeliverStoreId) == 0 && len(m.ReceiveStoreId) == 0 {
return &CannibalizeTaskDetailResp{}, nil
}
} else {
return nil, errors.New("用户未绑定门店")
}
}
resp := &CannibalizeTaskDetailResp{
PageIndex: m.PageIndex,
PageSize: m.PageSize,
}
page := m.PageIndex - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
// 构建查询 CannibalizeStockTask 与 CannibalizeGameCardGoods 的 JOIN 语句
qs := orm.Eloquent.Debug().Table("cannibalize_stock_task").
Select("cannibalize_stock_task.id as task_id, "+
"cannibalize_stock_task.from_store_id as deliver_store_id, "+
"cannibalize_stock_task.to_store_id as receive_store_id, "+
"cannibalize_stock_task.maker_id, "+
"cannibalize_stock_task.maker_name, "+
"cannibalize_stock_task.created_at as maker_time, "+
"cannibalize_stock_task.delivery_time as send_time, "+
"cannibalize_stock_task.in_storage_time as receive_time, "+
"CASE "+
"WHEN cannibalize_stock_task.status IN (2, 3) THEN 1 "+
"WHEN cannibalize_stock_task.status = 4 THEN 2 "+
"ELSE cannibalize_stock_task.status "+
"END AS state, "+
"cannibalize_game_card_goods.game_card_id, "+
"cannibalize_game_card_goods.serial_number").
Joins("JOIN cannibalize_game_card_goods ON cannibalize_game_card_goods.cannibalize_stock_task_id "+
"= cannibalize_stock_task.id").
Where("cannibalize_stock_task.status <> ?", 1) // 1 表示未审核/无效任务等
// Count 查询
countQuery := orm.Eloquent.Table("cannibalize_stock_task").
Joins("JOIN cannibalize_game_card_goods ON cannibalize_game_card_goods.cannibalize_stock_task_id "+
"= cannibalize_stock_task.id").
Where("cannibalize_stock_task.status <> ?", 1)
if m.TaskId != 0 {
qs = qs.Where("cannibalize_stock_task.id = ?", m.TaskId)
countQuery = countQuery.Where("cannibalize_stock_task.id = ?", m.TaskId)
}
if len(m.DeliverStoreId) > 0 {
qs = qs.Where("cannibalize_stock_task.from_store_id IN ?", m.DeliverStoreId)
countQuery = countQuery.Where("cannibalize_stock_task.from_store_id IN ?", m.DeliverStoreId)
}
if len(m.ReceiveStoreId) > 0 {
qs = qs.Where("cannibalize_stock_task.to_store_id IN ?", m.ReceiveStoreId)
countQuery = countQuery.Where("cannibalize_stock_task.to_store_id IN ?", m.ReceiveStoreId)
}
if len(m.GameCardId) != 0 {
qs = qs.Where("cannibalize_game_card_goods.game_card_id IN ?", m.GameCardId)
countQuery = countQuery.Where("cannibalize_game_card_goods.game_card_id IN ?", m.GameCardId)
}
if m.SerialNumber != "" {
qs = qs.Where("cannibalize_game_card_goods.serial_number = ?", m.SerialNumber)
countQuery = countQuery.Where("cannibalize_game_card_goods.serial_number = ?", m.SerialNumber)
}
if m.State != 0 {
switch m.State {
case 1: // 调拨中
qs = qs.Where("cannibalize_stock_task.status IN (?)",
[]uint32{ErpInventoryAllotOrderWaitSend, ErpInventoryAllotOrderWaitReceive})
countQuery = countQuery.Where("cannibalize_stock_task.status IN (?)",
[]uint32{ErpInventoryAllotOrderWaitSend, ErpInventoryAllotOrderWaitReceive})
case 2: // 已完成
qs = qs.Where("cannibalize_stock_task.status = ?", ErpInventoryAllotOrderFinished)
countQuery = countQuery.Where("cannibalize_stock_task.status = ?", ErpInventoryAllotOrderFinished)
}
}
if m.SendTimeStart != "" {
startTime, err := time.Parse(QueryTimeFormat, m.SendTimeStart)
if err != nil {
return nil, err
}
qs = qs.Where("cannibalize_stock_task.delivery_time >= ?", startTime)
countQuery = countQuery.Where("cannibalize_stock_task.delivery_time >= ?", startTime)
}
if m.SendTimeEnd != "" {
endTime, err := time.Parse(QueryTimeFormat, m.SendTimeEnd)
if err != nil {
return nil, err
}
qs = qs.Where("cannibalize_stock_task.delivery_time <= ?", endTime)
countQuery = countQuery.Where("cannibalize_stock_task.delivery_time <= ?", endTime)
}
if m.ReceiveTimeStart != "" {
startTime, err := time.Parse(QueryTimeFormat, m.ReceiveTimeStart)
if err != nil {
return nil, err
}
qs = qs.Where("cannibalize_stock_task.in_storage_time >= ?", startTime)
countQuery = countQuery.Where("cannibalize_stock_task.in_storage_time >= ?", startTime)
}
if m.ReceiveTimeEnd != "" {
endTime, err := time.Parse(QueryTimeFormat, m.ReceiveTimeEnd)
if err != nil {
return nil, err
}
qs = qs.Where("cannibalize_stock_task.in_storage_time <= ?", endTime)
countQuery = countQuery.Where("cannibalize_stock_task.in_storage_time <= ?", endTime)
}
var count int64
err := countQuery.Count(&count).Error
if err != nil {
return nil, err
}
resp.Total = count
var list []GameCardAllotDetailData
if m.IsExport == 1 {
err = qs.Order("cannibalize_stock_task.created_at DESC").Find(&list).Error
} else {
err = qs.Order("cannibalize_stock_task.created_at DESC").
Offset(page * m.PageSize).Limit(m.PageSize).Find(&list).Error
}
if err != nil {
return nil, err
}
storeMap, err := GetAllStoreData()
if err != nil {
return nil, err
}
// 1. 将 list 转换为 CannibalizeGameCardGoods 切片
goodsList := make([]CannibalizeGameCardGoods, len(list))
for i, item := range list {
list[i].DeliverStoreName = storeMap[item.DeliverStoreId].Name
list[i].ReceiveStoreName = storeMap[item.ReceiveStoreId].Name
goodsList[i].GameCardId = list[i].GameCardId
}
// 2. 调用补全游戏名称的方法
goodsList = CannibalizeGameCardGoodsSetInfo(goodsList)
// 3. 把补全的 GameCardName 写回 list
for i := range list {
list[i].GameCardName = goodsList[i].GameCardName
}
resp.List = list
if m.IsExport == 1 {
resp.ExportUrl, err = exportCannibalizeTaskDetail(resp.List)
if err != nil {
return nil, err
}
resp.List = []GameCardAllotDetailData{}
}
return resp, nil
}
// exportCannibalizeTaskDetail 游戏卡带库存调拨明细导出
func exportCannibalizeTaskDetail(dataList []GameCardAllotDetailData) (string, error) {
file := excelize.NewFile()
sheet := "Sheet1"
fileName := time.Now().Format("2006-01-02_15-04-05") + "_卡带调拨明细.xlsx"
savePath := config.ExportConfig.Path + fileName
url := config.ExportConfig.Url + fileName
// 标题栏
headers := []string{
"任务ID", "调出门店", "调入门店", "制单人", "制单时间", "调出时间", "调入时间",
"调拨状态", "卡带ID", "卡带名称", "串码",
}
// 设置标题栏
for i, header := range headers {
cell, _ := excelize.CoordinatesToCellName(i+1, 1)
_ = file.SetCellValue(sheet, cell, header)
}
// 填充数据
for rowIndex, item := range dataList {
row := rowIndex + 2 // 从第二行开始填充数据
var makerTime, sendTime, receiveTime string
if item.MakerTime != nil {
makerTime = item.MakerTime.Format("2006-01-02 15:04:05")
}
if item.SendTime != nil {
sendTime = item.SendTime.Format("2006-01-02 15:04:05")
}
if item.ReceiveTime != nil {
receiveTime = item.ReceiveTime.Format("2006-01-02 15:04:05")
}
var stateStr string
switch item.State {
case 1:
stateStr = "调拨中"
case 2:
stateStr = "已完成"
default:
stateStr = "未知"
}
values := []interface{}{
item.TaskId,
item.DeliverStoreName,
item.ReceiveStoreName,
item.MakerName,
makerTime,
sendTime,
receiveTime,
stateStr,
item.GameCardId,
item.GameCardName,
item.SerialNumber,
}
for colIndex, val := range values {
cell, _ := excelize.CoordinatesToCellName(colIndex+1, row)
_ = file.SetCellValue(sheet, cell, val)
}
}
// 设置样式
style, _ := file.NewStyle(`{
"alignment":{"horizontal":"center","vertical":"center"},
"border":[
{"type":"left","color":"000000","style":1},
{"type":"top","color":"000000","style":1},
{"type":"right","color":"000000","style":1},
{"type":"bottom","color":"000000","style":1}
]
}`)
lastRow := len(dataList) + 1
endCell := fmt.Sprintf("K%d", lastRow)
_ = file.SetCellStyle(sheet, "A1", endCell, style)
_ = file.SetRowHeight(sheet, 1, 20)
_ = file.SetColWidth(sheet, "A", "K", 20)
// 保存文件
if err := file.SaveAs(savePath); err != nil {
logger.Error("保存Excel文件失败", logger.Field("err", err))
return "", err
}
return url, nil
}
type CooperativeCannibalizeTaskReq struct { type CooperativeCannibalizeTaskReq struct {
CooperativeBusinessId uint32 `json:"cooperative_business_id"` CooperativeBusinessId uint32 `json:"cooperative_business_id"`
StoreId uint64 `json:"store_id" ` // 门店id StoreId uint64 `json:"store_id" ` // 门店id

View File

@ -11,8 +11,9 @@ import (
func registerStockManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { func registerStockManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
order := v1.Group("/stock").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) order := v1.Group("/stock").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
{ {
order.POST("/list", stockmanage.GameCardGoodsStockInfoList) // 库存列表 order.POST("/list", stockmanage.GameCardGoodsStockInfoList) // 库存列表
order.POST("/cannibalize_task/list", stockmanage.CannibalizeTaskList) // 库存调拨列表 order.POST("/cannibalize_task/list", stockmanage.CannibalizeTaskList) // 库存调拨列表
order.POST("/cannibalize_task/detail", stockmanage.CannibalizeTaskDetail) // 库存调拨明细
order.POST("/card/dels", stockmanage.GameCardGoodsStockDels) // 游戏卡减库存/出库 order.POST("/card/dels", stockmanage.GameCardGoodsStockDels) // 游戏卡减库存/出库
order.POST("/out_list", stockmanage.GameCardGoodsStockOutInfoList) // 出库明细 order.POST("/out_list", stockmanage.GameCardGoodsStockOutInfoList) // 出库明细
@ -24,19 +25,19 @@ func registerStockManageUnAuthRouter(v1 *gin.RouterGroup) {
order := v1.Group("/stock") order := v1.Group("/stock")
{ {
//order.POST("/list", stockmanage.GameCardGoodsStockInfoList) // 库存列表 //order.POST("/list", stockmanage.GameCardGoodsStockInfoList) // 库存列表
order.POST("/card/list", stockmanage.GameCardGoodsStockCardList) // 游戏卡列表
order.POST("/card/adds", stockmanage.GameCardGoodsStockAdds) // 游戏卡入库
//order.POST("/card/dels", stockmanage.GameCardGoodsStockDels) // 游戏卡减库存/出库 //order.POST("/card/dels", stockmanage.GameCardGoodsStockDels) // 游戏卡减库存/出库
order.POST("/card/list", stockmanage.GameCardGoodsStockCardList) // 游戏卡列表
order.POST("/card/adds", stockmanage.GameCardGoodsStockAdds) // 游戏卡入库
order.POST("/card/stock_derive", stockmanage.ExportDataGameCardGoodsStock) // order.POST("/card/stock_derive", stockmanage.ExportDataGameCardGoodsStock) //
order.POST("/cannibalize_task/create", stockmanage.CannibalizeTaskCreate) // 创建调拨 order.POST("/cannibalize_task/create", stockmanage.CannibalizeTaskCreate) // 创建调拨
order.POST("/cannibalize_task/import_goods", stockmanage.CannibalizeTaskImportGameCardGoods) // order.POST("/cannibalize_task/import_goods", stockmanage.CannibalizeTaskImportGameCardGoods) // 导入调拨卡带信息
order.POST("/cannibalize_task/deliver_goods", stockmanage.CannibalizeTaskDeliverGoods) // order.POST("/cannibalize_task/deliver_goods", stockmanage.CannibalizeTaskDeliverGoods) // 调拨发货
order.POST("/cannibalize_task/put_in_storage", stockmanage.CannibalizeTaskPutInStorage) // order.POST("/cannibalize_task/put_in_storage", stockmanage.CannibalizeTaskPutInStorage) // 调拨收货
//order.POST("/cannibalize_task/list", stockmanage.CannibalizeTaskList) // 库存调拨列表 order.POST("/cannibalize_task/goods_list", stockmanage.CannibalizeTaskGameCardGoodsList) // 调拨游戏卡列表
order.POST("/cannibalize_task/goods_list", stockmanage.CannibalizeTaskGameCardGoodsList) // order.POST("/cannibalize_task/del", stockmanage.CannibalizeTaskDel) // 删除调拨任务
order.POST("/cannibalize_task/del", stockmanage.CannibalizeTaskDel) //
//order.POST("/type", goodsmanage.GameCardTypes) // 获取游戏类型 //order.POST("/type", goodsmanage.GameCardTypes) // 获取游戏类型
//order.POST("/cannibalize_task/list", stockmanage.CannibalizeTaskList) // 库存调拨列表
} }
} }

View File

@ -6184,6 +6184,39 @@ const docTemplate = `{
} }
} }
}, },
"/api/v1/stock/cannibalize_task/detail": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"租卡系统-库存管理"
],
"summary": "查询游戏卡库存调拨明细",
"parameters": [
{
"description": "查询游戏卡库存调拨明细",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.CannibalizeTaskDetailReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.CannibalizeTaskDetailResp"
}
}
}
}
},
"/api/v1/stock/cannibalize_task/list": { "/api/v1/stock/cannibalize_task/list": {
"post": { "post": {
"consumes": [ "consumes": [
@ -7858,7 +7891,7 @@ const docTemplate = `{
"type": "object", "type": "object",
"properties": { "properties": {
"count": { "count": {
"description": "GameCardId uint32 ` + "`" + `json:\"game_card_id\"` + "`" + ` // 游戏卡id", "description": "总数量",
"type": "integer" "type": "integer"
}, },
"createdAt": { "createdAt": {
@ -7881,6 +7914,14 @@ const docTemplate = `{
"in_storage_time": { "in_storage_time": {
"type": "string" "type": "string"
}, },
"maker_id": {
"description": "制单人id",
"type": "integer"
},
"maker_name": {
"description": "制单人名称",
"type": "string"
},
"status": { "status": {
"description": "1-待填调拨卡 2-待发货 3-已发货 4-已入库", "description": "1-待填调拨卡 2-待发货 3-已发货 4-已入库",
"type": "integer" "type": "integer"
@ -7901,6 +7942,99 @@ const docTemplate = `{
} }
} }
}, },
"models.CannibalizeTaskDetailReq": {
"type": "object",
"properties": {
"deliver_store_id": {
"description": "调出门店id",
"type": "array",
"items": {
"type": "integer"
}
},
"game_card_id": {
"description": "游戏卡id",
"type": "array",
"items": {
"type": "integer"
}
},
"is_export": {
"description": "1-导出",
"type": "integer"
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "页面条数",
"type": "integer"
},
"receive_store_id": {
"description": "调入门店id",
"type": "array",
"items": {
"type": "integer"
}
},
"receive_time_end": {
"description": "调入结束时间",
"type": "string"
},
"receive_time_start": {
"description": "调入开始时间",
"type": "string"
},
"send_time_end": {
"description": "调出结束时间",
"type": "string"
},
"send_time_start": {
"description": "调出开始时间",
"type": "string"
},
"serial_number": {
"description": "游戏卡串码",
"type": "string"
},
"state": {
"description": "调拨状态1-调拨中 2-已完成",
"type": "integer"
},
"task_id": {
"description": "任务ID",
"type": "integer"
}
}
},
"models.CannibalizeTaskDetailResp": {
"type": "object",
"properties": {
"export_url": {
"description": "导出excel路径",
"type": "string"
},
"list": {
"type": "array",
"items": {
"$ref": "#/definitions/models.GameCardAllotDetailData"
}
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "页面条数",
"type": "integer"
},
"total": {
"description": "总条数/记录数",
"type": "integer"
}
}
},
"models.CannibalizeTaskListReq": { "models.CannibalizeTaskListReq": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -13012,6 +13146,14 @@ const docTemplate = `{
"description": "经手人id", "description": "经手人id",
"type": "integer" "type": "integer"
}, },
"make_time_end": {
"description": "制单结束时间",
"type": "string"
},
"make_time_start": {
"description": "制单开始时间",
"type": "string"
},
"pageIndex": { "pageIndex": {
"description": "页码", "description": "页码",
"type": "integer" "type": "integer"
@ -14287,6 +14429,67 @@ const docTemplate = `{
} }
} }
}, },
"models.GameCardAllotDetailData": {
"type": "object",
"properties": {
"deliver_store_id": {
"description": "调出门店id",
"type": "integer"
},
"deliver_store_name": {
"description": "调出门店名称",
"type": "string"
},
"game_card_id": {
"description": "游戏卡id",
"type": "integer"
},
"game_card_name": {
"description": "游戏卡名称",
"type": "string"
},
"maker_id": {
"description": "制单人id",
"type": "integer"
},
"maker_name": {
"description": "制单人名称",
"type": "string"
},
"maker_time": {
"description": "制单时间/发起时间",
"type": "string"
},
"receive_store_id": {
"description": "调入门店id",
"type": "integer"
},
"receive_store_name": {
"description": "调入门店名称",
"type": "string"
},
"receive_time": {
"description": "收货时间/调入时间",
"type": "string"
},
"send_time": {
"description": "发货时间/调出时间",
"type": "string"
},
"serial_number": {
"description": "游戏卡串码",
"type": "string"
},
"state": {
"description": "调拨状态1-调拨中 2-已完成",
"type": "integer"
},
"task_id": {
"description": "任务ID",
"type": "integer"
}
}
},
"models.GameCardGoods": { "models.GameCardGoods": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@ -6173,6 +6173,39 @@
} }
} }
}, },
"/api/v1/stock/cannibalize_task/detail": {
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"租卡系统-库存管理"
],
"summary": "查询游戏卡库存调拨明细",
"parameters": [
{
"description": "查询游戏卡库存调拨明细",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.CannibalizeTaskDetailReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/models.CannibalizeTaskDetailResp"
}
}
}
}
},
"/api/v1/stock/cannibalize_task/list": { "/api/v1/stock/cannibalize_task/list": {
"post": { "post": {
"consumes": [ "consumes": [
@ -7847,7 +7880,7 @@
"type": "object", "type": "object",
"properties": { "properties": {
"count": { "count": {
"description": "GameCardId uint32 `json:\"game_card_id\"` // 游戏卡id", "description": "总数量",
"type": "integer" "type": "integer"
}, },
"createdAt": { "createdAt": {
@ -7870,6 +7903,14 @@
"in_storage_time": { "in_storage_time": {
"type": "string" "type": "string"
}, },
"maker_id": {
"description": "制单人id",
"type": "integer"
},
"maker_name": {
"description": "制单人名称",
"type": "string"
},
"status": { "status": {
"description": "1-待填调拨卡 2-待发货 3-已发货 4-已入库", "description": "1-待填调拨卡 2-待发货 3-已发货 4-已入库",
"type": "integer" "type": "integer"
@ -7890,6 +7931,99 @@
} }
} }
}, },
"models.CannibalizeTaskDetailReq": {
"type": "object",
"properties": {
"deliver_store_id": {
"description": "调出门店id",
"type": "array",
"items": {
"type": "integer"
}
},
"game_card_id": {
"description": "游戏卡id",
"type": "array",
"items": {
"type": "integer"
}
},
"is_export": {
"description": "1-导出",
"type": "integer"
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "页面条数",
"type": "integer"
},
"receive_store_id": {
"description": "调入门店id",
"type": "array",
"items": {
"type": "integer"
}
},
"receive_time_end": {
"description": "调入结束时间",
"type": "string"
},
"receive_time_start": {
"description": "调入开始时间",
"type": "string"
},
"send_time_end": {
"description": "调出结束时间",
"type": "string"
},
"send_time_start": {
"description": "调出开始时间",
"type": "string"
},
"serial_number": {
"description": "游戏卡串码",
"type": "string"
},
"state": {
"description": "调拨状态1-调拨中 2-已完成",
"type": "integer"
},
"task_id": {
"description": "任务ID",
"type": "integer"
}
}
},
"models.CannibalizeTaskDetailResp": {
"type": "object",
"properties": {
"export_url": {
"description": "导出excel路径",
"type": "string"
},
"list": {
"type": "array",
"items": {
"$ref": "#/definitions/models.GameCardAllotDetailData"
}
},
"pageIndex": {
"description": "页码",
"type": "integer"
},
"pageSize": {
"description": "页面条数",
"type": "integer"
},
"total": {
"description": "总条数/记录数",
"type": "integer"
}
}
},
"models.CannibalizeTaskListReq": { "models.CannibalizeTaskListReq": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -13001,6 +13135,14 @@
"description": "经手人id", "description": "经手人id",
"type": "integer" "type": "integer"
}, },
"make_time_end": {
"description": "制单结束时间",
"type": "string"
},
"make_time_start": {
"description": "制单开始时间",
"type": "string"
},
"pageIndex": { "pageIndex": {
"description": "页码", "description": "页码",
"type": "integer" "type": "integer"
@ -14276,6 +14418,67 @@
} }
} }
}, },
"models.GameCardAllotDetailData": {
"type": "object",
"properties": {
"deliver_store_id": {
"description": "调出门店id",
"type": "integer"
},
"deliver_store_name": {
"description": "调出门店名称",
"type": "string"
},
"game_card_id": {
"description": "游戏卡id",
"type": "integer"
},
"game_card_name": {
"description": "游戏卡名称",
"type": "string"
},
"maker_id": {
"description": "制单人id",
"type": "integer"
},
"maker_name": {
"description": "制单人名称",
"type": "string"
},
"maker_time": {
"description": "制单时间/发起时间",
"type": "string"
},
"receive_store_id": {
"description": "调入门店id",
"type": "integer"
},
"receive_store_name": {
"description": "调入门店名称",
"type": "string"
},
"receive_time": {
"description": "收货时间/调入时间",
"type": "string"
},
"send_time": {
"description": "发货时间/调出时间",
"type": "string"
},
"serial_number": {
"description": "游戏卡串码",
"type": "string"
},
"state": {
"description": "调拨状态1-调拨中 2-已完成",
"type": "integer"
},
"task_id": {
"description": "任务ID",
"type": "integer"
}
}
},
"models.GameCardGoods": { "models.GameCardGoods": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@ -378,7 +378,7 @@ definitions:
models.CannibalizeStockTask: models.CannibalizeStockTask:
properties: properties:
count: count:
description: GameCardId uint32 `json:"game_card_id"` // 游戏卡id description: 总数量
type: integer type: integer
createdAt: createdAt:
description: 创建时间 description: 创建时间
@ -394,6 +394,12 @@ definitions:
type: integer type: integer
in_storage_time: in_storage_time:
type: string type: string
maker_id:
description: 制单人id
type: integer
maker_name:
description: 制单人名称
type: string
status: status:
description: 1-待填调拨卡 2-待发货 3-已发货 4-已入库 description: 1-待填调拨卡 2-待发货 3-已发货 4-已入库
type: integer type: integer
@ -408,6 +414,73 @@ definitions:
description: 更新时间 description: 更新时间
type: string type: string
type: object type: object
models.CannibalizeTaskDetailReq:
properties:
deliver_store_id:
description: 调出门店id
items:
type: integer
type: array
game_card_id:
description: 游戏卡id
items:
type: integer
type: array
is_export:
description: 1-导出
type: integer
pageIndex:
description: 页码
type: integer
pageSize:
description: 页面条数
type: integer
receive_store_id:
description: 调入门店id
items:
type: integer
type: array
receive_time_end:
description: 调入结束时间
type: string
receive_time_start:
description: 调入开始时间
type: string
send_time_end:
description: 调出结束时间
type: string
send_time_start:
description: 调出开始时间
type: string
serial_number:
description: 游戏卡串码
type: string
state:
description: 调拨状态1-调拨中 2-已完成
type: integer
task_id:
description: 任务ID
type: integer
type: object
models.CannibalizeTaskDetailResp:
properties:
export_url:
description: 导出excel路径
type: string
list:
items:
$ref: '#/definitions/models.GameCardAllotDetailData'
type: array
pageIndex:
description: 页码
type: integer
pageSize:
description: 页面条数
type: integer
total:
description: 总条数/记录数
type: integer
type: object
models.CannibalizeTaskListReq: models.CannibalizeTaskListReq:
properties: properties:
pageIndex: pageIndex:
@ -4137,6 +4210,12 @@ definitions:
handler_id: handler_id:
description: 经手人id description: 经手人id
type: integer type: integer
make_time_end:
description: 制单结束时间
type: string
make_time_start:
description: 制单开始时间
type: string
pageIndex: pageIndex:
description: 页码 description: 页码
type: integer type: integer
@ -5063,6 +5142,51 @@ definitions:
description: 查看人数 description: 查看人数
type: integer type: integer
type: object type: object
models.GameCardAllotDetailData:
properties:
deliver_store_id:
description: 调出门店id
type: integer
deliver_store_name:
description: 调出门店名称
type: string
game_card_id:
description: 游戏卡id
type: integer
game_card_name:
description: 游戏卡名称
type: string
maker_id:
description: 制单人id
type: integer
maker_name:
description: 制单人名称
type: string
maker_time:
description: 制单时间/发起时间
type: string
receive_store_id:
description: 调入门店id
type: integer
receive_store_name:
description: 调入门店名称
type: string
receive_time:
description: 收货时间/调入时间
type: string
send_time:
description: 发货时间/调出时间
type: string
serial_number:
description: 游戏卡串码
type: string
state:
description: 调拨状态1-调拨中 2-已完成
type: integer
task_id:
description: 任务ID
type: integer
type: object
models.GameCardGoods: models.GameCardGoods:
properties: properties:
card_type: card_type:
@ -13928,6 +14052,27 @@ paths:
summary: 系统信息 summary: 系统信息
tags: tags:
- system/系统信息 - system/系统信息
/api/v1/stock/cannibalize_task/detail:
post:
consumes:
- application/json
parameters:
- description: 查询游戏卡库存调拨明细
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.CannibalizeTaskDetailReq'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.CannibalizeTaskDetailResp'
summary: 查询游戏卡库存调拨明细
tags:
- 租卡系统-库存管理
/api/v1/stock/cannibalize_task/list: /api/v1/stock/cannibalize_task/list:
post: post:
consumes: consumes: