预警5
This commit is contained in:
parent
8c5396729e
commit
2b02cf7bf6
|
|
@ -20,3 +20,17 @@ type WarningPerson struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Tag string `json:"tag"`
|
Tag string `json:"tag"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type WarningBudget struct {
|
||||||
|
StockName string // 券名称
|
||||||
|
StockId string // 券ID
|
||||||
|
StockNo string // 券编号
|
||||||
|
Amount int64 // 券面额
|
||||||
|
AllBudget int64 // 总预算
|
||||||
|
AllStock int64 // 总库存
|
||||||
|
UsedStock int64 // 已使用库存
|
||||||
|
UsedBudget int64 // 已使用预算
|
||||||
|
AvailableStock int64 // 可用库存
|
||||||
|
RemainingBudget int64 // 剩余预算
|
||||||
|
StockUsageRate float64 // 券使用率
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
package do
|
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
type WarningBudget struct {
|
|
||||||
StockName string // 券名称
|
|
||||||
StockId string // 券ID
|
|
||||||
StockNo string // 券编号
|
|
||||||
Amount int64 // 券面额
|
|
||||||
AllBudget int64 // 总预算
|
|
||||||
AllStock int64 // 总库存
|
|
||||||
UsedStock int64 // 已使用库存
|
|
||||||
UsedBudget int64 // 已使用预算
|
|
||||||
AvailableStock int64 // 可用库存
|
|
||||||
RemainingBudget int64 // 剩余预算
|
|
||||||
StockUsageRate float64 // 券使用率
|
|
||||||
}
|
|
||||||
|
|
||||||
type WarningBudgetLog struct {
|
|
||||||
WarningBudget *WarningBudget
|
|
||||||
Num int
|
|
||||||
LastTime time.Time
|
|
||||||
}
|
|
||||||
|
|
@ -22,10 +22,7 @@ func (this *VoucherBiz) RegisterTag(ctx context.Context, batchNo string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
req := this.WxResp(wxResp)
|
if err = this.ProductRepo.UpdateByWxResp(ctx, stock.ID, this.WxResp(wxResp)); err != nil {
|
||||||
|
|
||||||
err = this.ProductRepo.UpdateWarningBudget(ctx, stock.ID, req)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,5 +10,5 @@ type ProductRepo interface {
|
||||||
FindWarningBudget(ctx context.Context, fun func(ctx context.Context, rows []*bo.ProductBo) error) error
|
FindWarningBudget(ctx context.Context, fun func(ctx context.Context, rows []*bo.ProductBo) error) error
|
||||||
GetByBatchNo(ctx context.Context, batchNo string) (*bo.ProductBo, error)
|
GetByBatchNo(ctx context.Context, batchNo string) (*bo.ProductBo, error)
|
||||||
GetByProductNo(ctx context.Context, productNo string) (*bo.ProductBo, error)
|
GetByProductNo(ctx context.Context, productNo string) (*bo.ProductBo, error)
|
||||||
UpdateWarningBudget(ctx context.Context, id int32, req *do.WxResp) error
|
UpdateByWxResp(ctx context.Context, id int32, req *do.WxResp) error
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package biz
|
||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
||||||
"voucher/internal/biz/cmb"
|
"voucher/internal/biz/cmb"
|
||||||
"voucher/internal/biz/do"
|
|
||||||
"voucher/internal/biz/mixrepos"
|
"voucher/internal/biz/mixrepos"
|
||||||
"voucher/internal/biz/repo"
|
"voucher/internal/biz/repo"
|
||||||
"voucher/internal/biz/wechatrepo"
|
"voucher/internal/biz/wechatrepo"
|
||||||
|
|
@ -27,7 +26,6 @@ type VoucherBiz struct {
|
||||||
|
|
||||||
mu sync.RWMutex
|
mu sync.RWMutex
|
||||||
queryMap map[string]bool
|
queryMap map[string]bool
|
||||||
warningBudgeMap map[string]*do.WarningBudgetLog
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewVoucherBiz(
|
func NewVoucherBiz(
|
||||||
|
|
@ -59,7 +57,6 @@ func NewVoucherBiz(
|
||||||
CmbMixRepo: CmbMixRepo,
|
CmbMixRepo: CmbMixRepo,
|
||||||
|
|
||||||
queryMap: make(map[string]bool),
|
queryMap: make(map[string]bool),
|
||||||
warningBudgeMap: make(map[string]*do.WarningBudgetLog),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,61 +29,23 @@ func (s *VoucherBiz) WarningBudgetIncr(ctx context.Context, uid string) (int64,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果发送次数超过 6 条,限制发送
|
// 如果发送次数超过 “指定” 条,清除再来
|
||||||
if count > 6 {
|
if count > 12 {
|
||||||
if _, err = s.rdb.Rdb.Del(ctx, v.Key).Result(); err != nil {
|
return 0, s.WarningBudgetIncrDel(ctx, v.Key)
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return count, nil
|
return count, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *VoucherBiz) WarningBudgetGet(uid string) *do.WarningBudgetLog {
|
func (s *VoucherBiz) WarningBudgetIncrDel(ctx context.Context, key string) error {
|
||||||
|
|
||||||
if w, ok := this.warningBudgeMap[uid]; ok {
|
if _, err := s.rdb.Rdb.Del(ctx, key).Result(); err != nil {
|
||||||
return w
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *VoucherBiz) WarningBudgetSet(req *do.WarningBudget) {
|
|
||||||
|
|
||||||
this.warningBudgeMap[req.StockId] = &do.WarningBudgetLog{
|
|
||||||
WarningBudget: req,
|
|
||||||
Num: 1, // 默认1
|
|
||||||
LastTime: time.Now(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *VoucherBiz) WarningBudgetAdd(req *do.WarningBudget) *do.WarningBudgetLog {
|
|
||||||
|
|
||||||
this.mu.Lock()
|
|
||||||
defer this.mu.Unlock()
|
|
||||||
|
|
||||||
w := this.WarningBudgetGet(req.StockId)
|
|
||||||
if w == nil {
|
|
||||||
this.WarningBudgetSet(req)
|
|
||||||
} else {
|
|
||||||
w.LastTime = time.Now()
|
|
||||||
w.Num += 1
|
|
||||||
w.WarningBudget = req
|
|
||||||
}
|
|
||||||
|
|
||||||
return w
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *VoucherBiz) WarningBudgetRemove(uid string) {
|
|
||||||
|
|
||||||
this.mu.Lock()
|
|
||||||
defer this.mu.Unlock()
|
|
||||||
|
|
||||||
if _, ok := this.warningBudgeMap[uid]; ok {
|
|
||||||
delete(this.warningBudgeMap, uid)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *VoucherBiz) WarningBudget(ctx context.Context) {
|
func (v *VoucherBiz) WarningBudget(ctx context.Context) {
|
||||||
|
|
||||||
uid := "warningBudget"
|
uid := "warningBudget"
|
||||||
|
|
@ -142,8 +104,7 @@ func (v *VoucherBiz) Calculate(ctx context.Context, product *bo.ProductBo, wxRes
|
||||||
|
|
||||||
w := v.WxResp(wxResp)
|
w := v.WxResp(wxResp)
|
||||||
|
|
||||||
err := v.ProductRepo.UpdateWarningBudget(ctx, product.ID, w)
|
if err := v.ProductRepo.UpdateByWxResp(ctx, product.ID, w); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -155,18 +116,27 @@ func (v *VoucherBiz) Calculate(ctx context.Context, product *bo.ProductBo, wxRes
|
||||||
}
|
}
|
||||||
|
|
||||||
if count == 1 {
|
if count == 1 {
|
||||||
return v.WarningSend(ctx, formatAsCard(product, w))
|
return v.WarningSend(ctx, product, w)
|
||||||
} else {
|
} else {
|
||||||
log.Warnf("预警查询,当前达到预警第[%d]次,暂不做通知", count)
|
log.Warnf("预警查询,当前达到预警第[%d]次,暂不做通知", count)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if w.AllBudget > product.AllBudget {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *VoucherBiz) WarningSend(ctx context.Context, str string) error {
|
func (v *VoucherBiz) WarningSend(ctx context.Context, product *bo.ProductBo, w *do.WxResp) error {
|
||||||
|
|
||||||
return v.DingMixRepo.SendMarkdownMessage(ctx, "券预算不足", str)
|
err := v.DingMixRepo.SendMarkdownMessage(ctx, "券预算不足", formatAsCard(product, w))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatAsCard(product *bo.ProductBo, req *do.WxResp) string {
|
func formatAsCard(product *bo.ProductBo, req *do.WxResp) string {
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,12 @@ func (r *ProductRepoImpl) FindWarningBudget(ctx context.Context, fun func(ctx co
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *ProductRepoImpl) UpdateWarningBudget(ctx context.Context, id int32, req *do.WxResp) error {
|
func (r *ProductRepoImpl) UpdateByWxResp(ctx context.Context, id int32, req *do.WxResp) error {
|
||||||
|
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
|
||||||
u := model.Product{
|
u := model.Product{
|
||||||
|
Amount: req.Amount,
|
||||||
AllBudget: req.AllBudget,
|
AllBudget: req.AllBudget,
|
||||||
AvailableBudget: req.AvailableBudget,
|
AvailableBudget: req.AvailableBudget,
|
||||||
UpdateTime: &now,
|
UpdateTime: &now,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue