李哲 4 ani în urmă
părinte
comite
98034d9616
2 a modificat fișierele cu 161 adăugiri și 8 ștergeri
  1. 23 5
      entity/integral.go
  2. 138 3
      service/integralService.go

+ 23 - 5
entity/integral.go

@@ -19,6 +19,14 @@ type Balance struct {
 	AppId       int    `xorm:"appId" form:"appId" json:"appId"`                   //剑鱼标识
 }
 
+//积分余额
+type BalanceUpdate struct {
+	UserId      string `xorm:"userId" form:"userId" json:"userId"`                //用户标识
+	CountPoints int    `xorm:"countPoints" form:"countPoints" json:"countPoints"` //合计
+	AppId       int    `xorm:"appId" form:"appId" json:"appId"`                   //剑鱼标识
+	Change      bool   `xorm:"change" form:"change" json:"change"`                //修改方式true新增 false消耗
+}
+
 //积分流水
 type Flow struct {
 	Id             int64  `xorm:"pk autoincr id" form:"id" json:"id"`
@@ -36,9 +44,9 @@ type Flow struct {
 type Solde struct {
 	Id              int64  `xorm:"pk autoincr id" form:"id" json:"id"`
 	PerManEntPoints int    `xorm:"perManEntPoints" form:"perManEntPoints" json:"perManEntPoints"` //永久积分
+	UserId          string `xorm:"userId" form:"userId" json:"userId"`                            //用户标识
 	TimePoints      int    `xorm:"timePoints" form:"timePoints" json:"timePoints"`                //时效积分
 	EndDate         string `xorm:"endDate" form:"endDate" json:"endDate"`                         //有效期止
-	CountPoints     int    `xorm:"countPoints" form:"countPoints" json:"countPoints"`             //合计
 	AppId           int    `xorm:"appId" form:"appId" json:"appId"`                               //剑鱼标识
 }
 
@@ -56,8 +64,18 @@ type FlowJSON struct {
 
 //到期积分查询
 type ExpireJSON 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"`                            //剑鱼标识
+	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"`             //剑鱼标识
+}
+
+//积分结存修改
+type SoldeUpdate struct {
+	Id         int64  `xorm:"pk autoincr id" form:"id" json:"id"`
+	PointsType bool   `xorm:"pointsType" form:"pointsType" json:"pointsType"` //积分类型true永久 false失效
+	UserId     string `xorm:"userId" form:"userId" json:"userId"`             //用户标识
+	Points     int    `xorm:"points" form:"points" json:"points"`             //积分
+	EndDate    string `xorm:"endDate" form:"endDate" json:"endDate"`          //有效期止
+	AppId      int    `xorm:"appId" form:"appId" json:"appId"`                //剑鱼标识
 }

+ 138 - 3
service/integralService.go

@@ -6,7 +6,10 @@ import (
 	"points_service/entity"
 	"time"
 )
+
 type IntegralService struct{}
+
+
 //消耗积分流水
 func(service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (int,string) {
 	orm := entity.Engine
@@ -56,11 +59,11 @@ func(service *IntegralService) IntegralExpireCheckService(data entity.ExpireJSON
 	var err error
 	point := ""
 	if data.PointType != 0 {
-		point = "AND pointType = "+fmt.Sprint(data.PointType)+""
+		point = "AND pointType = " + fmt.Sprint(data.PointType) + ""
 	}
-	 err = orm.Table("integral_flow").
+	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).
+		Where("userId = ? AND appId = ? AND endDate < ? "+point+"", data.UserId, data.AppId, data.EndDate).
 		GroupBy("pointType").
 		Find(&flow)
 	if err != nil {
@@ -69,6 +72,138 @@ func(service *IntegralService) IntegralExpireCheckService(data entity.ExpireJSON
 	}
 	return flow
 }
+//结存新增
+func (service *IntegralService) IntegralSoldeService(model entity.SoldeUpdate) (bool,string){
+	solde := entity.Solde{}
+	solde.AppId = model.AppId
+	solde.UserId = model.UserId
+	solde.EndDate = model.EndDate
+	var err error
+	var numb = int64(0)
+	//新增积分
+	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 true,"新增永久积分成功"
+	}
+	//失效积分
+	//先查看是否有EndDate的积分
+	soldelist := []entity.Solde{}
+	err = entity.Engine.Table("integral_solde").Where("appId=? and  userId=? and endDate=? ", model.AppId, model.UserId, model.EndDate).Find(&soldelist)
+	if len(soldelist) > 0 {
+		soldelist[0].TimePoints += model.Points
+		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 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 true,"新增时效积分成功"
+	}
+}
+
+//结存扣除
+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)
+	if len(soldelist) > 0 {
+		var point = model.Points
+		for _, solde := range soldelist {
+			if point == 0 {
+				return true,"积分消耗成功"
+			}
+			if (solde.TimePoints == 0) {
+				//消耗永久积分
+				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,"消耗永久积分失败"
+					}
+				}
+			}
+			//消耗时效积分
+			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 true,"消耗时效积分成功"
+			}
+			//不够消耗
+			point = point - solde.TimePoints
+			solde.TimePoints = 0
+			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,"没有积分可以扣除"
+}
+//调整余额
+func (service *IntegralService) IntegralBalanceService(model entity.BalanceUpdate) (bool,string) {
+	var err error
+	var numb = int64(0)
+	fmt.Println(numb)
+	balanceList := []*entity.Balance{}
+	//查看是否存在本人的余额
+	err = entity.Engine.Table("integral_balance").Where("appId=? and  userId=?  ", model.AppId, model.UserId).Find(&balanceList)
+	if model.Change {
+		//新增
+		if len(balanceList) == 0 {
+			balance := entity.Balance{}
+			balance.UserId = model.UserId
+			balance.AppId = model.AppId
+			balance.CountPoints = model.CountPoints
+			numb, err = entity.Engine.Table("integral_balance").Insert(&balance)
+			if err != nil && numb == 0 {
+				log.Print("新增余额失败")
+				return false,"新增余额失败"
+			}
+		}
+		//修改余额
+		balanceList[0].CountPoints = balanceList[0].CountPoints + model.CountPoints
+	}
+	//消耗
+	if len(balanceList) == 0 {
+		log.Println("没有积分可以扣除")
+		return false,"没有积分可以扣除"
+	}
+	if (balanceList[0].CountPoints < model.CountPoints) {
+		log.Println("积分余额不足")
+		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 true,"余额扣除失败"
+}
 
 //积分守护
 func(service *IntegralService) IntegralGuardService(data entity.ExpireJSON) []entity.Flow {