李哲 4 年 前
コミット
fe8bc988f5

+ 1 - 1
rpc/etc/integral.yaml

@@ -4,7 +4,7 @@ Etcd:
   Hosts:
     - 127.0.0.1:2379
   Key: integral.rpc
-DataSource: root:root@tcp(127.0.0.1:3306)/jyintegral?charset=utf8
+DataSource: admin:123456@tcp(192.168.3.14:3306)/jyintegral?charset=utf8
 Cache:
   - Host: localhost:6379
 FileSystemConf:

+ 4 - 2
rpc/internal/logic/integralbalancechecklogic.go

@@ -2,7 +2,7 @@ package logic
 
 import (
 	"context"
-
+	"fmt"
 	"points_service/rpc/integral"
 	"points_service/rpc/internal/svc"
 
@@ -26,6 +26,8 @@ func NewIntegralBalanceCheckLogic(ctx context.Context, svcCtx *svc.ServiceContex
 // 积分余额查询
 func (l *IntegralBalanceCheckLogic) IntegralBalanceCheck(in *integral.AddReq) (*integral.AddResp, error) {
 	// todo: add your logic here and delete this line
-
+	var  bc int64
+	flag,bc := integralService.IntegralBalanceCheckService("ABC","10000")
+	fmt.Println(flag,bc)
 	return &integral.AddResp{}, nil
 }

+ 27 - 0
rpc/test/consume_test.go

@@ -61,4 +61,31 @@ func  Test_Delete(t *testing.T)  {
 	srv := server.NewIntegralServer(ctx)
 	req := &integral.AddReq{UserId: "xzh", CountPoints: 10}
 	fmt.Println(srv.IntegralConsume(context.Background(), req))
+}
+
+func  Test_Expire(t *testing.T)  {
+	ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
+	FileSystem :=integralclient.NewIntegral(zrpc.MustNewClient(c.FileSystemConf))
+	req := &integral.AddReq{UserId: "xzh", CountPoints: 123}
+	res, err := FileSystem.IntegralExpireCheck(ctx, req)
+	log.Println("err ", err)
+	log.Println("req ", res)
+}
+
+func  Test_Guard(t *testing.T)  {
+	ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
+	FileSystem :=integralclient.NewIntegral(zrpc.MustNewClient(c.FileSystemConf))
+	req := &integral.AddReq{UserId: "xzh", CountPoints: 123}
+	res, err := FileSystem.IntegralGuard(ctx, req)
+	log.Println("err ", err)
+	log.Println("req ", res)
+}
+
+func  Test_BalanceCheck(t *testing.T)  {
+	ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
+	FileSystem :=integralclient.NewIntegral(zrpc.MustNewClient(c.FileSystemConf))
+	req := &integral.AddReq{UserId: "xzh", CountPoints: 123}
+	res, err := FileSystem.IntegralBalanceCheck(ctx, req)
+	log.Println("err ", err)
+	log.Println("req ", res)
 }

+ 0 - 20
rpc/test/expire_test.go

@@ -1,20 +0,0 @@
-package test
-
-import (
-	"context"
-	"github.com/tal-tech/go-zero/zrpc"
-	"log"
-	"points_service/rpc/integral"
-	"points_service/rpc/integralclient"
-	"testing"
-	"time"
-)
-
-func  Test_Expire(t *testing.T)  {
-	ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
-	FileSystem :=integralclient.NewIntegral(zrpc.MustNewClient(c.FileSystemConf))
-	req := &integral.AddReq{UserId: "xzh", CountPoints: 123}
-	res, err := FileSystem.IntegralExpireCheck(ctx, req)
-	log.Println("err ", err)
-	log.Println("req ", res)
-}

+ 0 - 20
rpc/test/guard_test.go

@@ -1,20 +0,0 @@
-package test
-
-import (
-	"context"
-	"github.com/tal-tech/go-zero/zrpc"
-	"log"
-	"points_service/rpc/integral"
-	"points_service/rpc/integralclient"
-	"testing"
-	"time"
-)
-
-func  Test_Guard(t *testing.T)  {
-	ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
-	FileSystem :=integralclient.NewIntegral(zrpc.MustNewClient(c.FileSystemConf))
-	req := &integral.AddReq{UserId: "xzh", CountPoints: 123}
-	res, err := FileSystem.IntegralGuard(ctx, req)
-	log.Println("err ", err)
-	log.Println("req ", res)
-}

+ 55 - 37
service/integralService.go

@@ -112,11 +112,8 @@ func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (in
 	flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
 	flow.EndDate = data.EndDate
 	flow.AppId = data.AppId
-	//判断是否为消耗积分:false
 	balance := entity.Balance{}
 	//查询积分余额是否充足
-	balance.UserId = data.UserId
-	balance.AppId = data.AppId
 	b, err := orm.Table("integral_balance").Select("countPoints,id").
 		Where("userId = ? AND appId = ?", data.UserId, data.AppId).
 		Get(&balance)
@@ -350,60 +347,81 @@ func (service *IntegralService) IntegralBalanceService(model entity.BalanceUpdat
 //积分守护
 func (service *IntegralService) IntegralGuardService(endDate string) bool {
 	orm := entity.Engine
+	var err error
 	soldelist := []entity.Solde{}
-	err := orm.Table("integral_solde").
+	err = orm.Table("integral_solde").
 		Where("timePoints != 0 AND endDate < ? ", endDate).
 		Desc("endDate").Find(&soldelist)
 	if err != nil {
 		log.Println("积分结存查询失败")
 	}
 	for _, solde := range soldelist {
-		flow := entity.FlowJSON{}
+		//查询积分余额是否充足
+		balance := entity.Balance{}
+		b, err := orm.Table("integral_balance").Select("countPoints,id").
+			Where("userId = ? AND appId = ?", solde.UserId, solde.AppId).
+			Get(&balance)
+		if !b || err != nil {
+			log.Printf("积分余额查询出错,userId:[%s],err:[%v]", solde.UserId, err)
+			return false
+		}
+		if balance.CountPoints < solde.TimePoints {
+			return false
+		}
+
+		//积分余额-时效过期积分=当前总积分余额
+		balance.CountPoints = balance.CountPoints - solde.TimePoints
+		orm.Table("integral_balance")
+		numb, err := orm.Table("integral_balance").
+			ID(balance.Id).
+			Cols("countPoints").
+			Update(balance)
+		if err != nil && numb == 0 {
+			log.Print("余额扣除失败")
+			return false
+		}
+
+		//积分过期流水记录
+		flow := entity.Flow{}
 		flow.UserId = solde.UserId
 		flow.PointType = 9
 		flow.BusinessTypeId = 0
 		flow.BusinessType = "0"
 		flow.Point = solde.TimePoints
+		flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
 		flow.EndDate = solde.EndDate
 		flow.AppId = solde.AppId
-		sold, _ := service.IntegralConsumeService(flow)
-		//新增积分过期流水成功
-		if sold == 1 {
-			//指定用户总余额减少
-			balanceData := entity.BalanceUpdate{}
-			balanceData.UserId = solde.UserId
-			balanceData.AppId = solde.AppId
-			balanceData.CountPoints = solde.TimePoints
-			balanceData.Change = false
-			//be, _ := service.IntegralBalanceService(balanceData)
-			be := true
-			if be {
-				log.Println("余额结算成功....")
-				//清空过期积分的时效积分
-				soldeUpdate := &entity.Solde{}
-				soldeUpdate.TimePoints = 0
-				af, err := orm.Table("integral_solde").
-					Cols("timePoints").
-					ID(solde.Id).
-					Update(soldeUpdate)
-				if af > 0 && err == nil {
-					log.Println("过期时效积分清空成功", solde.Id)
-				}
-			}
+		af, err := orm.Table("integral_flow").Insert(&flow)
+		if err != nil && af==0{
+			log.Print("积分记录失败")
+			return false
+		}
+
+		//清空过期积分的时效积分
+		soldeUpdate := &entity.Solde{}
+		soldeUpdate.TimePoints = 0
+		af, err = orm.Table("integral_solde").
+			Cols("timePoints").
+			ID(solde.Id).
+			Update(soldeUpdate)
+		if af == 0 && err != nil {
+			log.Println("过期时效积分清空失败", solde.Id)
+			return false
 		}
 	}
 	return true
 }
 
 //积分余额查询
-func (service *IntegralService) IntegralBalanceCheckService(endDate string) bool {
+func (service *IntegralService) IntegralBalanceCheckService(userId,appId string) (bool,int64) {
 	orm := entity.Engine
-	soldelist := []entity.Solde{}
-	err := orm.Table("integral_solde").
-		Where("timePoints != 0 AND endDate < ? ", endDate).
-		Desc("endDate").Find(&soldelist)
-	if err != nil {
+	balance := entity.Balance{}
+	b,err := orm.Table("integral_balance").
+		Where("userId = ? AND appId = ?", userId,appId).
+		Get(&balance)
+	if !b || err != nil {
 		log.Println("积分余额查询失败")
+		return false,0
 	}
-	return true
-}
+	return true,balance.CountPoints
+}