k.zhang 3 anni fa
parent
commit
b9473176d7

+ 43 - 0
apis/user/admin.amount.go

@@ -0,0 +1,43 @@
+package user
+
+import (
+	"duoduo/models/mysql"
+	"duoduo/models/user"
+	"duoduo/tools"
+	"duoduo/tools/app"
+
+	"github.com/shopspring/decimal"
+
+	"github.com/gin-gonic/gin"
+)
+
+func AdminAmount(c *gin.Context) {
+	var inData user.AdminAmountResponse
+	var adminOrder mysql.AdminTransRecords
+	var order mysql.Order
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	availableAmount, err := order.GetAdminAvailable()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	//已付款金额
+	adminTrans, err := adminOrder.GetTrans()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	adminOrder.Amount = availableAmount.Add(availableAmount.Mul(decimal.NewFromFloat(0.15)).Round(2)).Sub(adminTrans)
+	adminOrder.CreateTime = tools.GetCurrntTimeStr()
+	adminOrder.UpdateTime = tools.GetCurrntTimeStr()
+	if adminOrder.Amount.Cmp(decimal.NewFromInt(0)) <= 0 {
+		app.Error(c, 500, err, "金额小于等于0")
+		return
+	}
+	adminOrder.Create()
+	app.OK(c, nil, app.Success)
+}

+ 39 - 0
apis/user/admin.amount.list.go

@@ -0,0 +1,39 @@
+package user
+
+import (
+	"duoduo/models/mysql"
+	"duoduo/models/user"
+	"duoduo/tools/app"
+
+	"github.com/gin-gonic/gin"
+)
+
+func AdminAmountList(c *gin.Context) {
+	var inData user.AdminAmountListRequest
+	var adminTrans mysql.AdminTransRecords
+
+	var pageSize = 10
+	var pageIndex = 1
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+
+	transVal, count, err := adminTrans.GetTransList(pageSize, pageIndex)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.PageOK(c, transVal, count, pageIndex, pageSize, app.Success)
+
+}

+ 17 - 0
apis/user/admin.order.amount.go

