123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?php namespace App\Http\Controllers\Api\Orders;
- use App\Models\Orders;
- use App\Models\FilesManager;
- use App\Http\Controllers\Api\Api;
- use App\Models\Orders\Receipt as Model;
- use App\Models\OrdersProduct as OrdersProduct;
- use App\Http\Requests\Api\Orders\Receipt as Request;
- use Illuminate\Support\Facades\DB;
- use Intervention\Image\Facades\Image;
- use Intervention\Image\Gd\Font;
- /**
- * 订单回执
- *
- * @author 刘相欣
- *
- * */
- class Receipt extends Api{
-
-
- /**
- * 提交审核 /api/orders_receipt/apply
- *
- * */
- public function apply(Request $request,Model $Model,Orders $Orders,OrdersProduct $OrdersProduct,FilesManager $FilesManager){
- // 接口验签
- // $this->verify_sign();
- // 验证参数
- $request->scene('apply')->validate();
- // 检查登录
- $uid = 2;//$this->checkLogin();
- // 接收参数
- $orderId = request('order_id',0);
- // 接收文件
- $file = request()->file('file');
- // 图片数据
- $result = $FilesManager->fileStore($file,'orders/receipt/'.$uid);
- // 上传失败
- if( isset($result['error']) ) return json_send(['code'=>'error','msg'=>$result['error'],'data'=>'']);
- // 查询订单信息
- $orderData = $Orders->query()->find($orderId,['id','pay_total','status']);
- // 上传失败
- if( !$orderData ) return json_send(['code'=>'error','msg'=>'订单数据不存在','data'=>'']);
- // 上传失败
- if( $orderData['status'] == 9 ) return json_send(['code'=>'error','msg'=>'订单回执审核中','data'=>'']);
- // 上传失败
- if( $orderData['status'] != 1 ) return json_send(['code'=>'success','msg'=>'订单已取消','data'=>'']);
- // 积分结果
- $score = floor( $orderData['pay_total'] * 1 ) > 0 ? floor( $orderData['pay_total'] * 1 ) : 0;
- // 组合数据,写入订单表,子表
- DB::beginTransaction();
- // 组合数据
- try{
- // 存入记录
- $result = $Model->add(['order_id'=>$orderId,'custom_uid'=>$uid,'image'=>$result['file_path'],'score'=>$score]);
- // 提示新增失败
- if( !$result ) {
- // 回退数据
- DB::rollBack();
- // 提示信息
- return json_send(['code'=>'error','msg'=>'记录失败,请重试','data'=>['error'=>'记录失败,请重试']]);
- }
- // 查询数据
- $result = $Orders->setOrderStatus($orderId,9,$OrdersProduct);
- // 提示新增失败
- if( isset($result['error']) ){
- // 回退数据
- DB::rollBack();
- // 提示信息
- return json_send(['code'=>'error','msg'=>'订单状态变更失败,请重试','data'=>['error'=>$result['error']]]);
- }
- // 提交数据
- DB::commit();
- // 获取分享链接
- $shareImage = $this->getShareImage($uid,$orderId,$score);
- $shareImage = $shareImage ? path_compat($shareImage) : '';
- // 告知结果
- return json_send(['code'=>'success','msg'=>'申请成功','data'=>['share_info'=>['title'=>'我已经完成一笔订单,你也快来吧','path'=>'/pages/index/index','imageUrl'=>$shareImage]]]);
- // 返回结果
- } catch (\Throwable $th) {
- // 回退数据
- DB::rollBack();
- // 下单失败提示
- return json_send(['code'=>'error','msg'=>'申请失败,请重试','data'=>['error'=>$th->getMessage().$th->getLine()]]);
- }
- }
- /**
- * 分享图片
- *
- */
- private function getShareImage($uid,$orderId,$score=0){
- // 尝试执行
- try {
- // 加载图片
- $image = Image::make(public_path('uploads/images/default/').'order_receipt_share.jpg');
- // 设置文字样式(字体、大小、颜色等)
- $fontPath = public_path().'/fonts/msyh14.ttf';// 指定字体文件路径
- // 文本
- $text = $score ? '我完成了一笔订单,即将获得'.$score.'积分' : '我完成了一笔订单';
- // 给图片写入文字
- $image->text($text, 240,80,function (Font $font) use ($fontPath) {
- $font->file($fontPath); // 字体文件地址
- $font->size(24); // 字体大小
- $font->color('#FFFFFF');
- $font->align('center');
- });
- // 给图片写入文字
- $image->text('你也来试试吧', 240,140,function (Font $font) use ($fontPath) {
- $font->file($fontPath); // 字体文件地址
- $font->size(24); // 字体大小
- $font->color('#FFFFFF');
- $font->align('center');
- });
- // 路径
- $path = public_path('uploads/order_receipt_share/');
- // 判断路径是不是存在
- if( !is_dir($path) ) mkdir($path,0755,true);
- // 路径
- $filename = $path.$uid.'_'.$orderId.'.jpg';
- // 保存图片
- $image->save($filename);
- // 返回路径
- return 'order_receipt_share/'.$uid.'_'.$orderId.'.jpg';
- } catch (\Throwable $th) {
- dd($th);
- // 返回路径
- return '';
- }
- }
-
- }
|