diff --git a/app/admin/apis/basic/commodity.go b/app/admin/apis/basic/commodity.go index 01f0019..0984e5c 100644 --- a/app/admin/apis/basic/commodity.go +++ b/app/admin/apis/basic/commodity.go @@ -335,8 +335,8 @@ func CommodityEdit(c *gin.Context) { return } - // 同步更新库存表和库存商品表的"指导零售价"和"最低零售价"、"分类id"、"分类名称";库存商品表的"商品条码" - err = models.UpdateErpStockAmountInfo(begin, req, barCode, commodity.ErpCategory) + // 同步更新库存表和库存商品表的"指导零售价"和"最低零售价"、"分类id"、"分类名称"、"商品编号";库存商品表的"商品条码" + err = models.UpdateErpStockAmountInfo(begin, req, barCode, commodity.SerialNumber, commodity.ErpCategory) if err != nil { begin.Rollback() logger.Error("UpdateErpStockAmountInfo err:", logger.Field("err", err)) diff --git a/app/admin/apis/cooperativemanage/cooperative.go b/app/admin/apis/cooperativemanage/cooperative.go index 17453ea..2d8d4ad 100644 --- a/app/admin/apis/cooperativemanage/cooperative.go +++ b/app/admin/apis/cooperativemanage/cooperative.go @@ -239,7 +239,7 @@ func CooperativeMemberPromotionStatisticList(c *gin.Context) { return } - ret, err := req.List() + ret, err := req.List(c) if err != nil { logger.Errorf("err:", err) app.Error(c, http.StatusInternalServerError, err, "查询失败") @@ -654,7 +654,7 @@ func AssistantInviteMemberReportList(c *gin.Context) { req.SysUser = sysUser //req.CooperativeBusinessId = sysUser.CooperativeBusinessId - ret, err := req.List() + ret, err := req.List(c) if err != nil { logger.Errorf("err:", err) app.Error(c, http.StatusInternalServerError, err, "查询失败") diff --git a/app/admin/apis/goodsmanage/game_card.go b/app/admin/apis/goodsmanage/game_card.go index d1157a6..21c1213 100644 --- a/app/admin/apis/goodsmanage/game_card.go +++ b/app/admin/apis/goodsmanage/game_card.go @@ -46,6 +46,14 @@ func GameCardList(c *gin.Context) { app.OK(c, ret, "") } +// GameCardGoodsList 查询库存游戏卡串码 +// @Summary 查询库存游戏卡串码 +// @Tags 租卡系统-库存管理 +// @Produce json +// @Accept json +// @Param request body models.GetGameCardGoodsListReq true "查询库存游戏卡串码" +// @Success 200 {object} models.GetGameCardGoodsListResp +// @Router /api/v1/goods/goods_list [post] func GameCardGoodsList(c *gin.Context) { req := models.GetGameCardGoodsListReq{} if c.ShouldBindJSON(&req) != nil { @@ -54,7 +62,7 @@ func GameCardGoodsList(c *gin.Context) { return } - resp, err := req.GetGameCardGoodsList() + resp, err := req.GetGameCardGoodsList(c) if err != nil { logger.Errorf("err:", logger.Field("err", err)) app.Error(c, http.StatusInternalServerError, err, "查询失败") diff --git a/app/admin/apis/inventorymanage/allot.go b/app/admin/apis/inventorymanage/allot.go index 7ce8566..41005e5 100644 --- a/app/admin/apis/inventorymanage/allot.go +++ b/app/admin/apis/inventorymanage/allot.go @@ -275,7 +275,7 @@ func InventoryAllotDetail(c *gin.Context) { return } - allotOrder.Commodities = allotCommodities + allotOrder.Commodities = models.MergeCommodities(allotCommodities) app.OK(c, allotOrder, "查询成功") return } diff --git a/app/admin/apis/inventorymanage/change.go b/app/admin/apis/inventorymanage/change.go index ab66ff4..481a0e9 100644 --- a/app/admin/apis/inventorymanage/change.go +++ b/app/admin/apis/inventorymanage/change.go @@ -74,6 +74,12 @@ func InventoryChangeEdit(c *gin.Context) { return } + if len(req.Commodities) == 0 { + logger.Error("InventoryChangeEdit err:", logger.Field("err", err)) + app.Error(c, http.StatusInternalServerError, errors.New("请添加商品"), "请添加商品") + return + } + changeProductOrder, err := models.EditChangeInventory(req) if err != nil { logger.Error("InventoryChangeEdit err:", logger.Field("err", err)) @@ -276,7 +282,7 @@ func InventoryChangeDetail(c *gin.Context) { return } - changeOrder.Commodities = changeCommodities + changeOrder.Commodities = models.MergeChangeCommodities(changeCommodities) app.OK(c, changeOrder, "查询成功") return } diff --git a/app/admin/apis/mallmanage/mall_goods_order.go b/app/admin/apis/mallmanage/mall_goods_order.go index 1b6c1e2..277ba3a 100644 --- a/app/admin/apis/mallmanage/mall_goods_order.go +++ b/app/admin/apis/mallmanage/mall_goods_order.go @@ -10,6 +10,14 @@ import ( "net/http" ) +// GoodsOrderList 查询商城订单列表 +// @Summary 查询商城订单列表 +// @Tags 订单管理 +// @Produce json +// @Accept json +// @Param request body models.GoodsOrderListReq true "查询商城订单列表" +// @Success 200 {object} app.Response "{"code": 200, "data": { "total": 4, "pageIndex":0, "total_page":10, "list":{} }}" +// @Router /api/v1/mall/goods/order/list [post] func GoodsOrderList(c *gin.Context) { req := &models.GoodsOrderListReq{} if c.ShouldBindJSON(req) != nil { @@ -78,7 +86,11 @@ func GoodsOrderDeliver(c *gin.Context) { app.Error(c, http.StatusInternalServerError, errors.New("order detail err"), "订单发货失败") return } - req.DeliverStoreId = sysUser.StoreId + + // todo 暂时使用用户有效门店,待后续产品梳理流程后再修改 + //req.DeliverStoreId = sysUser.StoreId + storeInfo, _ := models.GetUserEffectiveStore(uint32(sysUser.UserId)) + req.DeliverStoreId = uint32(storeInfo[0].StoreID) orderDetail, err := req.OrderDeliver() if err != nil { diff --git a/app/admin/apis/ordermanage/order.go b/app/admin/apis/ordermanage/order.go index e51474c..8290185 100644 --- a/app/admin/apis/ordermanage/order.go +++ b/app/admin/apis/ordermanage/order.go @@ -12,6 +12,14 @@ import ( "net/http" ) +// OrderList 查询租赁订单列表 +// @Summary 查询租赁订单列表 +// @Tags 租卡系统-订单管理 +// @Produce json +// @Accept json +// @Param request body models.OrderListReq true "查询租赁订单列表" +// @Success 200 {object} app.Response "{"code": 200, "data": { "total": 4, "pageIndex":0, "total_page":10, "list":{} }}" +// @Router /api/v1/order/list [post] func OrderList(c *gin.Context) { req := &models.OrderListReq{} if c.ShouldBindJSON(req) != nil { @@ -35,7 +43,7 @@ func OrderList(c *gin.Context) { // //} - list, count, _, err := req.List(0) + list, count, _, err := req.List(0, c) if err != nil { logger.Errorf("err:", logger.Field("err", err)) app.Error(c, http.StatusInternalServerError, err, "查询失败") @@ -43,10 +51,10 @@ func OrderList(c *gin.Context) { } ret := map[string]interface{}{ - "count": count, - "list": list, - "pageIndex": req.Page, - "total_page": req.PageSize, + "total": count, + "list": list, + "pageIndex": req.Page, + "pageSize": req.PageSize, } app.OK(c, ret, "") } @@ -283,7 +291,7 @@ func OrderListExport(c *gin.Context) { reqJson, _ := json.Marshal(req) fmt.Println("reqJson:", string(reqJson)) - _, _, filePath, err := req.List(1) + _, _, filePath, err := req.List(1, c) if err != nil { logger.Errorf("OrderListExport err:", logger.Field("err", err)) app.Error(c, http.StatusInternalServerError, err, "导出失败") diff --git a/app/admin/apis/recyclecardmanage/recycle_card.go b/app/admin/apis/recyclecardmanage/recycle_card.go index 2ed9fca..03b0b7e 100644 --- a/app/admin/apis/recyclecardmanage/recycle_card.go +++ b/app/admin/apis/recyclecardmanage/recycle_card.go @@ -14,6 +14,14 @@ import ( "time" ) +// RecycleCardOrderList 查询小程序回收订单 +// @Summary 查询小程序回收订单 +// @Tags 租卡系统-订单管理 +// @Produce json +// @Accept json +// @Param request body models.RecycleCardOrderListReq true "查询小程序回收订单" +// @Success 200 {object} models.RecycleCardOrderListRsp +// @Router /api/v1/recycle_card/order/list [post] func RecycleCardOrderList(c *gin.Context) { req := models.RecycleCardOrderListReq{} if c.ShouldBindJSON(&req) != nil { diff --git a/app/admin/apis/sharemanage/share_card.go b/app/admin/apis/sharemanage/share_card.go index 1445647..6860b19 100644 --- a/app/admin/apis/sharemanage/share_card.go +++ b/app/admin/apis/sharemanage/share_card.go @@ -342,7 +342,7 @@ func ShareCardRetrieveCardAudit(c *gin.Context) { //ret := map[string]interface{}{ // "count": count, // "list": list, - // "pageIndex": req.Page, + // "pageIndex": req.PageIndex, // "pageSize": req.PageSize, //} app.OK(c, nil, "操作成功") @@ -377,7 +377,7 @@ func ShareCardRetrieveCardDeliver(c *gin.Context) { //ret := map[string]interface{}{ // "count": count, // "list": list, - // "pageIndex": req.Page, + // "pageIndex": req.PageIndex, // "pageSize": req.PageSize, //} app.OK(c, nil, "") diff --git a/app/admin/apis/stockmanage/stock.go b/app/admin/apis/stockmanage/stock.go index 6fd3e28..2cc88db 100644 --- a/app/admin/apis/stockmanage/stock.go +++ b/app/admin/apis/stockmanage/stock.go @@ -12,6 +12,14 @@ import ( "time" ) +// GameCardGoodsStockInfoList 查询小程序租卡库存列表 +// @Summary 查询小程序租卡库存列表 +// @Tags 租卡系统-库存管理 +// @Produce json +// @Accept json +// @Param request body models.GameCardGoodsStockListReq true "查询小程序租卡库存列表" +// @Success 200 {object} models.GameCardGoodsStockListResp +// @Router /api/v1/stock/list [post] func GameCardGoodsStockInfoList(c *gin.Context) { req := &models.GameCardGoodsStockListReq{} if c.ShouldBindJSON(&req) != nil { @@ -19,7 +27,7 @@ func GameCardGoodsStockInfoList(c *gin.Context) { app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") return } - resp, err := req.List() + resp, err := req.List(c) if err != nil { logger.Errorf("err:", logger.Field("err", err)) app.Error(c, http.StatusInternalServerError, err, "查询失败") @@ -29,7 +37,7 @@ func GameCardGoodsStockInfoList(c *gin.Context) { //ret := map[string]interface{}{ // "count": count, // "list": list, - // "pageIndex": req.Page, + // "pageIndex": req.PageIndex, // "total_page": req.PageSize, //} app.OK(c, resp, "") @@ -222,7 +230,14 @@ func CannibalizeTaskPutInStorage(c *gin.Context) { app.OK(c, nil, "发货成功") } -// 5.调拨任务列表 +// CannibalizeTaskList 查询游戏卡库存调拨 +// @Summary 查询游戏卡库存调拨 +// @Tags 租卡系统-库存管理 +// @Produce json +// @Accept json +// @Param request body models.CannibalizeTaskListReq true "查询游戏卡库存调拨" +// @Success 200 {object} models.CannibalizeTaskListResp +// @Router /api/v1/stock/cannibalize_task/list [post] func CannibalizeTaskList(c *gin.Context) { req := models.CannibalizeTaskListReq{} if c.ShouldBindJSON(&req) != nil { @@ -230,7 +245,7 @@ func CannibalizeTaskList(c *gin.Context) { app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") return } - resp, err := req.GetCannibalizeTaskList() + resp, err := req.GetCannibalizeTaskList(c) if err != nil { logger.Error("err:", logger.Field("err", err)) app.Error(c, http.StatusInternalServerError, err, "任务列表错误") diff --git a/app/admin/apis/usermanage/user.go b/app/admin/apis/usermanage/user.go index 5a0df21..b7a7a73 100644 --- a/app/admin/apis/usermanage/user.go +++ b/app/admin/apis/usermanage/user.go @@ -118,7 +118,7 @@ func NewUserList(c *gin.Context) { } fmt.Printf("req: %+v \n", req) - ret, err := models.GetNewUserList(req) + ret, err := models.GetNewUserList(req, c) if err != nil { logger.Errorf("err:", logger.Field("err", err)) app.Error(c, http.StatusInternalServerError, err, "查询失败") @@ -938,10 +938,14 @@ func NewUserInviteRecordList(c *gin.Context) { return } - resp, err := req.NewList() + resp, err := req.NewList(c) if err != nil { logger.Errorf("err:", logger.Field("err", err)) - app.Error(c, http.StatusInternalServerError, err, "查询失败") + if err.Error() == "您没有该门店权限" { + app.Error(c, http.StatusInternalServerError, err, err.Error()) + } else { + app.Error(c, http.StatusInternalServerError, err, "查询失败") + } return } diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index 05b2d3e..a7d4010 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -291,6 +291,7 @@ type ErpCommodityListReq struct { ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 ErpCategoryId uint32 `json:"erp_category_id"` // 商品分类id IMEI string `json:"imei"` // 串码 + ErpBarcode string `json:"erp_barcode"` // 商品条码 ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id PageIndex int `json:"pageIndex"` // 页码 PageSize int `json:"pageSize"` // 每页展示数据条数 @@ -337,6 +338,9 @@ func (m *ErpCommodityListReq) List() (*ErpCommodityListResp, error) { if m.ErpSupplierId != 0 { qs = qs.Where("erp_supplier_id=?", m.ErpSupplierId) } + if m.ErpBarcode != "" { + qs = qs.Where("erp_barcode=?", m.ErpBarcode) + } var count int64 err := qs.Count(&count).Error @@ -456,6 +460,66 @@ func SortCommodities(commodities []ErpCommodity) { sort.SliceStable(commodities, less) } +// SortReportByAllotDataCommodities 对商品数组进行排序 +func SortReportByAllotDataCommodities(commodities []ReportByAllotData) { + // 定义排序函数 + less := func(i, j int) bool { + // 解析商品编号,提取分类编号和商品编号的数字部分 + catNumI, subCatNumI, threeSubCatNumI, itemNumI := parseSerialNumber(commodities[i].CommoditySerialNumber) + catNumJ, subCatNumJ, threeSubCatNumJ, itemNumJ := parseSerialNumber(commodities[j].CommoditySerialNumber) + + // 按照分类编号从小到大排序 + if catNumI != catNumJ { + return catNumI < catNumJ + } + + // 如果分类编号相同,按照具体分类下的商品编号递增排序 + if subCatNumI != subCatNumJ { + return subCatNumI < subCatNumJ + } + + if threeSubCatNumI != threeSubCatNumJ { + return threeSubCatNumI < threeSubCatNumJ + } + + // 如果具体分类编号也相同,按照商品编号递增排序 + return itemNumI < itemNumJ + } + + // 调用排序函数进行排序 + sort.SliceStable(commodities, less) +} + +// SortReportByOtherDataCommodities 对商品数组进行排序 +func SortReportByOtherDataCommodities(commodities []ReportByOtherData) { + // 定义排序函数 + less := func(i, j int) bool { + // 解析商品编号,提取分类编号和商品编号的数字部分 + catNumI, subCatNumI, threeSubCatNumI, itemNumI := parseSerialNumber(commodities[i].CommoditySerialNumber) + catNumJ, subCatNumJ, threeSubCatNumJ, itemNumJ := parseSerialNumber(commodities[j].CommoditySerialNumber) + + // 按照分类编号从小到大排序 + if catNumI != catNumJ { + return catNumI < catNumJ + } + + // 如果分类编号相同,按照具体分类下的商品编号递增排序 + if subCatNumI != subCatNumJ { + return subCatNumI < subCatNumJ + } + + if threeSubCatNumI != threeSubCatNumJ { + return threeSubCatNumI < threeSubCatNumJ + } + + // 如果具体分类编号也相同,按照商品编号递增排序 + return itemNumI < itemNumJ + } + + // 调用排序函数进行排序 + sort.SliceStable(commodities, less) +} + // parseSerialNumber 解析商品编号,提取分类编号、具体分类编号和商品编号的数字部分 func parseSerialNumber(serialNumber string) (catNum, subCatNum, threeSubCatNum, itemNum int) { if len(serialNumber) < 3 { @@ -529,7 +593,7 @@ func (m *ErpCategoryListReq) List() (*ErpCategoryListResp, error) { // qs = qs.Where("pid", m.Pid) //} //var count int64 - //err := qs.Count(&count).Error + //err := qs.Total(&count).Error //if err != nil { // logger.Error("count err:", err) // return resp, err @@ -1957,7 +2021,7 @@ func (m *ErpStockListReq) allCommodityList(c *gin.Context) (*ErpStockListResp, e var count int64 err := orm.Eloquent.Debug().Table("(?) AS subquery", es).Count(&count).Error - //err := es.Count(&count).Error + //err := es.Total(&count).Error if err != nil { logger.Error("commodityList count err", logger.Field("err", err)) return resp, err diff --git a/app/admin/models/config.go b/app/admin/models/config.go index 284212e..415c690 100644 --- a/app/admin/models/config.go +++ b/app/admin/models/config.go @@ -91,7 +91,7 @@ func (e *SysConfig) GetPage(pageSize int, pageIndex int) ([]SysConfig, int, erro if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/cooperative_business.go b/app/admin/models/cooperative_business.go index 3fed31f..97e1225 100644 --- a/app/admin/models/cooperative_business.go +++ b/app/admin/models/cooperative_business.go @@ -1,10 +1,13 @@ package models import ( + "errors" "fmt" "github.com/codinl/go-logger" + "github.com/gin-gonic/gin" "github.com/xuri/excelize/v2" orm "go-admin/common/global" + "go-admin/tools" "go-admin/tools/config" "gorm.io/gorm" "regexp" @@ -733,13 +736,34 @@ type CooperativeMemberPromotionStatisticListResp struct { ExportUrl string `json:"export_url"` // 导出excel地址 } -func (m *CooperativeMemberPromotionStatisticReq) List() (*CooperativeMemberPromotionStatisticListResp, error) { +func (m *CooperativeMemberPromotionStatisticReq) List(c *gin.Context) (*CooperativeMemberPromotionStatisticListResp, error) { resp := &CooperativeMemberPromotionStatisticListResp{ PageIndex: m.Page, PageSize: m.PageSize, } list := make([]CooperativeMemberPromotionStatistic, 0) + // 非管理员才判断所属门店 + var validStoreList []uint32 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, err + } + + // 返回sysUser未过期的门店id列表 + validStoreList = GetValidStoreIDs(sysUser.StoreData) + if m.StoreId != 0 { + if !Contains(validStoreList, m.StoreId) { + return nil, errors.New("您没有该门店权限") + } + } else { + if len(validStoreList) == 0 { + return nil, errors.New("用户未绑定门店") + } + } + } + page := m.Page - 1 if page < 0 { page = 0 @@ -780,6 +804,13 @@ func (m *CooperativeMemberPromotionStatisticReq) List() (*CooperativeMemberPromo var memberDayStorePromotions []CooperativeMemberPromotionStoreDay qs = orm.Eloquent.Table("cooperative_member_promotion_store_day").Where("store_id=?", m.StoreId). Where("cooperative_business_id=?", m.CooperativeBusinessId) + if len(validStoreList) > 0 { + if len(validStoreList) == 1 { + qs = qs.Where("store_id = ?", validStoreList[0]) + } else { + qs = qs.Where("store_id IN (?)", validStoreList) + } + } if !startTime.IsZero() { qs = qs.Where("created_at>?", startTime) } @@ -795,6 +826,13 @@ func (m *CooperativeMemberPromotionStatisticReq) List() (*CooperativeMemberPromo } else { var memberDayPromotions []CooperativeMemberPromotionDay qs = orm.Eloquent.Table("cooperative_member_promotion_day").Where("cooperative_business_id=?", m.CooperativeBusinessId) + if len(validStoreList) > 0 { + if len(validStoreList) == 1 { + qs = qs.Where("store_id = ?", validStoreList[0]) + } else { + qs = qs.Where("store_id IN (?)", validStoreList) + } + } if !startTime.IsZero() { qs = qs.Where("created_at>?", startTime) } @@ -812,6 +850,13 @@ func (m *CooperativeMemberPromotionStatisticReq) List() (*CooperativeMemberPromo if m.StoreId != 0 { var memberStorePromotions []CooperativeMemberPromotionStore qs = orm.Eloquent.Table("cooperative_member_promotion_store").Where("cooperative_business_id=?", m.CooperativeBusinessId) + if len(validStoreList) > 0 { + if len(validStoreList) == 1 { + qs = qs.Where("store_id = ?", validStoreList[0]) + } else { + qs = qs.Where("store_id IN (?)", validStoreList) + } + } if m.StoreId != 0 { qs = qs.Where("store_id=?", m.StoreId) } @@ -833,6 +878,13 @@ func (m *CooperativeMemberPromotionStatisticReq) List() (*CooperativeMemberPromo } else { var memberPromotions []CooperativeMemberPromotion qs = orm.Eloquent.Table("cooperative_member_promotion").Where("cooperative_business_id=?", m.CooperativeBusinessId) + if len(validStoreList) > 0 { + if len(validStoreList) == 1 { + qs = qs.Where("store_id = ?", validStoreList[0]) + } else { + qs = qs.Where("store_id IN (?)", validStoreList) + } + } //if m.Date != "" { // qs = qs.Where("date=?", m.Date) //} diff --git a/app/admin/models/decision.go b/app/admin/models/decision.go index 25cedd6..f4b5643 100644 --- a/app/admin/models/decision.go +++ b/app/admin/models/decision.go @@ -10,6 +10,7 @@ import ( "go-admin/tools" "go-admin/tools/config" "math" + "sort" "strconv" "sync" "time" @@ -231,7 +232,35 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR // 从通道中接收结果 var sumData DecisionSumData + commodityMap := make(map[uint32]DecisionReportData) for data := range ch { + if existing, found := commodityMap[data.CommodityId]; found { + // Merge data if the commodity already exists in the map + existing.BeginStock += data.BeginStock + existing.BeginAmount += data.BeginAmount + existing.PurchaseStock += data.PurchaseStock + existing.PurchaseReturn += data.PurchaseReturn + existing.OrderSale += data.OrderSale + existing.OrderReject += data.OrderReject + existing.AllotIn += data.AllotIn + existing.AllotWaitIn += data.AllotWaitIn + existing.AllotOut += data.AllotOut + existing.AllotWaitOut += data.AllotWaitOut + existing.ProductIn += data.ProductIn + existing.SystemOut += data.SystemOut + existing.CheckIn += data.CheckIn + existing.CheckOut += data.CheckOut + existing.EndStock += data.EndStock + existing.EndAmount += data.EndAmount + + commodityMap[data.CommodityId] = existing + } else { + // If not found, add new entry to the map + commodityMap[data.CommodityId] = data + } + } + + for _, data := range commodityMap { sumData.TotalBeginStock += data.BeginStock sumData.TotalBeginAmount += data.BeginAmount sumData.TotalPurchaseStock += data.PurchaseStock @@ -255,8 +284,16 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR reportList = append(reportList, data) } + // 排序规则:商品编号小 + sort.Slice(reportList, func(i, j int) bool { + if reportList[i].CommodityId != reportList[j].CommodityId { + return reportList[i].CommodityId < reportList[j].CommodityId + } + return true + }) + resp.SumData = sumData - resp.Total = int(count) + resp.Total = len(reportList) if m.IsExport == 1 { resp.List = reportList diff --git a/app/admin/models/dictdata.go b/app/admin/models/dictdata.go index 29a0f03..1545d39 100644 --- a/app/admin/models/dictdata.go +++ b/app/admin/models/dictdata.go @@ -123,7 +123,7 @@ func (e *DictData) GetPage(pageSize int, pageIndex int) ([]DictData, int, error) if err := table.Order("dict_sort").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/dicttype.go b/app/admin/models/dicttype.go index cf3f687..e918f41 100644 --- a/app/admin/models/dicttype.go +++ b/app/admin/models/dicttype.go @@ -109,7 +109,7 @@ func (e *DictType) GetPage(pageSize int, pageIndex int) ([]DictType, int, error) if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Count(&count) + //table.Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/erp_order.go b/app/admin/models/erp_order.go index 2e93c24..feb999f 100644 --- a/app/admin/models/erp_order.go +++ b/app/admin/models/erp_order.go @@ -1087,8 +1087,10 @@ func ErpOrderRetailDetailSetCommodity(list []ErpOrder) { list[i].TotalRetailPrice = -math.Abs(list[i].TotalRetailPrice) list[i].TotalAmount = -math.Abs(list[i].TotalAmount) list[i].TotalCount = -int32(math.Abs(float64(list[i].TotalCount))) - list[i].TotalSalesProfit = -math.Abs(list[i].TotalSalesProfit) - list[i].TotalStaffProfit = -math.Abs(list[i].TotalStaffProfit) + //list[i].TotalSalesProfit = -math.Abs(list[i].TotalSalesProfit) + //list[i].TotalStaffProfit = -math.Abs(list[i].TotalStaffProfit) + list[i].TotalSalesProfit = -list[i].TotalSalesProfit + list[i].TotalStaffProfit = -list[i].TotalStaffProfit list[i].TotalDiscount = -math.Abs(list[i].TotalDiscount) list[i].VmCount = -uint32(math.Abs(float64(list[i].VmCount))) list[i].StorePer = -math.Abs(list[i].StorePer) @@ -2303,9 +2305,9 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR // data.ErpCommodityName = item.ErpCommodityName // data.ErpCategoryId = item.ErpCategoryId // data.ErpCategoryName = item.ErpCategoryName - // data.Count = item.Count + // data.Total = item.Total // data.SalesAmount = item.ReceivedAmount - // data.SalesCost = float64(item.WholesalePrice * item.Count) + // data.SalesCost = float64(item.WholesalePrice * item.Total) // data.SalesMargin = data.SalesAmount - data.SalesCost // data.GrossMargins = float64ToPercentage(data.SalesMargin / data.SalesAmount) // if data.RetailType == RetailTypeRejected { @@ -2315,7 +2317,7 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR // } // list = append(list, data) // - // resp.TotalCount += data.Count + // resp.TotalCount += data.Total // resp.TotalSalesAmount += data.SalesAmount // resp.TotalSalesCost += data.SalesCost // resp.TotalSalesMargin += data.SalesMargin @@ -2337,7 +2339,7 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR var salesAmount, salesCost, salesMargin float64 if item.RetailType == RetailTypeRejected { nCount = -int32(item.Count) - salesAmount = -item.ReceivedAmount + salesAmount = -item.RejectedAmount // 退货订单要以实际退货金额为准 salesCost = -float64(int32(item.WholesalePrice) * item.Count) salesMargin = -(item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count)) } else { @@ -2374,7 +2376,7 @@ func QueryRetailMargin(req *ErpOrderRetailMarginReq, c *gin.Context) (*ErpOrderR SalesCost: float64(int32(item.WholesalePrice) * item.Count), SalesMargin: item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count), GrossMargins: "--", - //GrossMargins: float64ToPercentage((item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count)) / item.ReceivedAmount), + //GrossMargins: float64ToPercentage((item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Total)) / item.ReceivedAmount), } if item.ReceivedAmount != 0 { data.GrossMargins = float64ToPercentage((item.ReceivedAmount - float64(int32(item.WholesalePrice)*item.Count)) / item.ReceivedAmount) @@ -2826,10 +2828,10 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp } } if req.Salesman != 0 { // 销售员 - qs = qs.Where("JSON_CONTAINS(erp_order.salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman)) - es = es.Where("JSON_CONTAINS(erp_order.salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman)) - orderSumQs = orderSumQs.Where("JSON_CONTAINS(eo.salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman)) - rejectedOrderSumQs = rejectedOrderSumQs.Where("JSON_CONTAINS(eo.salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman)) + qs = qs.Where("JSON_CONTAINS(erp_order.salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman)) + es = es.Where("JSON_CONTAINS(erp_order.salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman)) + orderSumQs = orderSumQs.Where("JSON_CONTAINS(eo.salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman)) + rejectedOrderSumQs = rejectedOrderSumQs.Where("JSON_CONTAINS(eo.salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman)) } if req.StartTime != "" { // 审核开始时间 parse, err := time.Parse(QueryTimeFormat, req.StartTime) @@ -2869,14 +2871,14 @@ func queryRetailDetailByJoin(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp // 销售订单的汇总数据 var sumData RetailDetailTotalData - sumData, err = getRetailDetailTotalDataJoinErpOrder(orderSumQs, RetailTypeSale) + sumData, err = getRetailDetailTotalDataJoinErpOrderSale(orderSumQs, RetailTypeSale) if err != nil { logger.Error("query sum data err:", logger.Field("err", err)) return resp, err } // 退货订单的汇总数据 var rejectedSumData RetailDetailTotalData - rejectedSumData, err = getRetailDetailTotalDataJoinErpOrder(rejectedOrderSumQs, RetailTypeRejected) + rejectedSumData, err = getRetailDetailTotalDataJoinErpOrderRejected(rejectedOrderSumQs, RetailTypeRejected) if err != nil { logger.Error("query sum data err:", logger.Field("err", err)) return resp, err @@ -3043,8 +3045,8 @@ func packData(result []RetailDetailByJoin) []ErpOrder { order.TotalRetailPrice = item.TotalRetailPrice order.TotalAmount = item.TotalAmount order.TotalCount = item.TotalCount - //order.TotalSalesProfit = item.TotalSalesProfit - //order.TotalStaffProfit = item.TotalStaffProfit + order.TotalSalesProfit = item.TotalSalesProfit + order.TotalStaffProfit = item.TotalStaffProfit order.VmCount = item.VmCount order.SaleOrderId = item.SaleOrderId order.PayStatus = item.PayStatus @@ -3059,8 +3061,8 @@ func packData(result []RetailDetailByJoin) []ErpOrder { order.TotalRetailPrice = -math.Abs(order.TotalRetailPrice) order.TotalAmount = -math.Abs(order.TotalAmount) order.TotalCount = -int32(math.Abs(float64(order.TotalCount))) - order.TotalSalesProfit = -math.Abs(order.TotalSalesProfit) - order.TotalStaffProfit = -math.Abs(order.TotalStaffProfit) + order.TotalSalesProfit = -order.TotalSalesProfit + order.TotalStaffProfit = -order.TotalStaffProfit order.TotalDiscount = -math.Abs(order.TotalDiscount) order.VmCount = -uint32(math.Abs(float64(order.VmCount))) order.StorePer = -math.Abs(order.StorePer) @@ -3183,7 +3185,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp } } if req.Salesman != 0 { // 销售员 - qs = qs.Where("JSON_CONTAINS(salesman_list, ?)", fmt.Sprintf(`{"uid":%d}`, req.Salesman)) + qs = qs.Where("JSON_CONTAINS(salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman)) } if req.StartTime != "" { // 审核开始时间 parse, err := time.Parse(QueryTimeFormat, req.StartTime) @@ -3208,7 +3210,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp // 销售订单的汇总数据 orderSumQs := qs var sumData RetailDetailTotalData - sumData, err = getRetailDetailTotalData(orderSumQs, RetailTypeSale) + sumData, err = getRetailDetailTotalDataSale(orderSumQs, RetailTypeSale) if err != nil { logger.Error("query sum data err:", logger.Field("err", err)) return resp, err @@ -3216,7 +3218,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp // 退货订单的汇总数据 var rejectedSumData RetailDetailTotalData rejectedOrderSumQs := qs - rejectedSumData, err = getRetailDetailTotalData(rejectedOrderSumQs, RetailTypeRejected) + rejectedSumData, err = getRetailDetailTotalDataRejected(rejectedOrderSumQs, RetailTypeRejected) if err != nil { logger.Error("query sum data err:", logger.Field("err", err)) return resp, err @@ -3341,7 +3343,7 @@ func roundValues(data *RetailDetailTotalData, totalPerData *TotalPerData, cashie } // 查询零售订单的汇总数据 -func getRetailDetailTotalData(qs *gorm.DB, retailType string) (RetailDetailTotalData, error) { +func getRetailDetailTotalDataSale(qs *gorm.DB, retailType string) (RetailDetailTotalData, error) { var sumData RetailDetailTotalData err := qs.Debug().Select("SUM(erp_order_commodity.count) as count, "+ "SUM(erp_order_commodity.retail_price) as retail_price, "+ @@ -3369,7 +3371,35 @@ func getRetailDetailTotalData(qs *gorm.DB, retailType string) (RetailDetailTotal } // 查询零售订单的汇总数据 -func getRetailDetailTotalDataJoinErpOrder(qs *gorm.DB, retailType string) (RetailDetailTotalData, error) { +func getRetailDetailTotalDataRejected(qs *gorm.DB, retailType string) (RetailDetailTotalData, error) { + var sumData RetailDetailTotalData + err := qs.Debug().Select("SUM(erp_order_commodity.count) as count, "+ + "SUM(erp_order_commodity.retail_price) as retail_price, "+ + "SUM(erp_order_commodity.sale_price) as sale_price, "+ + "SUM(erp_order_commodity.sale_discount) as sale_discount, "+ + "SUM(erp_order_commodity.member_discount) as member_discount, "+ + "SUM(erp_order_commodity.rejected_amount) as Amount, "+ + "SUM(erp_order_commodity.wholesale_price) as wholesale_price, "+ + "(SUM(erp_order_commodity.wholesale_price) + SUM(erp_order_commodity.staff_cost_price)) as staff_price, "+ + "SUM(erp_order_commodity.sales_profit) as sales_profit, "+ + "SUM(erp_order_commodity.staff_profit) as staff_profit, "+ + "SUM(erp_order.total_retail_price) as total_retail_price, "+ + "SUM(erp_order.total_discount) as total_discount, "+ + "SUM(erp_order.total_amount) as total_amount, "+ + "SUM(erp_order.total_sales_profit) as total_sales_profit, "+ + "SUM(erp_order.total_staff_profit) as total_staff_profit, "+ + "SUM(erp_order.store_per) as store_per"). + Joins("JOIN erp_order_commodity ON erp_order_commodity.erp_order_id = erp_order.id and erp_order.retail_type = ?", retailType). + Scan(&sumData).Error + if err != nil { + logger.Error("query sum data err:", logger.Field("err", err)) + return sumData, err + } + return sumData, nil +} + +// 查询零售订单的汇总数据 +func getRetailDetailTotalDataJoinErpOrderSale(qs *gorm.DB, retailType string) (RetailDetailTotalData, error) { var sumData RetailDetailTotalData qs = qs.Where("eo.retail_type = ?", retailType) // 添加额外的条件 err := qs.Debug().Select("SUM(oc.count) as count, " + @@ -3377,7 +3407,7 @@ func getRetailDetailTotalDataJoinErpOrder(qs *gorm.DB, retailType string) (Retai "SUM(oc.sale_price) as sale_price, " + "SUM(oc.sale_discount) as sale_discount, " + "SUM(oc.member_discount) as member_discount, " + - "SUM(oc.Amount) as Amount, " + + "SUM(oc.amount) as Amount, " + "SUM(oc.wholesale_price) as wholesale_price, " + "(SUM(oc.wholesale_price) + SUM(oc.staff_cost_price)) as staff_price, " + "(SUM(oc.Amount) - SUM(oc.wholesale_price)) as sales_profit, " + @@ -3390,6 +3420,28 @@ func getRetailDetailTotalDataJoinErpOrder(qs *gorm.DB, retailType string) (Retai return sumData, nil } +// 查询零售订单的汇总数据 +func getRetailDetailTotalDataJoinErpOrderRejected(qs *gorm.DB, retailType string) (RetailDetailTotalData, error) { + var sumData RetailDetailTotalData + qs = qs.Where("eo.retail_type = ?", retailType) // 添加额外的条件 + err := qs.Debug().Select("SUM(oc.count) as count, " + + "SUM(oc.retail_price) as retail_price, " + + "SUM(oc.sale_price) as sale_price, " + + "SUM(oc.sale_discount) as sale_discount, " + + "SUM(oc.member_discount) as member_discount, " + + "SUM(oc.rejected_amount) as Amount, " + + "SUM(oc.wholesale_price) as wholesale_price, " + + "(SUM(oc.wholesale_price) + SUM(oc.staff_cost_price)) as staff_price, " + + "SUM(oc.sales_profit) as sales_profit, " + + "SUM(oc.staff_profit) as staff_profit"). + Scan(&sumData).Error + if err != nil { + logger.Error("query sum data err:", logger.Field("err", err)) + return sumData, err + } + return sumData, nil +} + // 查询零售订单的提成汇总数据 func getTotalPerData(qs *gorm.DB, retailType string) (TotalPerData, error) { var totalPerData TotalPerData @@ -3444,6 +3496,17 @@ func subtractRetailData(sumData, rejectedSumData RetailDetailTotalData) RetailDe TotalStaffProfit: sumData.TotalStaffProfit - rejectedSumData.TotalStaffProfit, StorePer: sumData.StorePer - rejectedSumData.StorePer, } + //if sumData.TotalSalesProfit != 0 { + // result.TotalSalesProfit = sumData.TotalSalesProfit - rejectedSumData.TotalSalesProfit + //} else { + // result.TotalSalesProfit = rejectedSumData.TotalSalesProfit + //} + //if sumData.TotalStaffProfit != 0 { + // result.TotalStaffProfit = sumData.TotalStaffProfit - rejectedSumData.TotalStaffProfit + //} else { + // result.TotalStaffProfit = rejectedSumData.TotalStaffProfit + //} + return result } @@ -3775,6 +3838,11 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { if err != nil { return nil, err } + } else { // 零售退货单,需校验退货商品是否是本门店售卖商品,同一个退货单中只能添加同一销售订单的商品 + err = checkRejectedOrderRule(req) + if err != nil { + return nil, err + } } jCashier, err := json.Marshal(req.Cashiers) @@ -3925,13 +3993,15 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { // 订单总优惠 erpOrder.TotalDiscount += v.MemberDiscount + v.SaleDiscount - // 销售毛利 // todo 待测试核实 备注:产品说有亏本销售的情况,不用判断毛利是否<0 + // 销售毛利:实际退货金额-采购金额(需要先取负值,然后再计算),结果等同于:采购金额-实际退货金额 + //salesProfit := (-v.RejectedAmount) - (-float64(int32(v.WholesalePrice) * v.Count)) salesProfit := v.RejectedAmount - float64(int32(v.WholesalePrice)*v.Count) //if salesProfit < 0 { // logger.Error("rejected salesProfit less than 0") // return nil, errors.New("商品销售毛利小于0,请检查") //} // 员工毛利 // todo 待测试核实 + //StaffProfit := salesProfit - (-float64(int32(v.StaffCostPrice) * v.Count)) StaffProfit := salesProfit - float64(int32(v.StaffCostPrice)*v.Count) //if StaffProfit < 0 { // logger.Error("rejected TotalStaffProfit less than 0") @@ -4137,6 +4207,26 @@ func checkOrderCommodityStock(req *ErpOrderCreateReq) error { return nil } +// 退货校验 +// (1)校验商品是否是当前用户购买 +// (2)校验退货商品是否是本门店售卖商品 +// (3)同一个退货单中只能添加同一销售订单的商品 +func checkRejectedOrderRule(req *ErpOrderCreateReq) error { + if req.RetailType != RetailTypeRejected { + return nil + } + + if len(req.ErpOrderCommodities) == 0 { + return errors.New("未添加退货商品") + } + + //for _, item := range req.ErpOrderCommodities { + // // 查询退货商品之前的销售情况 + //} + + return nil +} + // updateCommodityData 更新订单商品信息 func updateCommodityData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) error { // 查询现有的零售订单信息 @@ -4163,6 +4253,7 @@ func updateCommodityData(gdb *gorm.DB, orderId uint32, req *ErpOrderCreateReq) e } } if !found { + reqCommodity.ID = 0 newCommodities = append(newCommodities, reqCommodity) } } diff --git a/app/admin/models/file.go b/app/admin/models/file.go index 741610b..e6e7e0c 100644 --- a/app/admin/models/file.go +++ b/app/admin/models/file.go @@ -1208,7 +1208,7 @@ func getNumberOnCategory(categoryId uint32) int64 { // var count int64 // orm.Eloquent.Debug().Model(&ErpCommodity{}). // Where("erp_category_id = ?", category.ID). -// Count(&count) +// Total(&count) // // serialNumber := fmt.Sprintf("%s%04d", category.Number, count+1) // fmt.Println("商品编号:", serialNumber) @@ -1253,16 +1253,17 @@ func GenerateSerialNumber(categoryId uint32) (string, error) { } // UpdateErpStockAmountInfo 更新库存和库存商品表的金额:指导零售价、最低零售价 -func UpdateErpStockAmountInfo(begin *gorm.DB, req *CommodityEditRequest, barCode string, category *ErpCategory) error { +func UpdateErpStockAmountInfo(begin *gorm.DB, req *CommodityEditRequest, barCode, serial_number string, category *ErpCategory) error { if category != nil && category.ID != 0 { // 分类信息有值 // 更新库存表 err := begin.Table("erp_stock").Where("erp_commodity_id=?", req.Id). Updates(map[string]interface{}{ - "retail_price": req.RetailPrice, - "min_retail_price": req.MinRetailPrice, - "erp_category_id": category.ID, - "erp_category_name": category.Name, - "erp_commodity_name": req.Name, + "retail_price": req.RetailPrice, + "min_retail_price": req.MinRetailPrice, + "erp_category_id": category.ID, + "erp_category_name": category.Name, + "erp_commodity_name": req.Name, + "commodity_serial_number": serial_number, }).Error if err != nil { return err @@ -1274,10 +1275,11 @@ func UpdateErpStockAmountInfo(begin *gorm.DB, req *CommodityEditRequest, barCode "retail_price": req.RetailPrice, "min_retail_price": req.MinRetailPrice, //"staff_cost_price": staffCostPrice, - "erp_barcode": barCode, - "erp_category_id": category.ID, - "erp_category_name": category.Name, - "erp_commodity_name": req.Name, + "erp_barcode": barCode, + "erp_category_id": category.ID, + "erp_category_name": category.Name, + "erp_commodity_name": req.Name, + "commodity_serial_number": serial_number, }).Error if err != nil { return err diff --git a/app/admin/models/game_card.go b/app/admin/models/game_card.go index 220722a..da87171 100644 --- a/app/admin/models/game_card.go +++ b/app/admin/models/game_card.go @@ -4,9 +4,11 @@ import ( "encoding/json" "errors" "fmt" + "github.com/gin-gonic/gin" "github.com/xuri/excelize/v2" orm "go-admin/common/global" "go-admin/logger" + "go-admin/tools" "gorm.io/gorm" "strings" "time" @@ -114,12 +116,12 @@ type GetGameCardGoodsListReq struct { } type GetGameCardGoodsListResp struct { List []GameCardGoods `json:"list"` - Count int `json:"count"` - PageIndex int `json:"page_index"` + Total int `json:"total"` + PageIndex int `json:"pageIndex"` TotalPage int `json:"total_page"` } -func (m *GetGameCardGoodsListReq) GetGameCardGoodsList() (*GetGameCardGoodsListResp, error) { +func (m *GetGameCardGoodsListReq) GetGameCardGoodsList(c *gin.Context) (*GetGameCardGoodsListResp, error) { var ( cardGoods = make([]GameCardGoods, 0) totalPage uint32 @@ -134,6 +136,33 @@ func (m *GetGameCardGoodsListReq) GetGameCardGoodsList() (*GetGameCardGoodsListR resp := &GetGameCardGoodsListResp{List: cardGoods, PageIndex: m.Page} fmt.Println("GetGameCardGoodsListReq:", m) gdb := orm.Eloquent.Table("game_card_goods") + + // 非管理员才判断所属门店 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, err + } + + // 返回sysUser未过期的门店id列表 + storeList := GetValidStoreIDs(sysUser.StoreData) + if m.StoreId != 0 { + if !Contains(storeList, uint32(m.StoreId)) { + return nil, errors.New("您没有该门店权限") + } + } else { + if len(storeList) > 0 { + if len(storeList) == 1 { + gdb = gdb.Where("store_id = ?", storeList[0]) + } else { + gdb = gdb.Where("store_id IN (?)", storeList) + } + } else { + return nil, errors.New("用户未绑定门店") + } + } + } + if m.Status != 0 { gdb = gdb.Where("status=?", m.Status) } @@ -152,7 +181,7 @@ func (m *GetGameCardGoodsListReq) GetGameCardGoodsList() (*GetGameCardGoodsListR logger.Errorf(err.Error()) return resp, err } - resp.Count = int(count) + resp.Total = int(count) err = gdb.Order("created_at DESC").Offset(m.Page * m.PageSize).Limit(m.PageSize).Find(&cardGoods).Error if err != nil && err != RecordNotFound { logger.Errorf(err.Error()) @@ -195,14 +224,14 @@ type CooperativeGameCardGoodsReq struct { Status int `json:"status"` GameCardId int `json:"game_card_id"` SerialNumber string `json:"serial_number" ` // 编号 - Page int `json:"pageIndex"` + PageIndex int `json:"pageIndex"` PageSize int `json:"pageSize"` } type CooperativeGameCardGoodsResp struct { List []GameCardGoods `json:"list"` - Count int `json:"count"` - PageIndex int `json:"page_index"` - TotalPage int `json:"total_page"` + Total int `json:"total"` + PageIndex int `json:"pageIndex"` + PageSize int `json:"pageSize"` } func (m *CooperativeGameCardGoodsReq) List() (*CooperativeGameCardGoodsResp, error) { @@ -210,19 +239,24 @@ func (m *CooperativeGameCardGoodsReq) List() (*CooperativeGameCardGoodsResp, err cardGoods = make([]GameCardGoods, 0) totalPage uint32 ) - m.Page -= 1 - if m.Page < 0 { - m.Page = 0 + m.PageIndex -= 1 + if m.PageIndex < 0 { + m.PageIndex = 0 } if m.PageSize == 0 { m.PageSize = 10 } - resp := &CooperativeGameCardGoodsResp{List: cardGoods, PageIndex: m.Page} + resp := &CooperativeGameCardGoodsResp{ + List: cardGoods, + PageIndex: m.PageIndex, + PageSize: m.PageSize, + } fmt.Println("GetGameCardGoodsListReq:", m) gdb := orm.Eloquent.Table("game_card_goods") if m.Status != 0 { gdb = gdb.Where("status=?", m.Status) } + if m.StoreId != 0 { gdb = gdb.Where("store_id=?", m.StoreId) } else { @@ -247,8 +281,8 @@ func (m *CooperativeGameCardGoodsReq) List() (*CooperativeGameCardGoodsResp, err logger.Errorf(err.Error()) return resp, err } - resp.Count = int(count) - err = gdb.Order("created_at DESC").Offset(m.Page * m.PageSize).Limit(m.PageSize).Find(&cardGoods).Error + resp.Total = int(count) + err = gdb.Order("created_at DESC").Offset(m.PageIndex * m.PageSize).Limit(m.PageSize).Find(&cardGoods).Error if err != nil && err != RecordNotFound { logger.Errorf(err.Error()) return resp, err @@ -279,7 +313,7 @@ func (m *CooperativeGameCardGoodsReq) List() (*CooperativeGameCardGoodsResp, err } totalPage = uint32(int(count)/m.PageSize + 1) - resp.TotalPage = int(totalPage) + resp.PageSize = int(totalPage) resp.List = cardGoods return resp, nil } @@ -764,25 +798,24 @@ type GameCardGoodsStockListReq struct { } type GameCardGoodsStockListResp struct { - PageSize int `json:"pageSize"` - List []GameCardGoodsStockInfo `json:"list"` - Count int `json:"count"` - PageIndex int `json:"pageIndex"` - TotalPage int `json:"total_page"` - - CardTotalCount int `json:"card_total_count"` - CardTotalStock int `json:"card_total_stock"` - CardHoldCount int `json:"card_hold_count"` + PageSize int `json:"pageSize"` + List []GameCardGoodsStockInfo `json:"list"` + Count int `json:"total"` + PageIndex int `json:"pageIndex"` + TotalPage int `json:"total_page"` + CardTotalCount int `json:"card_total_count"` + CardTotalStock int `json:"card_total_stock"` + CardHoldCount int `json:"card_hold_count"` //"count": count, //"list": list, - //"pageIndex": req.Page, + //"pageIndex": req.PageIndex, //"total_page": req.PageSize, //StoreId uint64 `json:"store_id" ` // 门店id //GameCardId uint64 `json:"game_card_id"` // 游戏卡id //GameCardName string `json:"game_card_name"` // 游戏卡 } -func (m *GameCardGoodsStockListReq) List() (*GameCardGoodsStockListResp, error) { +func (m *GameCardGoodsStockListReq) List(c *gin.Context) (*GameCardGoodsStockListResp, error) { resp := &GameCardGoodsStockListResp{PageIndex: m.Page, PageSize: m.PageSize} //resp.List resp.List = make([]GameCardGoodsStockInfo, 0) @@ -791,6 +824,33 @@ func (m *GameCardGoodsStockListReq) List() (*GameCardGoodsStockListResp, error) if m.GameCardId != 0 { qs = qs.Where("game_card_id", m.GameCardId) } + + // 非管理员才判断所属门店 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, err + } + + // 返回sysUser未过期的门店id列表 + storeList := GetValidStoreIDs(sysUser.StoreData) + if m.StoreId != 0 { + if !Contains(storeList, uint32(m.StoreId)) { + return nil, errors.New("您没有该门店权限") + } + } else { + if len(storeList) > 0 { + if len(storeList) == 1 { + qs = qs.Where("store_id = ?", storeList[0]) + } else { + qs = qs.Where("store_id IN (?)", storeList) + } + } else { + return nil, errors.New("用户未绑定门店") + } + } + } + if m.GameCardName != "" { var cards []GameCard err := orm.Eloquent.Table("game_card").Where("name LIKE ?", "%"+m.GameCardName+"%").Find(&cards).Error @@ -808,20 +868,20 @@ func (m *GameCardGoodsStockListReq) List() (*GameCardGoodsStockListResp, error) } qs = qs.Where("game_card_id IN (?)", gameCardIds) } - if m.CooperativeBusinessId != 0 { - var stores []Store - err := orm.Eloquent.Table("").Where("cooperative_business_id=?", m.CooperativeBusinessId).Find(&stores).Error - if err != nil { - logger.Error("stores err:", logger.Field("err", err)) - return resp, err - } - ids := make([]uint32, 0, len(stores)) - for i, _ := range stores { - ids = append(ids, stores[i].ID) - } - - qs = qs.Where("store_id in (?)", ids) - } + //if m.CooperativeBusinessId != 0 { + // var stores []Store + // err := orm.Eloquent.Table("").Where("cooperative_business_id=?", m.CooperativeBusinessId).Find(&stores).Error + // if err != nil { + // logger.Error("stores err:", logger.Field("err", err)) + // return resp, err + // } + // ids := make([]uint32, 0, len(stores)) + // for i, _ := range stores { + // ids = append(ids, stores[i].ID) + // } + // + // qs = qs.Where("store_id in (?)", ids) + //} var count int64 err := qs.Count(&count).Error if err != nil { @@ -1403,7 +1463,7 @@ func MemberExpirationReminder() { // } // // unreturned := &struct { - // Count int `json:"count"` + // Total int `json:"count"` // }{} // sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status=2 AND card_status IN (1,2,3) ;", users[i].Uid) // err := orm.Eloquent.Raw(sql).Scan(unreturned).Error @@ -1411,8 +1471,8 @@ func MemberExpirationReminder() { // logger.Error(err.Error().Error()()) // continue // } - // fmt.Println("订单数量count:", unreturned.Count) - // if unreturned.Count == 0 { + // fmt.Println("订单数量count:", unreturned.Total) + // if unreturned.Total == 0 { // continue // } // err = SmsSend(users[i].Tel, content) @@ -2379,12 +2439,38 @@ type CannibalizeTaskListResp struct { TotalPage int `json:"total_page"` } -func (m *CannibalizeTaskListReq) GetCannibalizeTaskList() (*CannibalizeTaskListResp, error) { +func (m *CannibalizeTaskListReq) GetCannibalizeTaskList(c *gin.Context) (*CannibalizeTaskListResp, error) { resp := &CannibalizeTaskListResp{ PageIndex: m.PageNum, PageSize: m.PageSize, } qs := orm.Eloquent.Table("cannibalize_stock_task") + // 非管理员才判断所属门店 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, err + } + + // 返回sysUser未过期的门店id列表 + storeList := GetValidStoreIDs(sysUser.StoreData) + if m.StoreId != 0 { + if !Contains(storeList, uint32(m.StoreId)) { + return nil, errors.New("您没有该门店权限") + } + } else { + if len(storeList) > 0 { + if len(storeList) == 1 { + qs = qs.Where("from_store_id = ?", storeList[0]).Or("to_store_id = ?", storeList[0]) + } else { + qs = qs.Where("from_store_id IN (?)", storeList).Or("to_store_id IN (?)", storeList) + } + } else { + return nil, errors.New("用户未绑定门店") + } + } + } + if m.StoreId != 0 { qs = qs.Where("from_store_id = ?", m.StoreId).Or("to_store_id = ?", m.StoreId) } @@ -2846,7 +2932,7 @@ func CannibalizePutInStorage(taskId uint32) error { // } // //var outStockCount int64 // //err = orm.Eloquent.Table("share_card_retrieve_card").Where("share_card_retrieve_id=?", retrieveCard.ShareCardRetrieveId). -// // Where("id!=?", retrieveCard.ID).Where("state", RetrieveStateOutStock).Count(&outStockCount).Error +// // Where("id!=?", retrieveCard.ID).Where("state", RetrieveStateOutStock).Total(&outStockCount).Error // //if err != nil { // // logger.Error("out stock count err:", err) // // return false diff --git a/app/admin/models/inventory_allot.go b/app/admin/models/inventory_allot.go index 8545429..8f15556 100644 --- a/app/admin/models/inventory_allot.go +++ b/app/admin/models/inventory_allot.go @@ -274,11 +274,26 @@ func AddInventoryAllot(req *InventoryAllotAddReq, sysUser *SysUser) (*ErpInvento req.Commodities[i].CategoryId = commodityInfo.ErpCategoryId req.Commodities[i].CategoryName = commodityInfo.ErpCategoryName - err = begin.Create(&req.Commodities[i]).Error - if err != nil { - begin.Rollback() - logger.Error("create allot commodity err:", logger.Field("err", err)) - return nil, err + // 如果是非串码,且数量大于1,则进行拆分 + if req.Commodities[i].IMEIType == 1 && req.Commodities[i].Count > 1 { + nCount := req.Commodities[i].Count + for j := 0; j < int(nCount); j++ { + req.Commodities[i].ID = 0 + req.Commodities[i].Count = 1 + err = begin.Create(&req.Commodities[i]).Error + if err != nil { + begin.Rollback() + logger.Error("create allot commodity err:", logger.Field("err", err)) + return nil, err + } + } + } else { // 普通串码商品则只有1条数据 + err = begin.Create(&req.Commodities[i]).Error + if err != nil { + begin.Rollback() + logger.Error("create allot commodity err:", logger.Field("err", err)) + return nil, err + } } } @@ -369,68 +384,51 @@ func updateAllotCommodityData(gdb *gorm.DB, orderId uint32, req *InventoryAllotE return err } - var newCommodities []ErpInventoryAllotCommodity - var deletedCommodities []ErpInventoryAllotCommodity - var matchingCommodities []ErpInventoryAllotCommodity - // 找到新增的商品 - for i, reqCommodity := range req.Commodities { - // 订单商品表信息添加零售订单id - req.Commodities[i].AllotOrderId = orderId - - var found bool - for _, dbCommodity := range commodities { - if reqCommodity.CommodityId == dbCommodity.CommodityId && reqCommodity.ID == dbCommodity.ID { - found = true - break - } - } - if !found { - newCommodities = append(newCommodities, reqCommodity) - } - } - - // 找到删除的商品 - for _, dbCommodity := range commodities { - var found bool - for _, reqCommodity := range req.Commodities { - if reqCommodity.CommodityId == dbCommodity.CommodityId && reqCommodity.ID == dbCommodity.ID { - found = true - // 找到匹配的商品,加入匹配列表 - matchingCommodities = append(matchingCommodities, reqCommodity) - break - } - } - if !found { - deletedCommodities = append(deletedCommodities, dbCommodity) - } - } - - // 2-更新商品订单信息-更新 - for _, commodity := range matchingCommodities { - if err := gdb.Model(&ErpInventoryAllotCommodity{}).Where("id = ?", commodity.ID).Updates(commodity).Error; err != nil { - logger.Error("更新商品订单信息-更新 error") - return errors.New("操作失败:" + err.Error()) - } - } - - // 2-更新商品订单信息-新增 - if len(newCommodities) != 0 { - err = gdb.Create(&newCommodities).Error - if err != nil { - logger.Error("更新商品订单信息-新增 error") - return errors.New("操作失败:" + err.Error()) - } - } - - //2-更新商品订单信息-删除 - if len(deletedCommodities) != 0 { - err = gdb.Delete(&deletedCommodities).Error + // 删除所有的商品信息 + if len(commodities) != 0 { + err = gdb.Delete(&commodities).Error if err != nil { logger.Error("更新商品订单信息-删除 error") return errors.New("操作失败:" + err.Error()) } } + // 新建所有的商品信息 + for i, _ := range req.Commodities { + req.Commodities[i].AllotOrderId = orderId + + // 查询商品信息 + commodityInfo, err := GetCommodity(req.Commodities[i].CommodityId) + if err != nil { + logger.Error("SetCategory err:", logger.Field("err", err)) + return err + } + + req.Commodities[i].CategoryId = commodityInfo.ErpCategoryId + req.Commodities[i].CategoryName = commodityInfo.ErpCategoryName + req.Commodities[i].CommodityName = commodityInfo.Name + + // 如果是非串码,且数量大于1,则进行拆分 + if req.Commodities[i].IMEIType == 1 && req.Commodities[i].Count > 1 { + nCount := req.Commodities[i].Count + for j := 0; j < int(nCount); j++ { + req.Commodities[i].ID = 0 + req.Commodities[i].Count = 1 + err = gdb.Create(&req.Commodities[i]).Error + if err != nil { + logger.Error("create allot commodity err:", logger.Field("err", err)) + return err + } + } + } else { // 普通串码商品则只有1条数据 + err = gdb.Create(&req.Commodities[i]).Error + if err != nil { + logger.Error("create allot commodity err:", logger.Field("err", err)) + return err + } + } + } + return nil } @@ -593,8 +591,15 @@ func allotAuditAndUpdateStock(gdb *gorm.DB, allotOrder ErpInventoryAllotOrder) e return err } + if len(commodities) == 0 { + return errors.New("未查询到商品信息") + } + + // 遍历库存调拨商品信息,将商品id相同的非串码商品进行合并,数量累加即可 + trimCommodities := MergeCommodities(commodities) + // 遍历库存调拨商品信息 - for _, v := range commodities { + for _, v := range trimCommodities { var stockCommodity []ErpStockCommodity err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? AND store_id = ? "+ "AND state = ? AND imei = ?", v.CommodityId, allotOrder.DeliverStoreId, InStock, v.IMEI). @@ -624,9 +629,13 @@ func allotAuditAndUpdateStock(gdb *gorm.DB, allotOrder ErpInventoryAllotOrder) e } nAmount += stockCommodity[i].WholesalePrice } + if v.Count != 0 { + nAmount = nAmount / float64(v.Count) // todo 目前只能计算平均采购价 + } // 更新库存调拨商品信息表的调拨金额 - err = gdb.Table("erp_inventory_allot_commodity").Where("id = ?", v.ID). + err = gdb.Table("erp_inventory_allot_commodity").Where("allot_order_id = ? and commodity_id = ?", + v.AllotOrderId, v.CommodityId). Updates(map[string]interface{}{ "amount": nAmount, }).Error @@ -685,6 +694,72 @@ func allotAuditAndUpdateStock(gdb *gorm.DB, allotOrder ErpInventoryAllotOrder) e return nil } +// MergeCommodities 遍历库存调拨商品信息,将商品id相同的非串码商品进行合并,数量累加即可 +func MergeCommodities(commodities []ErpInventoryAllotCommodity) []ErpInventoryAllotCommodity { + // 用于存储合并后的商品信息 + mergedCommodities := make([]ErpInventoryAllotCommodity, 0) + // 用于记录无串码商品的合并信息 + commodityMap := make(map[uint32]*ErpInventoryAllotCommodity) + + for _, commodity := range commodities { + // 只处理无串码商品 + if commodity.IMEIType == 1 { + if existing, found := commodityMap[commodity.CommodityId]; found { + // 如果相同商品 ID 的无串码商品已存在,则数量累加 + existing.Count += commodity.Count + commodityMap[commodity.CommodityId] = existing + } else { + // 否则,加入到 commodityMap 中 + newCommodity := commodity + commodityMap[commodity.CommodityId] = &newCommodity + } + } else { + // 对于有串码的商品,直接加入到合并后的列表中 + mergedCommodities = append(mergedCommodities, commodity) + } + } + + // 将合并后的无串码商品加入到合并后的列表中 + for _, commodity := range commodityMap { + mergedCommodities = append(mergedCommodities, *commodity) + } + + return mergedCommodities +} + +// MergeChangeCommodities 遍历库存变动商品信息,将商品id相同的非串码商品进行合并,数量累加即可 +func MergeChangeCommodities(commodities []ErpInventoryChangeCommodity) []ErpInventoryChangeCommodity { + // 用于存储合并后的商品信息 + mergedCommodities := make([]ErpInventoryChangeCommodity, 0) + // 用于记录无串码商品的合并信息 + commodityMap := make(map[uint32]*ErpInventoryChangeCommodity) + + for _, commodity := range commodities { + // 只处理无串码商品 + if commodity.IMEIType == 1 { + if existing, found := commodityMap[commodity.CommodityId]; found { + // 如果相同商品 ID 的无串码商品已存在,则数量累加 + existing.Count += commodity.Count + commodityMap[commodity.CommodityId] = existing + } else { + // 否则,加入到 commodityMap 中 + newCommodity := commodity + commodityMap[commodity.CommodityId] = &newCommodity + } + } else { + // 对于有串码的商品,直接加入到合并后的列表中 + mergedCommodities = append(mergedCommodities, commodity) + } + } + + // 将合并后的无串码商品加入到合并后的列表中 + for _, commodity := range commodityMap { + mergedCommodities = append(mergedCommodities, *commodity) + } + + return mergedCommodities +} + // cancelAllotAuditAndUpdateStock 库存调拨反审核后更新库存信息 func cancelAllotAuditAndUpdateStock(gdb *gorm.DB, allotOrder ErpInventoryAllotOrder) error { // 查询库存调拨商品信息 @@ -698,12 +773,15 @@ func cancelAllotAuditAndUpdateStock(gdb *gorm.DB, allotOrder ErpInventoryAllotOr return errors.New("取消审核失败,未查询到库存调拨商品信息") } + // 遍历库存调拨商品信息,将商品id相同的非串码商品进行合并,数量累加即可 + trimCommodities := MergeCommodities(commodities) + switch allotOrder.State { // 2 待发货:状态改为待审核,调拨中库存恢复为在库 // 3 待收货:状态改为待审核,调拨中库存恢复为在库 case ErpInventoryAllotOrderWaitSend, ErpInventoryAllotOrderWaitReceive: // 遍历库存调拨商品信息 - for _, v := range commodities { + for _, v := range trimCommodities { var stockCommodity []ErpStockCommodity err := orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? AND store_id = ? "+ "AND state = ? AND imei = ?", v.CommodityId, allotOrder.ReceiveStoreId, InAllot, v.IMEI). @@ -747,7 +825,7 @@ func cancelAllotAuditAndUpdateStock(gdb *gorm.DB, allotOrder ErpInventoryAllotOr } case ErpInventoryAllotOrderFinished: // 已完成:状态改为待审核,调入门店对应商品的库存更新到调出门店,如果库存不足则报错 // 遍历库存调拨商品信息 - for _, v := range commodities { + for _, v := range trimCommodities { var stockCommodity []ErpStockCommodity err := orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? AND store_id = ? "+ "AND state = ? AND imei = ?", v.CommodityId, allotOrder.ReceiveStoreId, InStock, v.IMEI). @@ -893,6 +971,7 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq) error { err = begin.Model(&ErpStockCommodity{}).Where("id = ?", stockCommodity[i].ID). Updates(stockCommodity[i]).Error if err != nil { + begin.Rollback() return fmt.Errorf("更新商品库存失败:%s", err.Error()) } } @@ -902,6 +981,7 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq) error { "UPDATE erp_stock SET count=count+%d, dispatch_count = dispatch_count-%d WHERE store_id=%d AND erp_commodity_id=%d", v.Count, v.Count, inventoryAllotOrder.ReceiveStoreId, v.CommodityId)).Error if err != nil { + begin.Rollback() logger.Errorf("update stock err:", err) return err } @@ -914,6 +994,7 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq) error { err := begin.Model(&ErpInventoryAllotOrder{}).Where("id = ?", inventoryAllotOrder.ID). Updates(inventoryAllotOrder).Error if err != nil { + begin.Rollback() return err } diff --git a/app/admin/models/inventory_change.go b/app/admin/models/inventory_change.go index 2bd6931..aa3d955 100644 --- a/app/admin/models/inventory_change.go +++ b/app/admin/models/inventory_change.go @@ -163,13 +163,13 @@ func checkChangeInventoryParam(req *InventoryChangeAddReq, editFlag bool) error return fmt.Errorf("串码商品[%s]数量[%d]错误,需为1", item.CommodityName, item.Count) } } - - // 校验编辑订单时是否有传商品ID - if editFlag { - if item.ID == 0 { - return fmt.Errorf("商品[%s]ID为空", item.CommodityName) - } - } + // + //// 校验编辑订单时是否有传商品ID + //if editFlag { + // if item.ID == 0 { + // return fmt.Errorf("商品[%s]ID为空", item.CommodityName) + // } + //} // 校验串码类型 switch item.IMEIType { @@ -266,11 +266,27 @@ func AddInventoryChange(req *InventoryChangeAddReq, sysUser *SysUser) (*ErpInven // 创建库存变动商品信息,添加库存变动订单id for i, _ := range req.Commodities { req.Commodities[i].ChangeOrderId = inventoryChangeOrder.ID - err = begin.Create(&req.Commodities[i]).Error - if err != nil { - begin.Rollback() - logger.Error("create change commodity err:", logger.Field("err", err)) - return nil, err + + // 如果是非串码,且数量大于1,则进行拆分 + if req.Commodities[i].IMEIType == 1 && req.Commodities[i].Count > 1 { + nCount := req.Commodities[i].Count + for j := 0; j < int(nCount); j++ { + req.Commodities[i].ID = 0 + req.Commodities[i].Count = 1 + err = begin.Create(&req.Commodities[i]).Error + if err != nil { + begin.Rollback() + logger.Error("create change commodity err:", logger.Field("err", err)) + return nil, err + } + } + } else { // 普通串码商品则只有1条数据 + err = begin.Create(&req.Commodities[i]).Error + if err != nil { + begin.Rollback() + logger.Error("create change commodity err:", logger.Field("err", err)) + return nil, err + } } } @@ -363,68 +379,40 @@ func updateChangeCommodityData(gdb *gorm.DB, orderId uint32, req *InventoryChang return err } - var newCommodities []ErpInventoryChangeCommodity - var deletedCommodities []ErpInventoryChangeCommodity - var matchingCommodities []ErpInventoryChangeCommodity - // 找到新增的商品 - for i, reqCommodity := range req.Commodities { - // 订单商品表信息添加零售订单id - req.Commodities[i].ChangeOrderId = orderId - - var found bool - for _, dbCommodity := range commodities { - if reqCommodity.CommodityId == dbCommodity.CommodityId && reqCommodity.ID == dbCommodity.ID { - found = true - break - } - } - if !found { - newCommodities = append(newCommodities, reqCommodity) - } - } - - // 找到删除的商品 - for _, dbCommodity := range commodities { - var found bool - for _, reqCommodity := range req.Commodities { - if reqCommodity.CommodityId == dbCommodity.CommodityId && reqCommodity.ID == dbCommodity.ID { - found = true - // 找到匹配的商品,加入匹配列表 - matchingCommodities = append(matchingCommodities, reqCommodity) - break - } - } - if !found { - deletedCommodities = append(deletedCommodities, dbCommodity) - } - } - - // 2-更新商品订单信息-更新 - for _, commodity := range matchingCommodities { - if err := gdb.Model(&ErpInventoryChangeCommodity{}).Where("id = ?", commodity.ID).Updates(commodity).Error; err != nil { - logger.Error("更新商品订单信息-更新 error") - return errors.New("操作失败:" + err.Error()) - } - } - - // 2-更新商品订单信息-新增 - if len(newCommodities) != 0 { - err = gdb.Create(&newCommodities).Error - if err != nil { - logger.Error("更新商品订单信息-新增 error") - return errors.New("操作失败:" + err.Error()) - } - } - - //2-更新商品订单信息-删除 - if len(deletedCommodities) != 0 { - err = gdb.Delete(&deletedCommodities).Error + // 删除所有的商品信息 + if len(commodities) != 0 { + err = gdb.Delete(&commodities).Error if err != nil { logger.Error("更新商品订单信息-删除 error") return errors.New("操作失败:" + err.Error()) } } + // 新建所有的商品信息 + for i, _ := range req.Commodities { + req.Commodities[i].ChangeOrderId = orderId + + // 如果是非串码,且数量大于1,则进行拆分 + if req.Commodities[i].IMEIType == 1 && req.Commodities[i].Count > 1 { + nCount := req.Commodities[i].Count + for j := 0; j < int(nCount); j++ { + req.Commodities[i].ID = 0 + req.Commodities[i].Count = 1 + err = gdb.Create(&req.Commodities[i]).Error + if err != nil { + logger.Error("create allot commodity err:", logger.Field("err", err)) + return err + } + } + } else { // 普通串码商品则只有1条数据 + err = gdb.Create(&req.Commodities[i]).Error + if err != nil { + logger.Error("create allot commodity err:", logger.Field("err", err)) + return err + } + } + } + return nil } @@ -607,9 +595,16 @@ func handleInventoryAdd(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) error return err } + if len(commodities) == 0 { + return errors.New("未查询到商品信息") + } + + // 遍历库存变动商品信息,将商品id相同的非串码商品进行合并,数量累加即可 + trimCommodities := MergeChangeCommodities(commodities) + // 遍历采购入库商品信息 var stockList []ErpStockCommodity - for _, v := range commodities { + for _, v := range trimCommodities { commodityInfo, err := GetCommodity(v.CommodityId) if err != nil { logger.Errorf("GetCommodity err:", err) @@ -708,31 +703,35 @@ func handleInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) er return errors.New("未查询到商品信息") } + // 遍历库存变动商品信息,将商品id相同的非串码商品进行合并,数量累加即可 + trimCommodities := MergeChangeCommodities(commodities) + usedStockCommodityIdList := make(map[uint32][]uint32) // 记录非串码商品已使用的商品库存表主键id // 更新库存数量 - for i, _ := range commodities { - if commodities[i].IMEIType == 2 { // 串码商品 - if commodities[i].IMEI == "" { + for i, _ := range trimCommodities { + if trimCommodities[i].IMEIType == 2 { // 串码商品 + if trimCommodities[i].IMEI == "" { return errors.New("串码为空") } // 判断该串码商品是否已经销售 var stockCommodityInfo ErpStockCommodity err = orm.Eloquent.Table("erp_stock_commodity").Where("imei = ?", - commodities[i].IMEI).Find(&stockCommodityInfo).Error + trimCommodities[i].IMEI).Find(&stockCommodityInfo).Error if err != nil { logger.Error("handleInventoryReduce query commodities err:", logger.Field("err", err)) return err } if stockCommodityInfo.State == SoldOut { - return fmt.Errorf("商品[%s]已经销售", stockCommodityInfo.ErpCommodityName) + //return fmt.Errorf("商品[%s]已经销售", stockCommodityInfo.ErpCommodityName) + return fmt.Errorf("此订单[%s]商品已出库,需先反审核相关订单返还库存", stockCommodityInfo.ErpCommodityName) } //else if stockCommodityInfo.State == OnSale { // return fmt.Errorf("商品[%s]在销售锁定中", stockCommodityInfo.ErpCommodityName) //} // 更新库存商品状态为:盘点出库 - err = gdb.Table("erp_stock_commodity").Where("imei = ?", commodities[i].IMEI). + err = gdb.Table("erp_stock_commodity").Where("imei = ?", trimCommodities[i].IMEI). Update("state", CheckOut).Error if err != nil { logger.Error("handleInventoryReduce update erp_stock_commodity err:", @@ -742,7 +741,7 @@ func handleInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) er // 更新库存数量:库存数量-1 err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?", - changeOrder.StoreId, commodities[i].CommodityId). + changeOrder.StoreId, trimCommodities[i].CommodityId). Updates(map[string]interface{}{"count": gorm.Expr("count - ?", 1)}).Error if err != nil { logger.Error("handleInventoryReduce update erp_stock err:", logger.Field("err", err)) @@ -752,23 +751,23 @@ func handleInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) er // 查询商品实际库存详情处剩余有效数,不包含已出库的数量 var nCount int64 err = orm.Eloquent.Table("erp_stock_commodity"). - Where("erp_commodity_id = ? AND store_id = ? AND state = 1", commodities[i].CommodityId, + Where("erp_commodity_id = ? AND store_id = ? AND state = 1", trimCommodities[i].CommodityId, changeOrder.StoreId).Count(&nCount).Error if err != nil { return err } // 如果库存数量不够则报错 - if uint32(nCount) < commodities[i].Count { - return fmt.Errorf("商品[%s]库存不足", commodities[i].CommodityName) + if uint32(nCount) < trimCommodities[i].Count { + return fmt.Errorf("商品[%s]库存不足", trimCommodities[i].CommodityName) } var stockCommodity []ErpStockCommodity // 非串码商品可能不止1个,更新库存商品状态 - for j := 0; j < int(commodities[i].Count); j++ { + for j := 0; j < int(trimCommodities[i].Count); j++ { // 通过门店id,商品id,查找状态为1-在库的非串码商品 err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? and "+ - "store_id = ? and state = ? and imei_type = ?", commodities[i].CommodityId, changeOrder.StoreId, + "store_id = ? and state = ? and imei_type = ?", trimCommodities[i].CommodityId, changeOrder.StoreId, InStock, NoIMEICommodity).Order("first_stock_time DESC").Find(&stockCommodity).Error if err != nil { logger.Error("get commodities err:", logger.Field("err", err)) @@ -780,7 +779,7 @@ func handleInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) er // 找一个可用的库存商品表主键ID rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList, - commodities[i].CommodityId, stockCommodity) + trimCommodities[i].CommodityId, stockCommodity) if err != nil { return err } @@ -792,13 +791,13 @@ func handleInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) er logger.Field("err", err)) return err } - usedStockCommodityIdList[commodities[i].ID] = append(usedStockCommodityIdList[commodities[i].ID], rightId) + usedStockCommodityIdList[trimCommodities[i].ID] = append(usedStockCommodityIdList[trimCommodities[i].ID], rightId) } // 更新库存数量:库存数量-count err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?", - changeOrder.StoreId, commodities[i].CommodityId). - Updates(map[string]interface{}{"count": gorm.Expr("count - ?", commodities[i].Count)}).Error + changeOrder.StoreId, trimCommodities[i].CommodityId). + Updates(map[string]interface{}{"count": gorm.Expr("count - ?", trimCommodities[i].Count)}).Error if err != nil { logger.Error("handleInventoryReduce update erp_stock err:", logger.Field("err", err)) return err @@ -824,23 +823,27 @@ func handleCancelInventoryAdd(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) return errors.New("未查询到商品信息") } + // 遍历库存变动商品信息,将商品id相同的非串码商品进行合并,数量累加即可 + trimCommodities := MergeChangeCommodities(commodities) + // 更新库存数量 - for i, _ := range commodities { - if commodities[i].IMEIType == 2 { // 串码商品 - if commodities[i].IMEI == "" { + for i, _ := range trimCommodities { + if trimCommodities[i].IMEIType == 2 { // 串码商品 + if trimCommodities[i].IMEI == "" { return errors.New("串码为空") } // 判断该串码商品是否已经销售 var stockCommodityInfo ErpStockCommodity err = orm.Eloquent.Table("erp_stock_commodity").Where("imei = ?", - commodities[i].IMEI).Find(&stockCommodityInfo).Error + trimCommodities[i].IMEI).Find(&stockCommodityInfo).Error if err != nil { logger.Error("handleCancelInventoryAdd query commodities err:", logger.Field("err", err)) return err } if stockCommodityInfo.State == SoldOut { - return fmt.Errorf("商品[%s]已经销售", stockCommodityInfo.ErpCommodityName) + //return fmt.Errorf("商品[%s]已经销售", stockCommodityInfo.ErpCommodityName) + return fmt.Errorf("此订单[%s]商品已出库,需先反审核相关订单返还库存", stockCommodityInfo.ErpCommodityName) } //else if stockCommodityInfo.State == OnSale { // return fmt.Errorf("商品[%s]在销售锁定中", stockCommodityInfo.ErpCommodityName) @@ -848,7 +851,7 @@ func handleCancelInventoryAdd(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) // 更新库存数量:库存数量-1 err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?", - changeOrder.StoreId, commodities[i].CommodityId). + changeOrder.StoreId, trimCommodities[i].CommodityId). Updates(map[string]interface{}{"count": gorm.Expr("count - ?", 1)}).Error if err != nil { logger.Error("handleCancelInventoryAdd commodities err:", logger.Field("err", err)) @@ -857,21 +860,21 @@ func handleCancelInventoryAdd(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) } else { // 查询入库商品实际库存详情处剩余有效数,不包含已出库的数量 nCount, err := GetCommodityStockByPurchaseId(changeOrder.SerialNumber, - commodities[i].CommodityId) + trimCommodities[i].CommodityId) if err != nil { logger.Error("handleCancelInventoryAdd GetCommodityStockByPurchaseId err:", logger.Field("err", err)) return err } // 如果库存数量不够则报错 - if nCount < commodities[i].Count { - return fmt.Errorf("商品[%s]库存数量不足", commodities[i].CommodityName) + if nCount < trimCommodities[i].Count { + return fmt.Errorf("商品[%s]库存数量不足", trimCommodities[i].CommodityName) } // 更新库存数量:库存数量-count err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?", - changeOrder.StoreId, commodities[i].CommodityId). - Updates(map[string]interface{}{"count": gorm.Expr("count - ?", commodities[i].Count)}).Error + changeOrder.StoreId, trimCommodities[i].CommodityId). + Updates(map[string]interface{}{"count": gorm.Expr("count - ?", trimCommodities[i].Count)}).Error if err != nil { logger.Error("handleCancelInventoryAdd commodities err:", logger.Field("err", err)) return err @@ -904,31 +907,35 @@ func handleCancelInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrd return errors.New("未查询到商品信息") } + // 遍历库存变动商品信息,将商品id相同的非串码商品进行合并,数量累加即可 + trimCommodities := MergeChangeCommodities(commodities) + usedStockCommodityIdList := make(map[uint32][]uint32) // 记录非串码商品已使用的商品库存表主键id // 更新库存数量 - for i, _ := range commodities { - if commodities[i].IMEIType == 2 { // 串码商品 - if commodities[i].IMEI == "" { + for i, _ := range trimCommodities { + if trimCommodities[i].IMEIType == 2 { // 串码商品 + if trimCommodities[i].IMEI == "" { return errors.New("串码为空") } // 判断该串码商品是否已经销售 var stockCommodityInfo ErpStockCommodity err = orm.Eloquent.Table("erp_stock_commodity").Where("imei = ?", - commodities[i].IMEI).Find(&stockCommodityInfo).Error + trimCommodities[i].IMEI).Find(&stockCommodityInfo).Error if err != nil { logger.Error("handleCancelInventoryReduce query commodities err:", logger.Field("err", err)) return err } if stockCommodityInfo.State == SoldOut { - return fmt.Errorf("商品[%s]已经销售", stockCommodityInfo.ErpCommodityName) + //return fmt.Errorf("商品[%s]已经销售", stockCommodityInfo.ErpCommodityName) + return fmt.Errorf("此订单[%s]商品已出库,需先反审核相关订单返还库存", stockCommodityInfo.ErpCommodityName) } //else if stockCommodityInfo.State == OnSale { // return fmt.Errorf("商品[%s]在销售锁定中", stockCommodityInfo.ErpCommodityName) //} // 更新库存商品状态:在库 - err = gdb.Table("erp_stock_commodity").Where("imei = ?", commodities[i].IMEI). + err = gdb.Table("erp_stock_commodity").Where("imei = ?", trimCommodities[i].IMEI). Update("state", InStock).Error if err != nil { logger.Error("handleCancelInventoryReduce update erp_stock_commodity err:", @@ -938,7 +945,7 @@ func handleCancelInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrd // 更新库存数量:库存数量+1 err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?", - changeOrder.StoreId, commodities[i].CommodityId). + changeOrder.StoreId, trimCommodities[i].CommodityId). Updates(map[string]interface{}{"count": gorm.Expr("count + ?", 1)}).Error if err != nil { logger.Error("handleCancelInventoryReduce update erp_stock err:", logger.Field("err", err)) @@ -947,10 +954,10 @@ func handleCancelInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrd } else { var stockCommodity []ErpStockCommodity // 非串码商品可能不止1个,更新库存商品状态 - for j := 0; j < int(commodities[i].Count); j++ { + for j := 0; j < int(trimCommodities[i].Count); j++ { // 通过门店id,商品id,查找状态为盘点出库的非串码商品 err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? and "+ - "store_id = ? and state = ? and imei_type = ?", commodities[i].CommodityId, changeOrder.StoreId, + "store_id = ? and state = ? and imei_type = ?", trimCommodities[i].CommodityId, changeOrder.StoreId, CheckOut, NoIMEICommodity).Order("first_stock_time DESC").Find(&stockCommodity).Error if err != nil { logger.Error("get commodities err:", logger.Field("err", err)) @@ -962,7 +969,7 @@ func handleCancelInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrd // 找一个可用的库存商品表主键ID rightId, err := findRightErpStockCommodityId(usedStockCommodityIdList, - commodities[i].CommodityId, stockCommodity) + trimCommodities[i].CommodityId, stockCommodity) if err != nil { return err } @@ -975,13 +982,13 @@ func handleCancelInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrd return err } - usedStockCommodityIdList[commodities[i].ID] = append(usedStockCommodityIdList[commodities[i].ID], rightId) + usedStockCommodityIdList[trimCommodities[i].ID] = append(usedStockCommodityIdList[trimCommodities[i].ID], rightId) } // 更新库存数量:库存数量+count err = gdb.Table("erp_stock").Where("store_id = ? and erp_commodity_id = ?", - changeOrder.StoreId, commodities[i].CommodityId). - Updates(map[string]interface{}{"count": gorm.Expr("count + ?", commodities[i].Count)}).Error + changeOrder.StoreId, trimCommodities[i].CommodityId). + Updates(map[string]interface{}{"count": gorm.Expr("count + ?", trimCommodities[i].Count)}).Error if err != nil { logger.Error("handleCancelInventoryReduce update erp_stock err:", logger.Field("err", err)) return err diff --git a/app/admin/models/inventory_product.go b/app/admin/models/inventory_product.go index 609e0ed..1024246 100644 --- a/app/admin/models/inventory_product.go +++ b/app/admin/models/inventory_product.go @@ -379,6 +379,7 @@ func updateProductCommodityData(gdb *gorm.DB, orderId uint32, req *ProductInvent } } if !found { + reqCommodity.ID = 0 newCommodities = append(newCommodities, reqCommodity) } } diff --git a/app/admin/models/inventory_report.go b/app/admin/models/inventory_report.go index 9f6e875..d7df793 100644 --- a/app/admin/models/inventory_report.go +++ b/app/admin/models/inventory_report.go @@ -9,6 +9,7 @@ import ( "go-admin/logger" "go-admin/tools" "go-admin/tools/config" + "gorm.io/gorm" "math" "sort" "strconv" @@ -89,19 +90,20 @@ type InventoryReportByAllotResp struct { // ReportByAllotData 库存调拨数据 type ReportByAllotData struct { - 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"` // 调入门店名称 - CommodityId uint32 `json:"commodity_id"` // 商品id - CommodityName string `json:"commodity_name"` // 商品名称 - CategoryID uint32 `json:"category_id"` // 商品分类id - CategoryName string `json:"category_name"` // 商品分类名称 - AuditTime *time.Time `json:"audit_time"` // 审核时间 - ReceiveTime *time.Time `json:"receive_time"` // 收货时间/调入时间 - State uint32 `json:"state"` // 调拨状态:1-调拨中 2-已完成 - AllotCount uint32 `json:"allot_count"` // 调拨数量 - AllotAmount float64 `json:"allot_amount"` // 调拨金额 + 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"` // 调入门店名称 + CommodityId uint32 `json:"commodity_id"` // 商品id + CommodityName string `json:"commodity_name"` // 商品名称 + CommoditySerialNumber string `json:"commodity_serial_number"` // 商品编号 + CategoryID uint32 `json:"category_id"` // 商品分类id + CategoryName string `json:"category_name"` // 商品分类名称 + AuditTime *time.Time `json:"audit_time"` // 审核时间 + ReceiveTime *time.Time `json:"receive_time"` // 收货时间/调入时间 + State uint32 `json:"state"` // 调拨状态:1-调拨中 2-已完成 + AllotCount uint32 `json:"allot_count"` // 调拨数量 + AllotAmount float64 `json:"allot_amount"` // 调拨金额 } // InventoryReportAllotDetailReq 库存调拨明细入参 @@ -169,7 +171,7 @@ type InventoryReportByOtherResp struct { Total int `json:"total"` // 总条数/记录数 PageIndex int `json:"pageIndex"` // 页码 PageSize int `json:"pageSize"` // 页面条数 - TotalCount uint32 `json:"total_count"` // 总数量 + TotalCount int64 `json:"total_count"` // 总数量 TotalAmount float64 `json:"total_amount"` // 总金额 ExportUrl string `json:"export_url"` // 导出excel路径 List []ReportByOtherData `json:"list"` // @@ -177,16 +179,17 @@ type InventoryReportByOtherResp struct { // ReportByOtherData 其他出入库汇总数据 type ReportByOtherData struct { - StoreId uint32 `json:"store_id"` // 门店id - StoreName string `json:"store_name"` // 门店名称 - CommodityId uint32 `json:"commodity_id"` // 商品id - CommodityName string `json:"commodity_name"` // 商品名称 - CategoryID uint32 `json:"category_id"` // 商品分类id - CategoryName string `json:"category_name"` // 商品分类名称 - StockTime *time.Time `json:"stock_time"` // 出入库时间 - Type uint32 `json:"type"` // 出入库方式:1-产品入库 2-盘点入库 3-系统出库 4-盘点出库 - Count int64 `json:"count"` // 数量 - Amount float64 `json:"amount"` // 金额 + StoreId uint32 `json:"store_id"` // 门店id + StoreName string `json:"store_name"` // 门店名称 + CommodityId uint32 `json:"commodity_id"` // 商品id + CommodityName string `json:"commodity_name"` // 商品名称 + CommoditySerialNumber string `json:"commodity_serial_number"` // 商品编号 + CategoryID uint32 `json:"category_id"` // 商品分类id + CategoryName string `json:"category_name"` // 商品分类名称 + StockTime *time.Time `json:"stock_time"` // 出入库时间 + Type uint32 `json:"type"` // 出入库方式:1-产品入库 2-盘点入库 3-系统出库 4-盘点出库 + Count int64 `json:"count"` // 数量 + Amount float64 `json:"amount"` // 金额 } // InventoryReportOtherDetailReq 其他出入库明细入参 @@ -268,6 +271,7 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve } qs := orm.Eloquent.Debug().Table("erp_stock") + sumQs := orm.Eloquent.Debug().Table("erp_stock_commodity") if len(m.StoreId) > 0 { // 门店复选 var storeIDs []uint32 @@ -275,6 +279,7 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve storeIDs = append(storeIDs, store) } qs = qs.Where("store_id IN (?)", storeIDs) + sumQs = sumQs.Where("store_id IN (?)", storeIDs) } if len(m.CategoryID) > 0 { // 商品分类id @@ -283,6 +288,7 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve categoryIDs = append(categoryIDs, category) } qs = qs.Where("erp_category_id IN (?)", categoryIDs) + sumQs = sumQs.Where("erp_category_id IN (?)", categoryIDs) } if len(m.CommoditySerialNumber) > 0 { // 商品编号 @@ -291,6 +297,7 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve serialNumbers = append(serialNumbers, serialNumber) } qs = qs.Where("commodity_serial_number IN (?)", serialNumbers) + sumQs = sumQs.Where("commodity_serial_number IN (?)", serialNumbers) } if len(m.CommodityName) > 0 { // 商品名称 @@ -299,6 +306,7 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve commodityNames = append(commodityNames, commodityName) } qs = qs.Where("erp_commodity_name IN (?)", commodityNames) + sumQs = sumQs.Where("erp_commodity_name IN (?)", commodityNames) } var count int64 @@ -309,11 +317,12 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve } var commodities []ErpStock - if m.IsExport == 1 { // 导出excel - err = qs.Order("erp_commodity_id, store_id desc").Find(&commodities).Error - } else { - err = qs.Order("erp_commodity_id, store_id desc").Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error - } + err = qs.Order("erp_commodity_id, store_id desc").Find(&commodities).Error + //if m.IsExport == 1 { // 导出excel + // err = qs.Order("erp_commodity_id, store_id desc").Find(&commodities).Error + //} else { + // err = qs.Order("erp_commodity_id, store_id desc").Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error + //} if err != nil && err != RecordNotFound { logger.Error("查询无库存列表失败", logger.Field("err", err)) return nil, err @@ -357,10 +366,14 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve nTotalEffectiveAmount += reportData.EffectiveAmount nTotalTransferAmount += reportData.TransferAmount + if reportData.Count == 0 { + continue + } + reportList = append(reportList, reportData) } - sumData, err := getReportByProductSumData() + sumData, err := getReportByProductSumData(sumQs) if err != nil { return nil, err } @@ -370,7 +383,7 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve resp.TotalCount = sumData.TotalCount resp.TotalEffectiveAmount = sumData.TotalEffectiveAmount resp.TotalTransferAmount = sumData.TotalTransferAmount - resp.Total = uint32(count) + resp.Total = uint32(len(reportList)) resp.List = reportList if m.IsExport == 1 { // 导出excel @@ -379,6 +392,14 @@ func (m *InventoryReportByProductReq) ReportByProductList(c *gin.Context) (*Inve return nil, err } resp.List = []ReportByProductData{} + } else { + // 计算分页所需的切片索引 + startIndex := page * m.PageSize + endIndex := (page + 1) * m.PageSize + if endIndex > len(reportList) { + endIndex = len(reportList) + } + resp.List = reportList[startIndex:endIndex] } return resp, nil @@ -433,11 +454,12 @@ func getDispatchCommodityAmount(storeId, commodityId uint32) (float64, error) { } // 查询产品库存汇总(按门店)的汇总数据:总有效库存数、总调入中数量、总数量、总有效库存金额、总调入中金额 -func getReportByProductSumData() (ReportByProductSumData, error) { +func getReportByProductSumData(qs *gorm.DB) (ReportByProductSumData, error) { var data ReportByProductSumData // 查询汇总数据 - err := orm.Eloquent.Debug().Table("erp_stock_commodity"). + //err := orm.Eloquent.Debug().Table("erp_stock_commodity"). + err := qs. Select(` SUM(CASE WHEN state = ? THEN wholesale_price ELSE 0 END) AS total_effective_amount, SUM(CASE WHEN state = ? THEN wholesale_price ELSE 0 END) AS total_transfer_amount, @@ -706,7 +728,7 @@ func (m *InventoryReportByAllotReq) ReportAllotList(c *gin.Context) (*InventoryR // 遍历 commodities 切片 for _, item := range commodities { // 生成键 - key := fmt.Sprintf("%d_%d_%d", item.DeliverStoreId, item.ReceiveStoreId, item.State) + key := fmt.Sprintf("%d_%d_%d_%d", item.DeliverStoreId, item.ReceiveStoreId, item.CommodityId, item.State) // 检查是否已经存在该键的汇总数据 if summary, ok := summaryMap[key]; ok { // 如果已经存在,累加调拨数量和调拨金额 @@ -750,6 +772,7 @@ func (m *InventoryReportByAllotReq) ReportAllotList(c *gin.Context) (*InventoryR summaryMap[i].CategoryID = commodityInfo.ErpCategoryId summaryMap[i].CategoryName = commodityInfo.ErpCategoryName + summaryMap[i].CommoditySerialNumber = commodityInfo.SerialNumber summaryList = append(summaryList, *summary) nTotalAllotCount += summary.AllotCount @@ -758,18 +781,21 @@ func (m *InventoryReportByAllotReq) ReportAllotList(c *gin.Context) (*InventoryR // 排序规则:商品编号小>调出店铺编号小>调入门店编号小>状态为已完成 sort.Slice(summaryList, func(i, j int) bool { - if summaryList[i].CommodityId != summaryList[j].CommodityId { - return summaryList[i].CommodityId < summaryList[j].CommodityId - } + //if summaryList[i].CommodityId != summaryList[j].CommodityId { + // return summaryList[i].CommodityId < summaryList[j].CommodityId + //} if summaryList[i].DeliverStoreId != summaryList[j].DeliverStoreId { return summaryList[i].DeliverStoreId < summaryList[j].DeliverStoreId } if summaryList[i].ReceiveStoreId != summaryList[j].ReceiveStoreId { return summaryList[i].ReceiveStoreId < summaryList[j].ReceiveStoreId } - return summaryList[i].State < summaryList[j].State + return summaryList[i].State > summaryList[j].State }) + // 按照商品编号排序 + SortReportByAllotDataCommodities(summaryList) + // 计算分页所需的切片索引 startIndex := page * m.PageSize endIndex := (page + 1) * m.PageSize @@ -1299,6 +1325,7 @@ func (m *InventoryReportByOtherReq) ReportByOtherList(c *gin.Context) (*Inventor } summaryMap[i].CategoryID = commodityInfo.ErpCategoryId summaryMap[i].CategoryName = commodityInfo.ErpCategoryName + summaryMap[i].CommoditySerialNumber = commodityInfo.SerialNumber if summary.Type == 3 || summary.Type == 4 { summaryMap[i].Count = -summaryMap[i].Count @@ -1326,7 +1353,7 @@ func (m *InventoryReportByOtherReq) ReportByOtherList(c *gin.Context) (*Inventor } } - var nTotalAllotCount uint32 + var nTotalAllotCount int64 var nTotalAllotAmount float64 filteredData := make([]ReportByOtherData, 0) for _, data := range summaryList { @@ -1335,7 +1362,7 @@ func (m *InventoryReportByOtherReq) ReportByOtherList(c *gin.Context) (*Inventor (len(m.CategoryID) == 0 || tools.Uint32SliceContains(m.CategoryID, data.CategoryID)) && (m.Type == 0 || m.Type == data.Type) && ((m.StartTime == "" && m.EndTime == "") || (data.StockTime.After(startTime) && data.StockTime.Before(endTime))) { - nTotalAllotCount += 1 + nTotalAllotCount += data.Count nTotalAllotAmount += data.Amount filteredData = append(filteredData, data) @@ -1344,6 +1371,7 @@ func (m *InventoryReportByOtherReq) ReportByOtherList(c *gin.Context) (*Inventor // 使用排序规则函数对汇总数据进行排序 sortSummaryList(filteredData) + SortReportByOtherDataCommodities(filteredData) // 计算分页所需的切片索引 startIndex := page * m.PageSize @@ -1376,10 +1404,10 @@ func (m *InventoryReportByOtherReq) ReportByOtherList(c *gin.Context) (*Inventor // 排序规则:商品编号小>门店编号小>产品入库>盘点入库>系统出库>盘点出库 func sortSummaryList(summaryList []ReportByOtherData) { sort.Slice(summaryList, func(i, j int) bool { - // 按 CommodityId 排序 - if summaryList[i].CommodityId != summaryList[j].CommodityId { - return summaryList[i].CommodityId < summaryList[j].CommodityId - } + //// 按 CommodityId 排序 + //if summaryList[i].CommodityId != summaryList[j].CommodityId { + // return summaryList[i].CommodityId < summaryList[j].CommodityId + //} // 如果 CommodityId 相同,则按 StoreId 排序 if summaryList[i].StoreId != summaryList[j].StoreId { return summaryList[i].StoreId < summaryList[j].StoreId diff --git a/app/admin/models/loginlog.go b/app/admin/models/loginlog.go index af445a8..5c54fd6 100644 --- a/app/admin/models/loginlog.go +++ b/app/admin/models/loginlog.go @@ -65,7 +65,7 @@ func (e *LoginLog) GetPage(pageSize int, pageIndex int) ([]LoginLog, int, error) if err := table.Order("info_id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/mall.go b/app/admin/models/mall.go index 0213ca6..6383220 100644 --- a/app/admin/models/mall.go +++ b/app/admin/models/mall.go @@ -189,7 +189,7 @@ func CreateGoodsSerialNo() string { if count > 0 { continue } - //if count, err := NewGoodsQuerySet(DB).SerialNoEq(serialNo).Count(); err == nil && count > 0 { + //if count, err := NewGoodsQuerySet(DB).SerialNoEq(serialNo).Total(); err == nil && count > 0 { // continue //} return serialNo @@ -208,7 +208,7 @@ func CreateGoodsId() uint32 { if count > 0 { continue } - //if count, err := NewGoodsQuerySet(DB).GoodsIdEq(orderId).Count(); err == nil && count > 0 { + //if count, err := NewGoodsQuerySet(DB).GoodsIdEq(orderId).Total(); err == nil && count > 0 { // continue //} return orderId @@ -350,7 +350,7 @@ func (*GoodsOrder) TableName() string { func CreateGoodsOrderSerialNo() string { for { serialNo := utils.GenSerialNo() - //if count, err := NewGoodsOrderQuerySet(DB).SerialNoEq(serialNo).Count(); err == nil && count > 0 { + //if count, err := NewGoodsOrderQuerySet(DB).SerialNoEq(serialNo).Total(); err == nil && count > 0 { // continue //} return serialNo @@ -360,7 +360,7 @@ func CreateGoodsOrderSerialNo() string { func CreateGoodsOrderId() uint32 { for { orderId := utils.GenUid() - //if count, err := NewGoodsOrderQuerySet(DB).OrderIdEq(orderId).Count(); err == nil && count > 0 { + //if count, err := NewGoodsOrderQuerySet(DB).OrderIdEq(orderId).Total(); err == nil && count > 0 { // continue //} return orderId diff --git a/app/admin/models/operlog.go b/app/admin/models/operlog.go index 73124af..9a414bc 100644 --- a/app/admin/models/operlog.go +++ b/app/admin/models/operlog.go @@ -84,7 +84,7 @@ func (e *SysOperLog) GetPage(pageSize int, pageIndex int, startTime string, endT if err := table.Order("oper_id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/order.go b/app/admin/models/order.go index 9f5a539..5816e86 100644 --- a/app/admin/models/order.go +++ b/app/admin/models/order.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/gin-gonic/gin" "github.com/wechatpay-apiv3/wechatpay-go/core" "github.com/wechatpay-apiv3/wechatpay-go/core/option" "github.com/wechatpay-apiv3/wechatpay-go/services/certificates" @@ -14,6 +15,7 @@ import ( "go-admin/app/admin/models/kuaidi" orm "go-admin/common/global" "go-admin/logger" + "go-admin/tools" "go-admin/tools/config" "golang.org/x/sync/errgroup" "gorm.io/gorm" @@ -200,7 +202,7 @@ type OrderListReq struct { PageSize int `json:"pageSize"` } -func (m *OrderListReq) List(exportFlag int) ([]Order, int64, string, error) { +func (m *OrderListReq) List(exportFlag int, c *gin.Context) ([]Order, int64, string, error) { orders := make([]Order, 0) if m.PageSize == 0 { m.PageSize = 10 @@ -210,9 +212,9 @@ func (m *OrderListReq) List(exportFlag int) ([]Order, int64, string, error) { var err error // 如果卡片类型不为空,则优先查询order_card表 if m.CardStatus != 0 { - orders, count, err = m.queryListFormOrderCard(exportFlag) + orders, count, err = m.queryListFormOrderCard(exportFlag, c) } else { - orders, count, err = m.queryListFormOrder(exportFlag) + orders, count, err = m.queryListFormOrder(exportFlag, c) } filePath := "" @@ -227,11 +229,37 @@ func (m *OrderListReq) List(exportFlag int) ([]Order, int64, string, error) { return orders, count, filePath, nil } -func (m *OrderListReq) queryListFormOrderCard(exportFlag int) ([]Order, int64, error) { +func (m *OrderListReq) queryListFormOrderCard(exportFlag int, c *gin.Context) ([]Order, int64, error) { var orderCards []OrderCard orders := make([]Order, 0) qs := orm.Eloquent.Table("order_card").Where("card_status=?", m.CardStatus) + // 非管理员才判断所属门店 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, 0, err + } + + // 返回sysUser未过期的门店id列表 + storeList := GetValidStoreIDs(sysUser.StoreData) + if m.StoreId != 0 { + if !Contains(storeList, uint32(m.StoreId)) { + return nil, 0, errors.New("您没有该门店权限") + } + } else { + if len(storeList) > 0 { + if len(storeList) == 1 { + qs = qs.Where("store_id = ?", storeList[0]) + } else { + qs = qs.Where("store_id IN (?)", storeList) + } + } else { + return nil, 0, errors.New("用户未绑定门店") + } + } + } + if m.SerialNumber != "" { qs = qs.Where("serial_number=?", m.SerialNumber) } @@ -331,7 +359,7 @@ func (m *OrderListReq) queryListFormOrderCard(exportFlag int) ([]Order, int64, e return orders, count, nil } -func (m *OrderListReq) queryListFormOrder(exportFlag int) ([]Order, int64, error) { +func (m *OrderListReq) queryListFormOrder(exportFlag int, c *gin.Context) ([]Order, int64, error) { var orderCards []OrderCard orders := make([]Order, 0) if m.PageSize == 0 { @@ -340,6 +368,32 @@ func (m *OrderListReq) queryListFormOrder(exportFlag int) ([]Order, int64, error var qs *gorm.DB qs = orm.Eloquent.Table("order").Where("pay_status", 2) + // 非管理员才判断所属门店 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, 0, err + } + + // 返回sysUser未过期的门店id列表 + storeList := GetValidStoreIDs(sysUser.StoreData) + if m.StoreId != 0 { + if !Contains(storeList, uint32(m.StoreId)) { + return nil, 0, errors.New("您没有该门店权限") + } + } else { + if len(storeList) > 0 { + if len(storeList) == 1 { + qs = qs.Where("store_id = ?", storeList[0]) + } else { + qs = qs.Where("store_id IN (?)", storeList) + } + } else { + return nil, 0, errors.New("用户未绑定门店") + } + } + } + isDeliver := true if m.SerialNumber != "" { isDeliver = false @@ -1192,7 +1246,7 @@ func (m *Order) Revert() error { var count int64 err = orm.Eloquent.Table("order_card").Where("order_id=?", orderCard.OrderId). Where("card_status in (?)", []uint32{1, 2, 3}).Count(&count).Error - //NewOrderCardQuerySet(DB).OrderIdEq(order.ID).CardStatusIn(1, 2, 3).Count() + //NewOrderCardQuerySet(DB).OrderIdEq(order.ID).CardStatusIn(1, 2, 3).Total() if err != nil { logger.Error("err:", logger.Field("err", err)) return err @@ -1342,7 +1396,7 @@ func IsUserHaveUnreturnedOrders(uid uint32) (bool, error) { sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM order_card WHERE uid = %d AND pay_status=2 AND card_status IN (1,2,3) ;", uid) //sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM order_card WHERE uid = %d AND pay_status IN (1,2) AND card_status IN (1,2,3) ;", uid) - //count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count() + //count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Total() //if err != nil { // logger.Error("err:",logger.Field("err",err)) // return false, err diff --git a/app/admin/models/post.go b/app/admin/models/post.go index 6089193..9fbe9a3 100644 --- a/app/admin/models/post.go +++ b/app/admin/models/post.go @@ -110,7 +110,7 @@ func (e *Post) GetPage(pageSize int, pageIndex int) ([]Post, int, error) { if err := table.Order("sort").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/purchase.go b/app/admin/models/purchase.go index 6411ba6..eebaa50 100644 --- a/app/admin/models/purchase.go +++ b/app/admin/models/purchase.go @@ -1,6 +1,7 @@ package models import ( + "encoding/json" "errors" "fmt" "github.com/gin-gonic/gin" @@ -10,6 +11,7 @@ import ( "go-admin/tools" "go-admin/tools/config" "gorm.io/gorm" + "log" "math" "math/rand" "sort" @@ -1043,6 +1045,7 @@ func updatePurchaseCommodityData(gdb *gorm.DB, orderId uint32, req *ErpPurchaseE } } if !found { + reqCommodity.ID = 0 newCommodities = append(newCommodities, reqCommodity) } } @@ -1631,7 +1634,7 @@ func ExecuteErpPurchase(req *ErpPurchaseExecuteReq, c *gin.Context) (*ErpPurchas return nil, err } if commodityInfo.IMEIType == 2 || commodityInfo.IMEIType == 3 { - // 如果是串码商品,根据 Count 拆分成对应数量的数据 + // 如果是串码商品,根据 Total 拆分成对应数量的数据 for i := 0; i < int(inventory.Count); i++ { imei := "" // 默认退货单执行时不需要串码 if inventory.PurchaseType == ErpProcureOrder && commodityInfo.IMEIType == 2 { // 采购单 @@ -1911,8 +1914,8 @@ func FinishErpPurchaseDemand(req *FinishErpPurchaseDemandReq, sysUser *SysUser) // } // // if len(demand) > 0 { -// totalNeedCount += demand[0].Count -// demandData.List[i].NeedCount = demand[0].Count +// totalNeedCount += demand[0].Total +// demandData.List[i].NeedCount = demand[0].Total // } // // // 查询某个门店某个商品的库存情况 @@ -1934,7 +1937,7 @@ func FinishErpPurchaseDemand(req *FinishErpPurchaseDemandReq, sysUser *SysUser) //func GetCommodityStockByStoreId(commodityId, storeId uint32) (uint32, error) { // var count int64 // err := orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? and store_id = ? and state = 1", -// commodityId, storeId).Count(&count).Error +// commodityId, storeId).Total(&count).Error // if err != nil { // logger.Error("GetCommodityStockByStoreId count err:", logger.Field("err", err)) // return 0, err @@ -2338,7 +2341,7 @@ func FinishErpPurchaseDemand(req *FinishErpPurchaseDemandReq, sysUser *SysUser) // var stockCount int64 // err := orm.Eloquent.Table("erp_stock_commodity"). // Where("erp_commodity_id = ? AND store_id = ? AND state = 1", commodityID, storeID). -// Count(&stockCount).Error +// Total(&stockCount).Error // if err != nil { // // Handle error // return @@ -2883,20 +2886,60 @@ func GetLastMonthRange() (time.Time, time.Time) { return firstDay, lastDay } -// GetOnlineStores 查询所有在线门店信息 +// GetOnlineStores 查询有效门店信息 func GetOnlineStores(c *gin.Context) ([]Store, error) { - sysUser, err := GetSysUserByCtx(c) + user, err := GetSysUserByCtx(c) if err != nil { return nil, err } - var stores []Store - err = orm.Eloquent.Table("store").Where("is_online = ? and cooperative_business_id = ? ", 1, - sysUser.CooperativeBusinessId).Find(&stores).Error - if err != nil { + if user.RoleId == 1 { // 系统管理员 + var stores []Store + err = orm.Eloquent.Table("store").Where("cooperative_business_id = ? ", + user.CooperativeBusinessId).Find(&stores).Error + if err != nil { + return nil, err + } + return stores, nil + } + + // 解析门店数据 + if err := json.Unmarshal([]byte(user.StoreData), &user.StoreList); err != nil { return nil, err } - return stores, nil + + if len(user.StoreList) == 0 { + return nil, errors.New("no stores found") + } + + // 当前时间 + now := time.Now() + + // 过滤掉过期的门店 + validStores := make([]Store, 0) + for _, store := range user.StoreList { + expireTime, err := time.Parse(StoreDateTimeFormat, store.ExpireTime) + if err != nil { + log.Println("Error parsing time:", err, "ExpireTime:", store.ExpireTime) + continue + } + + // 包含当天有效时间 + expireTime = expireTime.Add(24*time.Hour - time.Second) + if expireTime.After(now) { + tempStore := Store{ + Name: store.StoreName, + } + tempStore.ID = uint32(store.StoreID) + validStores = append(validStores, tempStore) + } + } + + if len(validStores) == 0 { + return nil, nil + } + + return validStores, nil } type Result struct { @@ -3295,7 +3338,7 @@ func getReportByOrderFromCommodityOrCategory(req *ErpPurchaseReportByOrderReq, c } if existingData, ok := commodityMapInfo[inventory.ErpCommodityId]; ok { - // 如果已经存在相同 ErpCommodityId 的数据,则累加 Amount 和 Count + // 如果已经存在相同 ErpCommodityId 的数据,则累加 Amount 和 Total existingData.Amount += vAmount existingData.Count += vCount existingData.Price = existingData.Amount / float64(existingData.Count) @@ -3584,7 +3627,7 @@ func getOrderInventoryInfo(req *ErpPurchaseReportByOrderReq, erpPurchaseOrderId } if existingData, ok := commodityMap[v.ErpCommodityId]; ok { - // 如果已经存在相同 ErpCommodityId 的数据,则累加 Amount 和 Count + // 如果已经存在相同 ErpCommodityId 的数据,则累加 Amount 和 Total existingData.Amount += vAmount existingData.Count += vCount existingData.Price = existingData.Amount / float64(existingData.Count) @@ -4476,7 +4519,7 @@ JOIN // qs := orm.Eloquent.Table("erp_purchase_commodity") // // var count int64 -// err := qs.Count(&count).Error +// err := qs.Total(&count).Error // if err != nil { // logger.Error("getAllOrderCommodity count err:", logger.Field("err", err)) // return nil, err @@ -5048,14 +5091,14 @@ func GetReportBySupplier(req *ErpPurchaseReportBySupplierReq, c *gin.Context) ( // ErpCommodityName: data.ErpCommodityName, // ErpCategoryID: data.ErpCategoryID, // ErpCategoryName: data.ErpCategoryName, -// Count: data.Count, +// Total: data.Total, // Amount: data.Amount, // RejectAmount: data.RejectAmount, // Difference: data.Difference, // } // } else { // // 如果键已存在,进行累加操作 -// mergedMap[key].Count += data.Count +// mergedMap[key].Total += data.Total // mergedMap[key].Amount += data.Amount // mergedMap[key].RejectAmount += data.RejectAmount // mergedMap[key].Difference += data.Difference diff --git a/app/admin/models/recycle_card.go b/app/admin/models/recycle_card.go index ccff180..a80038b 100644 --- a/app/admin/models/recycle_card.go +++ b/app/admin/models/recycle_card.go @@ -71,15 +71,17 @@ type RecycleCardOrderListReq struct { AuditEndTime string `json:"audit_end_time"` } type RecycleCardOrderListRsp struct { - Count int64 `json:"count"` + Total int64 `json:"total"` List []RecycleCardOrder `json:"list"` PageIndex int `json:"pageIndex"` + PageSize int `json:"pageSize"` Url string `json:"url"` } func (m *RecycleCardOrderListReq) List(c *gin.Context) (RecycleCardOrderListRsp, error) { rsp := RecycleCardOrderListRsp{ PageIndex: m.PageIdx, + PageSize: m.PageSize, } page := m.PageIdx - 1 if page < 0 { @@ -193,7 +195,7 @@ func (m *RecycleCardOrderListReq) List(c *gin.Context) (RecycleCardOrderListRsp, logger.Error("err:", logger.Field("err", err)) return rsp, err } - rsp.Count = count + rsp.Total = count //err = qs.Order("id DESC").Offset(m.PageNum * m.PageSize).Limit(m.PageSize).Find(&dailys).Error if m.IsExport == 1 { err = qs.Order("id DESC").Find(&list).Error diff --git a/app/admin/models/role.go b/app/admin/models/role.go index da60789..5a130fc 100644 --- a/app/admin/models/role.go +++ b/app/admin/models/role.go @@ -68,7 +68,7 @@ func (role *SysRole) GetPage(pageSize int, pageIndex int) ([]SysRole, int, error if err := table.Order("role_sort").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/share_card.go b/app/admin/models/share_card.go index 2aaa286..2ba83d4 100644 --- a/app/admin/models/share_card.go +++ b/app/admin/models/share_card.go @@ -849,7 +849,7 @@ func (m *ShareCardVmRecord) ProvideVmGameId(gameId uint32) { record.ProvideVmUser(shareCards) //var holdCount int64 //err = orm.Eloquent.Table("game_card_goods").Where("game_card_id in (?)", goodsIds). - // Where("status!=?", 1).Count(&holdCount).Error + // Where("status!=?", 1).Total(&holdCount).Error //if err != nil { // logger.Error("stock count err:",logger.Field("err",err)) // return @@ -2453,7 +2453,7 @@ func (m *FunctionUnusualCardListReq) List() ([]GameCardGoods, int64, error) { // var shareCardBills []UserShareCardBill // qs := NewUserShareCardBillQuerySet(DB).UidEq(uid) // -// count, err := qs.Count() +// count, err := qs.Total() // if err != nil { // logger.Error("user share card bill count err:",logger.Field("err",err)) // return shareCardBills, 0, err diff --git a/app/admin/models/syscategory.go b/app/admin/models/syscategory.go index ba8e013..d945792 100644 --- a/app/admin/models/syscategory.go +++ b/app/admin/models/syscategory.go @@ -84,7 +84,7 @@ func (e *SysCategory) GetPage(pageSize int, pageIndex int) ([]SysCategory, int, if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/syscontent.go b/app/admin/models/syscontent.go index 0695b2e..3d04f2e 100644 --- a/app/admin/models/syscontent.go +++ b/app/admin/models/syscontent.go @@ -94,7 +94,7 @@ func (e *SysContent) GetPage(pageSize int, pageIndex int) ([]SysContent, int, er if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/sysfileinfo.go b/app/admin/models/sysfileinfo.go index 56dd024..7ac04a8 100644 --- a/app/admin/models/sysfileinfo.go +++ b/app/admin/models/sysfileinfo.go @@ -74,7 +74,7 @@ func (e *SysFileInfo) GetPage(pageSize int, pageIndex int) ([]SysFileInfo, int, if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/sysuser.go b/app/admin/models/sysuser.go index eac1387..b847b27 100644 --- a/app/admin/models/sysuser.go +++ b/app/admin/models/sysuser.go @@ -311,7 +311,7 @@ func (e *SysUser) GetPage(pageSize int, pageIndex int) ([]SysUserPage, int, erro return nil, 0, err } - //if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Order("sys_user.created_at DESC").Offset(-1).Limit(-1).Count(&count).Error; err != nil { + //if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Order("sys_user.created_at DESC").Offset(-1).Limit(-1).Total(&count).Error; err != nil { // return nil, 0, err //} @@ -515,3 +515,58 @@ func GetUserEffectiveStore(uid uint32) ([]StoreInfo, error) { return validStores, nil } + +// GetUserEffectiveStoreById 获取店员当前的有效门店(商城发货使用) +func GetUserEffectiveStoreById(id uint32) ([]StoreInfo, error) { + user := new(SysUser) + err := orm.Eloquent.Table("sys_user").Where("user_id", id).Find(&user).Error + if err != nil { + log.Println("Error:", err, "UID:", id) + return nil, err + } + + // 解析门店数据 + if err := json.Unmarshal([]byte(user.StoreData), &user.StoreList); err != nil { + return nil, err + } + + if len(user.StoreList) == 0 { + return nil, errors.New("no stores found") + } + + // 当前时间 + now := time.Now() + + // 过滤掉过期的门店 + validStores := make([]StoreInfo, 0) + for _, store := range user.StoreList { + expireTime, err := time.Parse(StoreDateTimeFormat, store.ExpireTime) + if err != nil { + log.Println("Error parsing time:", err, "ExpireTime:", store.ExpireTime) + continue + } + + // 包含当天有效时间 + expireTime = expireTime.Add(24*time.Hour - time.Second) + if expireTime.After(now) { + validStores = append(validStores, store) + } + } + + if len(validStores) == 0 { + return nil, nil + } + + // 按有效时间和 store_id 排序 + sort.Slice(validStores, func(i, j int) bool { + timeI, _ := time.Parse(StoreDateTimeFormat, validStores[i].ExpireTime) + timeJ, _ := time.Parse(StoreDateTimeFormat, validStores[j].ExpireTime) + + if timeI.Equal(timeJ) { + return validStores[i].StoreID < validStores[j].StoreID + } + return timeI.Before(timeJ) + }) + + return validStores, nil +} diff --git a/app/admin/models/tools/dbcolumns.go b/app/admin/models/tools/dbcolumns.go index 5a01d4b..5b385db 100644 --- a/app/admin/models/tools/dbcolumns.go +++ b/app/admin/models/tools/dbcolumns.go @@ -44,7 +44,7 @@ func (e *DBColumns) GetPage(pageSize int, pageIndex int) ([]DBColumns, int, erro if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Count(&count) + //table.Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/tools/dbtables.go b/app/admin/models/tools/dbtables.go index 0ef2a8d..02b8c3c 100644 --- a/app/admin/models/tools/dbtables.go +++ b/app/admin/models/tools/dbtables.go @@ -40,7 +40,7 @@ func (e *DBTables) GetPage(pageSize int, pageIndex int) ([]DBTables, int, error) tools.Assert(true, "目前只支持mysql数据库", 500) } - //table.Count(&count) + //table.Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/tools/systables.go b/app/admin/models/tools/systables.go index 90af198..c3d8b9c 100644 --- a/app/admin/models/tools/systables.go +++ b/app/admin/models/tools/systables.go @@ -69,7 +69,7 @@ func (e *SysTables) GetPage(pageSize int, pageIndex int) ([]SysTables, int, erro if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil { return nil, 0, err } - //table.Where("`deleted_at` IS NULL").Count(&count) + //table.Where("`deleted_at` IS NULL").Total(&count) return doc, int(count), nil } diff --git a/app/admin/models/user.go b/app/admin/models/user.go index 5148f7c..4daf9db 100644 --- a/app/admin/models/user.go +++ b/app/admin/models/user.go @@ -288,7 +288,7 @@ type NewUserListResp struct { ExportUrl string `json:"export_url"` // 导出excel地址 } -func GetNewUserList(req *NewUserListReq) (*NewUserListResp, error) { +func GetNewUserList(req *NewUserListReq, c *gin.Context) (*NewUserListResp, error) { resp := &NewUserListResp{ PageIndex: req.PageIndex, PageSize: req.PageSize, @@ -315,6 +315,33 @@ func GetNewUserList(req *NewUserListReq) (*NewUserListResp, error) { qs := orm.Eloquent.Model(&UserInfo{}).Debug() + // 非管理员才判断所属门店 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, err + } + + var storeList []uint32 + // 返回sysUser未过期的门店id列表 + storeList = GetValidStoreIDs(sysUser.StoreData) + if req.StoreId != 0 { + if !Contains(storeList, uint32(req.StoreId)) { + return nil, errors.New("您没有该门店权限") + } + } else { + if len(storeList) > 0 { + if len(storeList) == 1 { + qs = qs.Where("store_id = ?", storeList[0]) + } else { + qs = qs.Where("store_id IN (?)", storeList) + } + } else { + return nil, errors.New("用户未绑定门店") + } + } + } + if req.Tel != "" { qs = qs.Where("user.tel", req.Tel) } @@ -1441,7 +1468,7 @@ type UserInviteRecordListData struct { MemberExpire time.Time `json:"memberExpire"` // 租卡会员到期时间 } -func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { +func (m *NewUserInviteRecordReq) NewList(c *gin.Context) (*UserInviteRecordListResp, error) { resp := new(UserInviteRecordListResp) var records []struct { UserInviteRecord @@ -1490,21 +1517,49 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { Group("user_invite_record.id"). Order("MAX(user_invite_record.action_time) DESC") + // 非管理员才判断所属门店 + if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, err + } + + // 返回sysUser未过期的门店id列表 + validStoreList := GetValidStoreIDs(sysUser.StoreData) + if m.StoreId != 0 { + if !Contains(validStoreList, m.StoreId) { + return nil, errors.New("您没有该门店权限") + } + } else { + if len(validStoreList) > 0 { + if len(validStoreList) == 1 { + qs = qs.Where("user_invite_record.store_id = ?", validStoreList[0]) + countQuery = countQuery.Where("user_invite_record.store_id = ?", validStoreList[0]) + } else { + qs = qs.Where("user_invite_record.store_id IN (?)", validStoreList) + countQuery = countQuery.Where("user_invite_record.store_id IN (?)", validStoreList) + } + } else { + return nil, errors.New("用户未绑定门店") + } + } + } + if m.StoreId != 0 { - qs = qs.Where("store_id=?", m.StoreId) - countQuery = countQuery.Where("store_id=?", m.StoreId) + qs = qs.Where("user_invite_record.store_id=?", m.StoreId) + countQuery = countQuery.Where("user_invite_record.store_id=?", m.StoreId) } if m.InviteUserName != "" { qs = qs.Where("B1.nick_name=?", m.InviteUserName) countQuery = countQuery.Where("B1.nick_name=?", m.InviteUserName) } if m.FromUid != 0 { - qs = qs.Where("from_uid=?", m.FromUid) - countQuery = countQuery.Where("from_uid=?", m.FromUid) + qs = qs.Where("user_invite_record.from_uid=?", m.FromUid) + countQuery = countQuery.Where("user_invite_record.from_uid=?", m.FromUid) } if m.ToUid != 0 { - qs = qs.Where("to_uid=?", m.ToUid) - countQuery = countQuery.Where("to_uid=?", m.ToUid) + qs = qs.Where("user_invite_record.to_uid=?", m.ToUid) + countQuery = countQuery.Where("user_invite_record.to_uid=?", m.ToUid) } if m.UserTel != "" { qs = qs.Where("B2.tel=?", m.UserTel) @@ -1579,16 +1634,16 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { } if !m.RecordStartTime.IsZero() { - qs = qs.Where("action_time > ?", m.RecordStartTime) - countQuery = countQuery.Where("action_time > ?", m.RecordStartTime) + qs = qs.Where("user_invite_record.action_time > ?", m.RecordStartTime) + countQuery = countQuery.Where("user_invite_record.action_time > ?", m.RecordStartTime) } if !m.RecordEndTime.IsZero() { - qs = qs.Where("action_time < ?", m.RecordEndTime) - countQuery = countQuery.Where("action_time < ?", m.RecordEndTime) + qs = qs.Where("user_invite_record.action_time < ?", m.RecordEndTime) + countQuery = countQuery.Where("user_invite_record.action_time < ?", m.RecordEndTime) } if m.MemberLevel != 0 { - qs = qs.Where("user.member_level = ?", m.MemberLevel) - countQuery = countQuery.Where("user.member_level = ?", m.MemberLevel) + qs = qs.Where("B2.member_level = ?", m.MemberLevel) + countQuery = countQuery.Where("B2.member_level = ?", m.MemberLevel) } var count int64 @@ -2795,7 +2850,7 @@ type AssistantInviteMemberReportListResp struct { ExportUrl string `json:"export_url"` // 导出excel地址 } -func (m *AssistantInviteMemberReportReq) List() (*AssistantInviteMemberReportListResp, error) { +func (m *AssistantInviteMemberReportReq) List(c *gin.Context) (*AssistantInviteMemberReportListResp, error) { resp := new(AssistantInviteMemberReportListResp) var memberReport []InviteMemberReport var users []SysUser @@ -3251,7 +3306,7 @@ func GetOrderSn() string { orderSn = utils.GenSerialNo() var count int64 err := orm.Eloquent.Table("user_open_member_record").Where("open_no=?", orderSn).Count(&count) - //count, err := NewUserOpenMemberRecordQuerySet(DB).OpenNoEq(orderSn).Count() + //count, err := NewUserOpenMemberRecordQuerySet(DB).OpenNoEq(orderSn).Total() if err != nil { logger.Error("err:", logger.Field("err", err)) } diff --git a/app/admin/router/cooperativemanage.go b/app/admin/router/cooperativemanage.go index 9d56b77..520bbea 100644 --- a/app/admin/router/cooperativemanage.go +++ b/app/admin/router/cooperativemanage.go @@ -12,15 +12,15 @@ func registerCooperativeManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gi cooperativeBusiness := v1.Group("/cooperative").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) { - cooperativeBusiness.POST("get_default_info", cooperativemanage.CooperativeGetDefaultInfo) // 获取合作商默认用户名和密码 - cooperativeBusiness.POST("list", cooperativemanage.CooperativeBusinessList) // 获取合作商列表 - cooperativeBusiness.POST("add", cooperativemanage.CooperativeAdd) // 获取合作商 - cooperativeBusiness.POST("edit", cooperativemanage.CooperativeEdit) // 编辑供应商 - cooperativeBusiness.POST("member_promotion/list", cooperativemanage.CooperativeMemberPromotionList) // 合作商推广会员列表 - cooperativeBusiness.POST("member_promotion_store/list", cooperativemanage.CooperativeMemberPromotionStoreList) // 合作商推广会员门店列表 - cooperativeBusiness.POST("member_promotion_day/list", cooperativemanage.CooperativeMemberPromotionDayList) // 合作商每天推广会员列表 - cooperativeBusiness.POST("member_promotion_store_day/list", cooperativemanage.CooperativeMemberPromotionStoreDayList) // 合作商每天门店推广会员列表 - //cooperativeBusiness.POST("member_promotion_statistic/list", cooperativemanage.CooperativeMemberPromotionStatisticList) // 合作商推广会员统计列表 + cooperativeBusiness.POST("get_default_info", cooperativemanage.CooperativeGetDefaultInfo) // 获取合作商默认用户名和密码 + cooperativeBusiness.POST("list", cooperativemanage.CooperativeBusinessList) // 获取合作商列表 + cooperativeBusiness.POST("add", cooperativemanage.CooperativeAdd) // 获取合作商 + cooperativeBusiness.POST("edit", cooperativemanage.CooperativeEdit) // 编辑供应商 + cooperativeBusiness.POST("member_promotion/list", cooperativemanage.CooperativeMemberPromotionList) // 合作商推广会员列表 + cooperativeBusiness.POST("member_promotion_store/list", cooperativemanage.CooperativeMemberPromotionStoreList) // 合作商推广会员门店列表 + cooperativeBusiness.POST("member_promotion_day/list", cooperativemanage.CooperativeMemberPromotionDayList) // 合作商每天推广会员列表 + cooperativeBusiness.POST("member_promotion_store_day/list", cooperativemanage.CooperativeMemberPromotionStoreDayList) // 合作商每天门店推广会员列表 + cooperativeBusiness.POST("member_promotion_statistic/list", cooperativemanage.CooperativeMemberPromotionStatisticList) // 合作商推广会员统计列表 cooperativeBusiness.POST("member_promotion/settle_info", cooperativemanage.CooperativeMemberPromotionSettleInfo) // 合作商推广会员结算详情 cooperativeBusiness.POST("member_promotion/settle_confirm", cooperativemanage.CooperativeMemberPromotionSettleConfirm) // 合作商推广会员结算确认 //cooperativeBusiness.POST("member_promotion/settle/list", cooperativemanage.CooperativeMemberPromotionSettleList) // 合作商推广会员结算列表 @@ -45,6 +45,6 @@ func registerCooperativeManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gi // 无需认证的路由代码 func registerCooperativeManageUnAuthRouter(v1 *gin.RouterGroup) { cooperativeBusiness := v1.Group("/cooperative") - cooperativeBusiness.POST("member_promotion/settle/list", cooperativemanage.CooperativeMemberPromotionSettleList) // 合作商推广会员结算列表 - cooperativeBusiness.POST("member_promotion_statistic/list", cooperativemanage.CooperativeMemberPromotionStatisticList) // 合作商推广会员统计列表 + cooperativeBusiness.POST("member_promotion/settle/list", cooperativemanage.CooperativeMemberPromotionSettleList) // 合作商推广会员结算列表 + //cooperativeBusiness.POST("member_promotion_statistic/list", cooperativemanage.CooperativeMemberPromotionStatisticList) // 合作商推广会员统计列表 } diff --git a/app/admin/router/goodsmanage.go b/app/admin/router/goodsmanage.go index b2c4e5d..8819881 100644 --- a/app/admin/router/goodsmanage.go +++ b/app/admin/router/goodsmanage.go @@ -3,11 +3,16 @@ package router import ( "github.com/gin-gonic/gin" "go-admin/app/admin/apis/goodsmanage" + "go-admin/app/admin/middleware" jwt "go-admin/pkg/jwtauth" ) // 需认证的路由代码 func registerGoodsManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { + goods := v1.Group("/goods").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + { + goods.POST("/goods_list", goodsmanage.GameCardGoodsList) // 获取游戏卡列表 + } } // 无需认证的路由代码 @@ -15,7 +20,6 @@ func registerGoodsManageUnAuthRouter(v1 *gin.RouterGroup) { goods := v1.Group("/goods") { goods.POST("/list", goodsmanage.GameCardList) // 获取游戏列表 - goods.POST("/goods_list", goodsmanage.GameCardGoodsList) // 获取游戏卡列表 goods.POST("/add", goodsmanage.GameCardAdd) // 添加游戏 goods.POST("/modify", goodsmanage.GameCardModify) // 修改游戏 goods.POST("/type", goodsmanage.GameCardTypes) // 获取游戏类型 diff --git a/app/admin/router/ordermanage.go b/app/admin/router/ordermanage.go index 8830dd9..c909f86 100644 --- a/app/admin/router/ordermanage.go +++ b/app/admin/router/ordermanage.go @@ -4,12 +4,13 @@ import ( "github.com/gin-gonic/gin" "go-admin/app/admin/apis/goodsmanage" "go-admin/app/admin/apis/ordermanage" + "go-admin/app/admin/middleware" jwt "go-admin/pkg/jwtauth" ) // 需认证的路由代码 func registerOrderManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { - order := v1.Group("/order") + order := v1.Group("/order").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) { order.POST("/list", ordermanage.OrderList) // 订单列表 order.POST("/list_export", ordermanage.OrderListExport) // 订单列表导出 diff --git a/app/admin/router/recyclecardmanage.go b/app/admin/router/recyclecardmanage.go index f26d138..107e933 100644 --- a/app/admin/router/recyclecardmanage.go +++ b/app/admin/router/recyclecardmanage.go @@ -10,16 +10,13 @@ import ( // 无需认证的路由代码 func registerRecycleCardManageUnAuthRouter(v1 *gin.RouterGroup) { recycleCardRouter := v1.Group("/recycle_card") - { - recycleCardRouter.POST("order/detail", recyclecardmanage.RecycleCardOrderDetail) recycleCardRouter.POST("order/check", recyclecardmanage.RecycleCardOrderCheck) // 管理端 recycleCardRouter.POST("config/update", recyclecardmanage.RecycleCardConfigUpdate) // 管理端 recycleCardRouter.POST("config/info", recyclecardmanage.RecycleCardConfigInfo) // 管理端 recycleCardRouter.POST("order/retrieve", recyclecardmanage.RecycleCardOrderRetrieve) // 管理端 } - } // 需认证的路由代码 diff --git a/app/admin/router/router.go b/app/admin/router/router.go index b6d3d98..2f34a02 100644 --- a/app/admin/router/router.go +++ b/app/admin/router/router.go @@ -76,7 +76,7 @@ func examplesCheckRoleRouter(r *gin.Engine, authMiddleware *jwtauth.GinJWTMiddle registerSysCategoryRouter(v1, authMiddleware) // 商品 - //registerGoodsManageRouter(v1, authMiddleware) + registerGoodsManageRouter(v1, authMiddleware) // 活动 registerActivityManageRouter(v1, authMiddleware) // 共享卡 @@ -93,6 +93,8 @@ func examplesCheckRoleRouter(r *gin.Engine, authMiddleware *jwtauth.GinJWTMiddle registerMallManageRouter(v1, authMiddleware) // 回收卡 registerRecycleCardManageRouter(v1, authMiddleware) + // 游戏卡库存 + registerStockManageRouter(v1, authMiddleware) // 供应商 registerSupplierRouter(v1, authMiddleware) @@ -102,7 +104,7 @@ func examplesCheckRoleRouter(r *gin.Engine, authMiddleware *jwtauth.GinJWTMiddle registerCommodityRouter(v1, authMiddleware) // 收付款账号设置 registerCashierRouter(v1, authMiddleware) - // 库存管理 + // erp库存管理 registerInventoryManageRouter(v1, authMiddleware) // 零售订单管理 registerErpOrderManageRouter(v1, authMiddleware) diff --git a/app/admin/router/stockmanage.go b/app/admin/router/stockmanage.go index 3f5296c..6df1173 100644 --- a/app/admin/router/stockmanage.go +++ b/app/admin/router/stockmanage.go @@ -3,18 +3,24 @@ package router import ( "github.com/gin-gonic/gin" "go-admin/app/admin/apis/stockmanage" + "go-admin/app/admin/middleware" jwt "go-admin/pkg/jwtauth" ) // 需认证的路由代码 func registerStockManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { + order := v1.Group("/stock").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) + { + order.POST("/list", stockmanage.GameCardGoodsStockInfoList) // 库存列表 + order.POST("/cannibalize_task/list", stockmanage.CannibalizeTaskList) // 库存调拨列表 + } } // 无需认证的路由代码 func registerStockManageUnAuthRouter(v1 *gin.RouterGroup) { 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) // 游戏卡减库存 @@ -24,9 +30,9 @@ func registerStockManageUnAuthRouter(v1 *gin.RouterGroup) { order.POST("/cannibalize_task/import_goods", stockmanage.CannibalizeTaskImportGameCardGoods) // order.POST("/cannibalize_task/deliver_goods", stockmanage.CannibalizeTaskDeliverGoods) // 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/del", stockmanage.CannibalizeTaskDel) // + //order.POST("/cannibalize_task/list", stockmanage.CannibalizeTaskList) // 库存调拨列表 + order.POST("/cannibalize_task/goods_list", stockmanage.CannibalizeTaskGameCardGoodsList) // + order.POST("/cannibalize_task/del", stockmanage.CannibalizeTaskDel) // //order.POST("/type", goodsmanage.GameCardTypes) // 获取游戏类型 } diff --git a/app/admin/router/usermanage.go b/app/admin/router/usermanage.go index f89a122..3b6fd3b 100644 --- a/app/admin/router/usermanage.go +++ b/app/admin/router/usermanage.go @@ -15,6 +15,7 @@ func registerUserManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMid userInfo.POST("/invite_derive", usermanage.ExportDataUser) userInfo.POST("/mark", usermanage.MarkUser) userInfo.POST("/tel", usermanage.TelList) + userInfo.POST("/new_user_invite_record_list", usermanage.NewUserInviteRecordList) } } @@ -37,8 +38,6 @@ func registerUserManageUnAuthRouter(v1 *gin.RouterGroup) { userInfo.POST("/member_record_list_export", usermanage.UserMemberRecordListExport) userInfo.POST("/member_statistic_list", usermanage.UserMemberStatisticList) userInfo.POST("/user_invite_record_list", usermanage.UserInviteRecordList) - userInfo.POST("/new_user_invite_record_list", usermanage.NewUserInviteRecordList) - userInfo.POST("/expire_member_sms_list", usermanage.ExpireMemberSmsSendRecordList) } diff --git a/config/settings.yml b/config/settings.yml index d0b7a0a..dc0d820 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -5,8 +5,6 @@ settings: # 服务器ip,默认使用 0.0.0.0 # host: 192.168.1.109 host: 0.0.0.0 - - # 服务名称 name: mh_service # 端口号 diff --git a/docs/docs.go b/docs/docs.go index 8954d12..884c845 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -2719,6 +2719,39 @@ const docTemplate = `{ } } }, + "/api/v1/goods/goods_list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-库存管理" + ], + "summary": "查询库存游戏卡串码", + "parameters": [ + { + "description": "查询库存游戏卡串码", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.GetGameCardGoodsListReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.GetGameCardGoodsListResp" + } + } + } + } + }, "/api/v1/group_send_message/template/list": { "post": { "consumes": [ @@ -4021,6 +4054,39 @@ const docTemplate = `{ } } }, + "/api/v1/mall/goods/order/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "订单管理" + ], + "summary": "查询商城订单列表", + "parameters": [ + { + "description": "查询商城订单列表", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.GoodsOrderListReq" + } + } + ], + "responses": { + "200": { + "description": "{\"code\": 200, \"data\": { \"total\": 4, \"pageIndex\":0, \"total_page\":10, \"list\":{} }}", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + } + } + }, "/api/v1/mall/goods/user/vm_record": { "post": { "consumes": [ @@ -4494,6 +4560,39 @@ const docTemplate = `{ } } }, + "/api/v1/order/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-订单管理" + ], + "summary": "查询租赁订单列表", + "parameters": [ + { + "description": "查询租赁订单列表", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.OrderListReq" + } + } + ], + "responses": { + "200": { + "description": "{\"code\": 200, \"data\": { \"total\": 4, \"pageIndex\":0, \"total_page\":10, \"list\":{} }}", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + } + } + }, "/api/v1/order/list_export": { "post": { "consumes": [ @@ -4742,6 +4841,39 @@ const docTemplate = `{ } } }, + "/api/v1/recycle_card/order/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-订单管理" + ], + "summary": "查询小程序回收订单", + "parameters": [ + { + "description": "查询小程序回收订单", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.RecycleCardOrderListReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.RecycleCardOrderListRsp" + } + } + } + } + }, "/api/v1/role": { "get": { "security": [ @@ -5006,6 +5138,72 @@ const docTemplate = `{ } } }, + "/api/v1/stock/cannibalize_task/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-库存管理" + ], + "summary": "查询游戏卡库存调拨", + "parameters": [ + { + "description": "查询游戏卡库存调拨", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.CannibalizeTaskListReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.CannibalizeTaskListResp" + } + } + } + } + }, + "/api/v1/stock/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-库存管理" + ], + "summary": "查询小程序租卡库存列表", + "parameters": [ + { + "description": "查询小程序租卡库存列表", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.GameCardGoodsStockListReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.GameCardGoodsStockListResp" + } + } + } + } + }, "/api/v1/store/add": { "post": { "consumes": [ @@ -6401,6 +6599,90 @@ const docTemplate = `{ } } }, + "models.CannibalizeStockTask": { + "type": "object", + "properties": { + "count": { + "description": "GameCardId uint32 ` + "`" + `json:\"game_card_id\"` + "`" + ` // 游戏卡id", + "type": "integer" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "delivery_time": { + "type": "string" + }, + "from_store_id": { + "type": "integer" + }, + "from_store_name": { + "type": "string" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "in_storage_time": { + "type": "string" + }, + "status": { + "description": "1-待填调拨卡 2-待发货 3-已发货 4-已入库", + "type": "integer" + }, + "task_id": { + "description": "时间戳", + "type": "integer" + }, + "to_store_id": { + "type": "integer" + }, + "to_store_name": { + "type": "string" + } + } + }, + "models.CannibalizeTaskListReq": { + "type": "object", + "properties": { + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "status": { + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + } + } + }, + "models.CannibalizeTaskListResp": { + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.CannibalizeStockTask" + } + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total_page": { + "type": "integer" + } + } + }, "models.CashierStore": { "type": "object", "properties": { @@ -7719,6 +8001,10 @@ const docTemplate = `{ "models.ErpCommodityListReq": { "type": "object", "properties": { + "erp_barcode": { + "description": "商品条码", + "type": "string" + }, "erp_category_id": { "description": "商品分类id", "type": "integer" @@ -11065,6 +11351,197 @@ const docTemplate = `{ } } }, + "models.GameCardGoods": { + "type": "object", + "properties": { + "card_type": { + "description": "-用户共享 -公共", + "type": "string" + }, + "cooperative_business_id": { + "description": "合作商id", + "type": "integer" + }, + "cooperative_name": { + "description": "合作商名称", + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "function_state": { + "description": "1-异常 2-正常", + "type": "integer" + }, + "game_card": { + "description": "游戏", + "allOf": [ + { + "$ref": "#/definitions/models.GameCard" + } + ] + }, + "game_card_id": { + "description": "游戏卡id", + "type": "integer" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "provider": { + "description": "供应商", + "type": "string" + }, + "serial_number": { + "description": "编号", + "type": "string" + }, + "share_profit_type": { + "description": "1-非共享收益卡 2-共享收益卡", + "type": "integer" + }, + "status": { + "description": "状态:1-库存中 2-在途 3-客户持有 4-调拨 5-待收回 6-已收回 7-锁定", + "type": "integer" + }, + "stock_time": { + "description": "入库时间", + "type": "string" + }, + "store": { + "description": "门店", + "allOf": [ + { + "$ref": "#/definitions/models.Store" + } + ] + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "user_share_card_bill": { + "description": "StockRemovalType string ` + "`" + `json:\"stock_removal_type\"` + "`" + ` // 出库类型: card_retrieve 收回卡 card_issue_retrieve 收回卡异常", + "allOf": [ + { + "$ref": "#/definitions/models.UserShareCardBill" + } + ] + } + } + }, + "models.GameCardGoodsStockInfo": { + "type": "object", + "properties": { + "cover_img": { + "description": "封面", + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "game_card_id": { + "description": "游戏卡id", + "type": "integer" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "name": { + "description": "名称", + "type": "string" + }, + "order_count": { + "type": "integer" + }, + "price": { + "description": "价格", + "type": "integer" + }, + "rent_stock": { + "description": "租借库存", + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_stock": { + "description": "门店库存", + "type": "integer" + }, + "total_stock": { + "description": "卡池-总数", + "type": "integer" + }, + "user_hold_stock": { + "type": "integer" + } + } + }, + "models.GameCardGoodsStockListReq": { + "type": "object", + "properties": { + "cooperative_business_id": { + "description": "合作商id", + "type": "integer" + }, + "game_card_id": { + "description": "游戏卡id", + "type": "integer" + }, + "game_card_name": { + "description": "游戏卡", + "type": "string" + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + } + } + }, + "models.GameCardGoodsStockListResp": { + "type": "object", + "properties": { + "card_hold_count": { + "type": "integer" + }, + "card_total_count": { + "type": "integer" + }, + "card_total_stock": { + "type": "integer" + }, + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.GameCardGoodsStockInfo" + } + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_page": { + "type": "integer" + } + } + }, "models.GetErpPurchaseDemandReq": { "type": "object", "properties": { @@ -11125,6 +11602,78 @@ const docTemplate = `{ } } }, + "models.GetGameCardGoodsListReq": { + "type": "object", + "properties": { + "game_card_id": { + "type": "integer" + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "serial_number": { + "description": "编号", + "type": "string" + }, + "status": { + "type": "integer" + }, + "store_id": { + "type": "integer" + } + } + }, + "models.GetGameCardGoodsListResp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.GameCardGoods" + } + }, + "pageIndex": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_page": { + "type": "integer" + } + } + }, + "models.GoodsOrderListReq": { + "type": "object", + "properties": { + "goods_id": { + "description": "商品id", + "type": "integer" + }, + "order_id": { + "type": "integer" + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "refund_express_no": { + "description": "退货物流单号", + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "integer" + } + } + }, "models.GroupSendMessageCreateTemplateListReq": { "type": "object", "properties": { @@ -13508,6 +14057,177 @@ const docTemplate = `{ } } }, + "models.RecycleCardOrder": { + "type": "object", + "properties": { + "assistant_name": { + "description": "店员", + "type": "string" + }, + "attribute": { + "type": "string" + }, + "check_time": { + "type": "string" + }, + "cooperative_business_id": { + "description": "合作商id", + "type": "integer" + }, + "cooperative_name": { + "description": "合作商名称", + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "depression_rate": { + "type": "integer" + }, + "describe": { + "description": "描述", + "type": "string" + }, + "evaluation_time": { + "type": "string" + }, + "goods_id": { + "type": "integer" + }, + "goods_img": { + "type": "string" + }, + "goods_name": { + "type": "string" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "images": { + "description": "图片", + "type": "string" + }, + "keyword": { + "type": "string" + }, + "number": { + "description": "订单", + "type": "string" + }, + "original_price": { + "description": "原价", + "type": "integer" + }, + "price": { + "type": "integer" + }, + "remark": { + "description": "备注", + "type": "string" + }, + "retrieve_state": { + "description": "回收卡状态: 0-未完成 1-未确认 2-确认", + "type": "integer" + }, + "retrieve_time": { + "description": "审核时", + "type": "string" + }, + "serial_number": { + "type": "string" + }, + "state": { + "description": "1-待回收 2-已完成 3-已被拒 4-已取消", + "type": "integer" + }, + "store": { + "$ref": "#/definitions/models.Store" + }, + "store_id": { + "type": "integer" + }, + "store_name": { + "type": "string" + }, + "uid": { + "type": "integer" + }, + "user_info": { + "$ref": "#/definitions/models.UserInfo" + } + } + }, + "models.RecycleCardOrderListReq": { + "type": "object", + "properties": { + "audit_end_time": { + "type": "string" + }, + "audit_start_time": { + "type": "string" + }, + "cooperative_business_id": { + "type": "integer" + }, + "end_time": { + "type": "string" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "number": { + "type": "string" + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "retrieve_state": { + "description": "回收卡状态: 0-未完成 1-未确认 2-确认", + "type": "integer" + }, + "start_time": { + "type": "string" + }, + "state": { + "type": "integer" + }, + "store_id": { + "type": "integer" + }, + "uid": { + "type": "integer" + } + } + }, + "models.RecycleCardOrderListRsp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.RecycleCardOrder" + } + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "url": { + "type": "string" + } + } + }, "models.ReportAllotDetailData": { "type": "object", "properties": { @@ -13608,6 +14328,10 @@ const docTemplate = `{ "description": "商品名称", "type": "string" }, + "commodity_serial_number": { + "description": "商品编号", + "type": "string" + }, "deliver_store_id": { "description": "调出门店id", "type": "integer" @@ -14111,6 +14835,46 @@ const docTemplate = `{ } } }, + "models.ShareCardBillGame": { + "type": "object", + "properties": { + "bill_sn": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "game_card": { + "$ref": "#/definitions/models.GameCard" + }, + "game_card_id": { + "type": "integer" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "share_cards": { + "type": "array", + "items": { + "$ref": "#/definitions/models.UserShareCard" + } + }, + "state": { + "type": "string" + }, + "uid": { + "type": "integer" + }, + "user_share_card_bill_id": { + "type": "integer" + } + } + }, "models.ShopperPromotionCode": { "type": "object", "properties": { @@ -15521,6 +16285,160 @@ const docTemplate = `{ } } }, + "models.UserShareCard": { + "type": "object", + "properties": { + "allot_card_goods_id": { + "description": "库存共享卡id", + "type": "integer" + }, + "allot_serial_number": { + "description": "库存共享卡编号 分配收回卡 绑定新卡编号", + "type": "string" + }, + "bill_sn": { + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "game_card": { + "$ref": "#/definitions/models.GameCard" + }, + "game_card_goods": { + "$ref": "#/definitions/models.GameCardGoods" + }, + "game_card_goods_id": { + "type": "integer" + }, + "game_card_id": { + "type": "integer" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "profit_state": { + "description": "1-未生效 2-生效", + "type": "integer" + }, + "retrieve_game_card_goods_id": { + "description": "收回卡id", + "type": "integer" + }, + "retrieve_serial_number": { + "description": "收卡编号", + "type": "string" + }, + "serial_number": { + "description": "编号", + "type": "string" + }, + "share_card_bill_game_id": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "total_vm": { + "description": "累计积分", + "type": "integer" + }, + "uid": { + "type": "integer" + }, + "user_info": { + "$ref": "#/definitions/models.UserInfo" + }, + "user_share_card": { + "$ref": "#/definitions/models.UserShareCard" + }, + "user_share_card_bill_id": { + "type": "integer" + } + } + }, + "models.UserShareCardBill": { + "type": "object", + "properties": { + "bill_games": { + "description": "user_share_card_bill", + "type": "array", + "items": { + "$ref": "#/definitions/models.ShareCardBillGame" + } + }, + "bill_sn": { + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "express_company": { + "description": "物流公司", + "type": "string" + }, + "express_company_no": { + "description": "物流公司编号", + "type": "string" + }, + "express_no": { + "description": "物流单号", + "type": "string" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "remark": { + "type": "string" + }, + "retrieve_time": { + "description": "收回卡时间 申请收回", + "type": "string" + }, + "send_card_time": { + "description": "递送卡时间", + "type": "string" + }, + "send_card_type": { + "description": "1-送卡 2-邮寄", + "type": "integer" + }, + "state": { + "type": "string" + }, + "stock_removal_time": { + "description": "出库时间", + "type": "string" + }, + "stock_time": { + "description": "入库时间", + "type": "string" + }, + "store": { + "description": "门店", + "allOf": [ + { + "$ref": "#/definitions/models.Store" + } + ] + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "uid": { + "type": "integer" + } + } + }, "tools.Params": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index c8ad721..1a76ce3 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -2708,6 +2708,39 @@ } } }, + "/api/v1/goods/goods_list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-库存管理" + ], + "summary": "查询库存游戏卡串码", + "parameters": [ + { + "description": "查询库存游戏卡串码", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.GetGameCardGoodsListReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.GetGameCardGoodsListResp" + } + } + } + } + }, "/api/v1/group_send_message/template/list": { "post": { "consumes": [ @@ -4010,6 +4043,39 @@ } } }, + "/api/v1/mall/goods/order/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "订单管理" + ], + "summary": "查询商城订单列表", + "parameters": [ + { + "description": "查询商城订单列表", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.GoodsOrderListReq" + } + } + ], + "responses": { + "200": { + "description": "{\"code\": 200, \"data\": { \"total\": 4, \"pageIndex\":0, \"total_page\":10, \"list\":{} }}", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + } + } + }, "/api/v1/mall/goods/user/vm_record": { "post": { "consumes": [ @@ -4483,6 +4549,39 @@ } } }, + "/api/v1/order/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-订单管理" + ], + "summary": "查询租赁订单列表", + "parameters": [ + { + "description": "查询租赁订单列表", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.OrderListReq" + } + } + ], + "responses": { + "200": { + "description": "{\"code\": 200, \"data\": { \"total\": 4, \"pageIndex\":0, \"total_page\":10, \"list\":{} }}", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + } + } + }, "/api/v1/order/list_export": { "post": { "consumes": [ @@ -4731,6 +4830,39 @@ } } }, + "/api/v1/recycle_card/order/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-订单管理" + ], + "summary": "查询小程序回收订单", + "parameters": [ + { + "description": "查询小程序回收订单", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.RecycleCardOrderListReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.RecycleCardOrderListRsp" + } + } + } + } + }, "/api/v1/role": { "get": { "security": [ @@ -4995,6 +5127,72 @@ } } }, + "/api/v1/stock/cannibalize_task/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-库存管理" + ], + "summary": "查询游戏卡库存调拨", + "parameters": [ + { + "description": "查询游戏卡库存调拨", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.CannibalizeTaskListReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.CannibalizeTaskListResp" + } + } + } + } + }, + "/api/v1/stock/list": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "租卡系统-库存管理" + ], + "summary": "查询小程序租卡库存列表", + "parameters": [ + { + "description": "查询小程序租卡库存列表", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.GameCardGoodsStockListReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.GameCardGoodsStockListResp" + } + } + } + } + }, "/api/v1/store/add": { "post": { "consumes": [ @@ -6390,6 +6588,90 @@ } } }, + "models.CannibalizeStockTask": { + "type": "object", + "properties": { + "count": { + "description": "GameCardId uint32 `json:\"game_card_id\"` // 游戏卡id", + "type": "integer" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "delivery_time": { + "type": "string" + }, + "from_store_id": { + "type": "integer" + }, + "from_store_name": { + "type": "string" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "in_storage_time": { + "type": "string" + }, + "status": { + "description": "1-待填调拨卡 2-待发货 3-已发货 4-已入库", + "type": "integer" + }, + "task_id": { + "description": "时间戳", + "type": "integer" + }, + "to_store_id": { + "type": "integer" + }, + "to_store_name": { + "type": "string" + } + } + }, + "models.CannibalizeTaskListReq": { + "type": "object", + "properties": { + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "status": { + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + } + } + }, + "models.CannibalizeTaskListResp": { + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.CannibalizeStockTask" + } + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total_page": { + "type": "integer" + } + } + }, "models.CashierStore": { "type": "object", "properties": { @@ -7708,6 +7990,10 @@ "models.ErpCommodityListReq": { "type": "object", "properties": { + "erp_barcode": { + "description": "商品条码", + "type": "string" + }, "erp_category_id": { "description": "商品分类id", "type": "integer" @@ -11054,6 +11340,197 @@ } } }, + "models.GameCardGoods": { + "type": "object", + "properties": { + "card_type": { + "description": "-用户共享 -公共", + "type": "string" + }, + "cooperative_business_id": { + "description": "合作商id", + "type": "integer" + }, + "cooperative_name": { + "description": "合作商名称", + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "function_state": { + "description": "1-异常 2-正常", + "type": "integer" + }, + "game_card": { + "description": "游戏", + "allOf": [ + { + "$ref": "#/definitions/models.GameCard" + } + ] + }, + "game_card_id": { + "description": "游戏卡id", + "type": "integer" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "provider": { + "description": "供应商", + "type": "string" + }, + "serial_number": { + "description": "编号", + "type": "string" + }, + "share_profit_type": { + "description": "1-非共享收益卡 2-共享收益卡", + "type": "integer" + }, + "status": { + "description": "状态:1-库存中 2-在途 3-客户持有 4-调拨 5-待收回 6-已收回 7-锁定", + "type": "integer" + }, + "stock_time": { + "description": "入库时间", + "type": "string" + }, + "store": { + "description": "门店", + "allOf": [ + { + "$ref": "#/definitions/models.Store" + } + ] + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "user_share_card_bill": { + "description": "StockRemovalType string `json:\"stock_removal_type\"` // 出库类型: card_retrieve 收回卡 card_issue_retrieve 收回卡异常", + "allOf": [ + { + "$ref": "#/definitions/models.UserShareCardBill" + } + ] + } + } + }, + "models.GameCardGoodsStockInfo": { + "type": "object", + "properties": { + "cover_img": { + "description": "封面", + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "game_card_id": { + "description": "游戏卡id", + "type": "integer" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "name": { + "description": "名称", + "type": "string" + }, + "order_count": { + "type": "integer" + }, + "price": { + "description": "价格", + "type": "integer" + }, + "rent_stock": { + "description": "租借库存", + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_stock": { + "description": "门店库存", + "type": "integer" + }, + "total_stock": { + "description": "卡池-总数", + "type": "integer" + }, + "user_hold_stock": { + "type": "integer" + } + } + }, + "models.GameCardGoodsStockListReq": { + "type": "object", + "properties": { + "cooperative_business_id": { + "description": "合作商id", + "type": "integer" + }, + "game_card_id": { + "description": "游戏卡id", + "type": "integer" + }, + "game_card_name": { + "description": "游戏卡", + "type": "string" + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + } + } + }, + "models.GameCardGoodsStockListResp": { + "type": "object", + "properties": { + "card_hold_count": { + "type": "integer" + }, + "card_total_count": { + "type": "integer" + }, + "card_total_stock": { + "type": "integer" + }, + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.GameCardGoodsStockInfo" + } + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_page": { + "type": "integer" + } + } + }, "models.GetErpPurchaseDemandReq": { "type": "object", "properties": { @@ -11114,6 +11591,78 @@ } } }, + "models.GetGameCardGoodsListReq": { + "type": "object", + "properties": { + "game_card_id": { + "type": "integer" + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "serial_number": { + "description": "编号", + "type": "string" + }, + "status": { + "type": "integer" + }, + "store_id": { + "type": "integer" + } + } + }, + "models.GetGameCardGoodsListResp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.GameCardGoods" + } + }, + "pageIndex": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_page": { + "type": "integer" + } + } + }, + "models.GoodsOrderListReq": { + "type": "object", + "properties": { + "goods_id": { + "description": "商品id", + "type": "integer" + }, + "order_id": { + "type": "integer" + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "refund_express_no": { + "description": "退货物流单号", + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "integer" + } + } + }, "models.GroupSendMessageCreateTemplateListReq": { "type": "object", "properties": { @@ -13497,6 +14046,177 @@ } } }, + "models.RecycleCardOrder": { + "type": "object", + "properties": { + "assistant_name": { + "description": "店员", + "type": "string" + }, + "attribute": { + "type": "string" + }, + "check_time": { + "type": "string" + }, + "cooperative_business_id": { + "description": "合作商id", + "type": "integer" + }, + "cooperative_name": { + "description": "合作商名称", + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "depression_rate": { + "type": "integer" + }, + "describe": { + "description": "描述", + "type": "string" + }, + "evaluation_time": { + "type": "string" + }, + "goods_id": { + "type": "integer" + }, + "goods_img": { + "type": "string" + }, + "goods_name": { + "type": "string" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "images": { + "description": "图片", + "type": "string" + }, + "keyword": { + "type": "string" + }, + "number": { + "description": "订单", + "type": "string" + }, + "original_price": { + "description": "原价", + "type": "integer" + }, + "price": { + "type": "integer" + }, + "remark": { + "description": "备注", + "type": "string" + }, + "retrieve_state": { + "description": "回收卡状态: 0-未完成 1-未确认 2-确认", + "type": "integer" + }, + "retrieve_time": { + "description": "审核时", + "type": "string" + }, + "serial_number": { + "type": "string" + }, + "state": { + "description": "1-待回收 2-已完成 3-已被拒 4-已取消", + "type": "integer" + }, + "store": { + "$ref": "#/definitions/models.Store" + }, + "store_id": { + "type": "integer" + }, + "store_name": { + "type": "string" + }, + "uid": { + "type": "integer" + }, + "user_info": { + "$ref": "#/definitions/models.UserInfo" + } + } + }, + "models.RecycleCardOrderListReq": { + "type": "object", + "properties": { + "audit_end_time": { + "type": "string" + }, + "audit_start_time": { + "type": "string" + }, + "cooperative_business_id": { + "type": "integer" + }, + "end_time": { + "type": "string" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "number": { + "type": "string" + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "retrieve_state": { + "description": "回收卡状态: 0-未完成 1-未确认 2-确认", + "type": "integer" + }, + "start_time": { + "type": "string" + }, + "state": { + "type": "integer" + }, + "store_id": { + "type": "integer" + }, + "uid": { + "type": "integer" + } + } + }, + "models.RecycleCardOrderListRsp": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/models.RecycleCardOrder" + } + }, + "pageIndex": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "url": { + "type": "string" + } + } + }, "models.ReportAllotDetailData": { "type": "object", "properties": { @@ -13597,6 +14317,10 @@ "description": "商品名称", "type": "string" }, + "commodity_serial_number": { + "description": "商品编号", + "type": "string" + }, "deliver_store_id": { "description": "调出门店id", "type": "integer" @@ -14100,6 +14824,46 @@ } } }, + "models.ShareCardBillGame": { + "type": "object", + "properties": { + "bill_sn": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "game_card": { + "$ref": "#/definitions/models.GameCard" + }, + "game_card_id": { + "type": "integer" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "share_cards": { + "type": "array", + "items": { + "$ref": "#/definitions/models.UserShareCard" + } + }, + "state": { + "type": "string" + }, + "uid": { + "type": "integer" + }, + "user_share_card_bill_id": { + "type": "integer" + } + } + }, "models.ShopperPromotionCode": { "type": "object", "properties": { @@ -15510,6 +16274,160 @@ } } }, + "models.UserShareCard": { + "type": "object", + "properties": { + "allot_card_goods_id": { + "description": "库存共享卡id", + "type": "integer" + }, + "allot_serial_number": { + "description": "库存共享卡编号 分配收回卡 绑定新卡编号", + "type": "string" + }, + "bill_sn": { + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "game_card": { + "$ref": "#/definitions/models.GameCard" + }, + "game_card_goods": { + "$ref": "#/definitions/models.GameCardGoods" + }, + "game_card_goods_id": { + "type": "integer" + }, + "game_card_id": { + "type": "integer" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "profit_state": { + "description": "1-未生效 2-生效", + "type": "integer" + }, + "retrieve_game_card_goods_id": { + "description": "收回卡id", + "type": "integer" + }, + "retrieve_serial_number": { + "description": "收卡编号", + "type": "string" + }, + "serial_number": { + "description": "编号", + "type": "string" + }, + "share_card_bill_game_id": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "total_vm": { + "description": "累计积分", + "type": "integer" + }, + "uid": { + "type": "integer" + }, + "user_info": { + "$ref": "#/definitions/models.UserInfo" + }, + "user_share_card": { + "$ref": "#/definitions/models.UserShareCard" + }, + "user_share_card_bill_id": { + "type": "integer" + } + } + }, + "models.UserShareCardBill": { + "type": "object", + "properties": { + "bill_games": { + "description": "user_share_card_bill", + "type": "array", + "items": { + "$ref": "#/definitions/models.ShareCardBillGame" + } + }, + "bill_sn": { + "type": "string" + }, + "createdAt": { + "description": "创建时间", + "type": "string" + }, + "express_company": { + "description": "物流公司", + "type": "string" + }, + "express_company_no": { + "description": "物流公司编号", + "type": "string" + }, + "express_no": { + "description": "物流单号", + "type": "string" + }, + "id": { + "description": "数据库记录编号", + "type": "integer" + }, + "remark": { + "type": "string" + }, + "retrieve_time": { + "description": "收回卡时间 申请收回", + "type": "string" + }, + "send_card_time": { + "description": "递送卡时间", + "type": "string" + }, + "send_card_type": { + "description": "1-送卡 2-邮寄", + "type": "integer" + }, + "state": { + "type": "string" + }, + "stock_removal_time": { + "description": "出库时间", + "type": "string" + }, + "stock_time": { + "description": "入库时间", + "type": "string" + }, + "store": { + "description": "门店", + "allOf": [ + { + "$ref": "#/definitions/models.Store" + } + ] + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "uid": { + "type": "integer" + } + } + }, "tools.Params": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 05739b8..09d1bfa 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -363,6 +363,63 @@ definitions: required: - print_list_info type: object + models.CannibalizeStockTask: + properties: + count: + description: GameCardId uint32 `json:"game_card_id"` // 游戏卡id + type: integer + createdAt: + description: 创建时间 + type: string + delivery_time: + type: string + from_store_id: + type: integer + from_store_name: + type: string + id: + description: 数据库记录编号 + type: integer + in_storage_time: + type: string + status: + description: 1-待填调拨卡 2-待发货 3-已发货 4-已入库 + type: integer + task_id: + description: 时间戳 + type: integer + to_store_id: + type: integer + to_store_name: + type: string + type: object + models.CannibalizeTaskListReq: + properties: + pageIndex: + type: integer + pageSize: + type: integer + status: + type: integer + store_id: + description: 门店id + type: integer + type: object + models.CannibalizeTaskListResp: + properties: + count: + type: integer + list: + items: + $ref: '#/definitions/models.CannibalizeStockTask' + type: array + pageIndex: + type: integer + pageSize: + type: integer + total_page: + type: integer + type: object models.CashierStore: properties: store_id: @@ -1324,6 +1381,9 @@ definitions: type: object models.ErpCommodityListReq: properties: + erp_barcode: + description: 商品条码 + type: string erp_category_id: description: 商品分类id type: integer @@ -3768,6 +3828,138 @@ definitions: description: 查看人数 type: integer type: object + models.GameCardGoods: + properties: + card_type: + description: -用户共享 -公共 + type: string + cooperative_business_id: + description: 合作商id + type: integer + cooperative_name: + description: 合作商名称 + type: string + createdAt: + description: 创建时间 + type: string + function_state: + description: 1-异常 2-正常 + type: integer + game_card: + allOf: + - $ref: '#/definitions/models.GameCard' + description: 游戏 + game_card_id: + description: 游戏卡id + type: integer + id: + description: 数据库记录编号 + type: integer + provider: + description: 供应商 + type: string + serial_number: + description: 编号 + type: string + share_profit_type: + description: 1-非共享收益卡 2-共享收益卡 + type: integer + status: + description: 状态:1-库存中 2-在途 3-客户持有 4-调拨 5-待收回 6-已收回 7-锁定 + type: integer + stock_time: + description: 入库时间 + type: string + store: + allOf: + - $ref: '#/definitions/models.Store' + description: 门店 + store_id: + description: 门店id + type: integer + user_share_card_bill: + allOf: + - $ref: '#/definitions/models.UserShareCardBill' + description: 'StockRemovalType string `json:"stock_removal_type"` + // 出库类型: card_retrieve 收回卡 card_issue_retrieve 收回卡异常' + type: object + models.GameCardGoodsStockInfo: + properties: + cover_img: + description: 封面 + type: string + createdAt: + description: 创建时间 + type: string + game_card_id: + description: 游戏卡id + type: integer + id: + description: 数据库记录编号 + type: integer + name: + description: 名称 + type: string + order_count: + type: integer + price: + description: 价格 + type: integer + rent_stock: + description: 租借库存 + type: integer + store_id: + description: 门店id + type: integer + store_stock: + description: 门店库存 + type: integer + total_stock: + description: 卡池-总数 + type: integer + user_hold_stock: + type: integer + type: object + models.GameCardGoodsStockListReq: + properties: + cooperative_business_id: + description: 合作商id + type: integer + game_card_id: + description: 游戏卡id + type: integer + game_card_name: + description: 游戏卡 + type: string + pageIndex: + type: integer + pageSize: + type: integer + store_id: + description: 门店id + type: integer + type: object + models.GameCardGoodsStockListResp: + properties: + card_hold_count: + type: integer + card_total_count: + type: integer + card_total_stock: + type: integer + list: + items: + $ref: '#/definitions/models.GameCardGoodsStockInfo' + type: array + pageIndex: + type: integer + pageSize: + type: integer + total: + type: integer + total_page: + type: integer + type: object models.GetErpPurchaseDemandReq: properties: erp_category_id: @@ -3811,6 +4003,54 @@ definitions: description: 数据总条数 type: integer type: object + models.GetGameCardGoodsListReq: + properties: + game_card_id: + type: integer + pageIndex: + type: integer + pageSize: + type: integer + serial_number: + description: 编号 + type: string + status: + type: integer + store_id: + type: integer + type: object + models.GetGameCardGoodsListResp: + properties: + list: + items: + $ref: '#/definitions/models.GameCardGoods' + type: array + pageIndex: + type: integer + total: + type: integer + total_page: + type: integer + type: object + models.GoodsOrderListReq: + properties: + goods_id: + description: 商品id + type: integer + order_id: + type: integer + pageIndex: + type: integer + pageSize: + type: integer + refund_express_no: + description: 退货物流单号 + type: string + state: + type: string + uid: + type: integer + type: object models.GroupSendMessageCreateTemplateListReq: properties: pageIndex: @@ -5522,6 +5762,124 @@ definitions: description: 每页展示条数 type: integer type: object + models.RecycleCardOrder: + properties: + assistant_name: + description: 店员 + type: string + attribute: + type: string + check_time: + type: string + cooperative_business_id: + description: 合作商id + type: integer + cooperative_name: + description: 合作商名称 + type: string + createdAt: + description: 创建时间 + type: string + depression_rate: + type: integer + describe: + description: 描述 + type: string + evaluation_time: + type: string + goods_id: + type: integer + goods_img: + type: string + goods_name: + type: string + id: + description: 数据库记录编号 + type: integer + images: + description: 图片 + type: string + keyword: + type: string + number: + description: 订单 + type: string + original_price: + description: 原价 + type: integer + price: + type: integer + remark: + description: 备注 + type: string + retrieve_state: + description: '回收卡状态: 0-未完成 1-未确认 2-确认' + type: integer + retrieve_time: + description: 审核时 + type: string + serial_number: + type: string + state: + description: 1-待回收 2-已完成 3-已被拒 4-已取消 + type: integer + store: + $ref: '#/definitions/models.Store' + store_id: + type: integer + store_name: + type: string + uid: + type: integer + user_info: + $ref: '#/definitions/models.UserInfo' + type: object + models.RecycleCardOrderListReq: + properties: + audit_end_time: + type: string + audit_start_time: + type: string + cooperative_business_id: + type: integer + end_time: + type: string + is_export: + description: 1-导出 + type: integer + number: + type: string + pageIndex: + type: integer + pageSize: + type: integer + retrieve_state: + description: '回收卡状态: 0-未完成 1-未确认 2-确认' + type: integer + start_time: + type: string + state: + type: integer + store_id: + type: integer + uid: + type: integer + type: object + models.RecycleCardOrderListRsp: + properties: + list: + items: + $ref: '#/definitions/models.RecycleCardOrder' + type: array + pageIndex: + type: integer + pageSize: + type: integer + total: + type: integer + url: + type: string + type: object models.ReportAllotDetailData: properties: audit_time: @@ -5596,6 +5954,9 @@ definitions: commodity_name: description: 商品名称 type: string + commodity_serial_number: + description: 商品编号 + type: string deliver_store_id: description: 调出门店id type: integer @@ -5967,6 +6328,33 @@ definitions: description: 门店名称 type: string type: object + models.ShareCardBillGame: + properties: + bill_sn: + type: string + count: + type: integer + createdAt: + description: 创建时间 + type: string + game_card: + $ref: '#/definitions/models.GameCard' + game_card_id: + type: integer + id: + description: 数据库记录编号 + type: integer + share_cards: + items: + $ref: '#/definitions/models.UserShareCard' + type: array + state: + type: string + uid: + type: integer + user_share_card_bill_id: + type: integer + type: object models.ShopperPromotionCode: properties: code: @@ -6989,6 +7377,114 @@ definitions: description: 总条数 type: integer type: object + models.UserShareCard: + properties: + allot_card_goods_id: + description: 库存共享卡id + type: integer + allot_serial_number: + description: 库存共享卡编号 分配收回卡 绑定新卡编号 + type: string + bill_sn: + type: string + createdAt: + description: 创建时间 + type: string + game_card: + $ref: '#/definitions/models.GameCard' + game_card_goods: + $ref: '#/definitions/models.GameCardGoods' + game_card_goods_id: + type: integer + game_card_id: + type: integer + id: + description: 数据库记录编号 + type: integer + profit_state: + description: 1-未生效 2-生效 + type: integer + retrieve_game_card_goods_id: + description: 收回卡id + type: integer + retrieve_serial_number: + description: 收卡编号 + type: string + serial_number: + description: 编号 + type: string + share_card_bill_game_id: + type: integer + state: + type: string + store_id: + description: 门店id + type: integer + total_vm: + description: 累计积分 + type: integer + uid: + type: integer + user_info: + $ref: '#/definitions/models.UserInfo' + user_share_card: + $ref: '#/definitions/models.UserShareCard' + user_share_card_bill_id: + type: integer + type: object + models.UserShareCardBill: + properties: + bill_games: + description: user_share_card_bill + items: + $ref: '#/definitions/models.ShareCardBillGame' + type: array + bill_sn: + type: string + createdAt: + description: 创建时间 + type: string + express_company: + description: 物流公司 + type: string + express_company_no: + description: 物流公司编号 + type: string + express_no: + description: 物流单号 + type: string + id: + description: 数据库记录编号 + type: integer + remark: + type: string + retrieve_time: + description: 收回卡时间 申请收回 + type: string + send_card_time: + description: 递送卡时间 + type: string + send_card_type: + description: 1-送卡 2-邮寄 + type: integer + state: + type: string + stock_removal_time: + description: 出库时间 + type: string + stock_time: + description: 入库时间 + type: string + store: + allOf: + - $ref: '#/definitions/models.Store' + description: 门店 + store_id: + description: 门店id + type: integer + uid: + type: integer + type: object tools.Params: properties: treeCode: @@ -8889,6 +9385,27 @@ paths: tags: - 采购管理 - V1.3.0 + /api/v1/goods/goods_list: + post: + consumes: + - application/json + parameters: + - description: 查询库存游戏卡串码 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.GetGameCardGoodsListReq' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/models.GetGameCardGoodsListResp' + summary: 查询库存游戏卡串码 + tags: + - 租卡系统-库存管理 /api/v1/group_send_message/template/list: post: consumes: @@ -9716,6 +10233,28 @@ paths: summary: 登录日志列表 tags: - system/日志 + /api/v1/mall/goods/order/list: + post: + consumes: + - application/json + parameters: + - description: 查询商城订单列表 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.GoodsOrderListReq' + produces: + - application/json + responses: + "200": + description: '{"code": 200, "data": { "total": 4, "pageIndex":0, "total_page":10, + "list":{} }}' + schema: + $ref: '#/definitions/app.Response' + summary: 查询商城订单列表 + tags: + - 订单管理 /api/v1/mall/goods/user/vm_record: post: consumes: @@ -10014,6 +10553,28 @@ paths: summary: 操作日志列表(update) tags: - system/日志 + /api/v1/order/list: + post: + consumes: + - application/json + parameters: + - description: 查询租赁订单列表 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.OrderListReq' + produces: + - application/json + responses: + "200": + description: '{"code": 200, "data": { "total": 4, "pageIndex":0, "total_page":10, + "list":{} }}' + schema: + $ref: '#/definitions/app.Response' + summary: 查询租赁订单列表 + tags: + - 租卡系统-订单管理 /api/v1/order/list_export: post: consumes: @@ -10171,6 +10732,27 @@ paths: summary: 上传图片 tags: - system/公共接口 + /api/v1/recycle_card/order/list: + post: + consumes: + - application/json + parameters: + - description: 查询小程序回收订单 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.RecycleCardOrderListReq' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/models.RecycleCardOrderListRsp' + summary: 查询小程序回收订单 + tags: + - 租卡系统-订单管理 /api/v1/role: get: description: 获取JSON @@ -10339,6 +10921,48 @@ paths: summary: 系统信息 tags: - system/系统信息 + /api/v1/stock/cannibalize_task/list: + post: + consumes: + - application/json + parameters: + - description: 查询游戏卡库存调拨 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.CannibalizeTaskListReq' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/models.CannibalizeTaskListResp' + summary: 查询游戏卡库存调拨 + tags: + - 租卡系统-库存管理 + /api/v1/stock/list: + post: + consumes: + - application/json + parameters: + - description: 查询小程序租卡库存列表 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.GameCardGoodsStockListReq' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/models.GameCardGoodsStockListResp' + summary: 查询小程序租卡库存列表 + tags: + - 租卡系统-库存管理 /api/v1/store/add: post: consumes: diff --git a/test/stock_test.go b/test/stock_test.go index d49021d..1a502f5 100644 --- a/test/stock_test.go +++ b/test/stock_test.go @@ -80,7 +80,7 @@ func SetGameCardStock() { //var userHoldCount int64 //err = DBTest.Table("order").Where("game_card_id", cardStocks[i].GameCardId). - // Where("store_id", cardStocks[i].StoreId).Where("card_status in (?)", 2, 3).Count(&userHoldCount).Error + // Where("store_id", cardStocks[i].StoreId).Where("card_status in (?)", 2, 3).Total(&userHoldCount).Error //if err != nil { // fmt.Println("err:", err) //}