1、特定角色用户在新增零售订单时可以不受最低零售价的限制;

This commit is contained in:
chenlin 2025-03-11 11:39:55 +08:00
parent 195ad99c81
commit 1e09e997d3
6 changed files with 46 additions and 12 deletions

View File

@ -9,6 +9,7 @@ import (
"go-admin/logger" "go-admin/logger"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"golang.org/x/time/rate"
"math" "math"
"net/http" "net/http"
"time" "time"
@ -830,6 +831,12 @@ func ErpPurchaseReportByCommodity(c *gin.Context) {
return return
} }
var limiter = rate.NewLimiter(5, 10) // 每秒最多5个请求
if !limiter.Allow() {
app.Error(c, http.StatusTooManyRequests, errors.New("too Many Requests"), "Too Many Requests")
return
}
resp, err := model.GetReportByCommodity(req, c) resp, err := model.GetReportByCommodity(req, c)
if err != nil { if err != nil {
logger.Error("GetReportByCommodity err:", logger.Field("err", err)) logger.Error("GetReportByCommodity err:", logger.Field("err", err))

View File

@ -6195,6 +6195,27 @@ func AuthUserStore(c *gin.Context, storeId uint32) error {
return nil return nil
} }
// HasPermission 校验角色权限:以下角色支持零售开单修改零售价 < 商品最低零售价
func HasPermission(c *gin.Context) bool {
// 获取用户角色
roleName := tools.GetRoleName(c)
// 允许的角色列表
allowedRoles := map[string]bool{
"manager": true, "经理": true,
"cg": true, "采购": true,
"yunying": true, "运营": true,
"admin": true, "系统管理员": true,
}
// 检查用户角色是否在允许列表中
if _, ok := allowedRoles[roleName]; !ok {
return false
}
return true
}
// checkOrderData 校验订单数据 // checkOrderData 校验订单数据
func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
sysUser, err := GetSysUserByCtx(c) sysUser, err := GetSysUserByCtx(c)
@ -6442,8 +6463,10 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
return nil, errors.New("赠送商品最低零售价不为0不符合赠送条件请检查") return nil, errors.New("赠送商品最低零售价不为0不符合赠送条件请检查")
} }
if req.ErpOrderCommodities[i].SalePrice < v.MinRetailPrice { //零售价不能低于最低零售价 if req.ErpOrderCommodities[i].SalePrice < v.MinRetailPrice { //零售价不能低于最低零售价
logger.Error("SalePrice less than MinRetailPrice") if !HasPermission(c) {
return nil, errors.New("零售价不能低于最低零售价,请检查") logger.Error("SalePrice less than MinRetailPrice")
return nil, errors.New("零售价不能低于最低零售价,请检查")
}
} }
if req.ErpOrderCommodities[i].PresentType == 1 && if req.ErpOrderCommodities[i].PresentType == 1 &&
req.ErpOrderCommodities[i].CouponDiscount < req.ErpOrderCommodities[i].Amount { // 有非赠送商品 req.ErpOrderCommodities[i].CouponDiscount < req.ErpOrderCommodities[i].Amount { // 有非赠送商品

View File

@ -4610,7 +4610,7 @@ func getReportByCommodityFromCommon(req *ErpPurchaseReportByCommodityReq, c *gin
//close(ch) //close(ch)
// 并发查询的限制 // 并发查询的限制
const maxConcurrency = 15 const maxConcurrency = 10
sem := make(chan struct{}, maxConcurrency) sem := make(chan struct{}, maxConcurrency)
var wg sync.WaitGroup var wg sync.WaitGroup
ch := make(chan TempData, len(orders)*len(commodityAndOrderIdMap)) ch := make(chan TempData, len(orders)*len(commodityAndOrderIdMap))

View File

@ -207,16 +207,18 @@ func run() error {
fmt.Println("err:", err) fmt.Println("err:", err)
} }
// 检测小程序商城有无待发货订单 if config.ApplicationConfig.Mode != "dev" {
err = s.Every(1).Day().At("09:00").Do(models.CheckOnDeliverMall) // 检测小程序商城有无待发货订单
if err != nil { err = s.Every(1).Day().At("09:00").Do(models.CheckOnDeliverMall)
fmt.Println("err:", err) if err != nil {
} fmt.Println("err:", err)
}
// 检测小程序商城有无待发货订单 // 检测小程序商城有无待发货订单
err = s.Every(1).Day().At("14:00").Do(models.CheckOnDeliverMall) err = s.Every(1).Day().At("14:00").Do(models.CheckOnDeliverMall)
if err != nil { if err != nil {
fmt.Println("err:", err) fmt.Println("err:", err)
}
} }
<-s.Start() <-s.Start()

1
go.mod
View File

@ -55,6 +55,7 @@ require (
golang.org/x/arch v0.5.0 // indirect golang.org/x/arch v0.5.0 // indirect
golang.org/x/crypto v0.14.0 golang.org/x/crypto v0.14.0
golang.org/x/sync v0.4.0 golang.org/x/sync v0.4.0
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
golang.org/x/tools v0.14.0 // indirect golang.org/x/tools v0.14.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/natefinch/lumberjack.v2 v2.2.1

1
go.sum
View File

@ -760,6 +760,7 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=