Bladeren bron

自测提交

wangkaiyue 3 jaren geleden
bovenliggende
commit
3bbebef501

+ 0 - 25
client/client.go

@@ -1,25 +0,0 @@
-package client
-
-import (
-	"github.com/gogf/gf/v2/os/gcfg"
-	"github.com/gogf/gf/v2/os/gctx"
-	"log"
-
-	"github.com/tal-tech/go-zero/core/discov"
-	"github.com/tal-tech/go-zero/zrpc"
-)
-
-var ZrpcClient zrpc.Client
-
-func init() {
-	var err error
-	ZrpcClient, err = zrpc.NewClient(zrpc.RpcClientConf{
-		Etcd: discov.EtcdConf{
-			Hosts: gcfg.Instance().MustGet(gctx.New(), "etcd.baseserver.integral.address", nil).Strings(),
-			Key:   gcfg.Instance().MustGet(gctx.New(), "etcd.baseserver.integral.key", nil).String(),
-		},
-	})
-	if err != nil {
-		log.Fatalln(err)
-	}
-}

+ 9 - 8
etc/config.yaml

@@ -37,7 +37,7 @@ nsq:
 #数据库配置
 databases:
   # redis配置
-  redis: main=192.168.3.206:1712,other=192.168.3.206:1712
+  redis: main=123.56.53.97:1713,other=123.56.53.97:1713
   # nsq操作日志库
   mogLog:
     address: 192.168.3.206:27090
@@ -63,6 +63,9 @@ wx:
   pcSessionFlag: true
   sessionTimeout: 168
 
+rpc:
+  payrpc: 127.0.0.1:8600
+
 #其他配置
 newUserAward:
   points: 500
@@ -85,8 +88,6 @@ shareOpenDetail: #三级页分享
     points: 5
     cycle: day
 
-
-
 bidderPlan: # 临时活动
   name: 投标人专属免费计划
   code: bidderFreePlan
@@ -96,16 +97,16 @@ bidderPlan: # 临时活动
   missions: #任务列表
     subscribe: #订阅
       points: 300
-      schedule: 3
+      schedule: 300
     invite: #邀请
       points: 500
-      schedule: 5
+      schedule: 500
     improveInfo: #完善信息
       points: 200
-      schedule: 2
+      schedule: 200
   scheduleReward: #进度奖励
-    8:
+    800:
       subvip: 7
-    10:
+    1000:
       subvip: 30
 

+ 2 - 0
go.mod

