returnOnlineHandler.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package controller
  2. import (
  3. . "app.yhyue.com/moapp/jybase/api"
  4. "fmt"
  5. "github.com/gogf/gf/v2/errors/gerror"
  6. "github.com/gogf/gf/v2/frame/g"
  7. "github.com/gogf/gf/v2/net/ghttp"
  8. "github.com/gogf/gf/v2/util/gconv"
  9. uuid2 "github.com/google/uuid"
  10. "github.com/pkg/errors"
  11. "regexp"
  12. "strings"
  13. "time"
  14. )
  15. func GetReturnOnlineHandler(r *ghttp.Request) {
  16. rData, err := func() (interface{}, error) {
  17. rj, err := r.GetJson()
  18. if err != nil {
  19. return nil, errors.Wrap(err, "请求参数格式异常")
  20. }
  21. var (
  22. doType = rj.Get("doType").String()
  23. orderCode = rj.Get("orderCode", "").String()
  24. money = rj.Get("money", "").Int()
  25. payWay = rj.Get("payWay", "").Int()
  26. )
  27. orderRes, err := g.DB().GetOne(r.Context(), "SELECT buy_subject,user_phone,company_name,product_type,pay_money FROM dataexport_order WHERE order_code=?", orderCode)
  28. if err != nil {
  29. return nil, gerror.Wrapf(err, "查询订单数据异常%s", orderCode)
  30. }
  31. calculationRes, err := g.DB().Query(r.Context(), "SELECT SUM(return_money) as returned_money FROM return_money_record WHERE order_code=? AND state=1", orderCode)
  32. if err != nil {
  33. return nil, gerror.Wrapf(err, "计算已回款出错%s", orderCode)
  34. }
  35. var (
  36. returnedMoney = gconv.Int(calculationRes.List()[0]["returned_money"])
  37. orderMap = orderRes.Map()
  38. payMoney = gconv.Int(orderMap["pay_money"])
  39. )
  40. switch doType {
  41. case "query":
  42. if payMoney-returnedMoney <= 0 {
  43. return nil, fmt.Errorf("待支付金额异常")
  44. }
  45. account, product := formatShow(orderMap)
  46. return map[string]interface{}{
  47. "product": product,
  48. "account": account,
  49. "money": payMoney - returnedMoney,
  50. }, nil
  51. case "getPay":
  52. if payMoney-returnedMoney-money < 0 {
  53. return nil, fmt.Errorf("待支付金额异常")
  54. }
  55. var (
  56. now = time.Now()
  57. exDay = now.AddDate(0, 0, 3)
  58. targetTime = time.Date(exDay.Year(), exDay.Month(), exDay.Day(), 23, 59, 59, 0, time.Local)
  59. token = uuid2.New().String()
  60. payPath string
  61. )
  62. switch payWay {
  63. case 1:
  64. payPath = "/weixin/pay/returnMoney"
  65. case 2:
  66. payPath = "/returnMoney/aliPage"
  67. default:
  68. return nil, fmt.Errorf("方式异常")
  69. }
  70. if _, err := g.DB().Insert(r.Context(), "return_money_online", map[string]interface{}{
  71. "status": 0,
  72. "token": token,
  73. "order_code": orderCode,
  74. "return_money": money,
  75. "expire_time": targetTime.Format("2006-01-02 15:04:05"),
  76. "creat_time": now.Format("2006-01-02 15:04:05"),
  77. }); err != nil {
  78. return nil, gerror.Wrapf(err, "保存回款数据异常")
  79. }
  80. return map[string]interface{}{
  81. "product": fmt.Sprintf("%s%s?token=%s", g.Cfg("global").MustGet(r.Context(), "webDomain.jy").String(), payPath, token),
  82. "expire": targetTime.Unix(),
  83. }, nil
  84. }
  85. return nil, fmt.Errorf("未知操作")
  86. }()
  87. if err != nil {
  88. g.Log().Errorf(r.Context(), "获取回款码异常 %v", err)
  89. }
  90. r.Response.WriteJson(NewResult(rData, err))
  91. }
  92. func formatShow(orderMap map[string]interface{}) (string, string) {
  93. var account string
  94. if company_name := gconv.String(orderMap["company_name"]); company_name != "" {
  95. account = company_name
  96. } else if phone := gconv.String(orderMap["user_phone"]); len(phone) == 11 && !strings.HasPrefix(phone, "9") {
  97. account = maskPhoneNumber(phone)
  98. }
  99. product := gconv.String(orderMap["product_type"])
  100. if product == "VIP订阅" {
  101. product = "超级订阅"
  102. }
  103. return account, product
  104. }
  105. func maskPhoneNumber(phoneNumber string) string {
  106. re := regexp.MustCompile(`(\d{3})\d{4}(\d{4})`)
  107. maskedNumber := re.ReplaceAllString(phoneNumber, "$1****$2")
  108. return maskedNumber
  109. }