AddOrder.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace app\api\model\service;
  3. use fast\Random;
  4. use think\Exception;
  5. use think\Model;
  6. class AddOrder extends Model
  7. {
  8. // 表名
  9. protected $name = 'service_add_order';
  10. // 自动写入时间戳字段
  11. protected $autoWriteTimestamp = 'int';
  12. // 定义时间戳字段名
  13. protected $createTime = 'createtime';
  14. protected $updateTime = 'updatetime';
  15. public static function createOrder($params)
  16. {
  17. $order = \app\api\model\service\Order::where(['id'=>$params['order_id'],'user_id'=>$params['user_id'],'status'=>['in',[2,3,4,5]]])->field('id,actendtime,skill_id,shop_id')->find();
  18. if(!$order)
  19. {
  20. throw new Exception('当前订单暂时无法新增附加项目');
  21. }
  22. $params['orderId'] = 'GoodsAdd'.Random::alnum(4).'-'.$params['user_id'].'-'.time();
  23. $addOrder = new AddOrder($params);
  24. $addOrder->allowField(true)->save();
  25. $addIds = explode(',',$params['add_ids']);
  26. $payprice = 0;
  27. $totalCostSeconds = 0;
  28. foreach ($addIds as $val)
  29. {
  30. $addInfo = explode('-',$val);
  31. $info = GoodsAdd::where(['id'=>$addInfo[0],'state'=>1])->field('id,name,price,cost_seconds')->find();
  32. if(!$info){
  33. continue;
  34. }
  35. $payprice+=bcmul($info['price'],$addInfo[1],2);
  36. $totalCostSeconds+=intval($info['cost_seconds']*$addInfo[1]);
  37. AddOrderDetail::create(['user_id'=>$params['user_id'],'service_add_order_id'=>$addOrder->id,'price'=>$info['price'],'order_id'=>$params['order_id'],'goods_add_id'=>$addOrder->id,'num'=>$addInfo[1],'cost_seconds'=>$info['cost_seconds'],'name'=>$info['name']]);
  38. }
  39. $userMoney = User::getMoney($params['user_id']);
  40. $endTime = $order['actendtime']+$totalCostSeconds*60;
  41. $exist = \app\api\model\service\SkillTime::where(['skill_id'=>$order['skill_id'],'state'=>['>',0],'starttime'=>['between',[$order['actendtime'],$endTime]]])->value('id');
  42. if($exist)
  43. {
  44. throw new Exception('当前服务者已被预约,暂时无法接单');
  45. }
  46. if($params['paytype'] == 4 && $userMoney<$payprice)
  47. {
  48. throw new Exception('余额不足,请及时充值');
  49. }
  50. $addOrder->save(['payprice'=>$payprice,'total_cost_seconds'=>$totalCostSeconds],['id'=>$addOrder->id]);
  51. $data = [];
  52. $data['paystatus'] = 0;
  53. if($params['paytype'] != 4)
  54. {
  55. $data['pay'] = \addons\service\library\Pay::payOrder(['amount'=>$payprice,'orderid'=>$params['orderId'],'title'=>'支付附加项目费用'],$params['paytype'],$params['user_id'],0);
  56. }else{
  57. User::money(-$payprice,$params['user_id'],'支付附加项目费用');
  58. $addOrder->save(['state'=>1,'paytime'=>time()],['id'=>$addOrder->id]);
  59. self::finishPay($addOrder->id);
  60. $data['paystatus'] = 1;
  61. $data['pay'] = '';
  62. }
  63. return $data;
  64. }
  65. public static function finishPay($id)
  66. {
  67. $addOrder = self::where(['id'=>$id,'state'=>1])->find();
  68. if(!$addOrder)
  69. {
  70. return false;
  71. }
  72. $order = Order::where(['id'=>$addOrder['order_id']])->field('id,payprice,add_price,settle_price,skill_id,actendtime,endtime')->find();
  73. $payprice = bcadd($order['payprice'],$addOrder['payprice'],2);
  74. $addPrice = bcadd($order['add_price'],$addOrder['payprice'],2);
  75. $settlePrice = bcadd($order['settle_price'],$addOrder['payprice'],2);
  76. $endTime = $order['endtime']+$addOrder['total_cost_seconds']*60;
  77. $actEndTime = $order['actendtime']+$addOrder['total_cost_seconds']*60;
  78. SkillTime::updateSkillTime(['skill_id'=>$order['skill_id'],'starttime'=>$order['actendtime'],'actendtime'=>$actEndTime],1);
  79. Order::where(['id'=>$addOrder['order_id']])->update(['payprice'=>$payprice,'add_price'=>$addPrice,'settle_price'=>$settlePrice,'endtime'=>$endTime,'actendtime'=>$actEndTime,'updatetime'=>time()]);
  80. OrderLog::create(['order_id'=>$addOrder['order_id'],'user_id'=>$addOrder['user_id'],'type'=>13,'content'=>'订单已添加附加项目']);
  81. return true;
  82. }
  83. public static function getOrderDetailList($order_id)
  84. {
  85. $addList = self::where(['order_id'=>$order_id,'state'=>1])->column('id');
  86. $list = [];
  87. if($addList)
  88. {
  89. foreach ($addList as $value)
  90. {
  91. $detail = AddOrderDetail::where(['service_add_order_id'=>$value])->select();
  92. $list = array_merge($list,$detail);
  93. }
  94. }
  95. return $list;
  96. }
  97. }