@@ -5,6 +5,7 @@ go 1.14
 require (
 	app.yhyue.com/moapp/jyPoints v0.0.0-20210319094929-f8c029fa5c82
 	app.yhyue.com/moapp/jybase v0.0.0-20220421060131-a1001013ba46
+	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
 	github.com/alicebob/miniredis/v2 v2.17.0 // indirect
 	github.com/coreos/go-semver v0.3.0 // indirect
 	github.com/coreos/go-systemd/v22 v22.3.2 // indirect
@@ -28,6 +29,7 @@ require (
 	github.com/sirupsen/logrus v1.8.1 // indirect
 	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/tal-tech/go-zero v1.1.5
+	go.mongodb.org/mongo-driver v1.5.0
 	go.opentelemetry.io/otel/sdk v1.3.0 // indirect
 	go.uber.org/atomic v1.9.0 // indirect
 	go.uber.org/goleak v1.1.12 // indirect

+ 2 - 0
go.sum

@@ -42,6 +42,8 @@ github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
 github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
+github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67 h1:x98/gnpyNAiuvg/gX3KgdfKxnZj3t9pIl3BCVJg3qwg=
+github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67/go.mod h1:g1VZ0nbzBvfsWw22gNVOxWxJxpBR+CBiFNK2n2ogeUo=
 github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
 github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=

+ 308 - 0
handler/activity/bidderPlan.go

@@ -0,0 +1,308 @@
+package activity
+
+import (
+	"app.yhyue.com/moapp/jybase/go-logger/logger"
+	"app.yhyue.com/moapp/jybase/redis"
+	"app.yhyue.com/moapp/message/db"
+	"app.yhyue.com/moapp/message/handler/award"
+	"app.yhyue.com/moapp/message/rpc"
+	"encoding/json"
+	"fmt"
+	"github.com/gogf/gf/v2/os/gcfg"
+	"github.com/gogf/gf/v2/os/gctx"
+	"github.com/gogf/gf/v2/os/gtime"
+	"github.com/gogf/gf/v2/util/gconv"
+	"time"
+)
+
+/*
+投标人专属免费计划
+待解决问题:连点处理
+*/
+
+type BidderPlan struct {
+	St, Ed   time.Time           //活动开始时间、结束时间
+	Missions map[string]struct { //任务
+		Points   int `json:"points"`
+		Schedule int `json:"schedule"`
+	}
+	ScheduleReward map[int]struct { //进度奖励
+		SubVip   int `json:"subvip"`
+		Schedule int `json:"schedule"`
+	}
+}
+
+const (
+	BidderPlanActivityCode = "bidderPlan"
+	BidderPlanRedis        = "main"
+	//活动累计进度
+	BidderPlanScheduleCache = "bidderPlanScheduleValue_%s"
+	//奖励领取状态
+	BidderPlanScheduleAwardStatus       = "bidderPlanScheduleAward_%s_%d"
+	BidderPlanSubscribeMissionsStatus   = "bidderPlanActivitySubscribeCacheKey_%s"
+	BidderPlanInviteMissionsStatus      = "bidderPlanActivityInviteCacheKey_%s"
+	BidderPlanImproveInfoMissionsStatus = "bidderPlanActivityImproveInfoCacheKey_%s"
+)
+
+var JyBidderPlan *BidderPlan
+
+func init() {
+	JyBidderPlan = &BidderPlan{
+		St: gtime.NewFromStrLayout(gcfg.Instance().MustGet(gctx.New(), "bidderPlan.dateRange.st").String(), "2006-01-02T15:04:05Z").Time,
+		Ed: gtime.NewFromStrLayout(gcfg.Instance().MustGet(gctx.New(), "bidderPlan.dateRange.ed").String(), "2006-01-02T15:04:05Z").Time,
+	}
+	//加载任务
+	if loadMissionsErr := gcfg.Instance().MustGet(gctx.New(), "bidderPlan.missions").Scan(&JyBidderPlan.Missions); loadMissionsErr != nil {
+		logger.Error(fmt.Sprintf("JyBidderPlan 加载任务异常 %v", loadMissionsErr))
+	}
+	//加载进度奖励
+	if loadScheduleErr := gcfg.Instance().MustGet(gctx.New(), "bidderPlan.scheduleReward").Scan(&JyBidderPlan.ScheduleReward); loadScheduleErr != nil {
+		logger.Error(fmt.Sprintf("JyBidderPlan 加载进度异常 %v", loadScheduleErr))
+	}
+}
+
+// InActivity 是否在活动时间内
+func (BP *BidderPlan) InActivity() bool {
+	now := time.Now()
+	return now.After(JyBidderPlan.St) && now.Before(JyBidderPlan.Ed)
+}
+
+// cacheLong 缓存时间
+func (BP *BidderPlan) cacheLong() int {
+	//return int(JyBidderPlan.Ed.Unix()-time.Now().Unix()))+ 60 * 60 * 24
+	return 60 * 60 * 24 * 30
+}
+
+// GetSchedule 查询活动任务进度
+func (BP *BidderPlan) GetSchedule(userId string) int {
+	return -redis.GetInt(BidderPlanRedis, fmt.Sprintf(BidderPlanScheduleCache, userId))
+}
+
+func (BP *BidderPlan) GetScheduleQuery(userId string, schedule int) (status int) {
+	if BP.GetSchedule(userId) < schedule {
+		return 0
+	}
+	key := fmt.Sprintf(BidderPlanScheduleAwardStatus, userId, schedule)
+	if redis.Get(BidderPlanRedis, key) == nil {
+		status = gconv.Int(redis.Incr(BidderPlanRedis, key))
+		_ = redis.SetExpire(BidderPlanRedis, key, BP.cacheLong())
+	} else {
+		status = redis.GetInt(BidderPlanRedis, key)
+	}
+	if status > 1 {
+		status = 1
+	}
+	return
+}
+
+// ScheduleGiven 活动任务进度奖励
+func (BP *BidderPlan) ScheduleGiven(userId string, schedule int) error {
+	if !BP.InActivity() {
+		return fmt.Errorf("活动已结束")
+	}
+	if BP.GetScheduleQuery(userId, schedule) != 1 {
+		return fmt.Errorf("非领取状态")
+	}
+	scheduleAward, ok := BP.ScheduleReward[schedule]
+	if !ok {
+		return fmt.Errorf("未知请求")
+	}
+
+	if err := award.GivenSubVip(userId, award.SubVip{
+		Num:          gconv.Int64(scheduleAward.SubVip),
+		ActivityCode: BidderPlanActivityCode,
+		Desc:         "",
+		Date:         time.Now().Unix(),
+	}); err != nil {
+		return fmt.Errorf("领取奖励异常")
+	}
+	key := fmt.Sprintf(BidderPlanScheduleAwardStatus, userId, schedule)
+	redis.Put(BidderPlanRedis, key, -1, BP.cacheLong())
+	return nil
+}
+
+// AddSchedule 增加活动进度
+func (BP *BidderPlan) AddSchedule(userId string, value int) (after int) {
+	if value > 0 {
+		key := fmt.Sprintf(BidderPlanScheduleCache, userId)
+		after = -gconv.Int(redis.Decrby(BidderPlanRedis, key, value))
+		if value == after { //首次设置过期值
+			_ = redis.SetExpire(BidderPlanRedis, key, BP.cacheLong())
+		}
+	}
+	return
+}
+
+// FreeSubscribe 免费订阅
+type FreeSubscribe struct {
+	OAreaP map[string]interface{} `json:"o_area_p"`
+	AKey   []interface{}          `json:"a_key"`
+}
+
+// MissionsSubscribeQuery 订阅任务
+// status:0 未完成 1 待领取 -1已领取
+func (BP *BidderPlan) MissionsSubscribeQuery(userId string) (status int) {
+	//非7天超级订阅或存在订阅内容则完成任务
+	finish := func() bool {
+		uData, ok := db.Mgo.FindById("user", userId, `{"o_jy":1,"i_vip_status":1,"i_member_status":1}`)
+		if !ok || uData == nil || len(*uData) == 0 {
+			return false
+		}
+		if gconv.Int((*uData)["i_vip_status"]) > 0 { //超级订阅
+			return true
+		} else if gconv.Int((*uData)["i_member_status"]) > 0 { //大会员
+			return true
+		}
+		//查询免费订阅是否完成
+		vStatus, err := rpc.GetUserVipBaseMsgByRpc(userId)
+		if err != nil {
+			return false
+		}
+		if vStatus.EntnicheStatus > 0 {
+			return true
+		} else {
+			bytes := gconv.Bytes((*uData)["o_jy"])
+			if bytes == nil || len(bytes) == 0 {
+				return false
+			}
+			freeSub := FreeSubscribe{}
+			if err = json.Unmarshal(bytes, &freeSub); err != nil {
+				fmt.Println(err)
+				return false
+			}
+			if len(freeSub.AKey) > 0 && len(freeSub.OAreaP) > 0 {
+				return true
+			}
+		}
+		return false
+	}()
+
+	if !finish {
+		return 0
+	}
+
+	key := fmt.Sprintf(BidderPlanSubscribeMissionsStatus, userId)
+	if redis.Get(BidderPlanRedis, key) == nil {
+		status = gconv.Int(redis.Incr(BidderPlanRedis, key))
+		_ = redis.SetExpire(BidderPlanRedis, key, BP.cacheLong())
+	} else {
+		status = redis.GetInt(BidderPlanRedis, key)
+	}
+	if status > 1 {
+		status = 1
+	}
+	return
+}
+
+// MissionsSubscribeGiven 订阅任务领取奖励
+func (BP *BidderPlan) MissionsSubscribeGiven(userId string) error {
+	if !BP.InActivity() {
+		return fmt.Errorf("活动已结束")
+	}
+	status := BP.MissionsSubscribeQuery(userId)
+	if status != 1 {
+		return fmt.Errorf("非领取状态")
+	}
+
+	if givenPointsErr := award.GivenPoints(userId, award.Points{
+		Num:          gcfg.Instance().MustGet(gctx.New(), "bidderPlan.missions.subscribe.points").Int64(),
+		Type:         1006,
+		ActivityCode: BidderPlanActivityCode,
+		Desc:         "免费订阅任务完成",
+		Date:         time.Now().Unix(),
+	}); givenPointsErr != nil {
+		return fmt.Errorf("领取奖励异常")
+	}
+
+	//设置已领取
+	redis.Put(BidderPlanRedis, fmt.Sprintf(BidderPlanSubscribeMissionsStatus, userId), -1, BP.cacheLong())
+	//增加任务进度
+	BP.AddSchedule(userId, gcfg.Instance().MustGet(gctx.New(), "bidderPlan.missions.subscribe.schedule").Int())
+	return nil
+}
+
+// MissionsInviteQuery 邀请任务状态查询
+// status:0 未完成 1 待领取 -1已领取
+func (BP *BidderPlan) MissionsInviteQuery(userId string) (status int) {
+	status = redis.GetInt(BidderPlanRedis, fmt.Sprintf(BidderPlanInviteMissionsStatus, userId))
+	if status > 1 {
+		status = 1
+	}
+	return status
+}
+
+// MissionsInviteGiven 邀请任务奖励领取
+func (BP *BidderPlan) MissionsInviteGiven(userId string) error {
+	if !BP.InActivity() {
+		return fmt.Errorf("活动已结束")
+	}
+	status := BP.MissionsInviteQuery(userId)
+	if status != 1 {
+		return fmt.Errorf("非领取状态")
+	}
+	//领取
+	if givenPointsErr := award.GivenPoints(userId, award.Points{
+		Num:          gcfg.Instance().MustGet(gctx.New(), "bidderPlan.missions.invite.points").Int64(),
+		Type:         1007,
+		ActivityCode: BidderPlanActivityCode,
+		Desc:         "邀请领好礼任务完成",
+		Date:         time.Now().Unix(),
+	}); givenPointsErr != nil {
+		return fmt.Errorf("领取奖励异常")
+	}
+
+	//设置已领取
+	redis.Put(BidderPlanRedis, fmt.Sprintf(BidderPlanInviteMissionsStatus, userId), -1, BP.cacheLong())
+	//增加任务进度
+	BP.AddSchedule(userId, gcfg.Instance().MustGet(gctx.New(), "bidderPlan.missions.invite.schedule").Int())
+	return nil
+}
+
+// MissionsImproveInfoQuery 完善信息任务
+// status:0 未完成 1 待领取 -1已领取
+func (BP *BidderPlan) MissionsImproveInfoQuery(userId string) (status int) {
+	hasMsg := db.Mgo.Count("saleLeads", map[string]interface{}{
+		"userid": userId,
+	}) > 0
+	if !hasMsg {
+		return 0
+	}
+	key := fmt.Sprintf(BidderPlanImproveInfoMissionsStatus, userId)
+	if redis.Get(BidderPlanRedis, key) == nil {
+		status = gconv.Int(redis.Incr(BidderPlanRedis, key))
+		_ = redis.SetExpire(BidderPlanRedis, key, BP.cacheLong())
+	} else {
+		status = redis.GetInt(BidderPlanRedis, key)
+	}
+	if status > 1 {
+		status = 1
+	}
+	return
+}
+
+// MissionsImproveInfoGiven 完善信息奖励领取
+func (BP *BidderPlan) MissionsImproveInfoGiven(userId string) error {
+	if !BP.InActivity() {
+		return fmt.Errorf("活动已结束")
+	}
+	status := BP.MissionsImproveInfoQuery(userId)
+	if status != 1 {
+		return fmt.Errorf("非领取状态")
+	}
+
+	if givenPointsErr := award.GivenPoints(userId, award.Points{
+		Num:          gcfg.Instance().MustGet(gctx.New(), "bidderPlan.missions.improveInfo.points").Int64(),
+		Type:         1008,
+		ActivityCode: BidderPlanActivityCode,
+		Desc:         "完善信息任务完成",
+		Date:         time.Now().Unix(),
+	}); givenPointsErr != nil {
+		return fmt.Errorf("领取奖励异常")
+	}
+
+	//设置已领取
+	redis.Put(BidderPlanRedis, fmt.Sprintf(BidderPlanImproveInfoMissionsStatus, userId), -1, BP.cacheLong())
+	//增加任务进度
+	BP.AddSchedule(userId, gcfg.Instance().MustGet(gctx.New(), "bidderPlan.missions.improveInfo.schedule").Int())
+	return nil
+}

+ 33 - 21
handler/activity/inviteRegister.go

@@ -2,6 +2,7 @@ package activity
 
 import (
 	"app.yhyue.com/moapp/jybase/go-logger/logger"
+	"app.yhyue.com/moapp/jybase/redis"
 	"app.yhyue.com/moapp/message/handler/award"
 	"app.yhyue.com/moapp/message/model"
 	"fmt"
@@ -18,52 +19,63 @@ import (
 */
 
 const (
-	InviteRegisterActivityName = "inviteRegister"
+	InviteRegisterActivityCode = "inviteRegister"
 )
 
 // InviteActivity 邀请活动奖励
 func InviteActivity(msg *model.Message) {
 	// 超级订阅
-	subVipTimes, _ := award.GetActivityAwardDesc(msg.E_userId, InviteRegisterActivityName, award.AwardSubVip)
+	subVipTimes, _ := award.GetActivityAwardDesc(msg.E_userId, InviteRegisterActivityCode, award.AwardSubVip)
 	subVipMax := gcfg.Instance().MustGet(gctx.New(), "inviteRegister.rewardNumMax.subvip", nil).Int64()
 	if subVipTimes < subVipMax {
-		award.GivenSubVip(msg, award.SubVip{
-			Num:  gcfg.Instance().MustGet(gctx.New(), "inviteRegister.invite.subvip", nil).Int64(),
-			From: InviteRegisterActivityName,
-			Desc: "被邀请注册成功",
+		_ = award.GivenSubVip(msg.E_userId, award.SubVip{
+			Num:          gcfg.Instance().MustGet(gctx.New(), "inviteRegister.invite.subvip", nil).Int64(),
+			ActivityCode: InviteRegisterActivityCode,
+			Date:         msg.E_time,
+			Desc:         "被邀请注册成功",
 		})
 	} else {
 		logger.Info(fmt.Sprintf("%+v", msg), msg.E_userId, "用户已达邀请奖励上限,停止赠送权益", subVipMax, "限制,不再增加超级订阅")
 	}
 
 	// 积分
-	pointsTimes, _ := award.GetActivityAwardDesc(msg.E_userId, InviteRegisterActivityName, award.AwardPoints)
+	pointsTimes, _ := award.GetActivityAwardDesc(msg.E_userId, InviteRegisterActivityCode, award.AwardPoints)
 	pointsMax := gcfg.Instance().MustGet(gctx.New(), "inviteRegister.rewardNumMax.points", nil).Int64()
 	if pointsTimes < pointsMax {
-		award.GivenPoints(msg, award.Points{
-			Num:  gcfg.Instance().MustGet(gctx.New(), "inviteRegister.invite.points", nil).Int64(),
-			Type: 1003,
-			From: InviteRegisterActivityName,
-			Desc: "邀请好友成功",
+		_ = award.GivenPoints(msg.E_userId, award.Points{
+			Num:          gcfg.Instance().MustGet(gctx.New(), "inviteRegister.invite.points", nil).Int64(),
+			Type:         1003,
+			ActivityCode: InviteRegisterActivityCode,
+			Date:         msg.E_time,
+			Desc:         "邀请好友成功",
 		})
 	} else {
 		logger.Info(fmt.Sprintf("%+v", msg), msg.E_userId, "用户已达邀请奖励上限,停止赠送权益", pointsMax, "限制,不再增加积分")
 	}
+
+	//投标人专属免费计划-邀请任务
+	key := fmt.Sprintf(BidderPlanInviteMissionsStatus, msg.E_userId)
+	if JyBidderPlan.InActivity() && redis.Get(BidderPlanRedis, key) == nil {
+		redis.Incr(BidderPlanRedis, key)
+		_ = redis.SetExpire(BidderPlanRedis, key, JyBidderPlan.cacheLong())
+	}
 }
 
 // InvitedActivity 被邀请奖励
 func InvitedActivity(msg *model.Message) {
 	// 超级订阅
-	award.GivenSubVip(msg, award.SubVip{
-		Num:  gcfg.Instance().MustGet(gctx.New(), "inviteRegister.invited.subvip", nil).Int64(),
-		From: InviteRegisterActivityName,
-		Desc: "被邀请注册成功",
+	_ = award.GivenSubVip(msg.E_userId, award.SubVip{
+		Num:          gcfg.Instance().MustGet(gctx.New(), "inviteRegister.invited.subvip", nil).Int64(),
+		ActivityCode: InviteRegisterActivityCode,
+		Date:         msg.E_time,
+		Desc:         "被邀请注册成功",
 	})
 	// 积分
-	award.GivenPoints(msg, award.Points{
-		Num:  gcfg.Instance().MustGet(gctx.New(), "inviteRegister.invited.points", nil).Int64(),
-		Type: 1002,
-		From: InviteRegisterActivityName,
-		Desc: "被邀请注册成功",
+	_ = award.GivenPoints(msg.E_userId, award.Points{
+		Num:          gcfg.Instance().MustGet(gctx.New(), "inviteRegister.invited.points", nil).Int64(),
+		Type:         1002,
+		ActivityCode: InviteRegisterActivityCode,
+		Date:         msg.E_time,
+		Desc:         "被邀请注册成功",
 	})
 }

+ 7 - 5
handler/activity/newUserAward.go

@@ -18,10 +18,12 @@ const (
 )
 
 func NewUserActivity(msg *model.Message) {
-	award.GivenPoints(msg, award.Points{
-		Num:  gcfg.Instance().MustGet(gctx.New(), "newUserAward.points", nil).Int64(),
-		Type: 1002,
-		From: NewUserAwardActivityName,
-		Desc: "被邀请注册成功",
+	_ = award.GivenPoints(msg.E_userId, award.Points{
+		Num:          gcfg.Instance().MustGet(gctx.New(), "newUserAward.points", nil).Int64(),
+		Type:         1002,
+		ActivityCode: NewUserAwardActivityName,
+		Date:         msg.E_time,
+		Desc:         "新用户注册奖励",
 	})
+
 }

+ 6 - 5
handler/activity/shareOpen.go

@@ -34,11 +34,12 @@ func ShareOpenDetail(msg *model.Message) {
 		now := time.Now()
 		_ = redis.SetExpire(RedisMain, key, int(time.Date(now.Year(), now.Month(), now.Day()+1, 0, 0, 0, 0, time.Local).Unix()-now.Unix()))
 		//积分奖励
-		award.GivenPoints(msg, award.Points{
-			Num:  pointsNum,
-			Type: 1005,
-			From: ShareOpenDetailActivityName,
-			Desc: "用户分享信息",
+		_ = award.GivenPoints(msg.E_userId, award.Points{
+			Num:          pointsNum,
+			Type:         1005,
+			ActivityCode: ShareOpenDetailActivityName,
+			Date:         msg.E_time,
+			Desc:         "用户分享信息",
 		})
 	} else {
 		logger.Info(fmt.Sprintf("%+v", msg), "超过一天最大次数", openMax, "限制,不再增加积分")

+ 14 - 27
handler/award/points.go

@@ -1,32 +1,16 @@
 package award
 
 import (
-	"app.yhyue.com/moapp/message/model"
+	"app.yhyue.com/moapp/jybase/go-logger/logger"
 	"app.yhyue.com/moapp/message/rpc"
+	"fmt"
 	"github.com/gogf/gf/v2/util/gconv"
 )
 
-/*// Jy_user_new 产生新用户
-func (p *Points) Jy_user_new(msg *model.Message) {
-	rpc.IntegralHarvest(msg, gcfg.Instance().MustGet(gctx.New(), "docPoints.open.jywx_subscribe_new", nil).Int64(), 1002)
-}
-
-// Jywx_subscribe_invite 邀请人
-func (p *Points) Jywx_subscribe_invite(msg *model.Message) {
-	rpc.IntegralHarvest(msg, gcfg.Instance().MustGet(gctx.New(), "docPoints.open.jywx_subscribe_invite", nil).Int64(), 1003)
-}
-
-// Jywx_subscribe_invited 被邀请人
-func (p *Points) Jywx_subscribe_invited(msg *model.Message) {
-	rpc.IntegralHarvest(msg, gcfg.Instance().MustGet(gctx.New(), "docPoints.open.jywx_subscribe_invited", nil).Int64(), 1002)
-}
-
-var VarPoints = &Points{}
-*/
-
 type Points struct {
-	Num, Type  int64  //数量,类型
-	From, Desc string //来源活动,描述
+	Num, Type          int64  //数量,类型
+	ActivityCode, Desc string //来源活动,描述
+	Date               int64  //领取时间
 }
 
 const (
@@ -34,17 +18,20 @@ const (
 )
 
 // GivenPoints 积分奖励
-func GivenPoints(msg *model.Message, p Points) {
+func GivenPoints(userId string, p Points) (err error) {
 	//记录
-	if err := rpc.IntegralHarvest(msg, p.Num, p.Type); err == nil {
+	err = rpc.IntegralHarvest(userId, p.Num, p.Type, p.Date)
+	if err == nil {
 		AddAwardRecord(AwardRecord{
-			UserId:       msg.E_userId,
+			UserId:       userId,
 			Award:        AwardPoints,
 			Num:          gconv.Int(p.Num),
 			GetWay:       p.Desc,
-			ActivityCode: p.From,
-			Detail:       "",
-			Date:         msg.E_time,
+			ActivityCode: p.ActivityCode,
+			Date:         p.Date,
 		})
+	} else {
+		logger.Error(fmt.Sprintf("%s Error\n userId:%s\ngivenPointsErr:%v\n", p.ActivityCode, userId, err))
 	}
+	return
 }

+ 1 - 1
handler/award/record.go

@@ -36,7 +36,7 @@ func GetActivityAwardDesc(userId, activityCode, award string) (times, total int6
 	q["userid"] = userId
 	q["activity_code"] = activityCode
 	q["award"] = award
-	data, _ := db.Mgo.Find("activity_award", q, "", `{"num":1,}`, false, -1, -1)
+	data, _ := db.Mgo.Find("activity_award", q, "", `{"num":1}`, false, -1, -1)
 	times = int64(len(*data))
 	for _, v := range *data {
 		total += common.Int64All(v["num"])

+ 24 - 5
handler/award/subvip.go

@@ -1,17 +1,36 @@
 package award
 
-import "app.yhyue.com/moapp/message/model"
+import (
+	"app.yhyue.com/moapp/jybase/go-logger/logger"
+	"app.yhyue.com/moapp/message/rpc"
+	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
+)
 
 const (
 	AwardSubVip = "subvip"
 )
 
 type SubVip struct {
-	Num        int64  //超级订阅 天
-	From, Desc string //来源活动,描述
+	Num                int64  //超级订阅 天
+	ActivityCode, Desc string //来源活动,描述
+	Date               int64  //领取时间
 }
 
 // GivenSubVip 超级订阅奖励
-func GivenSubVip(msg *model.Message, sVip SubVip) {
-
+func GivenSubVip(userId string, subVip SubVip) (err error) {
+	err = rpc.SubVipHarvest(userId, gconv.Int(subVip.Num), subVip.Desc)
+	if err == nil {
+		AddAwardRecord(AwardRecord{
+			UserId:       userId,
+			Award:        AwardPoints,
+			Num:          gconv.Int(subVip.Num),
+			GetWay:       subVip.Desc,
+			ActivityCode: subVip.ActivityCode,
+			Date:         subVip.Date,
+		})
+	} else {
+		logger.Error(fmt.Sprintf("%s Error\n userId:%s\ngivenPointsErr:%v\n", subVip.ActivityCode, userId, err))
+	}
+	return
 }

+ 9 - 9
rpc/integral.go

@@ -5,7 +5,6 @@ import (
 	"app.yhyue.com/moapp/jyPoints/rpc/integralclient"
 	"app.yhyue.com/moapp/jybase/date"
 	"app.yhyue.com/moapp/jybase/go-logger/logger"
-	"app.yhyue.com/moapp/message/model"
 	"fmt"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
@@ -30,24 +29,25 @@ func init() {
 	}
 }
 
-func IntegralHarvest(msg *model.Message, point, pointType int64) error {
-	t := time.Unix(msg.E_time, 0).AddDate(1, 0, 0)
+// IntegralHarvest 积分奖励发放
+func IntegralHarvest(userId string, pNum, pType, dateStamp int64) error {
+	t := time.Unix(dateStamp, 0).AddDate(1, 0, 0)
 	req := &integral.Req{
-		UserId:        msg.E_userId,
+		UserId:        userId,
 		AppId:         gcfg.Instance().MustGet(gctx.New(), "docPoints.appId", "10000").String(),
-		PointType:     pointType,
-		Point:         point,
+		PointType:     pType,
+		Point:         pNum,
 		EndDate:       date.FormatDate(&t, date.Date_Full_Layout),
 		OperationType: false,
 	}
 	resp, err := integralclient.NewIntegral(zrpcClient).IntegralHarvest(gctx.New(), req)
 	if err != nil {
-		return fmt.Errorf(fmt.Sprintf("%+v", msg), "IntegralHarvest Resp error", err)
+		return fmt.Errorf(fmt.Sprintf("%+v", req), "IntegralHarvest Resp error", err)
 	}
 	if resp.Code == 1 {
-		logger.Info(fmt.Sprintf("%+v", msg), "已成功增加", point, "积分")
+		logger.Info(fmt.Sprintf("%+v", req), "已成功增加", pNum, "积分")
 		return nil
 	} else {
-		return fmt.Errorf(fmt.Sprintf("%+v", msg), "增加", point, "积分失败", "Code", resp.Code, "Message", resp.Message)
+		return fmt.Errorf(fmt.Sprintf("%+v", req), "增加", pNum, "积分失败", "Code", resp.Code, "Message", resp.Message)
 	}
 }

+ 103 - 0
rpc/subscriobePay.go

@@ -0,0 +1,103 @@
+package rpc
+
+import (
+	qu "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-logger/logger"
+	"encoding/json"
+	"fmt"
+	"github.com/gogf/gf/v2/os/gcfg"
+	"github.com/gogf/gf/v2/os/gctx"
+	"github.com/gogf/gf/v2/util/gconv"
+	"net/rpc"
+)
+
+//===========================================
+// 来源 https://bp.jydev.jianyu360.cn/BP/common/src/master/src/qfw/util/rpc/order.go
+//==========================================
+// shareUserInfo
+type shareUserInfo struct {
+	UserId     string `json:"userId"`     //用户id
+	TimeExpand int    `json:"timeExpand"` //延长时间
+	Remark     string `json:"remark"`     //备注
+}
+
+//分享完成 订单处理结果
+type JYShareResp struct {
+	Error_code int64       `json:"error_code"`
+	Error_msg  string      `json:"error_msg"`
+	Data       interface{} `json:"data"`
+}
+
+type JYShareUserIdsRes struct {
+	ShareUserInfo []shareUserInfo //被分享者+分享者等用户信息
+}
+
+//===========================================
+
+// SubVipHarvest 超级订阅奖励发放
+func SubVipHarvest(userId string, num int, remark string) (err error) {
+	defer qu.Catch()
+	client, err := rpc.DialHTTP("tcp", gcfg.Instance().MustGet(gctx.New(), "rpc.payrpc").String())
+	if err != nil {
+		logger.Error("GetUserVipBaseMsgByRpc userId", userId, "err", err.Error())
+		return err
+	}
+	var repl JYShareResp
+	req := JYShareUserIdsRes{
+		ShareUserInfo: []shareUserInfo{
+			shareUserInfo{
+				UserId:     userId,
+				TimeExpand: num,
+				Remark:     remark,
+			},
+		},
+	}
+	if err = client.Call("JyPayRpc.ShareFissionNew", req, &repl); err != nil {
+		logger.Error("JyPayRpc.ShareFissionNew userId", userId, "err", err.Error())
+		return err
+	}
+	if repl.Error_code != 0 {
+		err = fmt.Errorf(repl.Error_msg)
+		return
+	}
+	return nil
+}
+
+type VipStatus struct {
+	Status         int `json:"status"`          //大会员状态
+	VipStatus      int `json:"vip_status"`      //超级订阅状态
+	EntnicheStatus int `json:"entniche_status"` //超级订阅状态
+}
+
+// GetUserVipBaseMsgByRpc 获取用户Vip信息
+func GetUserVipBaseMsgByRpc(userId string) (vs VipStatus, err error) {
+	defer qu.Catch()
+	var repl JYShareResp
+	vs = VipStatus{}
+	client, err := rpc.DialHTTP("tcp", gcfg.Instance().MustGet(gctx.New(), "rpc.payrpc").String())
+	if err != nil {
+		logger.Error("GetUserVipBaseMsgByRpc userId", userId, "err", err.Error())
+		return
+	}
+	req := JYShareUserIdsRes{
+		ShareUserInfo: []shareUserInfo{
+			shareUserInfo{
+				UserId: userId,
+			},
+		},
+	}
+	if err = client.Call("JyPayRpc.GetUserPowerInfo", req, &repl); err != nil {
+		logger.Error("GetUserVipBaseMsgByRpc userId", userId, "err", err.Error())
+		return
+	}
+	if repl.Error_code != 0 {
+		err = fmt.Errorf(repl.Error_msg)
+		return
+	}
+
+	umErr := json.Unmarshal(gconv.Bytes(repl.Data), &vs)
+	if umErr != nil {
+		err = fmt.Errorf("格式化信息异常")
+	}
+	return
+}

+ 0 - 1
rpc/subvip.go

@@ -1 +0,0 @@
-package rpc

+ 0 - 58
services/activity/bidderPlan/entity.go

@@ -1,58 +0,0 @@
-package bidderPlan
-
-import (
-	"app.yhyue.com/moapp/message/db"
-	"github.com/gogf/gf/v2/util/gconv"
-)
-
-type BidderPlan struct {
-	Schedule interface{} //进度
-	Missions interface{} //任务
-}
-
-// List 活动列表
-func (receiver *BidderPlan) List() (map[string]interface{}, error) {
-	return nil, nil
-}
-
-// CheckStatus 任务完成校验
-func (receiver *BidderPlan) CheckStatus(userId, flag string) (bool, error) {
-	return false, nil
-}
-
-// GetSchedule 获取进度
-func (receiver *BidderPlan) GetSchedule() {
-
-}
-
-// 订阅任务
-func subscribe(userId string) (finish bool) {
-	//非7天超级订阅或存在订阅内容则完成任务
-	res, ok := db.Mgo.FindById("user", userId, `{"i_vip_status":1,"o_vipjy":1,"l_vip_starttime":1,"l_vip_endtime":1,"i_member_status":1}`)
-	if !ok || res == nil || len(*res) == 0 {
-		return
-	}
-
-	if gconv.Int((*res)["i_vip_status"]) > 0 { //超级订阅
-		if gconv.Int((*res)["l_vip_starttime"])-gconv.Int((*res)["l_vip_endtime"]) > 7*24*60*60 { //非赠送
-
-		}
-	} else if gconv.Int((*res)["i_member_status"]) > 0 { //大会员
-		return true
-	} else if false { //商机管理
-
-	}
-	return
-}
-
-// 邀请任务
-func invite(userId string) bool {
-
-	return false
-}
-
-// 完善信息
-func improveInfo(userId string) bool {
-
-	return false
-}

+ 46 - 11
services/activity/bidderPlan/services.go

@@ -2,6 +2,7 @@ package bidderPlan
 
 import (
 	. "app.yhyue.com/moapp/jybase/api"
+	"app.yhyue.com/moapp/message/handler/activity"
 	"github.com/gogf/gf/v2/net/ghttp"
 	"log"
 )
@@ -9,16 +10,39 @@ import (
 // Activity BidderPlan 投标人专属免费计划
 type Activity struct{}
 
+// Period 活动周期
+// url:/jyActivity/bidderPlan/period
+func (act *Activity) Period(r *ghttp.Request) {
+	userId := r.GetHeader("userId")
+	rData, errMsg := func() (map[string]interface{}, error) {
+		return map[string]interface{}{
+			"start": activity.JyBidderPlan.St.Unix(),
+			"end":   activity.JyBidderPlan.Ed.Unix(),
+		}, nil
+	}()
+	if errMsg != nil {
+		log.Printf("Activity BidderPlan Schedule  %s error:%s\n", userId, errMsg.Error())
+	}
+	_ = r.Response.WriteJson(NewResult(rData, errMsg))
+}
+
 // Schedule 活动进度
 // url /jyActivity/bidderPlan/schedule
 func (act *Activity) Schedule(r *ghttp.Request) {
 	userId := r.GetHeader("userId")
 	rData, errMsg := func() (map[string]interface{}, error) {
 		//校验是否达标
-
-		//领取
 		return map[string]interface{}{
-			"userId": userId,
+			"nowNum": activity.JyBidderPlan.GetSchedule(userId), //当前活动进度
+			"schedule": map[int]int{
+				800:  activity.JyBidderPlan.GetScheduleQuery(userId, 800),
+				1000: activity.JyBidderPlan.GetScheduleQuery(userId, 1000),
+			},
+			"missions": map[string]int{
+				"subscribe":   activity.JyBidderPlan.MissionsSubscribeQuery(userId),
+				"invite":      activity.JyBidderPlan.MissionsInviteQuery(userId),
+				"improveInfo": activity.JyBidderPlan.MissionsImproveInfoQuery(userId),
+			},
 		}, nil
 	}()
 	if errMsg != nil {
@@ -30,16 +54,27 @@ func (act *Activity) Schedule(r *ghttp.Request) {
 // Receive 领取奖励
 // url:  /jyActivity/bidderPlan/receive
 func (act *Activity) Receive(r *ghttp.Request) {
-	mission := r.Get("mission").String()
 	userId := r.GetHeader("userId")
-	rData, errMsg := func() (map[string]interface{}, error) {
+	rData, errMsg := func() (bool, error) {
 		//校验是否达标
-
-		//领取
-		return map[string]interface{}{
-			"mission": mission,
-			"userId":  userId,
-		}, nil
+		t := r.Get("type", "mission").String()
+		var err error
+		if t == "mission" { //任务奖励
+			switch r.Get("value").String() {
+			case "subscribe":
+				err = activity.JyBidderPlan.MissionsSubscribeGiven(userId)
+			case "invite":
+				err = activity.JyBidderPlan.MissionsInviteGiven(userId)
+			case "improveInfo":
+				err = activity.JyBidderPlan.MissionsImproveInfoGiven(userId)
+			}
+		} else { //活动进度额外奖励
+			err = activity.JyBidderPlan.ScheduleGiven(userId, r.Get("value").Int())
+		}
+		if err != nil {
+			return false, err
+		}
+		return true, nil
 	}()
 	if errMsg != nil {
 		log.Printf("Activity BidderPlan Receive  %s error:%s\n", userId, errMsg.Error())