Browse Source

金额计算

k.zhang 4 years ago
parent
commit
60fd0c1ce0

+ 7 - 0
apis/user/user.open.id.set.go

@@ -15,6 +15,7 @@ func OpenIdSet(c *gin.Context) {
 	var inData user.OpenIdSetRequest
 	var outData user.OpenIdSetResponse
 	var sqlData mysql.User
+	var wallet mysql.Wallet
 	err := c.ShouldBindJSON(&inData)
 	if err != nil {
 		app.Error(c, 400, err, err.Error())
@@ -48,9 +49,15 @@ func OpenIdSet(c *gin.Context) {
 	sqlData.OpenID = outData.OpenId
 	num := sqlData.GetNum()
 	if num == 0 {
+		//创建用户
 		sqlData.CreateTime = tools.GetCurrntTimeStr()
 		sqlData.UpdateTime = tools.GetCurrntTimeStr()
 		sqlData.Create()
+		//创建钱包
+		wallet.CreateTime = tools.GetCurrntTimeStr()
+		wallet.UpdateTime = tools.GetCurrntTimeStr()
+		wallet.OpenID = outData.OpenId
+		wallet.Create()
 	}
 
 	app.OK(c, outData, app.Success)

+ 21 - 7
apis/user/user.pid.get.go

@@ -16,15 +16,19 @@ import (
 func PidGet(c *gin.Context) {
 	var inData user.PidGetRequest
 	var outData user.PidGetResponse
-	var sqlData mysql.User
+	//var sqlData mysql.User
+	//var wallet mysql.Wallet
+	var pid mysql.Pid
 	err := c.ShouldBindJSON(&inData)
 	if err != nil {
 		app.Error(c, 400, err, err.Error())
 		return
 	}
 
-	sqlData.OpenID = inData.OpenId
-	val, err := sqlData.Get()
+	pid.PidStatus = 1
+	pid.OpenID = inData.OpenId
+	//sqlData.OpenID = inData.OpenId
+	val, err := pid.Get()
 	if err != nil {
 		app.Error(c, 500, err, err.Error())
 		return
@@ -78,10 +82,20 @@ func PidGet(c *gin.Context) {
 			return
 		}
 		outData.Pid = pidOut.PIDGenerateResponse.PIDList[0].PID
-		//更新pid
-		sqlData.Pid = outData.Pid
-		sqlData.OpenID = inData.OpenId
-		sqlData.Update()
+
+		//sqlData.Pid = outData.Pid
+		//sqlData.OpenID = inData.OpenId
+		//sqlData.Update()
+		//插入pid
+		pid.OpenID = inData.OpenId
+		pid.PidStatus = 1 //拼多多
+		pid.UpdateTime = tools.GetCurrntTimeStr()
+		pid.CreateTime = tools.GetCurrntTimeStr()
+		pid.Create()
+
+		//wallet.OpenID = inData.OpenId
+		//wallet.Pid = outData.Pid
+		//wallet.Update()
 
 	} else {
 		outData.Pid = val.Pid

+ 2 - 2
conf/conf.ini

@@ -4,10 +4,10 @@ client_secret = 1d4d5dd30f665c0ed3b315275f81fe358c3da609
 api_http = https://gw-api.pinduoduo.com/api/router
 [mysql]
 mysql_host = 49.234.19.130
-mysql_name = duoduo
+mysql_name = duoduo_test
 mysql_password = Zhangkun0212a@
 mysql_port = 3306
 mysql_username = gogs
 [wx]
 app_id = wxc5b88e9d942121cc
-secret = 66d4694c94371186f5f15abbd76a89c6
+secret = 66d4694c94371186f5f15abbd76a89c6

+ 13 - 0
conf/conf_master.ini

@@ -0,0 +1,13 @@
+[pdd]
+client_id = a5d05569c6584a50bfb6600b2d150bae
+client_secret = 1d4d5dd30f665c0ed3b315275f81fe358c3da609
+api_http = https://gw-api.pinduoduo.com/api/router
+[mysql]
+mysql_host = 49.234.19.130
+mysql_name = duoduo
+mysql_password = Zhangkun0212a@
+mysql_port = 3306
+mysql_username = gogs
+[wx]
+app_id = wxc5b88e9d942121cc
+secret = 66d4694c94371186f5f15abbd76a89c6

+ 13 - 0
conf/conf_test.ini

@@ -0,0 +1,13 @@
+[pdd]
+client_id = a5d05569c6584a50bfb6600b2d150bae
+client_secret = 1d4d5dd30f665c0ed3b315275f81fe358c3da609
+api_http = https://gw-api.pinduoduo.com/api/router
+[mysql]
+mysql_host = 49.234.19.130
+mysql_name = duoduo_test
+mysql_password = Zhangkun0212a@
+mysql_port = 3306
+mysql_username = gogs
+[wx]
+app_id = wxc5b88e9d942121cc
+secret = 66d4694c94371186f5f15abbd76a89c6

+ 3 - 4
conf/conn_ini_.go

@@ -4,20 +4,19 @@ import (
 	"errors"
 	"fmt"
 	"github.com/Unknwon/goconfig"
-	"os"
-	"strings"
 )
 
 // 读取配置文件
 var connIni *goconfig.ConfigFile
 var connIniTest = false
+var Model string
 
 func ConnIni() (conf *goconfig.ConfigFile, err error) {
 
 	// 通过全局变量设置配置文件的名字
 	var confName string
-
-	switch strings.ToLower(os.Getenv("model")) {
+	fmt.Print("model = ", Model)
+	switch Model {
 
 	case "test":
 		confName = "conf_test.ini"

+ 1 - 0
go.mod

@@ -17,6 +17,7 @@ require (
 	github.com/modern-go/reflect2 v1.0.1 // indirect
 	github.com/olivere/elastic/v7 v7.0.4 // indirect
 	github.com/robfig/cron v1.2.0 // indirect
+	github.com/shopspring/decimal v1.2.0 // indirect
 	github.com/sirupsen/logrus v1.4.2 // indirect
 	github.com/ugorji/go v1.2.5 // indirect
 	github.com/unrolled/secure v1.0.9 // indirect

+ 2 - 0
go.sum

@@ -118,6 +118,8 @@ github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
 github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
+github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
+github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=

+ 11 - 1
main.go

@@ -1,14 +1,24 @@
 package main
 
 import (
+	"duoduo/conf"
 	"duoduo/database"
 	"duoduo/report"
 	"duoduo/routers"
 	"fmt"
+	"os"
 )
 
 func main() {
-	fmt.Println("hello duo!")
+
+	for idx, args := range os.Args {
+
+		if idx == 1 {
+			conf.Model = args
+			fmt.Print("model = ", conf.Model)
+		}
+
+	}
 	database.Setup()
 	report.SysCronStart()
 	routers.InitRouter()

+ 45 - 0
models/mysql/order.go

@@ -39,6 +39,51 @@ func (o *Order) GetNum() int {
 	return count
 }
 
+func (o *Order) GetAmount(openId string) (Wallet, error) {
+	var wallet Wallet
+
+	//历史总收益: 0,1,2,3,5 求和
+	//今日预估收益:0,1,2,3 求和
+	//昨日预估收益:0,1,2,3 求和
+	//近30日预估收益:0,1,2,3,5 求和
+	//可体现金额:5求和-已体现金额
+	//已体现金额:提现记录求和
+	//历史总收益
+	err := orm.Eloquent.Select("SUM(promotion_amount) as total_amount").Where("order_status in (0,1,2,3,5) and open_id = ? ", openId).Table(o.TableName()).First(&wallet).Error
+
+	if err != nil {
+		return wallet, err
+	}
+	//今日收益
+	err = orm.Eloquent.Select("SUM(promotion_amount) as today_amount").Where("order_status in (0,1,2,3) and open_id = ? and DATE(order_group_success_time) = curdate() ", openId).Table(o.TableName()).First(&wallet).Error
+
+	if err != nil {
+		return wallet, err
+	}
+	//昨日收益
+	err = orm.Eloquent.Select("SUM(promotion_amount) as yesterday_amount").Where("order_status in (0,1,2,3) and open_id = ? and DATE(order_group_success_time) = date_sub(curdate(),interval 1 day) ", openId).Table(o.TableName()).First(&wallet).Error
+
+	if err != nil {
+		return wallet, err
+	}
+	//近30日收益
+	err = orm.Eloquent.Select("SUM(promotion_amount) as lately_amount").Where("order_status in (0,1,2,3) and open_id = ? and DATE(order_group_success_time) >= date_sub(curdate(),interval 30 day) ", openId).Table(o.TableName()).First(&wallet).Error
+
+	if err != nil {
+		return wallet, err
+	}
+
+	//上个月结算收益
+	err = orm.Eloquent.Select("SUM(promotion_amount) as available_amount").Where("order_status = 5 and open_id = ? and DATE(order_group_success_time) >= date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract(day from now()) day),interval 0 month) ", openId).Table(o.TableName()).First(&wallet).Error
+
+	if err != nil {
+		return wallet, err
+	}
+
+	return wallet, nil
+
+}
+
 // 更新
 func (o *Order) Update(orderId string) (update Order, err error) {
 	if err = orm.Eloquent.Table(o.TableName()).Where("order_id = ?", orderId).First(&update).Error; err != nil {

+ 49 - 0
models/mysql/pid.go

@@ -0,0 +1,49 @@
+package mysql
+
+import orm "duoduo/database"
+
+type Pid struct {
+	CreateTime string `gorm:"column:create_time" json:"create_time"`
+	OpenID     string `gorm:"column:open_id" json:"open_id"`
+	Pid        string `gorm:"column:pid" json:"pid"`
+	PidStatus  int    `gorm:"column:pid_status" json:"pid_status"` //1-拼多多 2-淘宝天猫 3-京东
+	UpdateTime string `gorm:"column:update_time" json:"update_time"`
+}
+
+// TableName sets the insert table name for this struct type
+func (p *Pid) TableName() string {
+	return "pid"
+}
+
+//     自己 上  上上
+//级别 0.5 0.15 0.05  70% 交税+
+func (p *Pid) Get() (Pid, error) {
+	var doc Pid
+	err := orm.Eloquent.Select("pid").Where("open_id = ?  and pid_status = ?", p.OpenID, p.PidStatus).Table(p.TableName()).First(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+	return doc, nil
+
+}
+
+func (p *Pid) GetOpenId() (Pid, error) {
+	var doc Pid
+	err := orm.Eloquent.Select("open_id").Where("pid = ? ", p.OpenID).Table(p.TableName()).First(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+	return doc, nil
+
+}
+
+func (p *Pid) Create() (Pid, error) {
+	var doc Pid
+	result := orm.Eloquent.Table(p.TableName()).Create(&p)
+	if result.Error != nil {
+		err := result.Error
+		return doc, err
+	}
+	doc = *p
+	return doc, nil
+}

+ 47 - 0
models/mysql/trans_records.go

@@ -0,0 +1,47 @@
+package mysql
+
+import (
+	orm "duoduo/database"
+	"github.com/shopspring/decimal"
+)
+
+type TransRecords struct {
+	Amount      decimal.Decimal `gorm:"column:amount" json:"amount"`
+	CreateTime  string          `gorm:"column:create_time" json:"createTime"`
+	OpenID      string          `gorm:"column:open_id" json:"openId"`
+	TransStatus int             `gorm:"column:trans_status" json:"transStatus"`
+	UpdateTime  string          `gorm:"column:update_time" json:"updateTime"`
+}
+
+// TableName sets the insert table name for this struct type
+func (t *TransRecords) TableName() string {
+	return "trans_records"
+}
+
+func (t *TransRecords) Create() (TransRecords, error) {
+	var doc TransRecords
+	result := orm.Eloquent.Table(t.TableName()).Create(&t)
+	if result.Error != nil {
+		err := result.Error
+		return doc, err
+	}
+	doc = *t
+	return doc, nil
+}
+
+func (t *TransRecords) GetAmount() (TransRecords, error) {
+	var trans TransRecords
+
+	//可体现金额:5求和-已体现金额
+	//已体现金额:提现记录求和
+
+	//历史总收益
+	err := orm.Eloquent.Select("SUM(amount) as amount").Where("open_id = ? and trans_status = ? ", t.OpenID, t.TransStatus).Table(t.TableName()).First(&trans).Error
+
+	if err != nil {
+		return trans, err
+	}
+
+	return trans, nil
+
+}

+ 0 - 1
models/mysql/user.go

@@ -26,7 +26,6 @@ func (u *User) GetNum() int {
 
 }
 
-//根据share_info_id
 func (u *User) Get() (User, error) {
 	var doc User
 	err := orm.Eloquent.Select("pid").Where("open_id = ? ", u.OpenID).Table(u.TableName()).First(&doc).Error

+ 65 - 0
models/mysql/wallet.go

@@ -0,0 +1,65 @@
+package mysql
+
+import (
+	orm "duoduo/database"
+	"duoduo/tools"
+	"github.com/shopspring/decimal"
+)
+
+type Wallet struct {
+	AvailableAmount  decimal.Decimal `gorm:"column:available_amount" json:"availableAmount"`   //可提现金额
+	CreateTime       string          `gorm:"column:create_time" json:"createTime"`             //创建时间
+	LatelyAmount     decimal.Decimal `gorm:"column:lately_amount" json:"latelyAmount"`         //近30日金额
+	OpenID           string          `gorm:"column:open_id" json:"openId"`                     //openId
+	TodayAmount      decimal.Decimal `gorm:"column:today_amount" json:"todayAmount"`           //今日金额
+	TotalAmount      decimal.Decimal `gorm:"column:total_amount" json:"totalAmount"`           //历史总金额
+	UpdateTime       string          `gorm:"column:update_time" json:"updateTime"`             //更新时间
+	WithdrawalAmount decimal.Decimal `gorm:"column:withdrawal_amount" json:"withdrawalAmount"` //已经体现总金额
+	YesterdayAmount  decimal.Decimal `gorm:"column:yesterday_amount" json:"yesterdayAmount"`   //昨日收益
+	Pid              string          `gorm:"column:pid" json:"pid"`
+}
+
+// TableName sets the insert table name for this struct type
+func (w *Wallet) TableName() string {
+	return "wallet"
+}
+
+func (w *Wallet) Create() (Wallet, error) {
+	var doc Wallet
+	result := orm.Eloquent.Table(w.TableName()).Create(&w)
+	if result.Error != nil {
+		err := result.Error
+		return doc, err
+	}
+	doc = *w
+	return doc, nil
+}
+
+func (w *Wallet) Update() (update Wallet, err error) {
+
+	if err := orm.Eloquent.Table(w.TableName()).Model(&update).Where("open_id = ? ", w.OpenID).Updates(
+		map[string]interface{}{
+			"pid":         w.Pid,
+			"update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
+		return update, err
+	}
+
+	return update, nil
+}
+
+func (w *Wallet) UpdateAll() (update Wallet, err error) {
+
+	if err := orm.Eloquent.Table(w.TableName()).Model(&update).Where("open_id = ? ", w.OpenID).Updates(
+		map[string]interface{}{
+			"total_amount":      w.TotalAmount,
+			"available_amount":  w.AvailableAmount,
+			"today_amount":      w.TodayAmount,
+			"yesterday_amount":  w.YesterdayAmount,
+			"lately_amount":     w.LatelyAmount,
+			"withdrawal_amount": w.WithdrawalAmount,
+			"update_time":       tools.GetCurrntTimeStr()}).Error; err != nil {
+		return update, err
+	}
+
+	return update, nil
+}

+ 35 - 0
report/pdd.ddk.order.list.increment.get.go

@@ -7,6 +7,7 @@ import (
 	"duoduo/models/pdd"
 	"duoduo/tools"
 	"fmt"
+	"github.com/shopspring/decimal"
 	"time"
 )
 
@@ -67,6 +68,9 @@ func DdkOrder() {
 
 		//同步订单信息
 		for i := 0; i < len(outData.OrderListGetResponse.OrderList); i++ {
+			var pid mysql.Pid
+			var order mysql.Order
+			var trans mysql.TransRecords
 			sqlData.OrderID = outData.OrderListGetResponse.OrderList[i].OrderID
 			sqlData.PID = outData.OrderListGetResponse.OrderList[i].PID
 			sqlData.UpdateTime = tools.GetCurrntTimeStr()
@@ -91,6 +95,37 @@ func DdkOrder() {
 					return
 				}
 			}
+			//统计钱包数据
+			//首先获取open_id
+			pid.Pid = outData.OrderListGetResponse.OrderList[i].PID
+			pidVal, _ := pid.GetOpenId()
+
+			//统计钱包数据
+			walletVal, err := order.GetAmount(pidVal.OpenID)
+			if err != nil {
+				continue
+			}
+
+			walletVal.LatelyAmount = walletVal.LatelyAmount.Div(decimal.NewFromInt(100))
+			walletVal.TodayAmount = walletVal.TodayAmount.Div(decimal.NewFromInt(100))
+			walletVal.TotalAmount = walletVal.TotalAmount.Div(decimal.NewFromInt(100))
+			walletVal.YesterdayAmount = walletVal.YesterdayAmount.Div(decimal.NewFromInt(100))
+			walletVal.AvailableAmount = walletVal.AvailableAmount.Div(decimal.NewFromInt(100))
+
+			trans.TransStatus = 3
+			trans.OpenID = pidVal.OpenID
+			transVal, err := trans.GetAmount()
+			if err != nil {
+				continue
+			}
+			walletVal.WithdrawalAmount = transVal.Amount.Div(decimal.NewFromInt(100))
+			walletVal.AvailableAmount = walletVal.AvailableAmount.Sub(walletVal.WithdrawalAmount)
+
+			//更新钱包
+			walletVal.OpenID = pidVal.OpenID
+			walletVal.Pid = outData.OrderListGetResponse.OrderList[i].PID
+			walletVal.UpdateTime = tools.GetCurrntTimeStr()
+			walletVal.Update()
 		}
 
 		if outData.OrderListGetResponse.TotalCount < 50 {

+ 9 - 4
routers/router.go

@@ -3,6 +3,7 @@ package routers
 import (
 	"duoduo/apis/pdd"
 	"duoduo/apis/user"
+	"duoduo/conf"
 	"github.com/gin-gonic/gin"
 	"github.com/unrolled/secure"
 )
@@ -10,8 +11,9 @@ import (
 func InitRouter() {
 
 	r := gin.New()
-
-	//r.Use(TlsHandler())
+	if conf.Model == "master" {
+		r.Use(TlsHandler())
+	}
 
 	r.GET("/", func(c *gin.Context) { c.File("./root.txt") })
 	r.GET("/root.txt", func(c *gin.Context) { c.File("./root.txt") })
@@ -21,8 +23,11 @@ func InitRouter() {
 		pdd.InitSetRouter(r2)
 		user.InitUserRouter(r2)
 	}
-	//r.RunTLS(":443", "./shisanmiao.com.pem", "./shisanmiao.com.key")
-	_ = r.Run(":8081")
+	if conf.Model == "master" {
+		r.RunTLS(":443", "./shisanmiao.com.pem", "./shisanmiao.com.key")
+	} else {
+		_ = r.Run(":8081")
+	}
 
 }