WH01243 4 tahun lalu
induk
melakukan
a4b119bddc

+ 9 - 0
api/integral.api

@@ -90,6 +90,12 @@ type (
 type guardReq {
 	EndDate string `form:"endDate"`
 }
+
+type mergeInfo {
+	MergeUser  string `form:"mergeUser"`  //合并用户
+	MergedUser string `form:"mergedUser"` //被合并用户
+	AppId      string `form:"appId"`      //身份标识
+}
 service integral-api {
 	//积分余额查询
 	@handler IntegralBalanceCheckHandler // TODO: set handler name and delete this comment
@@ -109,4 +115,7 @@ service integral-api {
 	//积分守护
 	@handler IntegralGuardHandler // TODO: set handler name and delete this comment
 	post /integralGuard (guardReq) returns(response)
+	//账号合并
+	@handler UserMergeHandler // TODO: set handler name and delete this comment
+	post /userMerge (mergeInfo) returns(response)
 }

+ 5 - 0
api/internal/handler/routes.go

@@ -42,6 +42,11 @@ func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {
 				Path:    "/integralGuard",
 				Handler: IntegralGuardHandler(serverCtx),
 			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/userMerge",
+				Handler: UserMergeHandler(serverCtx),
+			},
 		},
 	)
 }

+ 29 - 0
api/internal/handler/usermergehandler.go

