瀏覽代碼

存历史数据

xuzhiheng 4 年之前
父節點
當前提交
229aa4f40d
共有 5 個文件被更改,包括 40 次插入20 次删除
  1. 2 2
      api/v1/projects.go
  2. 8 4
      service/projects.go
  3. 17 3
      utils/api_util.go
  4. 7 6
      utils/cost_by_account_balance.go
  5. 6 5
      utils/cost_by_left_num.go

+ 2 - 2
api/v1/projects.go

@@ -42,7 +42,7 @@ func getProjectsList(c *gin.Context) {
 	global.Logger.Info("api getProjectList:", zap.Any("productID:", productID), zap.Any("appID", appID), zap.Any("param:", param))
 	if projectName != "" || winner != "" {
 		utils.Check(appID, productID, c, func() ([]map[string]interface{}, int, error) {
-			return service.ProjectListData(projectName, winner, bidTime, false)
+			return service.ProjectListData(productID, appID, projectName, winner, bidTime, false)
 		}, param, requestIP)
 	}
 }
@@ -61,7 +61,7 @@ func getProjectsListDetail(c *gin.Context) {
 	global.Logger.Info("api getProjectList:", zap.Any("productID:", productID), zap.Any("appID", appID), zap.Any("param:", param))
 	if winner != "" {
 		utils.Check(appID, productID, c, func() ([]map[string]interface{}, int, error) {
-			return service.ProjectListData("", winner, "", true)
+			return service.ProjectListData(productID, appID, "", winner, "", true)
 		}, param, requestIP)
 	}
 }

+ 8 - 4
service/projects.go

