From c2c2782a7b28c0bd136084359d30cdf139e2c154 Mon Sep 17 00:00:00 2001 From: chenlin Date: Thu, 23 May 2024 15:30:20 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E7=BC=BA=E9=99=B7=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=EF=BC=9A=20=EF=BC=881?= =?UTF-8?q?=EF=BC=89=E4=BC=98=E5=8C=96=E5=BA=97=E5=91=98=E7=9A=84=E5=A2=9E?= =?UTF-8?q?=E5=88=A0=E6=94=B9=E6=9F=A5=E9=80=BB=E8=BE=91=EF=BC=9B=20?= =?UTF-8?q?=EF=BC=882=EF=BC=89=E5=BA=97=E5=91=98=E7=BB=A9=E6=95=88?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=92=E8=89=B2=E5=AD=97=E6=AE=B5=E5=8F=8A?= =?UTF-8?q?=E5=85=B6=E5=A4=8D=E9=80=89=E6=9F=A5=E8=AF=A2=EF=BC=9B=20?= =?UTF-8?q?=EF=BC=883=EF=BC=89=E9=9B=B6=E5=94=AE=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=87=91=E9=A2=9D=E8=B0=83=E6=95=B4=EF=BC=9B?= =?UTF-8?q?=20=EF=BC=884=EF=BC=89=E9=9B=B6=E5=94=AE=E9=94=80=E5=94=AE?= =?UTF-8?q?=E6=97=B6=E6=89=AB=E7=A0=81=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E9=9D=9E=E6=9C=AC=E5=9C=B0=E5=BA=93=E5=AD=98=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=94=80=E5=94=AE=EF=BC=8C=E9=9D=9E=E6=9C=AC?= =?UTF-8?q?=E5=BA=97=E9=94=80=E5=94=AE=E4=B8=8D=E6=94=AF=E6=8C=81=E9=80=80?= =?UTF-8?q?=E8=B4=A7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/erpordermanage/erp_order.go | 2 + app/admin/apis/inventorymanage/Inventory.go | 2 +- app/admin/apis/purchasemanage/purchase.go | 2 +- app/admin/apis/system/sysuser.go | 65 ++++-- app/admin/models/commodity.go | 16 +- app/admin/models/decision.go | 36 ++- app/admin/models/erp_order.go | 27 ++- app/admin/models/game_card.go | 8 +- app/admin/models/purchase.go | 38 +-- app/admin/models/store.go | 2 +- app/admin/models/sysuser.go | 72 +++++- app/admin/models/user.go | 245 +++++++++++--------- docs/docs.go | 62 ++--- docs/swagger.json | 62 ++--- docs/swagger.yaml | 43 ++-- 15 files changed, 434 insertions(+), 248 deletions(-) diff --git a/app/admin/apis/erpordermanage/erp_order.go b/app/admin/apis/erpordermanage/erp_order.go index 633519b..f8b2ef8 100644 --- a/app/admin/apis/erpordermanage/erp_order.go +++ b/app/admin/apis/erpordermanage/erp_order.go @@ -100,6 +100,8 @@ func ErpOrderList(c *gin.Context) { logger.Error("erp commodity list err:", logger.Field("err", err)) if err.Error() == "库存已有该串码商品" { app.Error(c, http.StatusInternalServerError, err, err.Error()) + } else if err.Error() == "非当前门店所售商品,需前往对应门店退货" { + app.Error(c, http.StatusInternalServerError, err, err.Error()) } else { app.Error(c, http.StatusInternalServerError, err, "查询失败:"+err.Error()) } diff --git a/app/admin/apis/inventorymanage/Inventory.go b/app/admin/apis/inventorymanage/Inventory.go index fd44947..b7f2dd6 100644 --- a/app/admin/apis/inventorymanage/Inventory.go +++ b/app/admin/apis/inventorymanage/Inventory.go @@ -103,7 +103,7 @@ func GetInventoryDetail(c *gin.Context) { } if req.ScanCode != "" { // 当扫码时需要对返回的数据做校验 - err = models.CheckScanCodeResp(req.ScanCode, list) + err = models.CheckScanCodeResp(req.ScanCode, req.StoreId, list) if err != nil { //logger.Error("erp stock err:", err) app.Error(c, http.StatusInternalServerError, err, err.Error()) diff --git a/app/admin/apis/purchasemanage/purchase.go b/app/admin/apis/purchasemanage/purchase.go index b67fbeb..6e7a27f 100644 --- a/app/admin/apis/purchasemanage/purchase.go +++ b/app/admin/apis/purchasemanage/purchase.go @@ -718,7 +718,7 @@ func ErpPurchaseDemandGet(c *gin.Context) { return } - resp, err := model.GetErpPurchaseDemand(req) + resp, err := model.GetErpPurchaseDemand(req, c) if err != nil { logger.Error("GetErpPurchaseDemand err:", logger.Field("err", err)) app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error()) diff --git a/app/admin/apis/system/sysuser.go b/app/admin/apis/system/sysuser.go index abb56fe..4e42009 100644 --- a/app/admin/apis/system/sysuser.go +++ b/app/admin/apis/system/sysuser.go @@ -232,6 +232,8 @@ func InsertSysUser(c *gin.Context) { tools.HasError(err, "数据解析失败", 500) } sysUser.StoreData = string(storeDataJSON) + } else { + sysUser.StoreData = "" } begin := orm.Eloquent.Begin() sysUser.CreateBy = tools.GetUserIdStr(c) @@ -239,7 +241,7 @@ func InsertSysUser(c *gin.Context) { // 如果添加了小程序id,则需要更新user表的user_type字段为2-店员 if req.Uid != 0 { - err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant) + err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId)) if err != nil { begin.Rollback() logger.Error("UpdateUserType err:", logger.Field("err", err)) @@ -332,6 +334,8 @@ func UpdateSysUser(c *gin.Context) { tools.HasError(err, "数据解析失败", 500) } data.StoreData = string(storeDataJSON) + } else { + data.StoreData = "" } begin := orm.Eloquent.Begin() @@ -341,22 +345,24 @@ func UpdateSysUser(c *gin.Context) { // 判断是否修改了uid if sysInfo.Uid == 0 && req.Uid != 0 { // 新增uid,直接更新为2即可 - err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant) + err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId)) } else if sysInfo.Uid != 0 { if sysInfo.Uid != req.Uid { - if req.Uid != 0 { - // 原uid的状态更新为1 - err = models.UpdateUserType(begin, sysInfo.Uid, models.UserTypeConsumer) - if err != nil { - begin.Rollback() - logger.Error("UpdateUserType err:", logger.Field("err", err)) - app.Error(c, http.StatusInternalServerError, err, "修改失败") - return - } + // 原uid的状态更新为1 + err = models.UpdateUserType(begin, sysInfo.Uid, models.UserTypeConsumer, 0) + if err != nil { + begin.Rollback() + logger.Error("UpdateUserType err:", logger.Field("err", err)) + app.Error(c, http.StatusInternalServerError, err, "修改失败") + return } - // 新uid状态更新为2 - err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant) + if req.Uid != 0 { + // 新uid状态更新为2 + err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId)) + } + } else if sysInfo.Uid == req.Uid && sysInfo.RoleId != req.RoleId { // 更改了用户角色 + err = models.UpdateUserType(begin, sysInfo.Uid, models.UserTypeShopAssistant, uint32(req.RoleId)) } } if err != nil { @@ -377,6 +383,7 @@ func UpdateSysUser(c *gin.Context) { app.OK(c, result, "修改成功") } +// DeleteSysUser // @Summary 删除用户数据 // @Description 删除数据 // @Tags system/用户 @@ -388,8 +395,36 @@ func DeleteSysUser(c *gin.Context) { var data models.SysUser data.UpdateBy = tools.GetUserIdStr(c) IDS := tools.IdsStrToIdsIntGroup("userId", c) - result, err := data.BatchDelete(IDS) - tools.HasError(err, "删除失败", 500) + + begin := orm.Eloquent.Begin() + for _, item := range IDS { + data.UserId = item + result, err := data.Get() + if err != nil { + tools.HasError(err, "删除失败", 500) + } + err = models.UpdateUserType(begin, result.Uid, models.UserTypeConsumer, 0) + if err != nil { + begin.Rollback() + logger.Error("DeleteSysUser UpdateUserType err:", logger.Field("err", err)) + tools.HasError(err, "删除失败", 500) + } + } + + result, err := data.BatchDelete(begin, IDS) + if err != nil { + begin.Rollback() + logger.Error("DeleteSysUser BatchDelete err:", logger.Field("err", err)) + tools.HasError(err, "删除失败", 500) + } + + err = begin.Commit().Error + if err != nil { + begin.Rollback() + logger.Error("DeleteSysUser commit err:", logger.Field("err", err)) + tools.HasError(err, "删除失败", 500) + } + app.OK(c, result, "删除成功") } diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index 35c1e61..4fb5265 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -1491,6 +1491,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id AND erp_stock.store_id = ?", m.StoreId). //Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id"). Joins("LEFT JOIN erp_category c ON erp_commodity.erp_category_id = c.id"). + Group("erp_commodity.id"). //Where("erp_stock.count = 0 AND erp_stock.store_id = ?", m.StoreId). Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " + "ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " + @@ -1500,6 +1501,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id AND erp_stock.store_id = ?", m.StoreId). //Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id"). Joins("LEFT JOIN erp_category c ON erp_commodity.erp_category_id = c.id"). + Group("erp_commodity.id"). //Where("erp_stock.count = 0 AND erp_stock.store_id = ?", m.StoreId). Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " + "ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " + @@ -1508,7 +1510,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e if len(storeList) == 0 { qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " + "COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count"). - Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count FROM erp_stock GROUP BY erp_commodity_id) " + + Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock GROUP BY erp_commodity_id) " + "erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id"). Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id"). Where("erp_stock.count IS NULL OR erp_stock.count = 0"). @@ -1517,7 +1519,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e "CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)") es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " + "COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count"). - Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count FROM erp_stock GROUP BY erp_commodity_id) " + + Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock GROUP BY erp_commodity_id) " + "erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id"). Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id"). Where("erp_stock.count IS NULL OR erp_stock.count = 0"). @@ -1527,7 +1529,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e } else { qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, "+ "COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count"). - Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+ + Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+ "erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id", storeList). Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id"). Where("erp_stock.count IS NULL OR erp_stock.count = 0"). @@ -1536,7 +1538,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e "CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)") es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, "+ "COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count"). - Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+ + Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+ "erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id", storeList). Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id"). Where("erp_stock.count IS NULL OR erp_stock.count = 0"). @@ -2110,16 +2112,18 @@ func (m *ErpStockCommodityListReq) GetDetailList(c *gin.Context) (*ErpStockCommo return resp, nil } -func CheckScanCodeResp(scanCode string, req *ErpStockCommodityListResp) error { +func CheckScanCodeResp(scanCode string, storeId uint32, req *ErpStockCommodityListResp) error { if req.Total == 1 { // 串码商品,只有1个;条码商品,刚好也只有1个 if req.List[0].IMEI == scanCode { // 串码商品,只有1个 + if req.List[0].StoreId != storeId && storeId != 0 { + return errors.New(req.List[0].ErpCommodityName + "商品非所选门店库存,请检查") + } return nil } if req.List[0].ErpBarcode == scanCode && req.List[0].IMEI != "" { return errors.New("串码类商品,请直接输入串码") } - } else { // 条码商品,数量多 var barCodeList []ErpStockCommodity var imeiLst []ErpStockCommodity diff --git a/app/admin/models/decision.go b/app/admin/models/decision.go index dd53339..25cedd6 100644 --- a/app/admin/models/decision.go +++ b/app/admin/models/decision.go @@ -9,6 +9,7 @@ import ( "go-admin/logger" "go-admin/tools" "go-admin/tools/config" + "math" "strconv" "sync" "time" @@ -128,7 +129,7 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR for _, commodityName := range m.CommodityName { commodityNames = append(commodityNames, commodityName) } - qs = qs.Where("commodity_name IN (?)", commodityNames) + qs = qs.Where("erp_commodity_name IN (?)", commodityNames) } if len(m.CategoryID) > 0 { // 商品分类id @@ -136,7 +137,7 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR for _, category := range m.CategoryID { categoryIDs = append(categoryIDs, category) } - qs = qs.Where("category_id IN (?)", categoryIDs) + qs = qs.Where("erp_category_id IN (?)", categoryIDs) } var count int64 @@ -147,11 +148,12 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR } 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 @@ -247,14 +249,17 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR sumData.TotalEndStock += data.EndStock sumData.TotalEndAmount += data.EndAmount + sumData.TotalBeginAmount = math.Round(sumData.TotalBeginAmount*100) / 100 + sumData.TotalEndAmount = math.Round(sumData.TotalEndAmount*100) / 100 + reportList = append(reportList, data) } resp.SumData = sumData - resp.Total = len(reportList) - resp.List = reportList + resp.Total = int(count) if m.IsExport == 1 { + resp.List = reportList resp.ExportUrl, err = reportDecisionExport(resp) if err != nil { return nil, err @@ -262,6 +267,19 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR resp.Total = 0 resp.List = nil resp.SumData = DecisionSumData{} + } else { + // 分页处理 + startIdx := (resp.PageIndex - 1) * resp.PageSize + endIdx := resp.PageIndex * resp.PageSize + + // 确保不超出索引范围 + if startIdx >= len(reportList) { + resp.List = []DecisionReportData{} + } else if endIdx > len(reportList) { + resp.List = reportList[startIdx:] + } else { + resp.List = reportList[startIdx:endIdx] + } } return resp, nil diff --git a/app/admin/models/erp_order.go b/app/admin/models/erp_order.go index 2bfa2c8..b444f53 100644 --- a/app/admin/models/erp_order.go +++ b/app/admin/models/erp_order.go @@ -487,7 +487,7 @@ func (m *ErpOrderListReq) List(c *gin.Context) (*ErpOrderListResp, error) { } if m.ScanCode != "" { // 扫描了串码,需要查询已售的商品数据 - return QueryListByScanCode(m.ScanCode, showConfig.ShowAll, c) + return QueryListByScanCode(m.StoreId, m.ScanCode, showConfig.ShowAll, c) } if m.CommodityName != "" { // 输入了商品名称进行查询 @@ -599,7 +599,7 @@ func (m *ErpOrderListReq) List(c *gin.Context) (*ErpOrderListResp, error) { } // QueryListByScanCode 通过扫描串码查询列表 -func QueryListByScanCode(scanCode, showConfig string, c *gin.Context) (*ErpOrderListResp, error) { +func QueryListByScanCode(storeId uint32, scanCode, showConfig string, c *gin.Context) (*ErpOrderListResp, error) { resp := &ErpOrderListResp{} // 查询扫码串码的零售销售订单的商品信息 @@ -660,6 +660,10 @@ func QueryListByScanCode(scanCode, showConfig string, c *gin.Context) (*ErpOrder return &ErpOrderListResp{}, errors.New("您没有该门店权限") } } + + if orders[0].StoreId != storeId && storeId != 0 { + return &ErpOrderListResp{}, errors.New("非当前门店所售商品,需前往对应门店退货") + } } // 添加付款、销售员、商品信息 @@ -667,6 +671,7 @@ func QueryListByScanCode(scanCode, showConfig string, c *gin.Context) (*ErpOrder erpOrderListSetCashier(orders) erpOrderListSetSalesman(orders) + orders[0].Commodities = commodity if len(orders) != 0 { // 查询该串码商品是否已经退过货 resp.List = append(resp.List, orders[0]) @@ -3685,7 +3690,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { if req.RetailType == RetailTypeSale { // 校验商品是否有库存,是否是对应门店库存商品 - err = checkOrderCommodityStock(req, sysUser) + err = checkOrderCommodityStock(req) if err != nil { return nil, err } @@ -3833,11 +3838,14 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { // 更新订单表总退款金额和数量 备注:2024-03-12 订单表没有退款金额的字段,默认都使用订单金额字段,根据订单类型判断是零售或退款 //erpOrder.RejectedTotalAmount += req.ErpOrderCommodities[i].RejectedAmount //erpOrder.RejectedTotalCount += req.ErpOrderCommodities[i].RejectedCount - erpOrder.TotalAmount += req.ErpOrderCommodities[i].ReceivedAmount + erpOrder.TotalAmount += v.RejectedAmount erpOrder.TotalCount += int32(req.ErpOrderCommodities[i].Count) + // 订单总优惠 + erpOrder.TotalDiscount += v.MemberDiscount + v.SaleDiscount + // 销售毛利 // todo 待测试核实 备注:产品说有亏本销售的情况,不用判断毛利是否<0 - salesProfit := v.ReceivedAmount - 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,请检查") @@ -3971,15 +3979,18 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { return nil, errors.New("操作失败:" + err.Error()) } erpOrder.StorePer = erpOrder.TotalStaffProfit * (store.SalesCommRate / 100) + erpOrder.StorePer = math.Round(erpOrder.StorePer*100) / 100 // 订单总优惠 - erpOrder.TotalDiscount = erpOrder.TotalRetailPrice - erpOrder.TotalAmount + if req.RetailType == RetailTypeSale { + erpOrder.TotalDiscount = erpOrder.TotalRetailPrice - erpOrder.TotalAmount + } return erpOrder, nil } // 校验商品是否有库存 -func checkOrderCommodityStock(req *ErpOrderCreateReq, sysUser *SysUser) error { +func checkOrderCommodityStock(req *ErpOrderCreateReq) error { if len(req.ErpOrderCommodities) != 0 { // 统计串码和非串码商品信息 commodityMap := make(map[uint32]uint32) // 记录非串码商品id及其数量 @@ -4032,7 +4043,7 @@ func checkOrderCommodityStock(req *ErpOrderCreateReq, sysUser *SysUser) error { return errors.New("商品" + "[" + commodityNameMap[commodityId] + "]库存不足") } - if !CheckUserStore(imeiStockCommodity.StoreId, sysUser) { + if imeiStockCommodity.StoreId != req.StoreId { return errors.New(commodityNameMap[commodityId] + "商品非所选门店库存,请检查") } } diff --git a/app/admin/models/game_card.go b/app/admin/models/game_card.go index ff42848..220722a 100644 --- a/app/admin/models/game_card.go +++ b/app/admin/models/game_card.go @@ -3186,8 +3186,8 @@ func (r *CooperativeExportMemberPromotionReq) Export() string { } } - list = InviteMemberReportListSetUser(list) - list = InviteMemberReportListSetStore(list) + //list = InviteMemberReportListSetUser(list) + //list = InviteMemberReportListSetStore(list) //if len(storeIds) == 1 { // var store Store @@ -3225,8 +3225,8 @@ func MemberReportFile(memberReports []InviteMemberReport, fileName string) strin } var row []interface{} for rowId := 0; rowId < len(memberReports); rowId++ { - row = []interface{}{fmt.Sprintf("%d", memberReports[rowId].Store.ID), memberReports[rowId].Store.Name, - fmt.Sprintf("%d", memberReports[rowId].User.Uid), memberReports[rowId].User.ShopAssistantName, + row = []interface{}{fmt.Sprintf("%d", memberReports[rowId].SystemUser.StoreList[0].StoreID), memberReports[rowId].SystemUser.StoreList[0].StoreName, + fmt.Sprintf("%d", memberReports[rowId].SystemUser.Uid), memberReports[rowId].SystemUser.NickName, fmt.Sprintf("%d", memberReports[rowId].GoldCount), fmt.Sprintf("%d", memberReports[rowId].PlatinumCount), fmt.Sprintf("%d", memberReports[rowId].BlackGoldCount)} diff --git a/app/admin/models/purchase.go b/app/admin/models/purchase.go index 37287aa..bdb3dd7 100644 --- a/app/admin/models/purchase.go +++ b/app/admin/models/purchase.go @@ -1522,9 +1522,9 @@ func checkPurchaseInventory(req *ErpPurchaseInventoryReq) error { req.Inventories[i].ErpCategoryID = erpCommodity.ErpCategoryId // 分类id,入库的时候前端没传,后端补充 req.Inventories[i].ErpCategoryName = erpCommodity.ErpCategoryName // 分类名称,入库的时候前端没传,后端补充 - if inventory.EmployeePrice == 0 { // 没有传入员工成本价,则默认按照商品资料设置的员工成本价加价金额 - req.Inventories[i].EmployeePrice = inventory.ImplementationPrice + float64(erpCommodity.StaffCostPrice) - } + //if inventory.EmployeePrice == 0 { // 没有传入员工成本价,则默认按照商品资料设置的员工成本价加价金额 + // req.Inventories[i].EmployeePrice = inventory.ImplementationPrice + float64(erpCommodity.StaffCostPrice) + //} } // 入库的商品信息有误,不在之前的商品列表中 @@ -2408,13 +2408,13 @@ func FinishErpPurchaseDemand(req *FinishErpPurchaseDemandReq, sysUser *SysUser) //} // GetErpPurchaseDemand 获取采购需求 -func GetErpPurchaseDemand(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDemandResp, error) { +func GetErpPurchaseDemand(req *GetErpPurchaseDemandReq, c *gin.Context) (*GetErpPurchaseDemandResp, error) { var err error resp := new(GetErpPurchaseDemandResp) if req.HideFlag == "ON" { // 隐藏无采购需求的商品 - resp, err = getErpPurchaseDemandHide(req) + resp, err = getErpPurchaseDemandHide(req, c) } else { // 展示所有 - resp, err = getErpPurchaseDemandAll(req) + resp, err = getErpPurchaseDemandAll(req, c) } if err != nil { return nil, err @@ -2424,7 +2424,7 @@ func GetErpPurchaseDemand(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDemandRe } // 展示所有采购需求 -func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDemandResp, error) { +func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*GetErpPurchaseDemandResp, error) { page := req.PageIndex - 1 if page < 0 { page = 0 @@ -2469,7 +2469,7 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDeman SortCommodities(commodities) // 批量查询门店信息 - stores, err := GetOnlineStores() + stores, err := GetOnlineStores(c) if err != nil { return nil, err } @@ -2516,7 +2516,7 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDeman } // 隐藏无采购需求的商品 -func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDemandResp, error) { +func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*GetErpPurchaseDemandResp, error) { page := req.PageIndex - 1 if page < 0 { page = 0 @@ -2599,7 +2599,7 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDema resp.List = nil } else { // 批量查询门店信息 - stores, err := GetOnlineStores() + stores, err := GetOnlineStores(c) if err != nil { return nil, err } @@ -2879,9 +2879,15 @@ func GetLastMonthRange() (time.Time, time.Time) { } // GetOnlineStores 查询所有在线门店信息 -func GetOnlineStores() ([]Store, error) { +func GetOnlineStores(c *gin.Context) ([]Store, error) { + sysUser, err := GetSysUserByCtx(c) + if err != nil { + return nil, err + } + var stores []Store - err := orm.Eloquent.Table("store").Where("is_online = ?", 1).Find(&stores).Error + err = orm.Eloquent.Table("store").Where("is_online = ? and cooperative_business_id = ? ", 1, + sysUser.CooperativeBusinessId).Find(&stores).Error if err != nil { return nil, err } @@ -3482,11 +3488,14 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context if err != nil { return nil, err } - if reportByOrderData.CommodityData == nil { continue } + //if reportByOrderData.CommodityData == nil { + // continue + //} + reportByOrderData.Amount = nAmount reportByOrderData.Count = nCount if nCount != 0 { @@ -3497,9 +3506,8 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context nTotalCount += nCount } - resp.Total = len(reportByOrderDataList) - if req.ErpCategoryID != 0 || req.ErpCommodityName != "" { + resp.Total = len(reportByOrderDataList) // 计算分页所需的切片索引 startIndex := page * req.PageSize endIndex := (page + 1) * req.PageSize diff --git a/app/admin/models/store.go b/app/admin/models/store.go index a6fd2cd..141b5de 100644 --- a/app/admin/models/store.go +++ b/app/admin/models/store.go @@ -114,7 +114,7 @@ func (m *GetStoreReq) List() ([]Store, int64, error) { // } // m.CooperativeBusinessId = sysUser.CooperativeBusinessId //} - qs := orm.Eloquent.Table("store") + qs := orm.Eloquent.Table("store").Where("member_service = ?", 1) if m.Name != "" { qs = qs.Where("name LIKE '%" + m.Name + "%'") } diff --git a/app/admin/models/sysuser.go b/app/admin/models/sysuser.go index 9ec3c75..e5b03c6 100644 --- a/app/admin/models/sysuser.go +++ b/app/admin/models/sysuser.go @@ -6,7 +6,9 @@ import ( "fmt" "gorm.io/gorm" "log" + "sort" "strings" + "time" "golang.org/x/crypto/bcrypt" @@ -395,12 +397,12 @@ func (e *SysUser) Update(begin *gorm.DB, id int) (update SysUser, err error) { return } -func (e *SysUser) BatchDelete(id []int) (Result bool, err error) { - if err = orm.Eloquent.Table(e.TableName()).Where("user_id in (?)", id).Delete(&SysUser{}).Error; err != nil { - return +func (e *SysUser) BatchDelete(begin *gorm.DB, id []int) (Result bool, err error) { + if err = begin.Table(e.TableName()).Where("user_id in (?)", id).Delete(&SysUser{}).Error; err != nil { + return false, err } - Result = true - return + + return true, nil } func (e *SysUser) SetPwd(pwd SysUserPwd) (Result bool, err error) { @@ -430,11 +432,12 @@ func GetUserById(id uint32) *SysUserB { } // UpdateUserType 更新uid的user_type为2 -func UpdateUserType(begin *gorm.DB, uid, nType uint32) error { +func UpdateUserType(begin *gorm.DB, uid, nType, roleId uint32) error { // 更新库存表 err := begin.Table("user").Where("uid = ?", uid). Updates(map[string]interface{}{ - "user_type": nType, + "user_type": nType, + "xcx_role_id": roleId, }).Error if err != nil { return err @@ -442,3 +445,58 @@ func UpdateUserType(begin *gorm.DB, uid, nType uint32) error { return nil } + +// GetUserEffectiveStore 获取店员当前的有效门店(邀请客户时使用) +func GetUserEffectiveStore(uid uint32) ([]StoreInfo, error) { + user := new(SysUser) + err := orm.Eloquent.Table("sys_user").Where("uid", uid).Find(&user).Error + if err != nil { + log.Println("Error:", err, "UID:", uid) + 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/user.go b/app/admin/models/user.go index 142c5a9..803b7c5 100644 --- a/app/admin/models/user.go +++ b/app/admin/models/user.go @@ -1029,8 +1029,10 @@ type InviteMemberReport struct { InviteUpgradePlatinumToBlackCount uint32 `json:"invite_upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量(干预) // invite_member_report - User *UserInfo `json:"user" gorm:"-"` - Store *Store `json:"store" gorm:"-"` // 门店 + SystemUser *SysUser `json:"system_user" gorm:"-"` // 系统用户 + //User *UserInfo `json:"user" gorm:"-"` // + //Store *Store `json:"store" gorm:"-"` // 门店 + } type UserInviteListReq struct { @@ -1308,6 +1310,7 @@ type UserInviteRecord struct { ToUid uint32 `json:"to_uid"` // 用户ID FromUid uint32 `json:"from_uid"` // 邀请人ID + StoreId uint64 `json:"store_id"` // 门店id 邀请用户门店 Action uint32 `json:"action"` // 1-未激活 2-激活邀请 SpendType uint32 `json:"spend_type"` // 1-未开通 2-开通会员 3-续费 4-升级 MemberLevel uint32 `json:"member_level"` // 会员等级 0-未开通 1-普通 2-黄金 3-短期 4-白金 5-黑金 @@ -1442,11 +1445,12 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { resp := new(UserInviteRecordListResp) var records []struct { UserInviteRecord - StoreId uint32 - InviteUserName string - UserTel string - CreateTime time.Time - MemberExpire time.Time + StoreId uint32 + InviteUserName string + UserTel string + CreateTime time.Time + MemberExpire time.Time + UserMemberLevel uint32 } err := UpdateUserInviteRecordRenewHide() if err != nil { @@ -1479,14 +1483,14 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { qs := orm.Eloquent.Table("user_invite_record").Where("action=2") countQuery := orm.Eloquent.Table("user_invite_record").Where("action=2"). - Select("user_invite_record.*, B1.store_id, B1.Shop_assistant_name AS InviteUserName, " + - "B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire"). - Joins("JOIN user B1 ON user_invite_record.from_uid = B1.uid"). + Select("user_invite_record.*, B1.nick_name AS InviteUserName, " + + "B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel"). + Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid"). Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid") if m.StoreId != 0 { - qs = qs.Where("B1.store_id=?", m.StoreId) - countQuery = countQuery.Where("B1.store_id=?", m.StoreId) + qs = qs.Where("store_id=?", m.StoreId) + countQuery = countQuery.Where("store_id=?", m.StoreId) } if m.InviteUserName != "" { qs = qs.Where("B1.Shop_assistant_name=?", m.InviteUserName) @@ -1662,8 +1666,8 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { countQuery = countQuery.Where("action_time < ?", m.RecordEndTime) } if m.MemberLevel != 0 { - qs = qs.Where("user_invite_record.member_level = ?", m.MemberLevel) - countQuery = countQuery.Where("user_invite_record.member_level = ?", m.MemberLevel) + qs = qs.Where("user.member_level = ?", m.MemberLevel) + countQuery = countQuery.Where("user.member_level = ?", m.MemberLevel) } var count int64 @@ -1674,9 +1678,9 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { } if m.IsExport == 1 { // 导出excel - err = qs.Select("user_invite_record.*, B1.store_id, B1.Shop_assistant_name AS InviteUserName, " + - "B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire"). - Joins("JOIN user B1 ON user_invite_record.from_uid = B1.uid"). + err = qs.Select("user_invite_record.*, B1.nick_name AS InviteUserName, " + + "B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel"). + Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid"). Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid"). Order("action_time DESC"). Find(&records).Error @@ -1685,9 +1689,9 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { return nil, err } } else { - err = qs.Select("user_invite_record.*, B1.store_id, B1.Shop_assistant_name AS InviteUserName, " + - "B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire"). - Joins("JOIN user B1 ON user_invite_record.from_uid = B1.uid"). + err = qs.Select("user_invite_record.*, B1.nick_name AS InviteUserName, " + + "B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel"). + Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid"). Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid"). Order("action_time DESC"). Offset(page * pageSize). @@ -1711,7 +1715,7 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { CreateTime: item.CreateTime, RecordType: uint32(CalculateMemberType(item.SpendType, item.RenewHide, item.MemberGenre, item.MemberLevel)), RecordTime: item.ActionTime, - MemberLevel: item.MemberLevel, + MemberLevel: item.UserMemberLevel, MemberExpire: item.MemberExpire, } listData = append(listData, data) @@ -1942,6 +1946,7 @@ func CalculateMemberType(spendType, renewHide, memberGenre, memberLevel uint32) return Unknown } +// UpdateUserInviteRecordRenewHide 更新用户邀请记录:如果不是店员干预的续费用户,则更新为1-自动续费 func UpdateUserInviteRecordRenewHide() error { err := orm.Eloquent.Exec("UPDATE user_invite_record SET renew_hide=1 WHERE spend_type=3 AND scan=0 AND renew_hide!=1;").Error if err != nil { @@ -2737,7 +2742,8 @@ func CreateInviteMemberReport() { func (m *CooperativeBusiness) InviteMemberReport() { var users []UserInfo - err := orm.Eloquent.Table("user").Where("cooperative_business_id=?", m.ID).Where("user_type=2").Find(&users).Error + err := orm.Eloquent.Table("user").Where("cooperative_business_id=?", m.ID). + Where("user_type=?", UserTypeShopAssistant).Find(&users).Error if err != nil { logger.Error("cooperative err:", logger.Field("err", err)) return @@ -2839,15 +2845,16 @@ func GetSysUser(suid interface{}) (SysUser, error) { } type AssistantInviteMemberReportReq struct { - CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id - StoreId uint32 `json:"store_id"` // 门店id - Uid uint32 `json:"uid"` // 店员小程序id - InviteName string `json:"invite_name"` // 邀请人昵称 - Date string `json:"date"` // 日期 - PageIndex int `json:"pageIndex"` // 页码 - PageSize int `json:"pageSize"` // 每页数量 - IsExport uint32 `json:"is_export"` // 1-导出 - SysUser SysUser `json:"sys_user"` // + RoleId []uint32 `json:"roleId"` // 角色id + CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id + StoreId uint32 `json:"store_id"` // 门店id + Uid uint32 `json:"uid"` // 店员小程序id + InviteName string `json:"invite_name"` // 邀请人昵称 + Date string `json:"date"` // 日期 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 每页数量 + IsExport uint32 `json:"is_export"` // 1-导出 + SysUser SysUser `json:"sys_user"` // } type AssistantInviteMemberReportListResp struct { @@ -2861,28 +2868,41 @@ type AssistantInviteMemberReportListResp struct { func (m *AssistantInviteMemberReportReq) List() (*AssistantInviteMemberReportListResp, error) { resp := new(AssistantInviteMemberReportListResp) var memberReport []InviteMemberReport - var users []UserInfo - err := orm.Eloquent.Table("user").Where("user_type=2").Find(&users).Error + var users []SysUser + us := orm.Eloquent.Table("sys_user").Where("uid != 0") + if len(m.RoleId) != 0 { + us = us.Where("role_id in (?)", m.RoleId) + } + err := us.Find(&users).Error if err != nil { logger.Error("err:", logger.Field("err", err)) return nil, err } - uids := make(map[string]uint32, 0) + ids := make(map[string]uint32, 0) + sysUserMap := make(map[uint32]*SysUser, 0) + var uidList []uint32 for i, _ := range users { - uids[users[i].ShopAssistantName] = users[i].Uid + ids[users[i].NickName] = users[i].Uid + uidList = append(uidList, users[i].Uid) + sysUserMap[users[i].Uid] = &users[i] } qs := orm.Eloquent.Table("invite_member_report") + if len(uidList) != 0 { + qs = qs.Where("uid in (?)", uidList) + } + if m.SysUser.UserId != 1 { qs = qs.Where("cooperative_business_id=?", m.SysUser.CooperativeBusinessId) } else { qs = qs.Where("cooperative_business_id=?", m.CooperativeBusinessId) } - //if len(uids) > 0 { - // qs = qs.Where("uid NOT IN (?)", uids) + //if len(ids) > 0 { + // qs = qs.Where("uid NOT IN (?)", ids) //} + if m.InviteName != "" { - m.Uid = uids[m.InviteName] + m.Uid = ids[m.InviteName] if m.Uid == 0 { qs = qs.Where("uid=?", m.Uid) } @@ -2926,25 +2946,21 @@ func (m *AssistantInviteMemberReportReq) List() (*AssistantInviteMemberReportLis } } - //assistant := GetUserByUid(m.Uid) - //cooperative := new(CooperativeBusiness) - //cooperative.ID = assistant.CooperativeBusinessId - //cooperative.SetAssistantMemberDeductConfig(uint32(assistant.StoreId)) - //fmt.Println("CooperativeBusinessId:", assistant.CooperativeBusinessId, assistant.StoreId) - //fmt.Println("CooperativeAssistantMemberDeduct:", cooperative.CooperativeAssistantMemberDeduct) - //if len(memberReport) > 0 { - // memberReport[len(memberReport)-1].GoldDeduct = cooperative.CooperativeAssistantMemberDeduct.GoldDeduct - // memberReport[len(memberReport)-1].PlatinumDeduct = cooperative.CooperativeAssistantMemberDeduct.PlatinumDeduct - // memberReport[len(memberReport)-1].BlackGoldDeduct = cooperative.CooperativeAssistantMemberDeduct.BlackGoldDeduct - // - // report := memberReport[len(memberReport)-1] - // fmt.Println("report:", report) - // memberReport[len(memberReport)-1].DeductAmount += report.GoldCount * report.GoldDeduct - // memberReport[len(memberReport)-1].DeductAmount += report.PlatinumCount * report.PlatinumDeduct - // memberReport[len(memberReport)-1].DeductAmount += report.BlackGoldCount * report.BlackGoldDeduct - //} - memberReport = InviteMemberReportListSetUser(memberReport) - memberReport = InviteMemberReportListSetStore(memberReport) + for i, item := range memberReport { + memberReport[i].SystemUser = sysUserMap[item.Uid] + + storeInfo, _ := GetUserEffectiveStore(item.Uid) + memberReport[i].SystemUser.StoreList = storeInfo + if len(storeInfo) != 0 { + memberReport[i].StoreId = uint32(storeInfo[0].StoreID) + } + + memberReport[i].CooperativeBusinessId = sysUserMap[item.Uid].CooperativeBusinessId + memberReport[i].CooperativeName = sysUserMap[item.Uid].CooperativeName + } + + //memberReport = InviteMemberReportListSetUser(memberReport) + //memberReport = InviteMemberReportListSetStore(memberReport) if m.IsExport == 1 { fileName, err := inviteMemberReport(memberReport) @@ -3005,12 +3021,17 @@ func inviteMemberReport(list []InviteMemberReport) (string, error) { for i := 0; i < len(list); i++ { storeName := "" - if list[i].Store != nil { - storeName = list[i].Store.Name + if list[i].SystemUser.StoreList != nil { + for _, item := range list[i].SystemUser.StoreList { + if storeName != "" { + storeName += "," + } + storeName += item.StoreName + } } shopAssistantName := "" - if list[i].User != nil { - shopAssistantName = list[i].User.ShopAssistantName + if list[i].SystemUser != nil { + shopAssistantName = list[i].SystemUser.NickName } row = []interface{}{ @@ -3100,57 +3121,57 @@ func inviteMemberReport(list []InviteMemberReport) (string, error) { return url + fileName, nil } -func InviteMemberReportListSetUser(list []InviteMemberReport) []InviteMemberReport { - ids := make([]uint32, 0, len(list)) - for i, _ := range list { - ids = append(ids, list[i].Uid) - } - if len(ids) == 0 { - return list - } - - infoMap, err := GetUserInfoMap(ids) - if err != nil { - logger.Error("user info map err:", logger.Field("err", err)) - return list - } - - for i, _ := range list { - v, ok := infoMap[list[i].Uid] - if ok { - list[i].User = &v - } - fmt.Println("UserInfo:", v) - } - - return list -} - -func InviteMemberReportListSetStore(list []InviteMemberReport) []InviteMemberReport { - ids := make([]uint32, 0, len(list)) - for i, _ := range list { - ids = append(ids, list[i].StoreId) - } - if len(ids) == 0 { - return list - } - storeMap := GetStoreMapByIds(ids) - //infoMap, err := GetUserInfoMap(ids) - //if err != nil { - // logger.Error("user info map err:",logger.Field("err",err)) - // return list - //} - - for i, _ := range list { - v, ok := storeMap[uint64(list[i].StoreId)] - if ok { - list[i].Store = v - } - fmt.Println("UserInfo:", v) - } - - return list -} +//func InviteMemberReportListSetUser(list []InviteMemberReport) []InviteMemberReport { +// ids := make([]uint32, 0, len(list)) +// for i, _ := range list { +// ids = append(ids, list[i].Uid) +// } +// if len(ids) == 0 { +// return list +// } +// +// infoMap, err := GetUserInfoMap(ids) +// if err != nil { +// logger.Error("user info map err:", logger.Field("err", err)) +// return list +// } +// +// for i, _ := range list { +// v, ok := infoMap[list[i].Uid] +// if ok { +// list[i].User = &v +// } +// fmt.Println("UserInfo:", v) +// } +// +// return list +//} +// +//func InviteMemberReportListSetStore(list []InviteMemberReport) []InviteMemberReport { +// ids := make([]uint32, 0, len(list)) +// for i, _ := range list { +// ids = append(ids, list[i].StoreId) +// } +// if len(ids) == 0 { +// return list +// } +// storeMap := GetStoreMapByIds(ids) +// //infoMap, err := GetUserInfoMap(ids) +// //if err != nil { +// // logger.Error("user info map err:",logger.Field("err",err)) +// // return list +// //} +// +// for i, _ := range list { +// v, ok := storeMap[uint64(list[i].StoreId)] +// if ok { +// list[i].Store = v +// } +// fmt.Println("UserInfo:", v) +// } +// +// return list +//} func GetCooperativeBusinessId(c *gin.Context) (uint32, error) { data, _ := c.Get(jwtauth.JwtPayloadKey) diff --git a/docs/docs.go b/docs/docs.go index d0ba700..c775ad0 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -6345,6 +6345,13 @@ const docTemplate = `{ "description": "每页数量", "type": "integer" }, + "roleId": { + "description": "角色id", + "type": "array", + "items": { + "type": "integer" + } + }, "store_id": { "description": "门店id", "type": "integer" @@ -7967,6 +7974,14 @@ const docTemplate = `{ "description": "金额(采购价)", "type": "number" }, + "category_id": { + "description": "分类id", + "type": "integer" + }, + "category_name": { + "description": "分类名称", + "type": "string" + }, "commodity_id": { "description": "商品id", "type": "integer" @@ -8690,7 +8705,7 @@ const docTemplate = `{ }, "retail_price": { "description": "指导零售价", - "type": "integer" + "type": "number" }, "sale_discount": { "description": "零售优惠", @@ -8698,7 +8713,7 @@ const docTemplate = `{ }, "sale_price": { "description": "零售价", - "type": "integer" + "type": "number" }, "sales_profit": { "description": "销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价", @@ -8737,8 +8752,7 @@ const docTemplate = `{ "store_id", "store_name", "tel", - "total_count", - "total_retail_price" + "total_count" ], "properties": { "bill_sn": { @@ -8795,7 +8809,7 @@ const docTemplate = `{ "type": "integer" }, "total_retail_price": { - "description": "订单总指导零售价", + "description": "订单总指导零售价:如果是赠送商品,金额可以为0", "type": "number" }, "vm_count": { @@ -12258,18 +12272,18 @@ const docTemplate = `{ "description": "续费白金会员数量(自动)", "type": "integer" }, - "store": { - "description": "门店", - "allOf": [ - { - "$ref": "#/definitions/models.Store" - } - ] - }, "store_id": { "description": "门店id", "type": "integer" }, + "system_user": { + "description": "invite_member_report", + "allOf": [ + { + "$ref": "#/definitions/models.SysUser" + } + ] + }, "uid": { "description": "店员uid", "type": "integer" @@ -12285,14 +12299,6 @@ const docTemplate = `{ "upgrade_platinum_to_black_count": { "description": "升级:白金-\u003e黑金数量(自动)", "type": "integer" - }, - "user": { - "description": "invite_member_report", - "allOf": [ - { - "$ref": "#/definitions/models.UserInfo" - } - ] } } }, @@ -13428,6 +13434,10 @@ const docTemplate = `{ "description": "退货金额", "type": "number" }, + "serial_number": { + "description": "入库编号", + "type": "string" + }, "store_id": { "description": "门店id", "type": "integer" @@ -13956,7 +13966,7 @@ const docTemplate = `{ }, "retail_price": { "description": "指导零售价", - "type": "integer" + "type": "number" }, "sale_discount": { "description": "零售优惠", @@ -13964,7 +13974,7 @@ const docTemplate = `{ }, "sale_price": { "description": "零售价", - "type": "integer" + "type": "number" }, "sales_profit": { "description": "销售毛利", @@ -13980,7 +13990,7 @@ const docTemplate = `{ }, "staff_price": { "description": "员工成本价", - "type": "integer" + "type": "number" }, "staff_profit": { "description": "员工毛利", @@ -14028,7 +14038,7 @@ const docTemplate = `{ }, "wholesale_price": { "description": "采购单价", - "type": "integer" + "type": "number" } } }, @@ -15210,7 +15220,7 @@ const docTemplate = `{ }, "order_amount": { "description": "消费金额", - "type": "integer" + "type": "number" }, "order_cards": { "type": "array", diff --git a/docs/swagger.json b/docs/swagger.json index 9ea92eb..035fe99 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -6334,6 +6334,13 @@ "description": "每页数量", "type": "integer" }, + "roleId": { + "description": "角色id", + "type": "array", + "items": { + "type": "integer" + } + }, "store_id": { "description": "门店id", "type": "integer" @@ -7956,6 +7963,14 @@ "description": "金额(采购价)", "type": "number" }, + "category_id": { + "description": "分类id", + "type": "integer" + }, + "category_name": { + "description": "分类名称", + "type": "string" + }, "commodity_id": { "description": "商品id", "type": "integer" @@ -8679,7 +8694,7 @@ }, "retail_price": { "description": "指导零售价", - "type": "integer" + "type": "number" }, "sale_discount": { "description": "零售优惠", @@ -8687,7 +8702,7 @@ }, "sale_price": { "description": "零售价", - "type": "integer" + "type": "number" }, "sales_profit": { "description": "销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价", @@ -8726,8 +8741,7 @@ "store_id", "store_name", "tel", - "total_count", - "total_retail_price" + "total_count" ], "properties": { "bill_sn": { @@ -8784,7 +8798,7 @@ "type": "integer" }, "total_retail_price": { - "description": "订单总指导零售价", + "description": "订单总指导零售价:如果是赠送商品,金额可以为0", "type": "number" }, "vm_count": { @@ -12247,18 +12261,18 @@ "description": "续费白金会员数量(自动)", "type": "integer" }, - "store": { - "description": "门店", - "allOf": [ - { - "$ref": "#/definitions/models.Store" - } - ] - }, "store_id": { "description": "门店id", "type": "integer" }, + "system_user": { + "description": "invite_member_report", + "allOf": [ + { + "$ref": "#/definitions/models.SysUser" + } + ] + }, "uid": { "description": "店员uid", "type": "integer" @@ -12274,14 +12288,6 @@ "upgrade_platinum_to_black_count": { "description": "升级:白金-\u003e黑金数量(自动)", "type": "integer" - }, - "user": { - "description": "invite_member_report", - "allOf": [ - { - "$ref": "#/definitions/models.UserInfo" - } - ] } } }, @@ -13417,6 +13423,10 @@ "description": "退货金额", "type": "number" }, + "serial_number": { + "description": "入库编号", + "type": "string" + }, "store_id": { "description": "门店id", "type": "integer" @@ -13945,7 +13955,7 @@ }, "retail_price": { "description": "指导零售价", - "type": "integer" + "type": "number" }, "sale_discount": { "description": "零售优惠", @@ -13953,7 +13963,7 @@ }, "sale_price": { "description": "零售价", - "type": "integer" + "type": "number" }, "sales_profit": { "description": "销售毛利", @@ -13969,7 +13979,7 @@ }, "staff_price": { "description": "员工成本价", - "type": "integer" + "type": "number" }, "staff_profit": { "description": "员工毛利", @@ -14017,7 +14027,7 @@ }, "wholesale_price": { "description": "采购单价", - "type": "integer" + "type": "number" } } }, @@ -15199,7 +15209,7 @@ }, "order_amount": { "description": "消费金额", - "type": "integer" + "type": "number" }, "order_cards": { "type": "array", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index be35ed6..18753d2 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -324,6 +324,11 @@ definitions: pageSize: description: 每页数量 type: integer + roleId: + description: 角色id + items: + type: integer + type: array store_id: description: 门店id type: integer @@ -1503,6 +1508,12 @@ definitions: amount: description: 金额(采购价) type: number + category_id: + description: 分类id + type: integer + category_name: + description: 分类名称 + type: string commodity_id: description: 商品id type: integer @@ -2037,13 +2048,13 @@ definitions: type: string retail_price: description: 指导零售价 - type: integer + type: number sale_discount: description: 零售优惠 type: number sale_price: description: 零售价 - type: integer + type: number sales_profit: description: 销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价 type: number @@ -2105,7 +2116,7 @@ definitions: description: 订单商品数量 type: integer total_retail_price: - description: 订单总指导零售价 + description: 订单总指导零售价:如果是赠送商品,金额可以为0 type: number vm_count: description: 使用会员积分 @@ -2120,7 +2131,6 @@ definitions: - store_name - tel - total_count - - total_retail_price type: object models.ErpOrderDeleteReq: properties: @@ -4631,13 +4641,13 @@ definitions: renewal_platinum_count: description: 续费白金会员数量(自动) type: integer - store: - allOf: - - $ref: '#/definitions/models.Store' - description: 门店 store_id: description: 门店id type: integer + system_user: + allOf: + - $ref: '#/definitions/models.SysUser' + description: invite_member_report uid: description: 店员uid type: integer @@ -4650,10 +4660,6 @@ definitions: upgrade_platinum_to_black_count: description: 升级:白金->黑金数量(自动) type: integer - user: - allOf: - - $ref: '#/definitions/models.UserInfo' - description: invite_member_report type: object models.Login: properties: @@ -5463,6 +5469,9 @@ definitions: reject_amount: description: 退货金额 type: number + serial_number: + description: 入库编号 + type: string store_id: description: 门店id type: integer @@ -5851,13 +5860,13 @@ definitions: type: number retail_price: description: 指导零售价 - type: integer + type: number sale_discount: description: 零售优惠 type: number sale_price: description: 零售价 - type: integer + type: number sales_profit: description: 销售毛利 type: number @@ -5869,7 +5878,7 @@ definitions: type: number staff_price: description: 员工成本价 - type: integer + type: number staff_profit: description: 员工毛利 type: number @@ -5905,7 +5914,7 @@ definitions: type: number wholesale_price: description: 采购单价 - type: integer + type: number type: object models.RetailMarginData: properties: @@ -6761,7 +6770,7 @@ definitions: type: string order_amount: description: 消费金额 - type: integer + type: number order_cards: items: $ref: '#/definitions/models.OrderCard'