MemberrechargeOrderCreate.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\memberrecharge\model;
  11. use app\model\order\OrderCreate;
  12. use app\model\system\Cron;
  13. use app\model\system\Pay;
  14. use app\model\order\Config;
  15. use app\model\member\Member as MemberModel;
  16. /**
  17. * 订单创建(充值)
  18. *
  19. * @author Administrator
  20. *
  21. */
  22. class MemberrechargeOrderCreate extends OrderCreate
  23. {
  24. /**
  25. * 订单创建
  26. * @param unknown $data
  27. */
  28. public function create($data)
  29. {
  30. //获取用户头像
  31. $member_model = new MemberModel();
  32. $member = $member_model->getMemberInfo([ [ 'member_id', '=', $data[ 'member_id' ] ] ], 'headimg,nickname');
  33. $member_info = $member[ 'data' ];
  34. //获取套餐信息
  35. $recharge_model = new Memberrecharge();
  36. if ($data[ 'recharge_id' ] > 0) {
  37. //套餐字段
  38. $field = 'recharge_id,recharge_name,cover_img,face_value,buy_price,point,growth,coupon_id';
  39. $recharge = $recharge_model->getMemberrechargeInfo([ [ 'recharge_id', '=', $data[ 'recharge_id' ] ] ], $field);
  40. $recharge_info = $recharge[ 'data' ];
  41. if (empty($recharge_info)) {
  42. return $this->error('', '无效的充值套餐');
  43. }
  44. } else {
  45. $recharge_info = array (
  46. "recharge_id" => 0,
  47. "recharge_name" => '自定义面额充值',
  48. "cover_img" => '',
  49. "face_value" => $data[ 'face_value' ],
  50. "buy_price" => $data[ 'face_value' ],
  51. "point" => 0,
  52. "growth" => 0,
  53. "coupon_id" => 0,
  54. );
  55. }
  56. //创建或加入
  57. $pay = new Pay();
  58. $out_trade_no = $pay->createOutTradeNo($data[ 'member_id' ]);
  59. $order_no = $this->createOrderNo($data[ 'site_id' ], $data[ 'member_id' ]);
  60. $order_data = [
  61. 'recharge_id' => $data[ 'recharge_id' ],
  62. 'order_no' => $order_no,
  63. 'out_trade_no' => $out_trade_no,
  64. 'recharge_name' => $recharge_info[ 'recharge_name' ],
  65. 'cover_img' => $recharge_info[ 'cover_img' ],
  66. 'face_value' => $recharge_info[ 'face_value' ],
  67. 'buy_price' => $recharge_info[ 'buy_price' ],
  68. 'pay_money' => $recharge_info[ 'buy_price' ],
  69. 'point' => $recharge_info[ 'point' ],
  70. 'growth' => $recharge_info[ 'growth' ],
  71. 'coupon_id' => $recharge_info[ 'coupon_id' ],
  72. 'status' => 1,
  73. 'create_time' => time(),
  74. 'member_id' => $data[ 'member_id' ],
  75. 'member_img' => $member_info[ 'headimg' ],
  76. 'nickname' => $member_info[ 'nickname' ],
  77. 'order_from' => $data[ 'order_from' ],
  78. 'order_from_name' => $data[ 'order_from_name' ],
  79. 'site_id' => $data[ 'site_id' ],
  80. 'store_id' => $data[ 'store_id' ] ?? 0,
  81. 'remark' => $data[ 'remark' ] ?? '',
  82. 'relate_id' => $data[ 'relate_id' ] ?? 0,
  83. 'relate_type' => $data[ 'relate_type' ] ?? '',
  84. ];
  85. model("member_recharge_order")->startTrans();
  86. //循环生成多个订单
  87. try {
  88. $order_id = model("member_recharge_order")->add($order_data);
  89. //生成整体支付单据
  90. $pay->addPay($data[ 'site_id' ], $out_trade_no, "", "会员充值套餐,面额:" . $recharge_info[ 'face_value' ], "会员充值套餐,面额:" . $recharge_info[ 'face_value' ], $recharge_info[ 'buy_price' ], '', 'MemberrechargeOrderPayNotify', '');
  91. //计算订单自动关闭时间
  92. $config_model = new Config();
  93. $order_config_result = $config_model->getOrderEventTimeConfig($data[ 'site_id' ]);
  94. $order_config = $order_config_result[ "data" ];
  95. $now_time = time();
  96. if (!empty($order_config)) {
  97. $execute_time = $now_time + $order_config[ "value" ][ "auto_close" ] * 60;//自动关闭时间
  98. } else {
  99. $execute_time = $now_time + 3600;//尚未配置 默认一天
  100. }
  101. $cron_model = new Cron();
  102. $cron_model->addCron(1, 0, "订单自动关闭", "MemberrechargeOrderClose", $execute_time, $order_id);
  103. event("MemberRechargeOrderCreate", [ 'order_id' => $order_id ]);
  104. model("member_recharge_order")->commit();
  105. return $this->success($out_trade_no);
  106. } catch (\Exception $e) {
  107. model("member_recharge_order")->rollback();
  108. return $this->error('', $e->getMessage());
  109. }
  110. }
  111. }