@@ -0,0 +1,29 @@
+package handler
+
+import (
+	"net/http"
+
+	"app.yhyue.com/moapp/jyPoints/api/internal/logic"
+	"app.yhyue.com/moapp/jyPoints/api/internal/svc"
+	"app.yhyue.com/moapp/jyPoints/api/internal/types"
+
+	"github.com/tal-tech/go-zero/rest/httpx"
+)
+
+func UserMergeHandler(ctx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MergeInfo
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewUserMergeLogic(r.Context(), ctx)
+		resp, err := l.UserMerge(req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 41 - 0
api/internal/logic/usermergelogic.go

@@ -0,0 +1,41 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/jyPoints/rpc/integral"
+	"context"
+
+	"app.yhyue.com/moapp/jyPoints/api/internal/svc"
+	"app.yhyue.com/moapp/jyPoints/api/internal/types"
+
+	"github.com/tal-tech/go-zero/core/logx"
+)
+
+type UserMergeLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewUserMergeLogic(ctx context.Context, svcCtx *svc.ServiceContext) UserMergeLogic {
+	return UserMergeLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *UserMergeLogic) UserMerge(req types.MergeInfo) (*types.Response, error) {
+	result := &types.Response{}
+	lsi := l.svcCtx.Integral
+	resp, err := lsi.UserMerge(l.ctx, &integral.MergeInfo{
+		MergeUser:  req.MergeUser,
+		MergedUser: req.MergedUser,
+		AppId:      req.AppId,
+	})
+	if err != nil {
+		return nil, err
+	}
+	result.Code = resp.Code
+	result.Message = resp.Message
+	return result, nil
+}

+ 7 - 1
api/internal/types/types.go

@@ -54,7 +54,7 @@ type AddReq struct {
 	PointType     int64  `form:"pointType"`
 	SourceId      string `form:"sourceId,optional"`
 	SourceType    string `form:"sourceType,optional"`
-	Point         int64  `form:"point,range=[0:1000000000]"`
+	Point         int64  `form:"point,range=[0:100000000]"`
 	EndDate       string `form:"endDate,optional"`
 	OperationType bool   `form:"operationType"`
 	Abstract      string `form:"abstract,optional"`
@@ -86,3 +86,9 @@ type ConsumeResp struct {
 type GuardReq struct {
 	EndDate string `form:"endDate"`
 }
+
+type MergeInfo struct {
+	MergeUser  string `form:"mergeUser"`  //合并用户
+	MergedUser string `form:"mergedUser"` //被合并用户
+	AppId      string `form:"appId"`      //身份标识
+}

+ 1 - 1
rpc/integral.proto

@@ -63,6 +63,6 @@ service Integral {
   //到期积分查询
   rpc  integralExpireCheck(Req) returns(Resp);
   //合并账号
-  rpc UserMerge(mergeInfo)returns(Resp);
+  rpc userMerge(mergeInfo)returns(Resp);
 }
 

+ 10 - 1
rpc/internal/logic/usermergelogic.go

@@ -1,6 +1,7 @@
 package logic
 
 import (
+	"app.yhyue.com/moapp/jyPoints/entity"
 	"context"
 
 	"app.yhyue.com/moapp/jyPoints/rpc/integral"
@@ -26,6 +27,14 @@ func NewUserMergeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserMer
 // 合并账号
 func (l *UserMergeLogic) UserMerge(in *integral.MergeInfo) (*integral.Resp, error) {
 	// todo: add your logic here and delete this line
-
+	result := &integral.Resp{}
+	flag,msg := integralService.UserMerge(in.MergeUser,in.MergedUser,in.AppId)
+	if flag {
+		result.Code = entity.SuccessCode
+		result.Message = msg
+		return result, nil
+	}
+	result.Code = entity.ErrorCode
+	result.Message = msg
 	return &integral.Resp{}, nil
 }

+ 16 - 1
rpc/test/consume_test.go

@@ -8,6 +8,7 @@ import (
 	"app.yhyue.com/moapp/jyPoints/rpc/internal/server"
 	"app.yhyue.com/moapp/jyPoints/rpc/internal/svc"
 	"context"
+	"flag"
 	"fmt"
 	_ "github.com/go-sql-driver/mysql"
 	"github.com/go-xorm/xorm"
@@ -18,10 +19,16 @@ import (
 	"time"
 )
 
+
+
+var configFile = flag.String("f", "integral.yaml", "the config file")
+var c config.Config
+
 //创建orm引擎
 func init() {
+	conf.MustLoad(*configFile, &c)
 	var  err  error
-	entity.Engine, err = xorm.NewEngine("mysql", "admin:123456@tcp(192.168.3.14:3306)/jyintegral?charset=utf8")
+	entity.Engine, err = xorm.NewEngine("mysql", "root:Topnet123@tcp(192.168.3.113:3306)/jyintegral?charset=utf8")
 	entity.Engine.ShowSQL(true)
 	if err != nil {
 		log.Fatal("数据库连接失败:", err)
@@ -98,4 +105,12 @@ func  Test_BalanceCheck(t *testing.T)  {
 	res, err := FileSystem.IntegralBalanceCheck(ctx, req)
 	log.Println("err ", err)
 	log.Println("req ", res)
+}
+func  Test_merge(t *testing.T)  {
+	ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
+	FileSystem :=integralclient.NewIntegral(zrpc.MustNewClient(c.FileSystemConf))
+	req := &integral.MergeInfo{MergeUser: "2222", MergedUser: "1111",AppId:"10000"}
+	res, err := FileSystem.UserMerge(ctx, req)
+	log.Println("err ", err)
+	log.Println("req ", res)
 }

+ 9 - 4
rpc/test/integral.yaml

@@ -1,14 +1,19 @@
 Name: integral.rpc
-ListenOn: 127.0.0.1:8080
+ListenOn: 127.0.0.1:8087
+Log:
+  Mode: console
 Etcd:
   Hosts:
     - 127.0.0.1:2379
   Key: integral.rpc
-DataSource: admin:123456@tcp(192.168.3.14:3306)/jyintegral?charset=utf8
+DataSource: root:Topnet123@tcp(192.168.3.11:3366)/jypoints?charset=utf8mb4&parseTime=true&loc=Local
+TimeSource: 0 1 0 * * ? *
 Cache:
   - Host: localhost:6379
 FileSystemConf:
   Etcd:
     Hosts:
-      - 127.0.0.1:2380
-    Key: integral.rpc
+      - 127.0.0.1:2379
+    Key: integral.rpc
+CalleeId: integral.rpc
+Node: 1

+ 3 - 12
rpc/test/test1_test.go

@@ -1,23 +1,14 @@
 package test
 
 import (
+	"app.yhyue.com/moapp/jyPoints/rpc/integral"
+	"app.yhyue.com/moapp/jyPoints/rpc/integralclient"
 	"context"
-	"flag"
-	"github.com/tal-tech/go-zero/core/conf"
 	"github.com/tal-tech/go-zero/zrpc"
 	"log"
-	"app.yhyue.com/moapp/jyPoints/rpc/integral"
-	"app.yhyue.com/moapp/jyPoints/rpc/integralclient"
-	"app.yhyue.com/moapp/jyPoints/rpc/internal/config"
 	"testing"
 	"time"
 )
-var configFile = flag.String("f", "integral.yaml", "the config file")
-var c config.Config
-
-func init() {
-	conf.MustLoad(*configFile, &c)
-}
 
 /*func Test_add(t *testing.T) {
 	var c config.Config
@@ -33,4 +24,4 @@ func  Test_add(t *testing.T)  {
 	res, err := FileSystem.IntegralBalanceCheck(ctx, req)
 	log.Println("err ", err)
 	log.Println("req ", res)
-}
+}

+ 189 - 30
service/integralService.go

@@ -12,8 +12,8 @@ import (
 type IntegralService struct{}
 
 //新增积分流水
-func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64, string,string) {
-	serialNumber:="0000"
+func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64, string, string) {
+	serialNumber := "0000"
 	orm := entity.Engine.NewSession()
 	defer orm.Close()
 	err := orm.Begin()
@@ -24,6 +24,9 @@ func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64,
 	flow.PointType = data.PointType
 	flow.SourceType = fmt.Sprint(data.PointType)
 	flow.Point = data.Point
+	if data.EndDate!=""{
+		data.EndDate=data.EndDate[0:10]
+	}
 	flow.EndDate = data.EndDate
 	flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
 	flow.AppId = data.AppId
@@ -34,13 +37,13 @@ func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64,
 		flow.OperationType = 1
 	}
 	//流水号
-	serialNumber= time.Now().Format("20060102150405000")+fmt.Sprint(rand.Intn(100))
-	flow.SerialNumber=serialNumber
+	serialNumber = time.Now().Format("20060102150405000") + fmt.Sprint(rand.Intn(100))
+	flow.SerialNumber = serialNumber
 	numb, err = orm.Table("integral_flow").Insert(flow)
 	if err != nil && numb == 0 {
 		log.Print("新增流水失败:", err)
 		orm.Rollback()
-		return entity.ErrorCode, "新增流水失败",serialNumber
+		return entity.ErrorCode, "新增流水失败", serialNumber
 	}
 	//结存修改
 	solde := entity.Solde{}
@@ -58,7 +61,7 @@ func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64,
 			if err != nil || numb == 0 {
 				log.Print("修改时效积分失败:", err)
 				orm.Rollback()
-				return entity.ErrorCode, "修改时效积分失败",serialNumber
+				return entity.ErrorCode, "修改时效积分失败", serialNumber
 			}
 		} else {
 			solde.PerManEntPoints = data.Point
@@ -66,7 +69,7 @@ func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64,
 			if err != nil || numb == 0 {
 				log.Print("新增永久积分失败")
 				orm.Rollback()
-				return entity.ErrorCode, "新增永久积分失败",serialNumber
+				return entity.ErrorCode, "新增永久积分失败", serialNumber
 			}
 		}
 
@@ -82,7 +85,7 @@ func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64,
 			if err != nil || numb == 0 {
 				log.Print("修改时效积分失败:", err)
 				orm.Rollback()
-				return entity.ErrorCode, "修改时效积分失败",serialNumber
+				return entity.ErrorCode, "修改时效积分失败", serialNumber
 			}
 		} else {
 			solde.TimePoints = data.Point
@@ -90,7 +93,7 @@ func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64,
 			if err != nil && numb == 0 {
 				log.Print("新增时效积分失败:", err)
 				orm.Rollback()
-				return entity.ErrorCode, "新增时效积分失败",serialNumber
+				return entity.ErrorCode, "新增时效积分失败", serialNumber
 			}
 		}
 	}
@@ -107,7 +110,7 @@ func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64,
 		if err != nil || numb == 0 {
 			log.Print("新增余额失败:", err)
 			orm.Rollback()
-			return entity.ErrorCode, "新增余额失败",serialNumber
+			return entity.ErrorCode, "新增余额失败", serialNumber
 		}
 	} else {
 		//修改余额
@@ -116,21 +119,21 @@ func (service *IntegralService) IntegralAddService(data entity.FlowJSON) (int64,
 		if err != nil || numb == 0 {
 			log.Print("余额新增失败:", err)
 			orm.Rollback()
-			return entity.ErrorCode, "余额新增失败",serialNumber
+			return entity.ErrorCode, "余额新增失败", serialNumber
 		}
 	}
 	err = orm.Commit()
 	if err != nil {
 		log.Print("积分新增失败:", err)
-		return entity.ErrorCode, "积分新增失败",serialNumber
+		return entity.ErrorCode, "积分新增失败", serialNumber
 	}
-	return entity.SuccessCode, "余额新增成功",serialNumber
+	return entity.SuccessCode, "余额新增成功", serialNumber
 }
 
 //消耗积分流水
-func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (int64, string,string) {
-	serialNumber:="0000"
-	serialNumber= time.Now().Format("20060102150405000")+fmt.Sprint(rand.Intn(100))
+func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (int64, string, string) {
+	serialNumber := "0000"
+	serialNumber = time.Now().Format("20060102150405000") + fmt.Sprint(rand.Intn(100))
 	orm := entity.Engine.NewSession()
 	defer orm.Close()
 	var err = orm.Begin()
@@ -142,14 +145,14 @@ func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (in
 		Get(&balance)
 	if err != nil {
 		log.Printf("积分余额查询出错,userId:[%s],err:[%v]", data.UserId, err)
-		return entity.ErrorCode, "积分余额查询出错",serialNumber
+		return entity.ErrorCode, "积分余额查询出错", serialNumber
 	}
 	if !b {
 		log.Printf("没有查询到[%s]的积分记录,err:[%v]", data.UserId, err)
-		return entity.ErrorCode, "没有查询到积分记录",serialNumber
+		return entity.ErrorCode, "没有查询到积分记录", serialNumber
 	}
 	if balance.CountPoints < data.Point {
-		return entity.ErrorCode, "积分余额不足",serialNumber
+		return entity.ErrorCode, "积分余额不足", serialNumber
 	}
 
 	//结存消耗
@@ -160,7 +163,7 @@ func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (in
 		Desc("timePoints").
 		Find(&soldelist)
 	if len(soldelist) == 0 {
-		return entity.ErrorCode, "没有结存可以消耗",serialNumber
+		return entity.ErrorCode, "没有结存可以消耗", serialNumber
 	}
 	var point = data.Point
 	for _, solde := range soldelist {
@@ -180,7 +183,7 @@ func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (in
 				if err != nil || af == 0 {
 					log.Print("消耗永久积分失败:", err)
 					orm.Rollback()
-					return entity.ErrorCode, "消耗永久积分失败",serialNumber
+					return entity.ErrorCode, "消耗永久积分失败", serialNumber
 				}
 			}
 		} else {
@@ -196,7 +199,7 @@ func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (in
 				if err != nil || af == 0 {
 					log.Print("消耗时效积分失败:", err)
 					orm.Rollback()
-					return entity.ErrorCode, "消耗时效积分失败",serialNumber
+					return entity.ErrorCode, "消耗时效积分失败", serialNumber
 				}
 				break
 			}
@@ -210,7 +213,7 @@ func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (in
 			if err != nil || af == 0 {
 				log.Print("消耗时效积分失败:", err)
 				orm.Rollback()
-				return entity.ErrorCode, "消耗时效积分失败",serialNumber
+				return entity.ErrorCode, "消耗时效积分失败", serialNumber
 			}
 		}
 	}
@@ -224,7 +227,7 @@ func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (in
 	if err != nil || af == 0 {
 		log.Print("余额扣除失败:", err)
 		orm.Rollback()
-		return entity.ErrorCode, "余额扣除失败",serialNumber
+		return entity.ErrorCode, "余额扣除失败", serialNumber
 	}
 
 	//消耗积分流水记录
@@ -240,19 +243,19 @@ func (service *IntegralService) IntegralConsumeService(data entity.FlowJSON) (in
 	flow.EndDate = data.EndDate
 	flow.AppId = data.AppId
 	flow.Sort = entity.ReduceCode
-	flow.SerialNumber=serialNumber
+	flow.SerialNumber = serialNumber
 	af, err = orm.Table("integral_flow").Insert(&flow)
 	if err != nil || af == 0 {
 		log.Print("积分记录失败")
 		orm.Rollback()
-		return entity.ErrorCode, "积分记录失败",serialNumber
+		return entity.ErrorCode, "积分记录失败", serialNumber
 	}
 
 	err = orm.Commit()
 	if err != nil {
-		return entity.ErrorCode, "积分消耗失败",serialNumber
+		return entity.ErrorCode, "积分消耗失败", serialNumber
 	}
-	return entity.SuccessCode, "积分消耗成功",serialNumber
+	return entity.SuccessCode, "积分消耗成功", serialNumber
 }
 
 //到期积分查询
@@ -496,7 +499,7 @@ func (service *IntegralService) IntegralBalanceCheckService(userId, appId string
 	}
 	//积分30天内到期余额
 	var solde entity.Solde
-	_,err = orm.Table("integral_solde").
+	_, err = orm.Table("integral_solde").
 		Select("SUM( timePoints ) AS timePoints").
 		Where("userId = ? AND appId = ? AND endDate > DATE_SUB( NOW(), INTERVAL +1 DAY ) AND DATE_SUB( NOW(), INTERVAL -31 DAY ) > endDate", userId, appId).
 		Get(&solde)
@@ -540,7 +543,7 @@ func (service *IntegralService) IntegralDetailedCheck(data entity.FlowJSON) ([]*
 		point.SourceType = value.SourceType
 		point.Name = value.Name
 		point.Abstract = value.Abstract
-		point.SerialNumber=value.SerialNumber
+		point.SerialNumber = value.SerialNumber
 		flowReq = append(flowReq, &point)
 	}
 	fmt.Println(flowList)
@@ -550,3 +553,159 @@ func (service *IntegralService) IntegralDetailedCheck(data entity.FlowJSON) ([]*
 	}
 	return flowReq, numb
 }
+
+//账号合并
+func (service *IntegralService) UserMerge(mergeUser, mergedUser, appId string) (bool, string) {
+	orm := entity.Engine.NewSession()
+	defer orm.Close()
+	err := orm.Begin()
+	//先查询一下被合并账号有效的结存信息
+	nowStr := time.Now().Format("2006-01-02")
+	soldeList := []entity.Solde{}
+	err = orm.Table("integral_solde").
+		Where("userId = ? AND appId = ? and  (endDate>=? or endDate ='') ", mergedUser, appId, nowStr).
+		Find(&soldeList)
+	if err != nil {
+		orm.Rollback()
+		log.Println("查询被合并者结存信息出错",err)
+		return false, "查询被合并者结存信息出错"
+	}
+	timeBalanceNumb:=int64(0)
+	perManEntBalanceNumb:=int64(0)
+	for _, value := range soldeList {
+		if (value.PerManEntPoints==0){
+			//此数据可能是时效积分数据
+			if value.TimePoints==0{
+				break
+			}
+			solde := entity.Solde{}
+			_, err = orm.Table("integral_solde").
+				Where("userId = ? AND appId = ? and  endDate=?", mergeUser, appId, value.EndDate).
+				Get(&solde)
+			if err != nil {
+				orm.Rollback()
+				log.Println("查询合并者结存信息出错,err")
+				return false, "查询合并者结存信息出错"
+			}
+			if solde.Id==0{
+				numb:=int64(0)
+				//新增一条记录
+				solde := entity.Solde{}
+				solde.AppId = value.AppId
+				solde.UserId = mergeUser
+				solde.PerManEntPoints =0
+				solde.TimePoints = value.TimePoints
+				solde.EndDate=value.EndDate
+				numb, err = orm.Table("integral_solde").Insert(&solde)
+				if err != nil && numb == 0 {
+					log.Print("新增时效积分失败:", err)
+					orm.Rollback()
+					return false, "新增时效积分失败"
+				}
+			}
+			orm.Exec("UPDATE integral_solde SET timePoints = timePoints+? WHERE id= ?",value.TimePoints,solde.Id)
+			timeBalanceNumb+=value.TimePoints
+		}
+		//此数据是永久积分数据
+		solde := entity.Solde{}
+		_, err = orm.Table("integral_solde").
+			Where("userId = ? AND appId = ? and  endDate =''", mergeUser, appId).
+			Get(&solde)
+		if err != nil {
+			orm.Rollback()
+			log.Println("查询合并者永久结存信息出错",err)
+			return false, "查询合并者永久结存信息出错"
+		}
+		if  solde.Id==0{
+			//没有永久数据
+			numb:=int64(0)
+			//新增一条记录
+			solde := entity.Solde{}
+			solde.AppId = value.AppId
+			solde.UserId = mergeUser
+			solde.PerManEntPoints =value.PerManEntPoints
+			solde.TimePoints = 0
+			solde.EndDate=value.EndDate
+			numb, err = orm.Table("integral_solde").Insert(&solde)
+			if err != nil && numb == 0 {
+				log.Print("新增时效积分失败:", err)
+				orm.Rollback()
+				return false, "新增时效积分失败"
+			}
+		}
+		orm.Exec("UPDATE integral_solde SET perManEntPoints = perManEntPoints+? WHERE id= ?",value.PerManEntPoints,solde.Id)
+		perManEntBalanceNumb+=value.PerManEntPoints
+	}
+	balance := entity.Balance{}
+	fool:=true
+	fool, err = orm.Table("integral_balance").Select("*").
+		Where("userId = ? AND appId = ?", mergeUser, appId).
+		Get(&balance)
+	fmt.Println(fool)
+	if err != nil {
+		orm.Rollback()
+		log.Println("积分余额查询出错,err")
+		return false, "积分余额查询失败"
+	}
+	numb:=int64(0)
+
+	if timeBalanceNumb>0{
+		flow := entity.Flow{}
+		flow.UserId = mergeUser
+		flow.SourceType ="账号合并"
+		flow.PointType = 1006
+		flow.SourceId = ""
+		flow.Abstract =""
+		flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
+		flow.EndDate = ""
+		flow.AppId = appId
+		flow.Sort = entity.AddCode
+		flow.SerialNumber = time.Now().Format("20060102150405000") + fmt.Sprint(rand.Intn(100))
+		flow.Point = timeBalanceNumb
+		flow.OperationType=0
+		numb, err = orm.Table("integral_flow").Insert(&flow)
+		if err != nil && numb == 0 {
+			log.Print("新增时效流水失败:", err)
+			orm.Rollback()
+			return false, "新增时效流水失败"
+		}
+	}
+	if perManEntBalanceNumb>0{
+		flow := entity.Flow{}
+		flow.UserId = mergeUser
+		flow.SourceType ="账号合并"
+		flow.PointType = 1006
+		flow.SourceId = ""
+		flow.Abstract =""
+		flow.CreateTime = time.Now().Format("2006-01-02 15:04:05")
+		flow.EndDate = ""
+		flow.AppId = appId
+		flow.Sort = entity.AddCode
+		flow.SerialNumber = time.Now().Format("20060102150405000") + fmt.Sprint(rand.Intn(100))
+		flow.Point =perManEntBalanceNumb
+		flow.OperationType=1
+		numb, err = orm.Table("integral_flow").Insert(&flow)
+		if err != nil && numb == 0 {
+			log.Print("新增永久流水失败:", err)
+			orm.Rollback()
+			return false, "新增永久流水失败"
+		}
+	}
+	if  balance.Id == 0 {
+		balance := entity.Balance{}
+		balance.UserId = mergeUser
+		balance.AppId = appId
+		balance.CountPoints = timeBalanceNumb+perManEntBalanceNumb
+		numb, err = orm.Table("integral_balance").Insert(&balance)
+		if err != nil || numb == 0 {
+			log.Print("新增余额失败:", err)
+			orm.Rollback()
+			return false, "新增余额失败"
+		}
+	} else {
+		//修改余额
+		 orm.Exec("UPDATE integral_balance SET countPoints = countPoints+? WHERE id = ?",timeBalanceNumb+perManEntBalanceNumb,balance.Id)
+	}
+	orm.Commit()
+	return true,"合并成功"
+}