Receipt.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php namespace App\Http\Controllers\Api\Orders;
  2. use App\Models\Orders;
  3. use App\Models\FilesManager;
  4. use App\Http\Controllers\Api\Api;
  5. use App\Models\Orders\Receipt as Model;
  6. use App\Models\OrdersProduct as OrdersProduct;
  7. use App\Http\Requests\Api\Orders\Receipt as Request;
  8. use Illuminate\Support\Facades\DB;
  9. use Intervention\Image\Facades\Image;
  10. use Intervention\Image\Gd\Font;
  11. /**
  12. * 订单回执
  13. *
  14. * @author 刘相欣
  15. *
  16. * */
  17. class Receipt extends Api{
  18. /**
  19. * 提交审核 /api/orders_receipt/apply
  20. *
  21. * */
  22. public function apply(Request $request,Model $Model,Orders $Orders,OrdersProduct $OrdersProduct,FilesManager $FilesManager){
  23. // 接口验签
  24. // $this->verify_sign();
  25. // 验证参数
  26. $request->scene('apply')->validate();
  27. // 检查登录
  28. $uid = 2;//$this->checkLogin();
  29. // 接收参数
  30. $orderId = request('order_id',0);
  31. // 接收文件
  32. $file = request()->file('file');
  33. // 图片数据
  34. $result = $FilesManager->fileStore($file,'orders/receipt/'.$uid);
  35. // 上传失败
  36. if( isset($result['error']) ) return json_send(['code'=>'error','msg'=>$result['error'],'data'=>'']);
  37. // 查询订单信息
  38. $orderData = $Orders->query()->find($orderId,['id','pay_total','status']);
  39. // 上传失败
  40. if( !$orderData ) return json_send(['code'=>'error','msg'=>'订单数据不存在','data'=>'']);
  41. // 上传失败
  42. if( $orderData['status'] == 9 ) return json_send(['code'=>'error','msg'=>'订单回执审核中','data'=>'']);
  43. // 上传失败
  44. if( $orderData['status'] != 1 ) return json_send(['code'=>'success','msg'=>'订单已取消','data'=>'']);
  45. // 积分结果
  46. $score = floor( $orderData['pay_total'] * 1 ) > 0 ? floor( $orderData['pay_total'] * 1 ) : 0;
  47. // 组合数据,写入订单表,子表
  48. DB::beginTransaction();
  49. // 组合数据
  50. try{
  51. // 存入记录
  52. $result = $Model->add(['order_id'=>$orderId,'custom_uid'=>$uid,'image'=>$result['file_path'],'score'=>$score]);
  53. // 提示新增失败
  54. if( !$result ) {
  55. // 回退数据
  56. DB::rollBack();
  57. // 提示信息
  58. return json_send(['code'=>'error','msg'=>'记录失败,请重试','data'=>['error'=>'记录失败,请重试']]);
  59. }
  60. // 查询数据
  61. $result = $Orders->setOrderStatus($orderId,9,$OrdersProduct);
  62. // 提示新增失败
  63. if( isset($result['error']) ){
  64. // 回退数据
  65. DB::rollBack();
  66. // 提示信息
  67. return json_send(['code'=>'error','msg'=>'订单状态变更失败,请重试','data'=>['error'=>$result['error']]]);
  68. }
  69. // 提交数据
  70. DB::commit();
  71. // 获取分享链接
  72. $shareImage = $this->getShareImage($uid,$orderId,$score);
  73. $shareImage = $shareImage ? path_compat($shareImage) : '';
  74. // 告知结果
  75. return json_send(['code'=>'success','msg'=>'申请成功','data'=>['share_info'=>['title'=>'我已经完成一笔订单,你也快来吧','path'=>'/pages/index/index','imageUrl'=>$shareImage]]]);
  76. // 返回结果
  77. } catch (\Throwable $th) {
  78. // 回退数据
  79. DB::rollBack();
  80. // 下单失败提示
  81. return json_send(['code'=>'error','msg'=>'申请失败,请重试','data'=>['error'=>$th->getMessage().$th->getLine()]]);
  82. }
  83. }
  84. /**
  85. * 分享图片
  86. *
  87. */
  88. private function getShareImage($uid,$orderId,$score=0){
  89. // 尝试执行
  90. try {
  91. // 加载图片
  92. $image = Image::make(public_path('uploads/images/default/').'order_receipt_share.jpg');
  93. // 设置文字样式(字体、大小、颜色等)
  94. $fontPath = public_path().'/fonts/msyh14.ttf';// 指定字体文件路径
  95. // 文本
  96. $text = $score ? '我完成了一笔订单,即将获得'.$score.'积分' : '我完成了一笔订单';
  97. // 给图片写入文字
  98. $image->text($text, 240,80,function (Font $font) use ($fontPath) {
  99. $font->file($fontPath); // 字体文件地址
  100. $font->size(24); // 字体大小
  101. $font->color('#FFFFFF');
  102. $font->align('center');
  103. });
  104. // 给图片写入文字
  105. $image->text('你也来试试吧', 240,140,function (Font $font) use ($fontPath) {
  106. $font->file($fontPath); // 字体文件地址
  107. $font->size(24); // 字体大小
  108. $font->color('#FFFFFF');
  109. $font->align('center');
  110. });
  111. // 路径
  112. $path = public_path('uploads/order_receipt_share/');
  113. // 判断路径是不是存在
  114. if( !is_dir($path) ) mkdir($path,0755,true);
  115. // 路径
  116. $filename = $path.$uid.'_'.$orderId.'.jpg';
  117. // 保存图片
  118. $image->save($filename);
  119. // 返回路径
  120. return 'order_receipt_share/'.$uid.'_'.$orderId.'.jpg';
  121. } catch (\Throwable $th) {
  122. dd($th);
  123. // 返回路径
  124. return '';
  125. }
  126. }
  127. }