|
|
@@ -1,9 +1,13 @@
|
|
|
package models
|
|
|
|
|
|
import (
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"mtp2_if/db"
|
|
|
+ "mtp2_if/logger"
|
|
|
"mtp2_if/utils"
|
|
|
+ "strconv"
|
|
|
+ "sync"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
@@ -75,3 +79,111 @@ func (r *GErmcpspotgoodsprice) GetDataByPage() (interface{}, error, int, int, in
|
|
|
}
|
|
|
return sData, err, r.Page, r.PageSize, total
|
|
|
}
|
|
|
+
|
|
|
+type THJSigninReq struct {
|
|
|
+ USERID int64 `form:"userid" binding:"required"` // 用户ID
|
|
|
+}
|
|
|
+
|
|
|
+// Signin 用户签到
|
|
|
+func (r *THJSigninReq) Signin() (err error) {
|
|
|
+ // 资源锁
|
|
|
+ var lock sync.Mutex
|
|
|
+ lock.Lock()
|
|
|
+ defer lock.Unlock()
|
|
|
+
|
|
|
+ engine := db.GetEngine()
|
|
|
+
|
|
|
+ // 判断目标用户当日是否已经签到
|
|
|
+ p := new(Thjsignin)
|
|
|
+ if has, err := engine.Where("userid = ?", r.USERID).And("tradedate = to_char(sysdate, 'yyyymmdd')").Get(&p); err != nil {
|
|
|
+ logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
|
|
|
+ err = errors.New("数据错误")
|
|
|
+ return err
|
|
|
+ } else {
|
|
|
+ if has {
|
|
|
+ err = errors.New("当日已签到")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取签到积配置
|
|
|
+ c := Thjscoreconfig{
|
|
|
+ SCORECONFIGTYPE: 2,
|
|
|
+ }
|
|
|
+ if has, err := engine.Get(&c); err != nil || !has {
|
|
|
+ logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
|
|
|
+ err = errors.New("数据错误")
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 事务
|
|
|
+ session := engine.NewSession()
|
|
|
+ defer session.Close()
|
|
|
+ // add Begin() before any action
|
|
|
+ if err := session.Begin(); err != nil {
|
|
|
+ logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
|
|
|
+ return errors.New("数据错误")
|
|
|
+ }
|
|
|
+
|
|
|
+ // 判断用户积分表是否已经存在此用户
|
|
|
+ curscore := 0
|
|
|
+ t := Thjuserscore{USERID: r.USERID}
|
|
|
+ has, err := session.Exist(t)
|
|
|
+ if err != nil {
|
|
|
+ session.Rollback()
|
|
|
+ logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
|
|
|
+ return errors.New("数据错误")
|
|
|
+ }
|
|
|
+ if has {
|
|
|
+ // 更新积分
|
|
|
+ curscore = int(t.CURSCORE)
|
|
|
+ t.CURSCORE += int64(c.PARMA1)
|
|
|
+ t.UPDATETIME = time.Now()
|
|
|
+ _, err = session.Update(&t)
|
|
|
+ if err != nil {
|
|
|
+ session.Rollback()
|
|
|
+ logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
|
|
|
+ return errors.New("数据错误")
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 新增用户积分记录
|
|
|
+ t.CURSCORE = int64(c.PARMA1)
|
|
|
+ t.UPDATETIME = time.Now()
|
|
|
+ _, err = session.Insert(&t)
|
|
|
+ if err != nil {
|
|
|
+ session.Rollback()
|
|
|
+ logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
|
|
|
+ return errors.New("数据错误")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 记录积分流水
|
|
|
+ q := Thjuserscorelog{}
|
|
|
+ seqMap, err := session.QueryString("SELECT SEQ_THJ_USERSCORELOG.nextval SEQID FROM dual")
|
|
|
+ if err != nil {
|
|
|
+ session.Rollback()
|
|
|
+ logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
|
|
|
+ return errors.New("数据错误")
|
|
|
+ }
|
|
|
+ if len(seqMap) <= 0 {
|
|
|
+ session.Rollback()
|
|
|
+ return errors.New("获取自增ID错误")
|
|
|
+ }
|
|
|
+ seqID, _ := strconv.Atoi(seqMap[0]["SEQID"])
|
|
|
+ q.AUTOID = int64(seqID)
|
|
|
+ q.USERID = r.USERID
|
|
|
+ q.SCORECONFIGTYPE = 2 // 2:签到送积分
|
|
|
+ q.SCORE = float64(c.PARMA1)
|
|
|
+ q.ORISCORE = float64(curscore)
|
|
|
+ q.CURSCORE = float64(t.CURSCORE)
|
|
|
+ q.CREATETIME = time.Now()
|
|
|
+ _, err = session.Insert(&q)
|
|
|
+ if err != nil {
|
|
|
+ session.Rollback()
|
|
|
+ logger.GetLogger().Errorf("Thjsignin failed: %s", err.Error())
|
|
|
+ return errors.New("数据错误")
|
|
|
+ }
|
|
|
+
|
|
|
+ // add Commit() after all actions
|
|
|
+ return session.Commit()
|
|
|
+}
|