diff --git a/internal/api/manage/withdrawals/update.go b/internal/api/manage/withdrawals/update.go index 1b01887..7d71199 100755 --- a/internal/api/manage/withdrawals/update.go +++ b/internal/api/manage/withdrawals/update.go @@ -5,6 +5,7 @@ import ( "path/filepath" "recook/internal/back" "recook/internal/dbc" + "recook/internal/model/order" "recook/internal/model/user" "recook/internal/static_path" user2 "recook/internal/v2/model/recook/user" @@ -89,18 +90,6 @@ func UploadExcel(c *gin.Context) { return } dbc.DB.Find(&d) - //fmt.Println("----------------------") - //fmt.Println(d.UserId) - - //这边将提现的金额退回原路,修改提现记录的接口,新增资金变动的接口 - //walletList := user.WalletBalanceList{ - // UserID: d.UserId, - // IncomeType: 4, // 退款 - // Amount: decimal.NewFromFloat(d.Amount), - // Style: d.FailReason, - // Comment: "打款失败", - //} - //dbc.DB.Create(&walletList) recookUserWalletBalanceListModel := &user2.RecookUserWalletBalanceListModel{ UserId: d.UserId, IncomeType: user2.RecookUserWalletBalanceListIncomeTypeWithdrawFail, // 提现失败 @@ -116,6 +105,9 @@ func UploadExcel(c *gin.Context) { return } + // 更新profit_id 的记录 + tx.Table((&order.Profit{}).TableName()).Where("is_enterprise = 0").Where("deal_id = ?", id).Update("deal_id = ?", 0) + //退回到余额 var wallet user.Wallet tx.First(&wallet, "user_id = ?", d.UserId) diff --git a/internal/api/mobile/wallet/withdraw.go b/internal/api/mobile/wallet/withdraw.go index 28977f3..8786104 100644 --- a/internal/api/mobile/wallet/withdraw.go +++ b/internal/api/mobile/wallet/withdraw.go @@ -3,6 +3,7 @@ package wallet import ( "recook/internal/back" "recook/internal/dbc" + "recook/internal/model/order" "recook/internal/model/user" "recook/internal/service/comFunc" user2 "recook/internal/v2/model/recook/user" @@ -89,22 +90,44 @@ func SubmitWithdraw(c *gin.Context) { } else { t = user.BankType } + if userInfo.IsEnterprise { + back.Fail(c, "企业用户无法提现") + return + } tx := dbc.DB.Begin() - amount := decimal.NewFromFloat(p.Amount) - fee := amount.Div(decimal.NewFromFloat(1.13)).Mul(decimal.NewFromFloat(0.13)).Mul(decimal.NewFromFloat(1.12)) - err := tx.Create(&user.Withdraw{ + + var record []order.Profit + tx.Where("user_id = ?", p.UserID).Where("deal = 0").Where("status = 2").Find(&record) + + // 普通用户 + rate := decimal.NewFromFloat(0.13) + balance := decimal.Zero + fee := decimal.Zero + for _, v := range record { + balance = balance.Add(v.Income) + fee = fee.Add(v.Income.Mul(rate).Round(2)) + } + if balance.IsZero() { + back.Fail(c, "余额不足") + tx.Rollback() + return + } + + amount, _ := balance.Float64() + withdrawl := &user.Withdraw{ UserId: p.UserID, UserName: userInfo.RealName, Type: t, - Amount: p.Amount, + Amount: amount, Alipay: p.Alipay, BankAccount: p.BankAccount, BankName: p.BankName, AuditTime: formatime.NewSecondFrom(getNextTenOrTwentyFive()), Status: user.UndoneWithdrawStatus, TaxFee: fee, - ActualAmount: amount.Sub(fee), - }).Error + ActualAmount: balance.Sub(fee), + } + err := tx.Create(withdrawl).Error if err != nil { tx.Rollback() @@ -115,7 +138,7 @@ func SubmitWithdraw(c *gin.Context) { recookUserWalletBalanceListModel := &user2.RecookUserWalletBalanceListModel{ UserId: p.UserID, IncomeType: user2.RecookUserWalletBalanceListIncomeTypeWithdraw, // 提现 - Amount: decimal.NewFromFloat(p.Amount), + Amount: balance, Title: "卡号:" + p.BankAccount + p.Alipay, Comment: "提现", } @@ -126,8 +149,17 @@ func SubmitWithdraw(c *gin.Context) { tx.Rollback() return } + if err := tx.Table((&order.Profit{}).TableName()). + Where("user_id = ?", p.UserID). + Where("status = 2"). + Where("deal_id = 0"). + Update("deal_id = ?", withdrawl.ID).Error; err != nil { + tx.Rollback() + back.Fail(c, "提现错误") + return + } - userWallet.Balance = userWallet.Balance.Sub(decimal.NewFromFloat(p.Amount)) + userWallet.Balance = userWallet.Balance.Sub(balance) err = tx.Save(&userWallet).Error if err != nil { tx.Rollback() diff --git a/internal/model/order/jyy.go b/internal/model/order/jyy.go index b398ec3..f7cf17c 100644 --- a/internal/model/order/jyy.go +++ b/internal/model/order/jyy.go @@ -6,15 +6,17 @@ import ( ) type Profit struct { - ID int `json:"id"` - OrderID uint `json:"order_id"` - Base decimal.Decimal `json:"base"` - Type IncomeType `json:"type"` - Income decimal.Decimal `json:"income"` - UserID uint `json:"user_id"` - CreatedAt formatime.Second `json:"created_at"` - Status int `json:"status"` - Version int `json:"-"` + ID int `json:"id"` + OrderID uint `json:"order_id"` + Base decimal.Decimal `json:"base"` + Type IncomeType `json:"type"` + Income decimal.Decimal `json:"income"` + UserID uint `json:"user_id"` + CreatedAt formatime.Second `json:"created_at"` + Status int `json:"status"` + Version int `json:"-"` + DealID int `json:"-"` + IsEnterprise bool `json:"is_enterprise"` } func (o Profit) TableName() string { diff --git a/internal/model/user/wallet_balance_list.go b/internal/model/user/wallet_balance_list.go index 3728e01..9abf1ab 100755 --- a/internal/model/user/wallet_balance_list.go +++ b/internal/model/user/wallet_balance_list.go @@ -17,6 +17,7 @@ type WalletBalanceList struct { OrderTime formatime.Second `gorm:"column:order_time" json:"orderTime,omitempty"` CreatedAt formatime.Second `gorm:"column:created_at" json:"createdAt,omitempty"` ProfitID uint `json:"profit_id"` + ApplyID int `json:"apply_id"` } func (r *WalletBalanceList) TableName() string { diff --git a/internal/v2/logic/app/jyy/jyy.go b/internal/v2/logic/app/jyy/jyy.go index e5f8915..5b9de11 100644 --- a/internal/v2/logic/app/jyy/jyy.go +++ b/internal/v2/logic/app/jyy/jyy.go @@ -723,28 +723,31 @@ type Data struct { } func (o logic) CompanyAllAmount(id uint) (res Data) { - var record []user.RecookUserWalletBalanceListModel - mysql.Db.Where("user_id = ?", id).Where("statsu = 0").Find(&record) + var u user2.Information + mysql.Db.First(&u, "id = ?", id) + var record []order.Profit + mysql.Db.Where("user_id = ?", id).Where("status = 2").Where("deal_id = 0").Find(&record) var enterprise company.Info mysql.Db.First(&enterprise, "user_id = ?", id) - if enterprise.ID == 0 { - return - } - rate := decimal.NewFromFloat(0.13) - if enterprise.TaxType == "一般纳税人" { - rate = decimal.NewFromFloat(0.07) - } - for _, v := range record { - res.Balance = res.Balance.Add(v.Amount) - if v.IncomeType > 10 { - // 收益算税 - res.TaxAmount = res.TaxAmount.Add(v.Amount. - Div(decimal.NewFromFloat(1.13)).Mul(rate). - Mul(decimal.NewFromFloat(1.12)).Round(2)) + if !u.IsEnterprise { + // 普通用户 + rate := decimal.NewFromFloat(0.13) + for _, v := range record { + res.Balance = res.Balance.Add(v.Income) + res.TaxAmount = v.Income.Mul(rate).Round(2) + } + res.ActualAmount = res.Balance.Sub(res.TaxAmount) + } else { + rate := decimal.NewFromFloat(0.13) + if enterprise.TaxType == "一般纳税人" { + rate = decimal.NewFromFloat(0.07) + } + for _, v := range record { + res.Balance = res.Balance.Add(v.Income) + res.TaxAmount = res.TaxAmount. + Add(v.Income.Div(decimal.NewFromFloat(1.13)).Mul(rate).Mul(decimal.NewFromFloat(1.12)).Round(2)) } + res.ActualAmount = res.Balance.Sub(res.TaxAmount) } - res.ActualAmount = res.Balance.Sub(res.TaxAmount) - // res.ActualAmount = res.Withdrawal.Mul(decimal.NewFromFloat(1.06)).Round(2) - return } diff --git a/internal/v2/logic/manage/jyy/fee.go b/internal/v2/logic/manage/jyy/fee.go index 098e45c..5b76215 100644 --- a/internal/v2/logic/manage/jyy/fee.go +++ b/internal/v2/logic/manage/jyy/fee.go @@ -30,7 +30,7 @@ func (o logic) SetFee(args ArgsLogisticsFee) error { }).RowsAffected; row == 0 { return errors.New("更新失败") } - message := "已录入订单物流费用" + message := "物流费已确认, 请立即支付" if e := tx.Create(&jyy.AppUserMessage{ UserID: int(od.UserID), Message: message, @@ -40,13 +40,12 @@ func (o logic) SetFee(args ArgsLogisticsFee) error { }).Error; e != nil { return e } - // 确认收益 + var ju jpush.JPush mysql.Db.First(&ju, "user_id = ?", od.UserID) if ju.RegistrationId != "" { - client := jpush2.GetClient() - client.PushMsgWithRegister(ju.RegistrationId, "收益到账", message) + client.PushMsgWithRegister(ju.RegistrationId, "物流费确认", message) } return nil }) diff --git a/internal/v2/router/app.go b/internal/v2/router/app.go index 9e97a55..4286ad1 100644 --- a/internal/v2/router/app.go +++ b/internal/v2/router/app.go @@ -299,7 +299,7 @@ func routerApp(appRouter *gin.RouterGroup) { companyController.POST("info", proxy.CompanyInfo) companyController.POST("apply/list", proxy.CompanyApplyList) // 提现列表 companyController.POST("apply/all_amount", proxy.CompanyAllAmount) - companyController.POST("apply", proxy.CompanyApply) // 提现 + // companyController.POST("apply", proxy.CompanyApply) // 提现 companyController.POST("deposit", proxy.CompanyDespoit) // 充值 companyController.POST("deposit/list", proxy.DespoitInfo) // 充值列表