李哲 4 years ago
parent
commit
e3c8eb3c47

+ 8 - 1
entity/integral.go

@@ -59,7 +59,6 @@ type FlowJSON struct {
 	Point          int    `xorm:"point" form:"point" json:"point"`                            //积分
 	EndDate        string `xorm:"endDate" form:"endDate" json:"endDate"`                      //截止时间
 	AppId          int    `xorm:"appId" form:"appId" json:"appId"`                            //剑鱼标识
-	Sort           bool   `xorm:"sort" form:"sort" json:"sort"`                               //获取积分:true、消耗积分:false
 }
 
 //到期积分查询
@@ -79,3 +78,11 @@ type SoldeUpdate struct {
 	EndDate    string `xorm:"endDate" form:"endDate" json:"endDate"`          //有效期止
 	AppId      int    `xorm:"appId" form:"appId" json:"appId"`                //剑鱼标识
 }
+
+//积分守护
+type GuardJSON struct {
+	UserId    string `xorm:"userId" form:"userId" json:"userId"`          //用户标识
+	PointType int    `xorm:"pointType" form:"pointType" json:"pointType"` //积分类型
+	EndDate   string `xorm:"endDate" form:"endDate" json:"endDate"`       //截止时间
+	AppId     int    `xorm:"appId" form:"appId" json:"appId"`             //剑鱼标识
+}

+ 0 - 1
rpc/internal/logic/integralconsumelogic.go

@@ -40,7 +40,6 @@ func (l *IntegralConsumeLogic) IntegralConsume(in *integral.AddReq) (*integral.A
 	dat.Point = 1
 	dat.EndDate = "2021-03-10"
 	dat.AppId = 10000
-	dat.Sort = false
 	integralService.IntegralConsumeService(dat)
 	return &integral.AddResp{
 		Status: true,

+ 1 - 1
rpc/internal/logic/integralguardlogic.go

@@ -26,6 +26,6 @@ func NewIntegralGuardLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Int
 // 积分守护
 func (l *IntegralGuardLogic) IntegralGuard(in *integral.AddReq) (*integral.AddResp, error) {
 	// todo: add your logic here and delete this line
-
+	integralService.IntegralGuardService("2021-03-10 23:59:59")
 	return &integral.AddResp{}, nil
 }

+ 20 - 0
rpc/test/guard_test.go

@@ -0,0 +1,20 @@
+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)
+}

+ 102 - 65
service/integralService.go