@@ -3,15 +3,17 @@ package service
 import (
 	"errors"
 	"fmt"
-	"go.uber.org/zap"
 	"sfbase/core"
 	"sfbase/elastic"
 	"sfbase/global"
 	"sfbase/utils"
 	"sfis/db"
+	"sfis/model"
 	"strconv"
 	"strings"
 	"time"
+
+	"go.uber.org/zap"
 )
 
 var (
@@ -27,7 +29,7 @@ var (
 	highlightStr = `%s: {"fragment_size": %d,"number_of_fragments": 1}`
 )
 
-func ProjectListData(projectName, winner, times string, isDetail bool) (data []map[string]interface{}, httpStatus int, err error) {
+func ProjectListData(productId int, appid, projectName, winner, times string, isDetail bool) (data []map[string]interface{}, httpStatus int, err error) {
 	times = strings.TrimSpace(times)
 	winner = strings.TrimSpace(winner)
 	pjt_name := strings.TrimSpace(projectName)
@@ -77,7 +79,9 @@ func ProjectListData(projectName, winner, times string, isDetail bool) (data []m
 	} else {
 		fields = pjt_field
 	}
-	repl := GetAllByNgram(Es, INDEX, TYPE, qstr, "", pjt_sort, fields, 0, pjt_count, 0, false)
+	userProduct := &model.UserProduct{}
+	db.GetSFISDB().First(userProduct, &model.UserProduct{AppID: appid, ProductID: productId})
+	repl := GetAllByNgram(Es, INDEX, TYPE, qstr, "", pjt_sort, fields, 0, userProduct.DataNumLimitOneTimes, 0, false)
 	if repl != nil && len(*repl) > 0 {
 		data = *repl
 		for _, i := range data {
@@ -106,7 +110,7 @@ func GetAllByNgram(Es *elastic.Elastic, index, itype, qstr, findfields, order, f
 		if start > -1 {
 			qstr = qstr[:len(qstr)-1] + `,"from":` + strconv.Itoa(start) + `,"size":` + strconv.Itoa(limit) + "}"
 		}
-		global.Logger.Info("GetAllByNgram方法es查询",zap.Any("es语句",qstr))
+		global.Logger.Info("GetAllByNgram方法es查询", zap.Any("es语句", qstr))
 		return Es.Get(index, itype, qstr)
 	} else {
 		return nil

+ 17 - 3
utils/api_util.go

@@ -2,12 +2,15 @@ package utils
 
 import (
 	"log"
+	"sfbase/global"
 	"sfis/db"
 	"sfis/lock"
 	"sfis/model"
 	"sfis/model/response"
+	"time"
 
 	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
 )
 
 func Check(appID string, productID int, context *gin.Context, getData func() ([]map[string]interface{}, int, error), param, ip string) {
@@ -16,6 +19,7 @@ func Check(appID string, productID int, context *gin.Context, getData func() ([]
 	lock.MainLock.Unlock()
 	var err error
 	datas := []map[string]interface{}{}
+	orderCode := ""
 	/**
 	第二步:用户接口产品校验-加锁处理
 	*/
@@ -27,7 +31,7 @@ func Check(appID string, productID int, context *gin.Context, getData func() ([]
 	if userProduct.ID == 0 {
 		response.FailWithDetailed(response.InterfaceDeleted, nil, "该用户接口未购买", context)
 		return
-	}else if userProduct.InterfaceStatus != 0 {
+	} else if userProduct.InterfaceStatus != 0 {
 		response.FailWithDetailed(response.InterfaceDeleted, nil, "该用户接口暂不提供服务", context)
 		return
 	}
@@ -42,18 +46,28 @@ func Check(appID string, productID int, context *gin.Context, getData func() ([]
 	switch costModel {
 	case 0:
 		//按剩余量扣费
-		datas, err = costByLeftNum(getData, appID, productID, userProduct, product, param, ip)
+		datas, orderCode, err = costByLeftNum(getData, appID, productID, userProduct, product, param, ip)
 	case 1:
 		//按账户钱包余额扣费
-		datas, err = costByAccountBalance(getData, appID, productID, userProduct, product, param, ip)
+		datas, orderCode, err = costByAccountBalance(getData, appID, productID, userProduct, product, param, ip)
 	case 2:
 		//优先扣剩余量,剩余量为0,扣钱包余额
 	}
 	userLock.Unlock()
 	log.Println(param + "解锁......")
 	if err == nil {
+		db.GetQyfw().Save("user_data", map[string]interface{}{
+			"app_id":          appID,
+			"result_num":      len(datas),
+			"result_content":  datas,
+			"order_code":      orderCode,
+			"status":          200,
+			"user_product_id": userProduct.ID,
+			"create_at":       time.Now().Unix(),
+		})
 		response.OkWithDatas(datas, context)
 	} else {
+		global.Logger.Error("数据库操作失败", zap.Any("error:", err))
 		response.FailWithDetailed(response.InterfaceDeleted, nil, "查询失败", context)
 	}
 }

+ 7 - 6
utils/cost_by_account_balance.go

@@ -18,7 +18,7 @@ import (
 /**
 扣账户余额
 */
-func costByAccountBalance(getData func() ([]map[string]interface{}, int, error), appID string, productID int, userProduct *model.UserProduct, product *model.Product, param, ip string) ([]map[string]interface{}, error) {
+func costByAccountBalance(getData func() ([]map[string]interface{}, int, error), appID string, productID int, userProduct *model.UserProduct, product *model.Product, param, ip string) ([]map[string]interface{}, string, error) {
 	productType := product.ProductType
 	//productUnit := product.UnitPrice
 	// if productType == 0 {
@@ -30,11 +30,12 @@ func costByAccountBalance(getData func() ([]map[string]interface{}, int, error),
 	// }
 	datas := []map[string]interface{}{}
 	var err error
+	orderCode := ""
 	data, statusCode, _ := execute(getData, appID, productID)
 	beforeJudge, payMoney := beforeCheck(productType, product.UnitPrice, len(data), userProduct)
 	if beforeJudge {
 		global.Logger.Info("交易金额", zap.Any("payMoney:", payMoney))
-		err = afterCheck(len(data), payMoney, userProduct, statusCode, param, ip)
+		orderCode, err = afterCheck(len(data), payMoney, userProduct, statusCode, param, ip)
 		if err != nil {
 			global.Logger.Error("数据库操作失败", getUserProductError(appID, productID, err)...)
 		} else {
@@ -43,7 +44,7 @@ func costByAccountBalance(getData func() ([]map[string]interface{}, int, error),
 	} else {
 		err = errors.New("剩余余额不足")
 	}
-	return datas, err
+	return datas, orderCode, err
 }
 
 func beforeCheck(productType, unitPrice, dataLen int, userProduct *model.UserProduct) (bool, int) {
@@ -67,13 +68,14 @@ func beforeCheck(productType, unitPrice, dataLen int, userProduct *model.UserPro
 	return true, money
 }
 
-func afterCheck(dataLen, payMoney int, userProduct *model.UserProduct, statusCode int, param, ip string) error {
+func afterCheck(dataLen, payMoney int, userProduct *model.UserProduct, statusCode int, param, ip string) (string, error) {
 	appID := userProduct.AppID
 	productID := userProduct.ProductID
 	userProductID := userProduct.ID
 	userAccount := &model.UserAccount{}
 	db.GetSFISDB().First(userAccount, &model.UserAccount{AppID: userProduct.AppID})
 	var errs error
+	orderCode := fmt.Sprint(time.Now().Year()) + fmt.Sprint(utils.GetRandom(8))
 	//按次扣费-(每调一次剩余量-1)
 	errs = db.GetSFISDB().Transaction(func(tx *gorm.DB) error {
 		orderBefore := userAccount.Money
@@ -85,7 +87,6 @@ func afterCheck(dataLen, payMoney int, userProduct *model.UserProduct, statusCod
 			tx.Rollback()
 			return err
 		}
-		orderCode := fmt.Sprint(time.Now().Year()) + fmt.Sprint(utils.GetRandom(8))
 		//生调用记录
 		err = tx.Exec("insert into user_call_record (app_id,user_product_id,status,ip,param,order_code) values (?,?,?,?,?,?)", appID, userProductID, statusCode, ip, param, orderCode).Error
 		if err != nil {
@@ -103,5 +104,5 @@ func afterCheck(dataLen, payMoney int, userProduct *model.UserProduct, statusCod
 		//存历史数据
 		return nil
 	})
-	return errs
+	return orderCode, errs
 }

+ 6 - 5
utils/cost_by_left_num.go

@@ -16,14 +16,15 @@ import (
 /**
 扣产品剩余量
 */
-func costByLeftNum(getData func() ([]map[string]interface{}, int, error), appID string, productID int, userProduct *model.UserProduct, product *model.Product, param, ip string) ([]map[string]interface{}, error) {
+func costByLeftNum(getData func() ([]map[string]interface{}, int, error), appID string, productID int, userProduct *model.UserProduct, product *model.Product, param, ip string) ([]map[string]interface{}, string, error) {
 	productType := product.ProductType
 	datas := []map[string]interface{}{}
 	var err error
+	orderCode := ""
 	beforeJudge := before(productType, userProduct)
 	if beforeJudge {
 		data, statusCode, _ := execute(getData, appID, productID)
-		err = after(productType, len(data), userProduct, statusCode, param, ip)
+		orderCode, err = after(productType, len(data), userProduct, statusCode, param, ip)
 		if err == nil && data != nil && len(data) > 0 {
 			datas = data
 		} else {
@@ -36,7 +37,7 @@ func costByLeftNum(getData func() ([]map[string]interface{}, int, error), appID
 	} else {
 		err = errors.New("剩余量不足")
 	}
-	return datas, err
+	return datas, orderCode, err
 }
 
 /**
@@ -74,7 +75,7 @@ func execute(getData func() ([]map[string]interface{}, int, error), appID string
 	return data, statusCode, nil
 }
 
-func after(productType int, dataLen int, userProduct *model.UserProduct, statusCode int, param, ip string) error {
+func after(productType int, dataLen int, userProduct *model.UserProduct, statusCode int, param, ip string) (string, error) {
 	appID := userProduct.AppID
 	productID := userProduct.ProductID
 	userProductID := userProduct.ID
@@ -140,5 +141,5 @@ func after(productType int, dataLen int, userProduct *model.UserProduct, statusC
 			return nil
 		})
 	}
-	return errs
+	return orderCode, errs
 }