serviceOpen.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package order
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "github.com/gogf/gf/v2/database/gdb"
  7. "github.com/gogf/gf/v2/errors/gerror"
  8. "github.com/gogf/gf/v2/frame/g"
  9. "github.com/gogf/gf/v2/util/gconv"
  10. "jyOrderManager/internal/jyutil"
  11. "jyOrderManager/internal/logic/product"
  12. "jyOrderManager/internal/model"
  13. "log"
  14. "time"
  15. )
  16. func ServiceOpen(ctx context.Context, param model.OrderOpenServiceParams) error {
  17. //查询订单
  18. orderData, _ := g.DB().GetOne(ctx, fmt.Sprintf("select * from dataexport_order where order_code ='%s' and audit_status =3", param.OrderCode))
  19. if orderData.IsEmpty() {
  20. return errors.New("为查询到订单信息")
  21. }
  22. if gconv.String(orderData.Map()["user_phone"]) != param.Phone {
  23. g.DB().Update(ctx, "dataexport_order", map[string]interface{}{
  24. "user_phone": param.Phone,
  25. }, map[string]interface{}{
  26. "order_code": param.OrderCode,
  27. })
  28. }
  29. productDetail, err := g.DB().Ctx(ctx).Query(ctx, fmt.Sprintf(`SELECT * FROM jy_order_detail WHERE order_code ='%s' and is_service_open = 0`, param.OrderCode))
  30. if err != nil || productDetail.IsEmpty() {
  31. return err
  32. }
  33. if err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
  34. // 产品服务开通
  35. for _, m := range productDetail.List() {
  36. if !jyutil.IsServiceOpen(m) {
  37. continue
  38. }
  39. var openTime time.Time
  40. if gconv.Time(param.StartTime).Unix() > time.Now().Unix() {
  41. openTime = gconv.Time(param.StartTime)
  42. } else {
  43. openTime = time.Now()
  44. }
  45. //参数注入
  46. m["phone"] = param.Phone
  47. m["order_code"] = param.OrderCode
  48. m["reqCompanyName"] = orderData.Map()["company_name"]
  49. m["amount"] = m["final_price"]
  50. m["reqSubject"] = orderData.Map()["buy_subject"]
  51. m["linked_orderId"] = m["linked_detail_id"]
  52. productCode := gconv.String(m["product_code"])
  53. pFunc, err := product.JyProFunc.GetProductInitFuncByCode(productCode)
  54. if err != nil {
  55. return err
  56. }
  57. pObj, err := pFunc(m)
  58. if err != nil {
  59. return gerror.Wrap(err, fmt.Sprintf("获取%s商品异常", productCode))
  60. }
  61. if err := pObj.OpenService(ctx, openTime); err != nil {
  62. return err
  63. }
  64. }
  65. return nil
  66. }); err != nil {
  67. log.Println(err)
  68. return err
  69. }
  70. return nil
  71. }