|
- package financial_center
-
- import (
- "applet/app/db"
- "applet/app/e"
- md "applet/app/md/financial_center"
- svc "applet/app/svc/financial_center"
- "applet/app/utils"
- "code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
- "code.fnuoos.com/EggPlanet/egg_models.git/src/model"
- "code.fnuoos.com/EggPlanet/egg_system_rules.git/enum"
- md3 "code.fnuoos.com/EggPlanet/egg_system_rules.git/md"
- "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule"
- md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md"
- "code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
- "errors"
- "github.com/gin-gonic/gin"
- "github.com/jinzhu/copier"
- "strings"
- "time"
- )
-
- // GetWithdrawSetting
- // @Summary 财务中心-提现-基础设置(获取)
- // @Tags 提现
- // @Description 基础设置(获取)
- // @Accept json
- // @Produce json
- // @param Authorization header string true "验证参数Bearer和token空格拼接"
- // @Success 200 {object} md.GetWithdrawSettingResp "具体数据"
- // @Failure 400 {object} md.Response "具体错误"
- // @Router /api/financialCenter/withdraw/setting [get]
- func GetWithdrawSetting(c *gin.Context) {
-
- // 等级列表
- levelDb := implement.NewUserLevelDb(db.Db)
- levels, err1 := levelDb.UserLevelAllByAsc()
- if err1 != nil {
- e.OutErr(c, e.ERR_DB_ORM, err1.Error())
- return
- }
- levelsList := make([]map[string]interface{}, 0)
- levelsMap := make(map[int]string)
- for _, level := range levels {
- levelsList = append(levelsList, map[string]interface{}{
- "id": level.Id,
- "name": level.LevelName,
- })
- levelsMap[level.Id] = level.LevelName
- }
-
- settingDb := implement.NewFinWithdrawSettingDb(db.Db)
- setting, err := settingDb.FinWithdrawSettingGetOne()
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- // 不存在则初始化
- var emptyNum []string
- if setting == nil {
- now := time.Now()
- frequency := md2.WithdrawFrequencySettingStruct{
- Duration: 1,
- Num: emptyNum,
- }
- withdrawFeeSet := md2.WithdrawFeeSetStruct{
- Kind: 1,
- Value: 0,
- }
- firstWithdrawSet := md2.FirstWithdrawSet{
- IsNeedRealName: 0,
- FirstWithdrawAmountLimit: "",
- }
- frequencyStr := utils.SerializeStr(frequency)
- withdrawFeeSetStr := utils.SerializeStr(withdrawFeeSet)
- firstWithdrawSetStr := utils.SerializeStr(firstWithdrawSet)
- m := model.FinWithdrawSetting{
- FrequencySet: frequencyStr,
- WithdrawType: 1,
- VipLevelLimit: 0,
- IsRealName: 0,
- WithdrawNumsLimit: 0,
- WithdrawAmountLimit: "",
- WithdrawMultipleLimit: "",
- IsSupportDecimalPoint: 0,
- IsAuto: 0,
- IsAutoAmountLimit: "",
- WithdrawTimeInterval: "00:00-00:00",
- WithdrawFeeSet: withdrawFeeSetStr,
- PendingOrdersIsCanApply: 0,
- ConditionIsOpen: 0,
- FirstWithdrawSet: firstWithdrawSetStr,
- Tips: "",
- CreateAt: now.Format("2006-01-02 15:04:05"),
- }
- _, err2 := settingDb.FinWithdrawSettingInsert(&m)
- if err2 != nil {
- e.OutErr(c, e.ERR_DB_ORM, err2.Error())
- return
- }
-
- setting, err = settingDb.FinWithdrawSettingGetOne()
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- }
- var frequency md2.WithdrawFrequencySettingStruct
- var withdrawFeeSet md2.WithdrawFeeSetStruct
- var firstWithdrawSet md2.FirstWithdrawSet
- utils.Unserialize([]byte(setting.FrequencySet), &frequency)
- utils.Unserialize([]byte(setting.WithdrawFeeSet), &withdrawFeeSet)
- utils.Unserialize([]byte(setting.FirstWithdrawSet), &firstWithdrawSet)
- withdrawTimeIntervals := strings.Split(setting.WithdrawTimeInterval, "-")
- withdrawTimeInterval := md2.WithdrawTimeIntervalStruct{
- StartAt: withdrawTimeIntervals[0],
- EndAt: withdrawTimeIntervals[1],
- }
- resp := md.GetWithdrawSettingResp{
- Id: setting.Id,
- FrequencySet: frequency,
- WithdrawType: setting.WithdrawType,
- VipLevelLimit: setting.VipLevelLimit,
- IsRealName: setting.IsRealName,
- WithdrawNumsLimit: setting.WithdrawNumsLimit,
- WithdrawAmountLimit: setting.WithdrawAmountLimit,
- WithdrawMultipleLimit: setting.WithdrawMultipleLimit,
- IsSupportDecimalPoint: setting.IsSupportDecimalPoint,
- IsAuto: setting.IsAuto,
- IsAutoAmountLimit: setting.IsAutoAmountLimit,
- WithdrawTimeInterval: withdrawTimeInterval,
- WithdrawFeeSet: withdrawFeeSet,
- FirstWithdrawSet: firstWithdrawSet,
- PendingOrdersIsCanApply: setting.PendingOrdersIsCanApply,
- ConditionIsOpen: setting.ConditionIsOpen,
- LevelList: levelsList,
- Tips: setting.Tips,
- }
-
- e.OutSuc(c, resp, nil)
- }
-
- // UpdateWithdrawSetting
- // @Summary 财务中心-提现-基础设置(更新)
- // @Tags 提现
- // @Description 基础设置(更新)
- // @Accept json
- // @Produce json
- // @param Authorization header string true "验证参数Bearer和token空格拼接"
- // @Param req body md.UpdateWithdrawSettingReq true "id 必填"
- // @Success 200 {int} "修改数据条数"
- // @Failure 400 {object} md.Response "具体错误"
- // @Router /api/financialCenter/withdraw/updateWithdrawSetting [POST]
- func UpdateWithdrawSetting(c *gin.Context) {
- var req *md.UpdateWithdrawSettingReq
- if err1 := c.ShouldBindJSON(&req); err1 != nil {
- e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error())
- return
- }
- if req.WithdrawTimeInterval.StartAt != "" {
- res := utils.IsTimeFormat(req.WithdrawTimeInterval.StartAt)
- if req.WithdrawTimeInterval.StartAt > "23:59" {
- res = false
- }
- if !res {
- e.OutErr(c, e.ERR_INVALID_ARGS, errors.New("开始时间应为 xx:xx 且不超过 23:59").Error())
- return
- }
- }
- if req.WithdrawTimeInterval.EndAt != "" {
- res := utils.IsTimeFormat(req.WithdrawTimeInterval.EndAt)
- if req.WithdrawTimeInterval.EndAt > "23:59" {
- res = false
- }
- if !res {
- e.OutErr(c, e.ERR_INVALID_ARGS, errors.New("结束时间应为 xx:xx 且不超过 23:59").Error())
- return
- }
- }
-
- frequencyStr := utils.SerializeStr(req.FrequencySet)
- withdrawFeeSetStr := utils.SerializeStr(req.WithdrawFeeSet)
- firstWithdrawSetStr := utils.SerializeStr(req.FirstWithdrawSet)
- var withdrawTimeInterval []string
- withdrawTimeInterval = append(withdrawTimeInterval, req.WithdrawTimeInterval.StartAt)
- withdrawTimeInterval = append(withdrawTimeInterval, req.WithdrawTimeInterval.EndAt)
- withdrawTimeIntervalStr := strings.Join(withdrawTimeInterval, "-")
- m := model.FinWithdrawSetting{
- Id: req.Id,
- FrequencySet: frequencyStr,
- WithdrawType: req.WithdrawType,
- VipLevelLimit: req.VipLevelLimit,
- IsRealName: req.IsRealName,
- WithdrawNumsLimit: req.WithdrawNumsLimit,
- WithdrawAmountLimit: req.WithdrawAmountLimit,
- WithdrawMultipleLimit: req.WithdrawMultipleLimit,
- IsSupportDecimalPoint: req.IsSupportDecimalPoint,
- IsAuto: req.IsAuto,
- IsAutoAmountLimit: req.IsAutoAmountLimit,
- WithdrawTimeInterval: withdrawTimeIntervalStr,
- WithdrawFeeSet: withdrawFeeSetStr,
- PendingOrdersIsCanApply: req.PendingOrdersIsCanApply,
- ConditionIsOpen: req.ConditionIsOpen,
- FirstWithdrawSet: firstWithdrawSetStr,
- Tips: req.Tips,
- }
-
- forceColumns := []string{"withdraw_type", "is_real_name", "withdraw_nums_limit",
- "withdraw_amount_limit", "withdraw_multiple_limit", "is_support_decimal_point",
- "is_auto", "first_withdraw_set", "is_auto_amount_limit", "pending_orders_is_can_apply",
- "condition_is_open",
- }
- settingDb := implement.NewFinWithdrawSettingDb(db.Db)
- affected, err := settingDb.FinWithdrawSettingUpdate(req.Id, &m, forceColumns...)
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- e.OutSuc(c, affected, nil)
- }
-
- // GetWithdrawApplyList
- // @Summary 财务中心-提现-提现申请列表(获取)
- // @Tags 提现
- // @Description 提现申请列表(获取)
- // @Accept json
- // @Produce json
- // @param Authorization header string true "验证参数Bearer和token空格拼接"
- // @Param req body md.GetWithdrawApplyListReq false "筛选条件"
- // @Success 200 {object} md.GetWithdrawApplyListResp "具体数据"
- // @Failure 400 {object} md.Response "具体错误"
- // @Router /api/financialCenter/withdraw/applyList [POST]
- func GetWithdrawApplyList(c *gin.Context) {
- var req *md.GetWithdrawApplyListReq
- if err1 := c.ShouldBindJSON(&req); err1 != nil {
- e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error())
- return
- }
-
- levelDb := implement.NewUserLevelDb(db.Db)
- levels, err1 := levelDb.UserLevelAllByAsc()
- if err1 != nil {
- e.OutErr(c, e.ERR_DB_ORM, err1.Error())
- return
- }
- levelsList := make([]map[string]interface{}, 0)
- levelsMap := make(map[int]string)
- for _, level := range levels {
- levelsList = append(levelsList, map[string]interface{}{
- "id": level.Id,
- "name": level.LevelName,
- })
- levelsMap[level.Id] = level.LevelName
- }
-
- tagDb := implement.NewUserTagDb(db.Db)
- tags, err2 := tagDb.UserTagAllByAsc()
- if err2 != nil {
- e.OutErr(c, e.ERR_DB_ORM, err2.Error())
- return
- }
- tagsList := make([]map[string]interface{}, 0)
- tagsMap := make(map[int]string)
- for _, tag := range tags {
- tagsList = append(tagsList, map[string]interface{}{
- "id": tag.Id,
- "name": tag.TagName,
- })
- tagsMap[tag.Id] = tag.TagName
- }
-
- applies, total, err3 := svc.WithDrawManagementGetApply(db.Db, req)
- if err3 != nil {
- e.OutErr(c, e.ERR_DB_ORM, err3.Error())
- return
- }
-
- list := make([]md.GetWithdrawApplyListNode, len(*applies))
- parentIDs := make([]int64, len(*applies))
- UserIDs := make([]int64, len(*applies))
- for _, apply := range *applies {
- parentIDs = append(parentIDs, apply.ParentID)
- UserIDs = append(UserIDs, apply.Uid)
- }
-
- // 查询上级
- userDb := implement.NewUserDb(db.Db)
- parents, err := userDb.UserFindByParams(map[string]interface{}{
- "key": "id",
- "value": parentIDs,
- })
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- parentsMap := make(map[int64]model.User)
- for _, parent := range parents {
- parentsMap[parent.Id] = parent
- }
-
- // 查询标签
- recordsDb := implement.NewUserTagRecordsDb(db.Db)
- records, err := recordsDb.UserTagRecordsFindByParams(map[string]interface{}{
- "key": "uid",
- "value": UserIDs,
- })
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- recordsMap := make(map[int64][]md.TagNode)
- for _, record := range *records {
- temp := md.TagNode{
- TagID: record.TagId,
- TagName: "",
- }
- tagName, ok := tagsMap[record.TagId]
- temp.TagName = tagName
- v, ok := recordsMap[record.Uid]
- if ok {
- v = append(v, temp)
- } else {
- recordsMap[record.Uid] = []md.TagNode{temp}
- }
- }
-
- for i, apply := range *applies {
- list[i] = md.GetWithdrawApplyListNode{
- WithdrawApplyId: apply.Id,
- UserID: apply.Uid,
- Nickname: apply.Nickname,
- ParentID: apply.ParentID,
- AliPayName: apply.AliPayName,
- WechatPayName: apply.WxPayName,
- AliPayAccount: apply.AliPayAccount,
- WechatPayAccount: apply.WxPayAccount,
- WithdrawType: apply.WithdrawKind,
- InviteCode: apply.InviteCode,
- Amount: apply.Amount,
- ActualReceipt: apply.RealAmount,
- SysFee: apply.Fee,
- State: apply.State,
- ApplyAt: apply.CreateAt,
- PayAt: apply.UpdateAt,
- Memo: apply.Memo,
- }
- if apply.Amount != "" && apply.Fee != "" {
- actualReceipt := utils.StrToFloat64(apply.Amount) - utils.StrToFloat64(apply.Fee)
- list[i].ActualReceipt = utils.Float64ToStr(actualReceipt)
- }
- if apply.ParentID != 0 {
- v, ok := parentsMap[apply.ParentID]
- if ok {
- list[i].ParentPhone = v.Phone
- }
- }
- tagList, ok := recordsMap[apply.Uid]
- if ok {
- list[i].Tag = tagList
- }
- }
- applyDb := implement.NewFinWithdrawApplyDb(db.Db)
- underReviewAmount, err := applyDb.FinWithdrawApplyAmountGetByParams(map[string]interface{}{
- "key": "state",
- "value": 0,
- })
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- pendingAmount, err := applyDb.FinWithdrawApplyAmountGetByParams(map[string]interface{}{
- "key": "state",
- "value": 4,
- })
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- paySucceedAmount, err := applyDb.FinWithdrawApplyAmountGetByParams(map[string]interface{}{
- "key": "state",
- "value": 2,
- })
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- payFailedAmount, err := applyDb.FinWithdrawApplyAmountGetByParams(map[string]interface{}{
- "key": "state",
- "value": 3,
- })
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
-
- resp := md.GetWithdrawApplyListResp{
- ReasonList: []map[string]interface{}{
- {
- "value": enum.FinWithdrawApplyReasonForNotRule,
- "name": enum.FinWithdrawApplyReasonForNotRule.String(),
- },
- {
- "value": enum.FinWithdrawApplyReasonForAccountAbnormal,
- "name": enum.FinWithdrawApplyReasonForAccountAbnormal.String(),
- },
- {
- "value": enum.FinWithdrawApplyReasonForFundAbnormal,
- "name": enum.FinWithdrawApplyReasonForFundAbnormal.String(),
- },
- },
- LevelsList: levelsList,
- TagsList: tagsList,
- PendingAmount: utils.Float64ToStr(pendingAmount),
- PaySucceedAmount: utils.Float64ToStr(paySucceedAmount),
- PayFailedAmount: utils.Float64ToStr(payFailedAmount),
- UnderReviewAmount: utils.Float64ToStr(underReviewAmount),
- List: list,
- Paginate: md.Paginate{
- Limit: req.Limit,
- Page: req.Page,
- Total: total,
- },
- }
- e.OutSuc(c, resp, nil)
- }
-
- // WithdrawApplyAudit
- // @Summary 财务中心-提现-审核
- // @Tags 提现
- // @Description 提现审核
- // @Accept json
- // @Produce json
- // @param Authorization header string true "验证参数Bearer和token空格拼接"
- // @Param req body md.WithdrawApplyAuditReq false "筛选条件"
- // @Success 200 {string} "success"
- // @Failure 400 {object} md.Response "具体错误"
- // @Router /api/financialCenter/withdraw/audit [POST]
- func WithdrawApplyAudit(c *gin.Context) {
- var req *md.WithdrawApplyAuditReq
- if err1 := c.ShouldBindJSON(&req); err1 != nil {
- e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error())
- return
- }
-
- //1、查找对应提现申请单
- finWithdrawApplyDb := implement.NewFinWithdrawApplyDb(db.Db)
- finWithdrawApply, err := finWithdrawApplyDb.FinWithdrawApplyGet(req.WithdrawApplyId)
- if err != nil {
- e.OutErr(c, e.ERR_DB_ORM, err.Error())
- return
- }
- if finWithdrawApply == nil {
- e.OutErr(c, e.ERR_NOT_FAN, "提现记录不存在")
- return
- }
-
- //2、判断审核状态
- if req.AuditState == 1 {
- //通过(推mq、修改提现单成功)
- finWithdrawApply.State = int(enum.FinWithdrawApplyStateForIng)
- updateAffected, err1 := finWithdrawApplyDb.UpdateFinWithdrawApply(finWithdrawApply, "state")
- if err1 != nil {
- e.OutErr(c, e.ERR_DB_ORM, err1.Error())
- return
- }
- if updateAffected <= 0 {
- e.OutErr(c, e.ERR_DB_ORM, "更新提现单状态失败")
- return
- }
-
- ch, err1 := rabbit.Cfg.Pool.GetChannel()
- if err1 != nil {
- e.OutErr(c, e.ERR_INIT_RABBITMQ, err1.Error())
- return
- }
- defer ch.Release()
- var data md2.EggFinWithdrawApplyData
- err = copier.Copy(&data, &finWithdrawApply)
- if err != nil {
- e.OutErr(c, e.ERR, err.Error())
- return
- }
-
- ch.Publish(md2.EggAppExchange, utils.SerializeStr(data), md2.EggFinWithdrawApply)
- } else {
- //拒绝(退余额、修改提现单失败)
- session := db.Db.NewSession()
- defer session.Close()
- session.Begin()
-
- finWithdrawApply.State = int(enum.FinWithdrawApplyStateForBad)
- updateAffected, err1 := finWithdrawApplyDb.UpdateFinWithdrawApplyBySession(session, finWithdrawApply, "state")
- if err1 != nil {
- e.OutErr(c, e.ERR_DB_ORM, err1.Error())
- return
- }
- if updateAffected <= 0 {
- e.OutErr(c, e.ERR_DB_ORM, "更新提现单状态失败")
- return
- }
-
- dealUserWalletReq := md3.DealUserWalletReq{
- Direction: "sub",
- Kind: int(enum.UserWithdrawBad),
- Title: enum.UserWithdrawBad.String(),
- Uid: finWithdrawApply.Uid,
- Amount: utils.StrToFloat64(finWithdrawApply.Amount),
- }
-
- err = rule.DealUserWallet(session, dealUserWalletReq)
- if err != nil {
- session.Rollback()
- e.OutErr(c, e.ERR, err.Error())
- return
- }
-
- err = session.Commit()
- if err != nil {
- _ = session.Rollback()
- e.OutErr(c, e.ERR_DB_ORM, err)
- return
- }
- }
-
- e.OutSuc(c, "success", nil)
- }
|