@@ -9,9 +9,8 @@ import (
 
 type IntegralService struct{}
 
-
 //消耗积分流水
-func(service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (int,string) {
+func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (int, string) {
 	orm := entity.Engine
 	flow := entity.Flow{}
 	flow.UserId = data.UserId
@@ -22,38 +21,35 @@ func(service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (int
 	flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
 	flow.EndDate = data.EndDate
 	flow.AppId = data.AppId
-	//判断是否为消耗积分:false
-	if !data.Sort {
-		//查询积分余额是否充足
-		balance := entity.Balance{}
-		balance.UserId = data.UserId
-		balance.AppId = data.AppId
-		b,err := orm.Table("integral_balance").Select("countPoints").
-			Where("userId = ? AND appId = ?",data.UserId,data.AppId).
-			Get(&balance)
-		if !b || err != nil {
-			log.Printf("积分余额查询出错,userId:[%s],err:[%v]", data.UserId, err)
-			return entity.ErrorCode,"积分余额不足"
-		}
-		if balance.CountPoints <data.Point {
-			return entity.ErrorCode,"积分余额不足"
-		}
+	//查询积分余额是否充足
+	balance := entity.Balance{}
+	balance.UserId = data.UserId
+	balance.AppId = data.AppId
+	b, err := orm.Table("integral_balance").Select("countPoints").
+		Where("userId = ? AND appId = ?", data.UserId, data.AppId).
+		Get(&balance)
+	if !b || err != nil {
+		log.Printf("积分余额查询出错,userId:[%s],err:[%v]", data.UserId, err)
+		return entity.ErrorCode, "积分余额不足"
+	}
+	if balance.CountPoints < data.Point {
+		return entity.ErrorCode, "积分余额不足"
 	}
 
 	af, err := orm.Table("integral_flow").Insert(&flow)
 	if err != nil {
-		log.Print("积分记录失败-积分增减类型:",data.Sort)
-		return entity.ErrorCode,"积分记录失败"
+		log.Print("积分记录失败")
+		return entity.ErrorCode, "积分记录失败"
 	}
-	if af >0 {
-		log.Println("积分记录成功-积分增减类型:",data.Sort)
-		return entity.SuccessCode,"积分记录成功"
+	if af > 0 {
+		log.Println("积分记录成功")
+		return entity.SuccessCode, "积分记录成功"
 	}
-	return entity.SuccessCode,"积分记录成功"
+	return entity.SuccessCode, "积分记录成功"
 }
 
 //到期积分查询
-func(service *IntegralService) IntegralExpireCheckService(data entity.ExpireJSON) []entity.Flow {
+func (service *IntegralService) IntegralExpireCheckService(data entity.ExpireJSON) []entity.Flow {
 	orm := entity.Engine
 	var flow []entity.Flow
 	var err error
@@ -72,8 +68,9 @@ func(service *IntegralService) IntegralExpireCheckService(data entity.ExpireJSON
 	}
 	return flow
 }
+
 //结存新增
-func (service *IntegralService) IntegralSoldeService(model entity.SoldeUpdate) (bool,string){
+func (service *IntegralService) IntegralSoldeService(model entity.SoldeUpdate) (bool, string) {
 	solde := entity.Solde{}
 	solde.AppId = model.AppId
 	solde.UserId = model.UserId
@@ -81,15 +78,15 @@ func (service *IntegralService) IntegralSoldeService(model entity.SoldeUpdate) (
 	var err error
 	var numb = int64(0)
 	//新增积分
-	if (model.PointsType) {
+	if model.PointsType {
 		//永久积分
 		solde.PerManEntPoints = model.Points
 		numb, err = entity.Engine.Table("integral_solde").Insert(&solde)
 		if err != nil && numb == 0 {
 			log.Print("新增永久积分失败")
-			return false,"新增永久积分失败"
+			return false, "新增永久积分失败"
 		}
-		return true,"新增永久积分成功"
+		return true, "新增永久积分成功"
 	}
 	//失效积分
 	//先查看是否有EndDate的积分
@@ -100,56 +97,56 @@ func (service *IntegralService) IntegralSoldeService(model entity.SoldeUpdate) (
 		numb, err = entity.Engine.Table("integral_solde").ID(soldelist[0].Id).Cols("timePoints").Update(&soldelist[0])
 		if err != nil && numb == 0 {
 			log.Print("修改时效积分失败")
-			return false,"修改时效积分失败"
+			return false, "修改时效积分失败"
 		}
-		return true,"修改时效积分成功"
+		return true, "修改时效积分成功"
 	} else {
 		solde.TimePoints = model.Points
 		numb, err = entity.Engine.Table("integral_solde").Insert(&solde)
 		if err != nil && numb == 0 {
 			log.Print("新增时效积分失败")
-			return false,"新增时效积分失败"
+			return false, "新增时效积分失败"
 		}
-		return true,"新增时效积分成功"
+		return true, "新增时效积分成功"
 	}
 }
 
 //结存扣除
-func (service *IntegralService) IntegralSoldeReduceService(model entity.SoldeUpdate)(bool,string) {
+func (service *IntegralService) IntegralSoldeReduceService(model entity.SoldeUpdate) (bool, string) {
 	var err error
 	var numb = int64(0)
 	soldelist := []entity.Solde{}
-	err = entity.Engine.Table("integral_solde").Where("appId=? and  userId=? and endDate> ? 	( perManEntPoints != 0 AND timePoints = 0 ) OR ( perManEntPoints = 0 AND timePoints != 0 )", model.AppId, model.UserId,time.Now().Format("2006/01/02/")).Desc("endDate,timePoints").Find(&soldelist)
+	err = entity.Engine.Table("integral_solde").Where("appId=? and  userId=? and endDate> ? 	( perManEntPoints != 0 AND timePoints = 0 ) OR ( perManEntPoints = 0 AND timePoints != 0 )", model.AppId, model.UserId, time.Now().Format("2006/01/02/")).Desc("endDate,timePoints").Find(&soldelist)
 	if len(soldelist) > 0 {
 		var point = model.Points
 		for _, solde := range soldelist {
 			if point == 0 {
-				return true,"积分消耗成功"
+				return true, "积分消耗成功"
 			}
-			if (solde.TimePoints == 0) {
+			if solde.TimePoints == 0 {
 				//消耗永久积分
-				if (solde.PerManEntPoints >= point) {
+				if solde.PerManEntPoints >= point {
 					//够消耗
 					point = 0
 					solde.PerManEntPoints = solde.PerManEntPoints - point
 					numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("perManEntPoints").Update(&solde)
 					if err != nil && numb == 0 {
 						log.Print("消耗永久积分失败")
-						return false,"消耗永久积分失败"
+						return false, "消耗永久积分失败"
 					}
 				}
 			}
 			//消耗时效积分
-			if (solde.TimePoints > point) {
+			if solde.TimePoints > point {
 				//够消耗
 				point = 0
 				solde.TimePoints = solde.TimePoints - point
 				numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("timePoints").Update(&solde)
 				if err != nil && numb == 0 {
 					log.Print("消耗时效积分失败")
-					return false,"消耗时效积分失败"
+					return false, "消耗时效积分失败"
 				}
-				return true,"消耗时效积分成功"
+				return true, "消耗时效积分成功"
 			}
 			//不够消耗
 			point = point - solde.TimePoints
@@ -157,14 +154,15 @@ func (service *IntegralService) IntegralSoldeReduceService(model entity.SoldeUpd
 			numb, err = entity.Engine.Table("integral_solde").ID(solde.Id).Cols("timePoints").Update(&solde)
 			if err != nil && numb == 0 {
 				log.Print("消耗时效积分失败")
-				return false,"消耗时效积分失败"
+				return false, "消耗时效积分失败"
 			}
 		}
 	}
-	return false,"没有积分可以扣除"
+	return false, "没有积分可以扣除"
 }
+
 //调整余额
-func (service *IntegralService) IntegralBalanceService(model entity.BalanceUpdate) (bool,string) {
+func (service *IntegralService) IntegralBalanceService(model entity.BalanceUpdate) (bool, string) {
 	var err error
 	var numb = int64(0)
 	fmt.Println(numb)
@@ -181,7 +179,7 @@ func (service *IntegralService) IntegralBalanceService(model entity.BalanceUpdat
 			numb, err = entity.Engine.Table("integral_balance").Insert(&balance)
 			if err != nil && numb == 0 {
 				log.Print("新增余额失败")
-				return false,"新增余额失败"
+				return false, "新增余额失败"
 			}
 		}
 		//修改余额
@@ -190,38 +188,77 @@ func (service *IntegralService) IntegralBalanceService(model entity.BalanceUpdat
 	//消耗
 	if len(balanceList) == 0 {
 		log.Println("没有积分可以扣除")
-		return false,"没有积分可以扣除"
+		return false, "没有积分可以扣除"
 	}
-	if (balanceList[0].CountPoints < model.CountPoints) {
+	if balanceList[0].CountPoints < model.CountPoints {
 		log.Println("积分余额不足")
-		return false,"积分余额不足"
+		return false, "积分余额不足"
 	}
 	balanceList[0].CountPoints = balanceList[0].CountPoints - model.CountPoints
 	numb, err = entity.Engine.Table("integral_balance").ID(balanceList[0].Id).Cols("countPoints").Update(&balanceList[0])
 	if err != nil && numb == 0 {
 		log.Print("余额扣除失败")
-		return false,"余额扣除失败"
+		return false, "余额扣除失败"
 	}
-	return true,"余额扣除失败"
+	return true, "余额扣除失败"
 }
 
 //积分守护
-func(service *IntegralService) IntegralGuardService(data entity.ExpireJSON) []entity.Flow {
+func (service *IntegralService) IntegralGuardService(endDate string) bool {
 	orm := entity.Engine
-	var flow []entity.Flow
-	var err error
-	point := ""
-	if data.PointType != 0 {
-		point = "AND pointType = "+fmt.Sprint(data.PointType)+""
+	soldelist := []entity.Solde{}
+	err := orm.Table("integral_solde").
+		Where("timePoints != 0 AND endDate < ? ", endDate).
+		Desc("endDate").Find(&soldelist)
+	if err != nil {
+		log.Println("积分结存查询失败")
 	}
-	err = orm.Table("integral_flow").
-		Select("id,pointType,SUM(point) AS point").
-		Where("userId = ? AND appId = ? AND endDate < ? "+point+"", data.UserId,data.AppId,data.EndDate).
-		GroupBy("pointType").
-		Find(&flow)
+	for _, solde := range soldelist {
+		flow := entity.FlowJSON{}
+		flow.UserId = solde.UserId
+		flow.PointType = 9
+		flow.BusinessTypeId = 0
+		flow.BusinessType = "0"
+		flow.Point = solde.TimePoints
+		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)
+			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)
+				}
+			}
+		}
+	}
+	return true
+}
+
+//积分余额查询
+func (service *IntegralService) IntegralBalanceCheckService(endDate string) bool {
+	orm := entity.Engine
+	soldelist := []entity.Solde{}
+	err := orm.Table("integral_solde").
+		Where("timePoints != 0 AND endDate < ? ", endDate).
+		Desc("endDate").Find(&soldelist)
 	if err != nil {
-		log.Println(err)
-		return nil
+		log.Println("积分余额查询失败")
 	}
-	return flow
+	return true
 }