You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.6 KiB
82 lines
2.6 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/job/main/member/model" |
|
smodel "go-common/app/service/main/member/model" |
|
"go-common/library/log" |
|
) |
|
|
|
func (s *Service) recoverMoral(c context.Context, mid int64) (err error) { |
|
var ( |
|
moral *smodel.Moral |
|
rowsAffected int64 |
|
) |
|
if moral, err = s.dao.SelMoral(c, mid); err != nil { |
|
return |
|
} |
|
if moral == nil || moral.Moral >= smodel.DefaultMoral { |
|
log.Info("recoverMoral ignore, moral(%v)", moral) |
|
return |
|
} |
|
now := time.Now() |
|
deltaDays := deltaDays(now, moral.LastRecoverDate.Time()) |
|
if deltaDays <= 0 { |
|
return |
|
} |
|
deltaMoral := deltaDays * 100 |
|
if moral.Moral+deltaMoral > smodel.DefaultMoral { |
|
deltaMoral = smodel.DefaultMoral - moral.Moral |
|
} |
|
if rowsAffected, err = s.dao.RecoverMoral(c, mid, deltaMoral, deltaMoral, now.Format("2006-01-02")); err != nil { |
|
return |
|
} |
|
if rowsAffected == 0 { |
|
return |
|
} |
|
|
|
// report log |
|
ul := &model.UserLog{ |
|
Mid: mid, |
|
IP: "127.0.0.1", |
|
TS: now.Unix(), |
|
LogID: model.UUID4(), |
|
Content: map[string]string{ |
|
"from_moral": strconv.FormatInt(moral.Moral, 10), |
|
"to_moral": strconv.FormatInt(deltaMoral+moral.Moral, 10), |
|
"origin": strconv.FormatInt(smodel.ManualRecoveryType, 10), |
|
"status": strconv.FormatInt(smodel.RevocableMoralStatus, 10), |
|
"remark": fmt.Sprintf("自动恢复(%d)天", deltaDays), |
|
"operater": "系统", |
|
"reason": fmt.Sprintf("时间:%d天", deltaDays), |
|
}, |
|
} |
|
s.dao.AddMoralLog(c, ul) |
|
|
|
// origin log |
|
// content := make(map[string][]byte, 10) |
|
// content["mid"] = []byte(strconv.FormatInt(mid, 10)) |
|
// content["ip"] = []byte("127.0.0.1") |
|
// content["from_moral"] = []byte(strconv.FormatInt(moral.Moral, 10)) |
|
// content["to_moral"] = []byte(strconv.FormatInt(deltaMoral+moral.Moral, 10)) |
|
// content["origin"] = []byte(strconv.FormatInt(smodel.ManualRecoveryType, 10)) |
|
// content["status"] = []byte(strconv.FormatInt(smodel.RevocableMoralStatus, 10)) |
|
// content["remark"] = []byte(fmt.Sprintf("自动恢复(%d)天", deltaDays)) |
|
// content["operater"] = []byte("系统") |
|
// content["reason"] = []byte(fmt.Sprintf("时间:%d天", deltaDays)) |
|
// if err = s.dao.AddLog(c, mid, now.Unix(), content, model.TableMoralLog); err != nil { |
|
// log.Error("recoverMoral mid: %v from_moral:%v,to_moral:%v error(%v)", mid, content["from_moral"], content["to_moral"], err) |
|
// } else { |
|
// log.Info("recoverMoral mid: %v from_moral:%v,to_moral:%v error(%v)", mid, content["from_moral"], content["to_moral"], err) |
|
// } |
|
s.dao.DelMoralCache(c, mid) |
|
return |
|
} |
|
|
|
func deltaDays(now, old time.Time) int64 { |
|
return int64(now.Sub(old).Hours() / 24) |
|
}
|
|
|