project_pay.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package service
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "github.com/gin-gonic/gin"
  7. "gorm.io/gorm"
  8. "time"
  9. "youngee_b_api/db"
  10. "youngee_b_api/model/gorm_model"
  11. "youngee_b_api/model/http_model"
  12. "github.com/sirupsen/logrus"
  13. )
  14. var ProjectPay *projectPay
  15. type projectPay struct {
  16. }
  17. func (*projectPay) Pay(ctx context.Context, projectPay http_model.ProjectPayRequest, enterpriseID string) (*int64, error) {
  18. // 修改企业账户金额
  19. balance, err := db.UpdateEnterpriseBalance(ctx, enterpriseID, 0, -projectPay.PaySum, projectPay.PaySum)
  20. if err != nil {
  21. logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateEnterpriseBalance error,err:%+v", err)
  22. return nil, err
  23. }
  24. // 修改项目状态为执行中
  25. err = db.UpdateProjectStatus(ctx, projectPay.ProjectID, 9)
  26. if err != nil {
  27. logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateEnterpriseBalance error,err:%+v", err)
  28. return nil, err
  29. }
  30. // 插入支付记录
  31. recordId, err1 := db.CreatePayRecord(ctx, enterpriseID, projectPay.PaySum, *balance, 2, projectPay.ProjectID)
  32. if err1 != nil {
  33. logrus.WithContext(ctx).Errorf("[projectPay service] call CreatePayRecord error,err:%+v", err)
  34. return nil, err1
  35. }
  36. // 支付更新任务状态
  37. //_, err2 := db.GetProjectDetail(ctx, projectPay.ProjectID)
  38. //if err2 != nil {
  39. // logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err)
  40. // return nil, err2
  41. //}
  42. err = db.UpdateTaskSelectAtByProjectId(ctx, projectPay.ProjectID, 2)
  43. if err != nil {
  44. logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
  45. return nil, err
  46. }
  47. err = db.UpdateTaskStageByProjectId(ctx, projectPay.ProjectID, 2, 4)
  48. if err != nil {
  49. logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
  50. return nil, err
  51. }
  52. //if project.ProjectForm != 4 {
  53. // err = db.UpdateTaskStageByProjectId(ctx, projectPay.ProjectID, 2, 4)
  54. // if err != nil {
  55. // logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
  56. // return nil, err
  57. // }
  58. //} else {
  59. // if project.ContentType == 1 {
  60. // err = db.UpdateTaskStageByProjectId(ctx, projectPay.ProjectID, 2, 9) //修改为待传初稿
  61. // if err != nil {
  62. // logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
  63. // return nil, err
  64. // }
  65. // } else {
  66. // err = db.UpdateTaskStageByProjectId(ctx, projectPay.ProjectID, 2, 7) //修改为待传脚本
  67. // if err != nil {
  68. // logrus.WithContext(ctx).Errorf("[projectPay service] call UpdateTaskStatusPaying error,err:%+v", err)
  69. // return nil, err
  70. // }
  71. // }
  72. //}
  73. // 插入消息-任务申请成功
  74. taskIds, err := db.GetTaskIds(ctx, projectPay.ProjectID) // 获取任务id列表
  75. if err != nil {
  76. logrus.WithContext(ctx).Errorf("[projectPay service] call GetTaskIds error,err:%+v", err)
  77. return nil, err
  78. }
  79. fmt.Printf("taskIds: %+v", taskIds)
  80. for _, taskId := range taskIds {
  81. err = db.CreateMessageByTaskId(ctx, 1, 1, taskId) // 插入消息
  82. if err != nil {
  83. logrus.WithContext(ctx).Errorf("[projectPay service] call CreateMessageByTaskId error,err:%+v", err)
  84. return nil, err
  85. }
  86. }
  87. return recordId, nil
  88. }
  89. func (p *projectPay) SpecialSettlePay(ctx *gin.Context, req *http_model.SpecialSettlePayRequest) error {
  90. DB := db.GetReadDB(ctx)
  91. err := DB.Transaction(func(tx *gorm.DB) error {
  92. var balance float64
  93. err := tx.Model(&gorm_model.Enterprise{}).Select("balance").Where("enterprise_id = ?", req.EnterPriseId).Find(&balance).Error
  94. if err != nil {
  95. logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
  96. return err
  97. }
  98. realPay := req.Amount * 1.05
  99. if balance < realPay {
  100. return errors.New("余额不足")
  101. }
  102. err = tx.Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", req.TaskId).Updates(gorm_model.YoungeeTaskInfo{
  103. TaskReward: req.Amount,
  104. SettleAmount: req.Amount,
  105. AllPayment: req.Amount,
  106. RealPayment: req.Amount,
  107. SettleStatus: 2,
  108. }).Error
  109. if err != nil {
  110. logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
  111. return err
  112. }
  113. err = tx.Model(&gorm_model.Enterprise{}).Where("enterprise_id = ?", req.EnterPriseId).
  114. Updates(map[string]interface{}{"balance": gorm.Expr("balance - ?", realPay), "available_balance": gorm.Expr("available_balance - ?", realPay),
  115. "updated_at": time.Now()}).Error
  116. if err != nil {
  117. logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
  118. return err
  119. }
  120. talentId := ""
  121. err = tx.Model(&gorm_model.YoungeeTaskInfo{}).Select("talent_id").Where("task_id = ?", req.TaskId).Find(&talentId).Error
  122. if err != nil {
  123. logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
  124. return err
  125. }
  126. err = tx.Model(&gorm_model.YoungeeTalentInfo{}).Where("id = ?", talentId).
  127. Updates(map[string]interface{}{"income": gorm.Expr("income + ?", req.Amount), "canwithdraw": gorm.Expr("canwithdraw + ?", req.Amount)}).Error
  128. if err != nil {
  129. logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
  130. return err
  131. }
  132. return nil
  133. })
  134. return err
  135. }