task_income.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package youngee_talent_service
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "math/rand"
  7. "strings"
  8. "time"
  9. "youngmini_server/app/dao"
  10. "youngmini_server/app/model"
  11. "youngmini_server/app/model/youngee_talent_model"
  12. "youngmini_server/app/utils"
  13. "github.com/gogf/gf/database/gdb"
  14. "github.com/gogf/gf/frame/g"
  15. "github.com/gogf/gf/net/ghttp"
  16. "github.com/gogf/gf/os/gtime"
  17. )
  18. func GetWithdrawTaskInfo(r *ghttp.Request) *TalentHttpResult {
  19. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  20. if err != nil {
  21. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  22. }
  23. withdrawTaskInfoList := youngee_talent_model.WithdrawTaskInfoList{}
  24. // 获取可提现任务列表
  25. var taskList []*model.YoungeeTaskInfo
  26. err = g.Model(dao.YoungeeTaskInfo.Table).Where("talent_id = ?", tid).And("withdraw_status IN(?)", g.Slice{2, 3, 4}).Scan(&taskList)
  27. if err != nil {
  28. return &TalentHttpResult{Code: -1, Msg: "Get task list failed"}
  29. }
  30. for _, v := range taskList {
  31. projectInfo, err := g.Model(dao.ProjectInfo.Table).Where("project_id = ?", v.ProjectId).One()
  32. if err != nil {
  33. return &TalentHttpResult{Code: -1, Msg: "Get project info failed"}
  34. }
  35. product, err := g.Model(dao.YounggeeProduct.Table).One("product_id = ?", projectInfo[dao.ProjectInfo.Columns.ProductId])
  36. if err != nil {
  37. return &TalentHttpResult{Code: -1, Msg: "Get product mainphoto failed"}
  38. }
  39. strategy := model.RecruitStrategy{}
  40. err = g.Model(dao.RecruitStrategy.Table).Where("project_id = ? and strategy_id = ?", v.ProjectId, v.StrategyId).Scan(&strategy)
  41. if err != nil {
  42. return &TalentHttpResult{Code: -1, Msg: "Get platform failed"}
  43. }
  44. taskInfoBrief := &youngee_talent_model.WithdrawTaskInfo{
  45. TaskId: v.TaskId,
  46. ProjectName: projectInfo[dao.ProjectInfo.Columns.ProjectName].String(),
  47. ProductPrice: product[dao.Product.Columns.ProductPrice].Int(),
  48. RecruitStrategy: &strategy,
  49. TaskReward: v.TaskReward,
  50. SettleAmount: v.SettleAmount,
  51. CompleteDate: v.CompleteDate,
  52. WithdrawDate: v.WithdrawDate,
  53. Checked: false,
  54. }
  55. if v.WithdrawStatus == 2 {
  56. withdrawTaskInfoList.CanWithdrawTaskInfoList = append(withdrawTaskInfoList.CanWithdrawTaskInfoList, taskInfoBrief)
  57. } else if v.WithdrawStatus == 3 {
  58. withdrawTaskInfoList.WithdrawingTaskInfoList = append(withdrawTaskInfoList.WithdrawingTaskInfoList, taskInfoBrief)
  59. } else if v.WithdrawStatus == 4 {
  60. withdrawTaskInfoList.WithdrawedTaskInfoList = append(withdrawTaskInfoList.WithdrawedTaskInfoList, taskInfoBrief)
  61. }
  62. }
  63. return &TalentHttpResult{Code: 0, Msg: "success", Data: withdrawTaskInfoList}
  64. }
  65. func Withdraw(r *ghttp.Request) *TalentHttpResult {
  66. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  67. if err != nil {
  68. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  69. }
  70. var DataInfoReq *youngee_talent_model.WithdrawInfo
  71. err = r.ParseForm(&DataInfoReq)
  72. if err != nil {
  73. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  74. }
  75. taskIdListStr := strings.Split(DataInfoReq.TaskIdList, ",")
  76. // taskIdListInt := utils.TypeTran.String2Int(taskIdListStr)
  77. // 检验是否taskIdList中所有task均处于可提现状态,且talent_id是否正确
  78. var taskList []model.YoungeeTaskInfo
  79. err = g.Model(dao.YoungeeTaskInfo.Table).Where("talent_id = ?", tid).And("task_id IN (?)", taskIdListStr).Scan(&taskList)
  80. if err != nil {
  81. return &TalentHttpResult{Code: -3, Msg: "Get task list failed"}
  82. }
  83. if len(taskIdListStr) != len(taskList) {
  84. return &TalentHttpResult{Code: -4, Msg: "Task TalentID Error"}
  85. }
  86. for _, v := range taskList {
  87. if v.WithdrawStatus != 2 {
  88. return &TalentHttpResult{Code: -4, Msg: "Task Withdraw Status Error"}
  89. }
  90. }
  91. var talentBank model.YounggeeTalentBank
  92. err = g.Model(dao.YounggeeTalentBank.Table).Where("talent_id = ?", tid).Scan(&talentBank)
  93. if err != nil {
  94. return &TalentHttpResult{Code: -5, Msg: "Get Bank Info failed"}
  95. }
  96. bankJsons, errs := json.Marshal(talentBank) //转换成JSON返回的是byte[]
  97. if errs != nil {
  98. return &TalentHttpResult{Code: -6, Msg: " Json transformed failed"}
  99. }
  100. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  101. s1 := tid[7:]
  102. s2 := fmt.Sprintf("%d", gtime.Now().YearDay())
  103. s3 := fmt.Sprintf("%02v", rand.New(rand.NewSource(time.Now().UnixNano())).Int63n(100))
  104. s := "6" + s1 + s2 + s3
  105. // 插入提现记录
  106. _, err1 := tx.Ctx(ctx).Model(dao.YounggeeWithdrawRecord.Table).Data(model.YounggeeWithdrawRecord{
  107. WithdrawId: s,
  108. TalentId: tid,
  109. WithdrawAmount: float64(DataInfoReq.TotalAmount),
  110. AmountPayable: float64(DataInfoReq.RealAmount),
  111. TaskIdList: DataInfoReq.TaskIdList,
  112. ReceiveInfo: string(bankJsons),
  113. BankType: DataInfoReq.BankType,
  114. Status: 1,
  115. SubmitAt: gtime.Now(),
  116. }).InsertAndGetId()
  117. if err1 != nil {
  118. fmt.Printf("[Withdraw Transaction] Error:%+v\n", err1)
  119. return err1
  120. }
  121. // 更新task表中提现状态
  122. _, err1 = tx.Ctx(ctx).Model(dao.YoungeeTaskInfo.Table).Where("task_id IN (?)", taskIdListStr).Update(g.Map{"withdraw_status": 3, "withdraw_date": gtime.Now()})
  123. if err1 != nil {
  124. fmt.Printf("[Withdraw Transaction] Error:%+v\n", err1)
  125. return err1
  126. }
  127. // 更新talent表中提现金额
  128. _, err1 = tx.Ctx(ctx).Model(dao.YoungeeTalentInfo.Table).Where("id = ?", tid).Increment("withdrawing", float64(DataInfoReq.TotalAmount))
  129. if err1 != nil {
  130. fmt.Printf("[Withdraw Transaction] Error:%+v\n", err1)
  131. return err1
  132. }
  133. _, err1 = tx.Ctx(ctx).Model(dao.YoungeeTalentInfo.Table).Where("id = ?", tid).Decrement("canwithdraw", float64(DataInfoReq.TotalAmount))
  134. if err1 != nil {
  135. fmt.Printf("[Withdraw Transaction] Error:%+v\n", err1)
  136. return err1
  137. }
  138. for _, taskId := range taskIdListStr {
  139. projectInfo := model.ProjectInfo{}
  140. err1 = tx.Ctx(ctx).Model(model.ProjectInfo{}).Where("project_id = ?", taskId).Scan(&projectInfo)
  141. if err1 != nil {
  142. fmt.Printf("[Withdraw Transaction] Error:%+v\n", err1)
  143. return err1
  144. }
  145. messageInfo := model.YounggeeMessageInfo{
  146. MessageId: 12,
  147. MessageType: 2,
  148. CreatedAt: gtime.Now(),
  149. TalentId: taskId,
  150. ProjectName: projectInfo.ProjectName,
  151. IsReaded: 0,
  152. IsDeleted: 0,
  153. }
  154. _, err = tx.Ctx(ctx).Model(dao.YounggeeMessageInfo.Table).Data(&messageInfo).Insert()
  155. if err != nil {
  156. fmt.Printf("[Withdraw Transaction] Error:%+v\n", err)
  157. return err
  158. }
  159. }
  160. return nil
  161. })
  162. if err != nil {
  163. return &TalentHttpResult{Code: -7, Msg: "Add Withdraw Record failed"}
  164. }
  165. return &TalentHttpResult{Code: 0, Msg: "success"}
  166. }