@@ -15,6 +15,7 @@ func AdminOrderAmount(c *gin.Context) {
 	var outData user.AdminOrderAmountResponse
 	var user mysql.User
 	var order mysql.Order
+	var adminOrder mysql.AdminTransRecords
 	err := c.ShouldBindJSON(&inData)
 	if err != nil {
 		app.Error(c, 400, err, err.Error())
@@ -45,7 +46,23 @@ func AdminOrderAmount(c *gin.Context) {
 	}
 	outData.AdminAmount = decimal.NewFromInt(amount)
 	outData.AdminAmount = outData.AdminAmount.Mul(decimal.NewFromFloat(0.0015)).Round(2)
+	//所有已结算的订单求和 + 订单喝*0.0015 - 已付款金额
+	//outData.AvailableAmount =
+	//订单结算和
+	availableAmount, err := order.GetAdminAvailable()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	//已付款金额
+	adminTrans, err := adminOrder.GetTrans()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
 
+	outData.AvailableAmount = availableAmount.Add(availableAmount.Mul(decimal.NewFromFloat(0.15)).Round(2)).Sub(adminTrans)
+	outData.WithdrawalAmount = adminTrans
 	outData.OrderNum = orderNum
 	outData.UserNum = userNum
 

+ 7 - 0
apis/user/base.go

@@ -13,5 +13,12 @@ func InitUserRouter(engine *gin.RouterGroup) {
 		v1.POST("/user/update/name", UpdateName) //更新名字
 		v1.POST("/user/list", UserList)          //用户列表
 		v1.POST("/admin/data", AdminOrderAmount)
+		v1.POST("/user/trans/create", TransCreate) //审请提现
+		v1.POST("/user/trans/update", TransUpdate) //提现审批
+		v1.POST("/user/trans/list", TransList)     //提现列表
+		v1.POST("/user/trans/get", TransGet)       //查询用户可提现金额,审核中金额,已体现金额
+		v1.POST("/user/user/pay", UpdatePay)       //更新用户收款账号
+		v1.POST("/admin/amount", AdminAmount)
+		v1.POST("/admin/amount/list", AdminAmountList) //管理员list
 	}
 }

+ 96 - 0
apis/user/user.trans.create.go

@@ -0,0 +1,96 @@
+package user
+
+import (
+	"duoduo/models/mysql"
+	"duoduo/models/user"
+	"duoduo/tools"
+	"duoduo/tools/app"
+
+	"github.com/shopspring/decimal"
+
+	"github.com/gin-gonic/gin"
+)
+
+func TransCreate(c *gin.Context) {
+	var inData user.TransCreateInput
+	var trans mysql.TransRecords
+	var pid mysql.Pid
+	var walletInfo mysql.Wallet
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	if inData.Amount.Cmp(decimal.NewFromFloat32(0)) <= 0 {
+		app.Error(c, 400, err, "提现金额不能小于等于0")
+		return
+	}
+
+	pid.OpenID = inData.OpenId
+	pid.PidStatus = inData.PidStatus
+	pidInfo, err := pid.Get()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	walletInfo.Pid = pidInfo.Pid
+	walletInfo.OpenID = inData.OpenId
+	walletVal, err := walletInfo.GetWallet()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	if walletVal.AvailableAmount.Cmp(inData.Amount) < 0 {
+		app.Error(c, 400, err, "提现金额超长可提现金额")
+		return
+	}
+
+	//只能申请一笔,一笔发完再申请第二笔
+	trans.OpenID = inData.OpenId
+	trans.TransStatus = 1 //申请提现
+
+	transCount := trans.GetTransNum()
+	if transCount != 0 {
+		app.Error(c, 400, err, "已经申请过一笔提现,不能再次申请。")
+		return
+	}
+	trans.PidStatus = inData.PidStatus
+	trans.Amount = inData.Amount
+	trans.Pid = pidInfo.Pid
+	trans.CreateTime = tools.GetCurrntTimeStr()
+	trans.UpdateTime = tools.GetCurrntTimeStr()
+	_, err = trans.Create()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	//重新计算可提现金额
+	var orderAmount mysql.Order
+	var wallet mysql.Wallet
+	var trans2 mysql.TransRecords
+	orderAmount.OpenId = inData.OpenId
+	orderWallet, _ := orderAmount.GetAvailableAmount()
+	//总金额减去提现金额
+	trans2.OpenID = inData.OpenId
+	trans2.Pid = pidInfo.Pid
+	trans.PidStatus = inData.PidStatus //拼多多 订单
+
+	transInfo, err := trans.GetTrans()
+	if err != nil && err.Error() != "record not found" {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	//更新钱包  钱包总和为 123级总和减去提现总额
+	wallet.AvailableAmount = orderWallet.Amount.Add(orderWallet.Amount1.Add(orderWallet.Amount2)).Sub(transInfo.Amount)
+	wallet.OpenID = inData.OpenId
+	wallet.Pid = pidInfo.Pid
+	wallet.UpdateAvailable()
+
+	app.OK(c, nil, app.Success)
+
+}

+ 61 - 0
apis/user/user.trans.get.go

@@ -0,0 +1,61 @@
+package user
+
+import (
+	"duoduo/models/mysql"
+	"duoduo/models/user"
+	"duoduo/tools/app"
+
+	"github.com/gin-gonic/gin"
+)
+
+func TransGet(c *gin.Context) {
+	var inData user.TransGetInput
+	var outData user.TransGetOutput
+	var trans mysql.TransRecords
+	var pid mysql.Pid
+	var wallet mysql.Wallet
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	pid.OpenID = inData.OpenId
+	pid.PidStatus = inData.PidStatus
+	pidInfo, err := pid.Get()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	wallet.OpenID = inData.OpenId
+	wallet.Pid = pidInfo.Pid
+
+	//可用余额
+	walletInfo, err := wallet.GetWallet()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	//审核中金额
+	trans.OpenID = inData.OpenId
+	trans.Pid = pidInfo.Pid
+	trans.PidStatus = inData.PidStatus
+	trans.TransStatus = 1 //审核中金额
+	transInfo, err := trans.GetTransSum()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	outData.Wallet = walletInfo
+	outData.ReviewAmount = transInfo.Amount
+	trans.PidStatus = inData.PidStatus
+	trans.TransStatus = 3 //审核成功
+	transInfo, err = trans.GetTransSum()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	outData.CompletedAmount = transInfo.Amount
+	app.OK(c, outData, app.Success)
+}

+ 55 - 0
apis/user/user.trans.list.go

@@ -0,0 +1,55 @@
+package user
+
+import (
+	"duoduo/models/mysql"
+	"duoduo/models/user"
+	"duoduo/tools"
+	"duoduo/tools/app"
+
+	"github.com/gin-gonic/gin"
+)
+
+func TransList(c *gin.Context) {
+	var inData user.TransListInput
+	var trans mysql.TransRecords
+
+	var pageSize = 10
+	var pageIndex = 1
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+
+	trans.PidStatus = inData.PidStatus
+	trans.OpenID = inData.OpenId
+	transVal, count, err := trans.GetTransList(pageSize, pageIndex)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	for i := 0; i < len(transVal); i++ {
+		var userVal mysql.User
+		userVal.OpenID = transVal[i].OpenID
+		userInfo, _ := userVal.Get()
+		transVal[i].CreateTime = tools.GetTimestamp(transVal[i].CreateTime)
+		if userInfo.WxPay != "" {
+			transVal[i].Pay = userInfo.WxPay
+			transVal[i].PayName = "微信支付"
+		} else if userInfo.AliPay != "" {
+			transVal[i].Pay = userInfo.AliPay
+			transVal[i].PayName = "支付宝"
+		}
+		transVal[i].UserId = userInfo.Id
+	}
+	app.PageOK(c, transVal, count, pageIndex, pageSize, app.Success)
+
+}

+ 76 - 0
apis/user/user.trans.update.go

@@ -0,0 +1,76 @@
+package user
+
+import (
+	"duoduo/models/mysql"
+	"duoduo/models/user"
+	"duoduo/tools/app"
+
+	"github.com/gin-gonic/gin"
+)
+
+//更新状态发放提现
+func TransUpdate(c *gin.Context) {
+	var inData user.TransUpdateInput
+	var trans mysql.TransRecords
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	trans.TransStatus = inData.TransStatus
+	trans.PidStatus = inData.PidStatus
+	trans.PayName = inData.PayName
+	trans.UserId = inData.UserId
+	trans.Pay = inData.Pay
+	_, err = trans.Update(inData.Id)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	//已体现总金额 = 提现记录求和
+
+	trans.Pid = inData.Pid
+	trans.OpenID = inData.OpenId
+	transAmount, err := trans.GetTransStatus()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	//更新钱包 审核成功更新 已体现金额   审核失败 更新可提现金额
+
+	if inData.TransStatus == 3 { //已体现
+		var wallet mysql.Wallet
+		wallet.WithdrawalAmount = transAmount.Amount
+		wallet.OpenID = inData.OpenId
+		wallet.Pid = inData.Pid
+		wallet.UpdateWithdrawal()
+	} else if inData.TransStatus == 2 { //提现失败
+		//重新计算可提现金额
+		var orderAmount mysql.Order
+		var wallet mysql.Wallet
+		var trans2 mysql.TransRecords
+		orderAmount.OpenId = inData.OpenId
+		orderWallet, _ := orderAmount.GetAvailableAmount()
+		//总金额减去提现金额
+		trans2.OpenID = inData.OpenId
+		trans2.Pid = inData.Pid
+		trans.PidStatus = inData.PidStatus //拼多多 订单
+
+		transInfo, err := trans.GetTrans()
+		if err != nil && err.Error() != "record not found" {
+			app.Error(c, 400, err, err.Error())
+			return
+		}
+
+		//更新钱包  钱包总和为 123级总和减去提现总额
+		wallet.AvailableAmount = orderWallet.Amount.Add(orderWallet.Amount1.Add(orderWallet.Amount2)).Sub(transInfo.Amount)
+		wallet.OpenID = inData.OpenId
+		wallet.Pid = inData.Pid
+		wallet.UpdateAvailable()
+	}
+
+	app.OK(c, nil, app.Success)
+
+}

+ 32 - 0
apis/user/user.update.pay.go

@@ -0,0 +1,32 @@
+package user
+
+import (
+	"duoduo/models/mysql"
+	"duoduo/models/user"
+	"duoduo/tools/app"
+
+	"github.com/gin-gonic/gin"
+)
+
+func UpdatePay(c *gin.Context) {
+	var inData user.UpdatePayInput
+	var userData mysql.User
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	userData.OpenID = inData.OpenId
+	userData.WxPay = inData.WxPay
+	userData.AliPay = inData.AliPay
+
+	_, err = userData.UpdatePay()
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
+}

+ 1 - 1
conf/conf.ini

@@ -4,7 +4,7 @@ client_secret = 1d4d5dd30f665c0ed3b315275f81fe358c3da609
 api_http = https://gw-api.pinduoduo.com/api/router
 [mysql]
 mysql_host = 49.234.19.130
-mysql_name = duoduo-lhf_test
+mysql_name = duoduo-lhf
 mysql_password = Zhangkun0212a@
 mysql_port = 3306
 mysql_username = gogs

+ 56 - 0
models/mysql/admin_trans_records.go

@@ -0,0 +1,56 @@
+package mysql
+
+import (
+	orm "duoduo/database"
+
+	"github.com/shopspring/decimal"
+)
+
+type AdminTransRecords struct {
+	ID         int64           `gorm:"column:id;primary_key;AUTO_INCREMENT" json:"id"`
+	Amount     decimal.Decimal `gorm:"column:amount" json:"amount"`           // 管理员提现金额
+	CreateTime string          `gorm:"column:create_time" json:"create_time"` // 创建时间
+	UpdateTime string          `gorm:"column:update_time" json:"update_time"` // 更新时间
+}
+
+func (t *AdminTransRecords) TableName() string {
+	return "admin_trans_records"
+}
+
+//计算管理员已体现金额
+func (t *AdminTransRecords) GetTrans() (decimal.Decimal, error) {
+	var adminTrans AdminTransRecords
+	err := orm.Eloquent.Select("SUM(amount) as amount").Table(t.TableName()).First(&adminTrans).Error
+
+	if err != nil {
+		return adminTrans.Amount, err
+	}
+
+	return adminTrans.Amount, nil
+
+}
+
+func (t *AdminTransRecords) Create() (AdminTransRecords, error) {
+	var doc AdminTransRecords
+	result := orm.Eloquent.Table(t.TableName()).Create(&t)
+	if result.Error != nil {
+		err := result.Error
+		return doc, err
+	}
+	doc = *t
+	return doc, nil
+}
+
+//list 接口使用
+func (t *AdminTransRecords) GetTransList(pageSize int, pageIndex int) ([]AdminTransRecords, int, error) {
+	var doc []AdminTransRecords
+
+	table := orm.Eloquent.Table(t.TableName())
+
+	var count int
+	if err := table.Select("*").Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}

+ 67 - 0
models/mysql/order.go

@@ -115,6 +115,31 @@ func (o *Order) GetPlatform() (decimal.Decimal, error) {
 	return order.Amount.Add(order1.Amount1.Add(order2.Amount2)), nil
 }
 
+func (o *Order) GetAdminAvailable() (decimal.Decimal, error) {
+	var order Order
+	var order1 Order
+	var order2 Order
+	err := orm.Eloquent.Select("SUM(amount) as amount").Where("order_status = 5 ").Table(o.TableName()).First(&order).Error
+
+	if err != nil {
+		return order.Amount, err
+	}
+
+	err = orm.Eloquent.Select("SUM(amount_1) as amount_1").Where("order_status = 5 and open_id_1 != '' ").Table(o.TableName()).First(&order1).Error
+
+	if err != nil {
+		return order1.Amount1, err
+	}
+
+	err = orm.Eloquent.Select("SUM(amount_2) as amount_2").Where("order_status = 5 and open_id_2 != '' ").Table(o.TableName()).First(&order2).Error
+
+	if err != nil {
+		return order2.Amount2, err
+	}
+
+	return order.Amount.Add(order1.Amount1.Add(order2.Amount2)), nil
+}
+
 func (o *Order) GetAmount() (Wallet, error) {
 	var wallet Wallet
 
@@ -321,3 +346,45 @@ func (o *Order) GetOrderOpenIdList(pageSize int, pageIndex int, status int) ([]O
 	table.Count(&count)
 	return doc, count, nil
 }
+
+//list 查询十分钟内的订单并进行计算
+func (o *Order) GetOrderInfoList() ([]Order, int, error) {
+	var doc []Order
+
+	table := orm.Eloquent.Table(o.TableName())
+
+	table = table.Where("TO_DAYS( NOW( ) ) - TO_DAYS(update_time) >= 1  and order_status = 5")
+
+	var count int
+	if err := table.Select("open_id,p_id,open_id_1,open_id_2").Group("open_id,p_id,open_id_1,open_id_2").Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}
+
+//计算可以提现金额
+func (o *Order) GetAvailableAmount() (Order, error) {
+	var wallet Order
+
+	//收益
+	err := orm.Eloquent.Select("SUM(amount) as amount").Where("order_status = 5 and open_id = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
+
+	if err != nil {
+		return wallet, err
+	}
+	err = orm.Eloquent.Select("SUM(amount_1) as amount_1").Where("order_status = 5 and open_id_1 = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
+
+	if err != nil {
+		return wallet, err
+	}
+
+	err = orm.Eloquent.Select("SUM(amount_2) as amount_2").Where("order_status = 5 and open_id_2 = ? ", o.OpenId).Table(o.TableName()).First(&wallet).Error
+
+	if err != nil {
+		return wallet, err
+	}
+
+	return wallet, nil
+
+}

+ 91 - 0
models/mysql/trans_records.go

@@ -2,6 +2,8 @@ package mysql
 
 import (
 	orm "duoduo/database"
+	"duoduo/tools"
+
 	"github.com/shopspring/decimal"
 )
 
@@ -11,6 +13,12 @@ type TransRecords struct {
 	OpenID      string          `gorm:"column:open_id" json:"openId"`
 	TransStatus int             `gorm:"column:trans_status" json:"transStatus"`
 	UpdateTime  string          `gorm:"column:update_time" json:"updateTime"`
+	Pid         string          `gorm:"column:pid" json:"pid"`
+	PidStatus   int             `gorm:"column:pid_status" json:"pid_status"`
+	Pay         string          `gorm:"column:pay" json:"pay"`
+	UserId      int             `gorm:"column:user_id" json:"userId"`
+	PayName     string          `gorm:"column:pay_name" json:"payName"`
+	Id          int64           `gorm:"column:id" json:"id"`
 }
 
 // TableName sets the insert table name for this struct type
@@ -45,3 +53,86 @@ func (t *TransRecords) GetAmount() (TransRecords, error) {
 	return trans, nil
 
 }
+
+func (t *TransRecords) GetTransNum() int64 {
+	var count int64
+	tableCount := orm.Eloquent.Table(t.TableName()).Where("open_id = ? and trans_status = ?", t.OpenID, t.TransStatus)
+	tableCount.Count(&count)
+	return count
+
+}
+
+func (t *TransRecords) GetTransSum() (TransRecords, error) {
+	var trans TransRecords
+
+	err := orm.Eloquent.Select("SUM(amount) as amount").Where("open_id = ? and trans_status = ? and pid = ? and pid_status = ?", t.OpenID, t.TransStatus, t.Pid, t.PidStatus).Table(t.TableName()).First(&trans).Error
+
+	if err != nil {
+		return trans, err
+	}
+	return trans, nil
+}
+
+//
+func (t *TransRecords) GetTrans() (TransRecords, error) {
+	var trans TransRecords
+
+	err := orm.Eloquent.Select("SUM(amount) as amount").Where("open_id = ? and trans_status  in (1,3) and pid = ? and pid_status = ?", t.OpenID, t.Pid, t.PidStatus).Table(t.TableName()).First(&trans).Error
+
+	if err != nil {
+		return trans, err
+	}
+
+	return trans, nil
+
+}
+
+//已发放金额求和
+func (t *TransRecords) GetTransStatus() (TransRecords, error) {
+	var trans TransRecords
+
+	err := orm.Eloquent.Select("SUM(amount) as amount").Where("open_id = ? and trans_status  = 3 and pid = ? and pid_status = ?", t.OpenID, t.Pid, t.PidStatus).Table(t.TableName()).First(&trans).Error
+
+	if err != nil {
+		return trans, err
+	}
+
+	return trans, nil
+
+}
+
+func (t *TransRecords) Update(id int) (update TransRecords, err error) {
+
+	if err := orm.Eloquent.Table(t.TableName()).Model(&update).Where("id = ? ", id).Updates(
+		map[string]interface{}{
+			"trans_status": t.TransStatus,
+			"pay":          t.Pay,
+			"pay_name":     t.PayName,
+			"user_id":      t.UserId,
+			"update_time":  tools.GetCurrntTimeStr()}).Error; err != nil {
+		return update, err
+	}
+
+	return update, nil
+}
+
+//list 接口使用
+func (t *TransRecords) GetTransList(pageSize int, pageIndex int) ([]TransRecords, int, error) {
+	var doc []TransRecords
+
+	table := orm.Eloquent.Table(t.TableName())
+
+	if t.OpenID != "" {
+		table = table.Where("open_id = ?  ", t.OpenID)
+	}
+	if t.PidStatus != 0 {
+		table = table.Where("pid_status = ?  ", t.PidStatus)
+	}
+
+	var count int
+	if err := table.Select("*").Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}

+ 20 - 3
models/mysql/user.go

@@ -16,7 +16,9 @@ type User struct {
 	AvatarUrl  string `gorm:"column:avatar_url" json:"avatarUrl"`
 	OpenIdOne  string `gorm:"column:open_id_1" json:"openIdOne"`
 	OpenIdTwo  string `gorm:"column:open_id_2" json:"openIdTwo"`
-	Admin      int    `gorm:"column:admin" json:"admin"` //1-管理员
+	Admin      int    `gorm:"column:admin" json:"admin"`    //1-管理员
+	AliPay     string `gorm:"column:ali_pay" json:"aliPay"` //
+	WxPay      string `gorm:"column:wx_pay" json:"wxPay"`
 }
 
 type UserName struct {
@@ -30,7 +32,9 @@ type UserName struct {
 	OpenIdOne  string `gorm:"column:open_id_1" json:"openIdOne"`
 	OpenIdTwo  string `gorm:"column:open_id_2" json:"openIdTwo"`
 	Id         int    `gorm:"column:id" json:"id"`
-	Admin      int    `gorm:"column:admin" json:"admin"` //1-管理员
+	Admin      int    `gorm:"column:admin" json:"admin"`    //1-管理员
+	AliPay     string `gorm:"column:ali_pay" json:"aliPay"` //
+	WxPay      string `gorm:"column:wx_pay" json:"wxPay"`
 }
 
 // TableName sets the insert table name for this struct type
@@ -56,7 +60,7 @@ func (u *User) GetTotal() (int, error) {
 
 func (u *User) Get() (UserName, error) {
 	var doc UserName
-	err := orm.Eloquent.Select("id,pid,nick_name,avatar_url,open_id_1,open_id_2,admin").Where("open_id = ? ", u.OpenID).Table(u.TableName()).First(&doc).Error
+	err := orm.Eloquent.Select("id,pid,nick_name,avatar_url,open_id_1,open_id_2,admin,wx_pay,ali_pay").Where("open_id = ? ", u.OpenID).Table(u.TableName()).First(&doc).Error
 	if err != nil {
 		return doc, err
 	}
@@ -100,6 +104,19 @@ func (u *User) UpdateName() (update User, err error) {
 	return update, nil
 }
 
+func (u *User) UpdatePay() (update User, err error) {
+
+	if err := orm.Eloquent.Table(u.TableName()).Model(&update).Where("open_id = ? ", u.OpenID).Updates(
+		map[string]interface{}{
+			"ali_pay":     u.AliPay,
+			"wx_pay":      u.WxPay,
+			"update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
+		return update, err
+	}
+
+	return update, nil
+}
+
 //list 接口使用
 func (u *User) GetOrderOpenIdList(pageSize int, pageIndex int, status int) ([]UserName, int, error) {
 	var doc []UserName

+ 39 - 2
models/mysql/wallet.go

@@ -3,6 +3,7 @@ package mysql
 import (
 	orm "duoduo/database"
 	"duoduo/tools"
+
 	"github.com/shopspring/decimal"
 )
 
@@ -51,8 +52,8 @@ func (w *Wallet) UpdateAll() (update Wallet, err error) {
 
 	if err := orm.Eloquent.Table(w.TableName()).Model(&update).Where("open_id = ? and pid = ?", w.OpenID, w.Pid).Updates(
 		map[string]interface{}{
-			"total_amount":      w.TotalAmount,
-			"available_amount":  w.AvailableAmount,
+			"total_amount": w.TotalAmount,
+			//"available_amount":  w.AvailableAmount,
 			"today_amount":      w.TodayAmount,
 			"yesterday_amount":  w.YesterdayAmount,
 			"lately_amount":     w.LatelyAmount,
@@ -77,3 +78,39 @@ func (w *Wallet) Get() (Wallet, error) {
 	return doc, nil
 
 }
+
+func (w *Wallet) GetWallet() (Wallet, error) {
+	var doc Wallet
+
+	err := orm.Eloquent.Select("*").Where("open_id = ? and pid = ? ", w.OpenID, w.Pid).Table(w.TableName()).Order("id desc").Find(&doc).Error
+
+	if err != nil {
+		return doc, err
+	}
+	return doc, nil
+
+}
+
+func (w *Wallet) UpdateAvailable() (update Wallet, err error) {
+
+	if err := orm.Eloquent.Table(w.TableName()).Model(&update).Where("open_id = ? and pid = ?", w.OpenID, w.Pid).Updates(
+		map[string]interface{}{
+			"available_amount": w.AvailableAmount,
+			"update_time":      tools.GetCurrntTimeStr()}).Error; err != nil {
+		return update, err
+	}
+
+	return update, nil
+}
+
+func (w *Wallet) UpdateWithdrawal() (update Wallet, err error) {
+
+	if err := orm.Eloquent.Table(w.TableName()).Model(&update).Where("open_id = ? and pid = ?", w.OpenID, w.Pid).Updates(
+		map[string]interface{}{
+			"withdrawal_amount": w.WithdrawalAmount,
+			"update_time":       tools.GetCurrntTimeStr()}).Error; err != nil {
+		return update, err
+	}
+
+	return update, nil
+}

+ 7 - 0
models/user/admin.amount.go

@@ -0,0 +1,7 @@
+package user
+
+type AdminAmountRequest struct {
+}
+
+type AdminAmountResponse struct {
+}

+ 6 - 0
models/user/admin.amount.list.go

@@ -0,0 +1,6 @@
+package user
+
+type AdminAmountListRequest struct {
+	PageSize  int `json:"pageSize"`
+	PageIndex int `json:"pageIndex"`
+}

+ 2 - 0
models/user/admin.order.amount.go

@@ -13,4 +13,6 @@ type AdminOrderAmountResponse struct {
 	PlatformAmount    decimal.Decimal `json:"platformAmount"`
 	AdminAmountSel    decimal.Decimal `json:"adminAmountSel"`
 	PlatformAmountSel decimal.Decimal `json:"platformAmountSel"`
+	AvailableAmount   decimal.Decimal `json:"availableAmount"`  //平台待结算金额--管理员可提现金额
+	WithdrawalAmount  decimal.Decimal `json:"withdrawalAmount"` //平台已结算金额
 }

+ 12 - 0
models/user/user.trans.create.go

@@ -0,0 +1,12 @@
+package user
+
+import "github.com/shopspring/decimal"
+
+type TransCreateInput struct {
+	Amount    decimal.Decimal `json:"amount"`
+	OpenId    string          `json:"openId"`
+	PidStatus int             `json:"pidStatus"`
+}
+
+type TransCreateOutput struct {
+}

+ 18 - 0
models/user/user.trans.get.go

@@ -0,0 +1,18 @@
+package user
+
+import (
+	"duoduo/models/mysql"
+
+	"github.com/shopspring/decimal"
+)
+
+type TransGetInput struct {
+	OpenId    string `json:"openId"`
+	PidStatus int    `json:"pidStatus"`
+}
+
+type TransGetOutput struct {
+	Wallet          mysql.Wallet    `json:"wallet"`
+	ReviewAmount    decimal.Decimal `json:"reviewAmount"`    //审核中金额
+	CompletedAmount decimal.Decimal `json:"completedAmount"` //审核完成金额
+}

+ 8 - 0
models/user/user.trans.list.go

@@ -0,0 +1,8 @@
+package user
+
+type TransListInput struct {
+	OpenId    string `json:"openId"`
+	PidStatus int    `json:"pidStatus"`
+	PageSize  int    `json:"pageSize"`
+	PageIndex int    `json:"pageIndex"`
+}

+ 12 - 0
models/user/user.trans.update.go

@@ -0,0 +1,12 @@
+package user
+
+type TransUpdateInput struct {
+	Id          int    `json:"id"`
+	PidStatus   int    `json:"pidStatus"`
+	Pay         string `json:"pay"`
+	UserId      int    `json:"userId"`
+	PayName     string `json:"payName"`
+	Pid         string `json:"pid"`
+	OpenId      string `json:"openId"`
+	TransStatus int    `json:"transStatus"`
+}

+ 7 - 0
models/user/user.update.pay.go

@@ -0,0 +1,7 @@
+package user
+
+type UpdatePayInput struct {
+	OpenId string `json:"openId"`
+	WxPay  string `json:"wxPay"`
+	AliPay string `json:"aliPay"`
+}

+ 114 - 0
report/available.amount.go

@@ -0,0 +1,114 @@
+package report
+
+import "duoduo/models/mysql"
+
+//定时任务查询数据库
+//计算可体现金额
+//10分钟一次
+
+func AvailableAmount() {
+	var orderInfoList mysql.Order
+
+	orderInfo, _, err := orderInfoList.GetOrderInfoList()
+	if err != nil {
+		return
+	}
+
+	//遍历 计算结算金额  用户钱包重新计算  结款   一级 二级 三级
+	for i := 0; i < len(orderInfo); i++ {
+
+		//一级
+		if orderInfo[i].OpenId != "" && orderInfo[i].PID != "" { //open id 不为0 进行计算并且更新用户钱包
+			var orderAmount mysql.Order
+			var wallet mysql.Wallet
+			var trans mysql.TransRecords
+			orderAmount.OpenId = orderInfo[i].OpenId
+			orderWallet, _ := orderAmount.GetAvailableAmount()
+			//总金额减去提现金额
+			trans.OpenID = orderInfo[i].OpenId
+			trans.Pid = orderInfo[i].PID
+			trans.PidStatus = 1 //拼多多 订单
+
+			transInfo, err := trans.GetTrans()
+			if err != nil && err.Error() != "record not found" {
+				continue
+			}
+
+			//更新钱包  钱包总和为 123级总和减去提现总额
+			wallet.AvailableAmount = orderWallet.Amount.Add(orderWallet.Amount1.Add(orderWallet.Amount2)).Sub(transInfo.Amount)
+			wallet.OpenID = orderInfo[i].OpenId
+			wallet.Pid = orderInfo[i].PID
+			wallet.UpdateAvailable()
+
+		}
+		//二级
+		if orderInfo[i].OpenId1 != "" { //
+			var orderAmount mysql.Order
+			var wallet mysql.Wallet
+			var pid mysql.Pid
+			var trans mysql.TransRecords
+
+			pid.OpenID = orderInfo[i].OpenId1
+			pid.PidStatus = 1 //拼多多用户
+			pidInfo, err := pid.Get()
+			if err != nil {
+				continue
+			}
+
+			trans.OpenID = orderInfo[i].OpenId1
+			trans.Pid = pidInfo.Pid
+			trans.PidStatus = 1 //拼多多 订单
+
+			transInfo, err := trans.GetTrans()
+			if err != nil && err.Error() != "record not found" {
+				continue
+			}
+
+			orderAmount.OpenId = orderInfo[i].OpenId1
+			orderWallet, _ := orderAmount.GetAvailableAmount()
+
+			//更新钱包
+			wallet.AvailableAmount = orderWallet.Amount.Add(orderWallet.Amount1.Add(orderWallet.Amount2)).Sub(transInfo.Amount)
+			wallet.OpenID = orderInfo[i].OpenId1
+			wallet.Pid = pidInfo.Pid
+			wallet.UpdateAvailable()
+
+		}
+
+		//三级
+		if orderInfo[i].OpenId2 != "" { //
+			var orderAmount mysql.Order
+			var wallet mysql.Wallet
+			var pid mysql.Pid
+			var trans mysql.TransRecords
+
+			pid.OpenID = orderInfo[i].OpenId2
+			pid.PidStatus = 1 //拼多多用户
+			pidInfo, err := pid.Get()
+			if err != nil {
+				continue
+			}
+
+			trans.OpenID = orderInfo[i].OpenId2
+			trans.Pid = pidInfo.Pid
+			trans.PidStatus = 1 //拼多多 订单
+
+			transInfo, err := trans.GetTrans()
+			if err != nil && err.Error() != "record not found" {
+				continue
+			}
+
+			orderAmount.OpenId = orderInfo[i].OpenId2
+			orderWallet, _ := orderAmount.GetAvailableAmount()
+
+			//更新钱包
+			wallet.AvailableAmount = orderWallet.Amount.Add(orderWallet.Amount1.Add(orderWallet.Amount2)).Sub(transInfo.Amount)
+			wallet.OpenID = orderInfo[i].OpenId2
+			wallet.Pid = pidInfo.Pid
+			wallet.UpdateAvailable()
+
+		}
+
+	}
+
+}

+ 3 - 1
report/report.go

@@ -6,10 +6,12 @@ const (
 	cronSettDateCutoff = "0 0 1 * * *"   //每天凌晨1:00:00
 	cronRunStart       = "0 0 17 * * *"  //凌晨一点
 	cronMinuteStart    = "0 */1 * * * *" //每分钟
+	cronMinuteStart2   = "0 */2 * * * *" //每分钟
 )
 
 func SysCronStart() {
 	c := cron.New()
-	c.AddFunc(cronMinuteStart, OrderList) //每分钟同步一下订单
+	c.AddFunc(cronMinuteStart, OrderList)        //每分钟同步一下订单
+	c.AddFunc(cronMinuteStart2, AvailableAmount) //同步结算金额
 	c.Start()
 }

+ 6 - 0
tools/string.go

@@ -17,6 +17,12 @@ func StringToInt(e string) (int, error) {
 	return strconv.Atoi(e)
 }
 
+func GetTimestamp(change string) string {
+	t, _ := time.Parse(time.RFC3339, change)
+	timeUint := t.In(time.Local).Format("2006-01-02 15:04:05")
+	return timeUint
+}
+
 func GetCurrntTimeStr() string {
 
 	NowTimeZone := time.FixedZone("CST", 8*3600)