This commit is contained in:
邹宗楠
2022-07-08 18:23:25 +08:00
parent 846e548d2c
commit b67d3556cf
9 changed files with 431 additions and 66 deletions

View File

@@ -0,0 +1,186 @@
package q_bida
import (
"errors"
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"time"
)
// AddUserWithdrawal 用户发起提现操作
func AddUserWithdrawal(ctx *jxcontext.Context, param *model.AddWithdrawalRecordReq) error {
// 校验用户账户余额是否足够
userBill, err := dao.GetUserBill(dao.GetDB(), ctx.GetUserID(), "")
if err != nil {
return err
}
if userBill.AccountBalance < param.WithdrawalMoney {
return errors.New("账户余额小于可支付余额,请重新申请")
}
//1元以下免费以上收取对应城市手续费
place, err := dao.GetPlaceByCode(dao.GetDB(), param.CityCode)
if err != nil || place == nil {
return fmt.Errorf("未找到该城市code%v", param.CityCode)
}
payOrder := &model.WithdrawalRecord{
OrderID: "",
UserID: ctx.GetUserID(),
WithdrawalMoney: param.WithdrawalMoney,
ServiceCharge: 0,
PayMoney: 0,
AlipayAccount: param.AlipayAccount,
AlipayName: param.AlipayName,
AlipayOrderId: "",
OrderStatus: model.WithdrawalWaitRecord,
PayTime: time.Now(),
Remark: "",
Lng: param.Lng,
Lat: param.Lat,
CityCode: param.CityCode,
DistrictCode: param.DistrictCode,
}
dao.WrapAddIDCULDEntity(payOrder, ctx.GetUserName())
payOrder.OrderID = fmt.Sprintf("%d", time.Now().Unix()) + ctx.GetUserID()[:8]
// 核算手续费
if param.WithdrawalMoney < 100 {
payOrder.ServiceCharge = 0
payOrder.PayMoney = param.WithdrawalMoney
} else {
payOrder.ServiceCharge = utils.Float64TwoInt(float64(param.WithdrawalMoney) * (float64(place.DividePercentage) / float64(100)))
payOrder.PayMoney = param.WithdrawalMoney - payOrder.ServiceCharge
}
return dao.CreateEntity(dao.GetDB(), payOrder)
}
// DeleteOrder 删除申请订单
func DeleteOrder(userId string, id int) error {
order := model.WithdrawalRecord{}
if err := dao.GetRow(dao.GetDB(), &order, `SELECT * FROM withdrawal_record WHERE id = ? AND user_id = ?`, []interface{}{id, userId}...); err != nil {
return err
}
order.DeletedAt = time.Now()
if _, err := dao.UpdateEntity(dao.GetDB(), &order, "DeletedAt"); err != nil {
return err
}
return nil
}
// GetOrderListByStatus 用户获取申请订单列表
func GetOrderListByStatus(userId string, status, pageSize, pageNum int) (map[string]interface{}, error) {
order := make([]*model.WithdrawalRecord, 0, 0)
params := make([]interface{}, 0, 0)
sql := `SELECT SQL_CALC_FOUND_ROWS * FROM withdrawal_record WHERE user_id = ? AND order_status = ? AND deleted_at = ?`
params = append(params, userId, status, utils.DefaultTimeValue)
sql += " ORDER BY a.created_at DESC"
sql += " LIMIT ? OFFSET ?"
pageSize = jxutils.FormalizePageSize(pageSize)
params = append(params, pageSize, (pageNum-1)*pageSize)
db := dao.GetDB()
tx, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
panic(r)
}
dao.Commit(db, tx)
}()
if err := dao.GetRowsTx(tx, &order, sql, params...); err != nil {
dao.Rollback(db, tx)
return nil, err
}
result := make(map[string]interface{}, 2)
result["data"] = order
result["count"] = dao.GetLastTotalRowCountTx(tx)
return result, nil
}
type OrderListParam struct {
PageSize int `json:"pageSize"`
PageNum int `json:"pageNum"`
UserId string `json:"userId"`
UserName string `json:"userName"`
OrderId string `json:"orderId"`
Phone string `json:"phone"`
OrderStatus int `json:"orderStatus"`
StartTime string `json:"startTime"`
EndTime string `json:"endTime"`
}
type WithdrawalListRes struct {
model.WithdrawalRecord
Name string `json:"name"`
Mobile string `json:"mobile"`
AccountBalance int `json:"accountBalance"`
}
// GetUserWithdrawalList 管理系统获取提现申请列表
func GetUserWithdrawalList(param *OrderListParam) ([]*WithdrawalListRes, int, error) {
sql := `
SELECT SQL_CALC_FOUND_ROWS w.* ,u.name,u.mobile,b.account_balance
FROM withdrawal_record w
LEFT JOIN user u ON w.user_id = u.user_id
LEFT JOIN user_bill b ON w.user_id = b.user_id
WHERE 1=1 AND w.deleted_at = ?
`
sqlParam := make([]interface{}, 0, 0)
sqlParam = append(sqlParam, utils.DefaultTimeValue)
result := make([]*WithdrawalListRes, 0, 0)
db := dao.GetDB()
tx, _ := dao.Begin(db)
defer func() {
if r := recover(); r != nil {
panic(r)
}
dao.Commit(db, tx)
}()
if param.OrderId != "" {
sql += ` AND w.order_id LIKE ? ORDER BY a.created_at DESC LIMIT ? OFFSET ?`
sqlParam = append(sqlParam, "%"+param.OrderId+"%", param.PageSize, (param.PageNum-1)*param.PageSize)
if err := dao.GetRowsTx(tx, &result, sql, sqlParam...); err != nil {
return nil, 0, err
}
return result, dao.GetLastTotalRowCountTx(tx), nil
}
if param.UserId != "" {
sql += ` AND w.user_id LIKE ?`
sqlParam = append(sqlParam, "%"+param.UserId+"%")
}
if param.UserName != "" {
sql += ` AND u.name LIKE ?`
sqlParam = append(sqlParam, param.UserName)
}
if param.Phone != "" {
sql += ` AND u.mobile = ?`
sqlParam = append(sqlParam, param.Phone)
}
if param.OrderStatus != 0 {
sql += ` AND w.order_status = ?`
sqlParam = append(sqlParam, param.OrderStatus)
}
if param.StartTime != "" {
sql += ` AND w.created_at >= ? `
sqlParam = append(sqlParam, utils.Str2TimeWithDefault(param.StartTime, utils.DefaultTimeValue))
}
if param.EndTime != "" {
sql += ` AND w.created_at < ? `
sqlParam = append(sqlParam, utils.Str2TimeWithDefault(param.EndTime, utils.DefaultTimeValue))
}
sql += ` ORDER BY a.created_at DESC LIMIT ? OFFSET ?`
sqlParam = append(sqlParam, param.PageSize, (param.PageNum-1)*param.PageSize)
if err := dao.GetRowsTx(tx, &result, sql, sqlParam...); err != nil {
return nil, 0, err
}
return result, dao.GetLastTotalRowCountTx(tx), nil
}