PremiumOrder.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace app\api\model\service;
  3. use think\Exception;
  4. use think\Model;
  5. use fast\Random;
  6. class PremiumOrder extends Model
  7. {
  8. // 表名
  9. protected $name = 'service_premium_order';
  10. // 自动写入时间戳字段
  11. protected $autoWriteTimestamp = 'int';
  12. // 定义时间戳字段名
  13. protected $createTime = 'createtime';
  14. protected $updateTime = 'updatetime';
  15. /**
  16. * 创建支付差价订单
  17. * @param $params
  18. * @return array
  19. * @throws Exception
  20. */
  21. public static function createOrder($params)
  22. {
  23. $userMoney = User::getMoney($params['user_id']);
  24. if($params['paytype'] == 4 && $userMoney<$params['payprice'])
  25. {
  26. throw new Exception('余额不足,请及时充值');
  27. }
  28. $params['orderId'] = 'Premium'.Random::alnum(4).'-'.$params['user_id'].'-'.time();
  29. $premiumOrder = new PremiumOrder($params);
  30. $premiumOrder->allowField(true)->save();
  31. $re['paystatus'] = 0;
  32. if($params['paytype'] != 4)
  33. {
  34. $re['pay'] = \addons\service\library\Pay::payOrder(['amount'=>$params['payprice'],'orderid'=>$params['orderId'],'title'=>'支付补差价费用'],$params['paytype'],$params['user_id'],0);
  35. }else{
  36. User::money(-$params['payprice'],$params['user_id'],'支付项目差价');
  37. $premiumOrder->save(['state'=>1,'paytime'=>time()],['id'=>$premiumOrder->id]);
  38. self::finishPay($premiumOrder->id);
  39. $re['paystatus'] = 1;
  40. $re['pay'] = '';
  41. }
  42. return $re;
  43. }
  44. public static function finishPay($id)
  45. {
  46. $premiumOrder = self::where(['id'=>$id,'state'=>1])->field('id,order_id,payprice,user_id')->find();
  47. if(!$premiumOrder)
  48. {
  49. return false;
  50. }
  51. $order = Order::where(['id'=>$premiumOrder['order_id']])->field('id,payprice,premium_price,settle_price')->find();
  52. $payprice = bcadd($order['payprice'],$premiumOrder['payprice'],2);
  53. $premiumPrice = bcadd($order['premium_price'],$premiumOrder['payprice'],2);
  54. $settlePrice = bcadd($order['settle_price'],$premiumOrder['payprice'],2);
  55. Order::where(['id'=>$premiumOrder['order_id']])->update(['payprice'=>$payprice,'premium_price'=>$premiumPrice,'settle_price'=>$settlePrice,'updatetime'=>time()]);
  56. OrderLog::create(['order_id'=>$premiumOrder['order_id'],'user_id'=>$premiumOrder['user_id'],'type'=>12,'content'=>'订单已补差价']);
  57. return true;
  58. }
  59. }