123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package controller
- import (
- . "app.yhyue.com/moapp/jybase/api"
- "fmt"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/util/gconv"
- uuid2 "github.com/google/uuid"
- "github.com/pkg/errors"
- "regexp"
- "strings"
- "time"
- )
- func GetReturnOnlineHandler(r *ghttp.Request) {
- rData, err := func() (interface{}, error) {
- rj, err := r.GetJson()
- if err != nil {
- return nil, errors.Wrap(err, "请求参数格式异常")
- }
- var (
- doType = rj.Get("doType").String()
- orderCode = rj.Get("orderCode", "").String()
- money = rj.Get("money", "").Int()
- payWay = rj.Get("payWay", "").Int()
- )
- 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)
- if err != nil {
- return nil, gerror.Wrapf(err, "查询订单数据异常%s", orderCode)
- }
- 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)
- if err != nil {
- return nil, gerror.Wrapf(err, "计算已回款出错%s", orderCode)
- }
- var (
- returnedMoney = gconv.Int(calculationRes.List()[0]["returned_money"])
- orderMap = orderRes.Map()
- payMoney = gconv.Int(orderMap["pay_money"])
- )
- switch doType {
- case "query":
- if payMoney-returnedMoney <= 0 {
- return nil, fmt.Errorf("待支付金额异常")
- }
- account, product := formatShow(orderMap)
- return map[string]interface{}{
- "product": product,
- "account": account,
- "money": payMoney - returnedMoney,
- }, nil
- case "getPay":
- if payMoney-returnedMoney-money < 0 {
- return nil, fmt.Errorf("待支付金额异常")
- }
- var (
- now = time.Now()
- exDay = now.AddDate(0, 0, 3)
- targetTime = time.Date(exDay.Year(), exDay.Month(), exDay.Day(), 23, 59, 59, 0, time.Local)
- token = uuid2.New().String()
- payPath string
- )
- switch payWay {
- case 1:
- payPath = "/weixin/pay/returnMoney"
- case 2:
- payPath = "/returnMoney/aliPage"
- default:
- return nil, fmt.Errorf("方式异常")
- }
- if _, err := g.DB().Insert(r.Context(), "return_money_online", map[string]interface{}{
- "status": 0,
- "token": token,
- "order_code": orderCode,
- "return_money": money,
- "expire_time": targetTime.Format("2006-01-02 15:04:05"),
- "creat_time": now.Format("2006-01-02 15:04:05"),
- }); err != nil {
- return nil, gerror.Wrapf(err, "保存回款数据异常")
- }
- return map[string]interface{}{
- "product": fmt.Sprintf("%s%s?token=%s", g.Cfg("global").MustGet(r.Context(), "webDomain.jy").String(), payPath, token),
- "expire": targetTime.Unix(),
- }, nil
- }
- return nil, fmt.Errorf("未知操作")
- }()
- if err != nil {
- g.Log().Errorf(r.Context(), "获取回款码异常 %v", err)
- }
- r.Response.WriteJson(NewResult(rData, err))
- }
- func formatShow(orderMap map[string]interface{}) (string, string) {
- var account string
- if company_name := gconv.String(orderMap["company_name"]); company_name != "" {
- account = company_name
- } else if phone := gconv.String(orderMap["user_phone"]); len(phone) == 11 && !strings.HasPrefix(phone, "9") {
- account = maskPhoneNumber(phone)
- }
- product := gconv.String(orderMap["product_type"])
- if product == "VIP订阅" {
- product = "超级订阅"
- }
- return account, product
- }
- func maskPhoneNumber(phoneNumber string) string {
- re := regexp.MustCompile(`(\d{3})\d{4}(\d{4})`)
- maskedNumber := re.ReplaceAllString(phoneNumber, "$1****$2")
- return maskedNumber
- }
|