geek лет назад: 4
Родитель
Сommit
aa6aabd3c3

+ 31 - 0
application/api/controller/Order.php

@@ -239,6 +239,37 @@ class Order extends BaseController {
     }
 
     /**
+     * @OA\Post(path="/api/Order/createFoodOrder",
+     *   tags={"订单管理"},
+     *   summary="创建订单信息",
+     *   @OA\Parameter(name="token", in="header", description="token", @OA\Schema(type="string")),
+     *   @OA\RequestBody(
+     *     @OA\MediaType(
+     *       mediaType="multipart/form-data",
+     *         @OA\Schema(
+     *           @OA\Property(description="商品id和数量['productId' => 1,'num' => 1]", property="productIdAndNum", type="integer", default="1"),
+     *           @OA\Property(description="门店id", property="storeId", type="integer", default="1"),
+     *           @OA\Property(description="手机号", property="mobile", type="string", default="15623655623"),
+     *           required={"productIdAndNum","storeId","mobile"})
+     *       )
+     *     ),
+     *   @OA\Response(response="200", description="请求成功")
+     * )
+     */
+    public function createFoodOrder() {
+        $input = Until::getInput();
+        $rule = [
+            'productIdAndNum|商品id和数量'       => 'require',
+            'storeId|门店id'         => 'require',
+            'mobile|手机号'           => 'require'
+        ];
+        Until::check($rule, $input);
+        $data = (new OrderService())->payOrder($input);
+        Until::output($data);
+    }
+
+
+    /**
      * @OA\Post(path="/api/Order/assignStaff",
      *   tags={"订单管理"},
      *   summary="分配职员",

+ 11 - 3
application/api/controller/Product.php

@@ -75,6 +75,7 @@ class Product extends BaseController {
         Until::output($data);
     }
 
+
     /**
      * @OA\Get(path="/api/Product/typeList",
      *   tags={"产品管理"},
@@ -82,6 +83,7 @@ class Product extends BaseController {
      *   @OA\Parameter(name="token", in="header", description="token", @OA\Schema(type="string")),
      *   @OA\Parameter(name="page", in="query", description="页码", @OA\Schema(type="ineger",default="1")),
      *   @OA\Parameter(name="pageSize", in="query", description="页尺寸", @OA\Schema(type="integer",default="10")),
+     *   @OA\Parameter(name="type", in="query", description="1为洗浴 2为小食", @OA\Schema(type="integer",default="1")),
      *   @OA\RequestBody(
      *     ),
      *   @OA\Response(response="200", description="请求成功")
@@ -95,6 +97,9 @@ class Product extends BaseController {
         if (!$this->isAdmin()) {
             $model->setWhere(['status' => 1]);
         }
+        if (!empty($input['type']) && $input['type'] == 2) {
+            $model->setWhere(['type' => 2]);
+        }
         $data = $model->getProductTypeList();
         foreach ($data['list'] as &$v) {
             $v['title'] = $v['product_type_name'];
@@ -113,6 +118,7 @@ class Product extends BaseController {
      *         @OA\Schema(
      *           @OA\Property(description="产品类型名称", property="name", type="string", default="精油推背"),
      *           @OA\Property(description="产品类型图片", property="imgUrl", type="integer", default="http://xxx.com"),
+     *           @OA\Property(description="类型 1位洗浴 2为小食", property="type", type="integer", default="1"),
      *           required={"name","imgUrl"})
      *       )
      *     ),
@@ -131,12 +137,14 @@ class Product extends BaseController {
             $id = (int)$input['id'];
             $model::where(['id' => $id])->update([
                 'product_type_name'    => $input['name'],
-                'product_type_img'     => $input['imgUrl'],
+                'product_type_img'     => $input['imgUrl'] ?? '',
+                'type'     => $input['type'] ?? 1,
             ]);
         } else {
-            $id = $model->insertGetId([
+            $model->insertGetId([
                 'product_type_name'    => $input['name'],
-                'product_type_img'     => $input['imgUrl'],
+                'product_type_img'     => $input['imgUrl'] ?? '',
+                'type' => $input['type'] ?? 1
             ]);
         }
         Until::output(['isSuccess' => 1]);

+ 101 - 23
application/common/service/OrderService.php

@@ -49,6 +49,7 @@ class OrderService {
                 'order_sn'         => $orderSn,
                 'order_money'      => $orderMoney,
                 'product_id'       => $input['productId'],
+                'num'              => (int)abs($input['num']),
                 'store_id'         => $input['storeId'],
                 'appointment_time' => $input['appointmentTime'],
                 'end_time'         => $input['endTime'],
@@ -78,9 +79,9 @@ class OrderService {
         if (!Until::$isAdmin) {
             $otherData = [
                 'openId'   => $userInfo['open_id'],
-                'attach'   => 'storeId:'.$input['storeId'],
+                'attach'   => 'storeId:' . $input['storeId'],
                 'money'    => $orderMoney * 100,
-                'mark'     => '购买了'.$productInfo['product_name'],
+                'mark'     => '购买了' . $productInfo['product_name'],
                 'orderId'  => $orderSn,
                 'username' => $userInfo['name'],
                 'payCode'  => strtoupper($this->userName),
@@ -93,8 +94,85 @@ class OrderService {
                 'paySign'   => $wxOrderInfo['paySign'],
                 'timeStamp' => $wxOrderInfo['timeStamp'],
                 'signType'  => $wxOrderInfo['signType'],
-                'orderSn' => $orderSn,
-                'orderId' => $orderId
+                'orderSn'   => $orderSn,
+                'orderId'   => $orderId
+            ];
+        }
+        $this->time[] = 'leo-end' . time();
+        $order['time'] = $this->time;
+        return $order;
+    }
+
+    public function payFoodOrder($input) {
+        $orderSn = Until::createSn();
+        $productIdArr = array_column($input['productIdAndNum'], 'productId');
+        $productList = (new ProductModel())::where([['id', 'in', $productIdArr]])->field('id,current_price')->select();
+        $productIdPrice = [];
+        foreach ($productList as $pInfo) {
+            $productIdPrice[$pInfo['id']] = $pInfo['current_price'];
+        }
+        unset($pInfo);
+        $userInfo = (new UserModel())::where(['id' => Until::$userId])->find();
+        $userInfo = Until::modelToArray($userInfo);
+        if (empty($userInfo)) {
+            throw new ApiException('无此用户');
+        }
+        $model = new OrderModel();
+        try {
+            $userId = Until::$userId;
+            $orderType = 3;
+            $model->startTrans();
+            $orderMoney = 0;
+            foreach ($input['productIdAndNum'] as $pInfo) {
+                $orderMoney += $productIdPrice[$pInfo['productId']] * (int)abs($input['num']);
+            }
+            $orderId = $model->insertGetId([
+                'order_sn'         => $orderSn,
+                'order_money'      => $orderMoney,
+                'product_id'       => 0,
+                'num'              => 0,
+                'store_id'         => $input['storeId'],
+                'appointment_time' => '',
+                'end_time'         => '',
+                'mobile'           => $input['mobile'],
+                'status'           => 1,
+                'order_type'       => $orderType,
+                'user_id'          => $userId,
+            ]);
+
+            $model->commit();
+        } catch (\Exception $e) {
+            $model->rollback();
+            throw new ApiException($e->getMessage());
+        }
+        //{attach string支付主体的标识
+        //mark string商品信息
+        //money integer($int32)金额,分为单位
+        //openId string小程序的openid
+        //orderId string订单号
+        //payCode string支付标识
+        //username string用户名
+        //}
+        if (!Until::$isAdmin) {
+            $otherData = [
+                'openId'   => $userInfo['open_id'],
+                'attach'   => 'storeId:' . $input['storeId'],
+                'money'    => $orderMoney * 100,
+                'mark'     => '购买了小食',
+                'orderId'  => $orderSn,
+                'username' => $userInfo['name'],
+                'payCode'  => strtoupper($this->userName),
+            ];
+            $this->time[] = 'leo-start' . time();
+            $wxOrderInfo = $this->createOrderForOther($otherData);
+            $order = [
+                'nonceStr'  => $wxOrderInfo['nonceStr'],
+                'package'   => $wxOrderInfo['pack'],
+                'paySign'   => $wxOrderInfo['paySign'],
+                'timeStamp' => $wxOrderInfo['timeStamp'],
+                'signType'  => $wxOrderInfo['signType'],
+                'orderSn'   => $orderSn,
+                'orderId'   => $orderId
             ];
         }
         $this->time[] = 'leo-end' . time();
@@ -117,9 +195,9 @@ class OrderService {
         $model::where(['id' => $orderId])->update(['pay_sn' => $paySn]);
         $otherData = [
             'openId'   => $userInfo['open_id'],
-            'attach'   => 'storeId:'.$info['store_id'],
+            'attach'   => 'storeId:' . $info['store_id'],
             'money'    => $info['order_money'] * $info['num'] * 100,
-            'mark'     => '购买了'.$productInfo['product_name'] ?? '',
+            'mark'     => '购买了' . $productInfo['product_name'] ?? '',
             'orderId'  => $paySn,
             'username' => $userInfo['name'],
             'payCode'  => strtoupper($this->userName),
@@ -131,26 +209,26 @@ class OrderService {
             'paySign'   => $wxOrderInfo['paySign'],
             'timeStamp' => $wxOrderInfo['timeStamp'],
             'signType'  => $wxOrderInfo['signType'],
-            'orderSn' => $info['order_sn'],
-            'orderId' => $orderId
+            'orderSn'   => $info['order_sn'],
+            'orderId'   => $orderId
         ];
         return $order;
     }
 
 
     public function getPayToken() {
-//        var_dump('获取token'.time());
+        //        var_dump('获取token'.time());
         $this->time[] = 'payToken-start-' . time();
         $key = 'payToken' . $this->userName;
         $token = Cache::get($key);
         if (empty($token)) {
             $token = $this->getAuthPay();
-            Cache::set($key, $token,'7100');
-//            var_dump('接口获取token结束'.time());
+            Cache::set($key, $token, '7100');
+            //            var_dump('接口获取token结束'.time());
             return $token;
         }
         $this->time[] = 'payToken-end-' . time();
-//        var_dump('缓存获取token结束'.time());
+        //        var_dump('缓存获取token结束'.time());
         return $token;
     }
 
@@ -158,7 +236,7 @@ class OrderService {
         $client = new Client();
         $time = Until::msectime();
         $res = $client->request('Post',
-            Config::get('domain')."api/auth/create", [
+            Config::get('domain') . "api/auth/create", [
                 'json' => [
                     'username'  => $this->userName,
                     "password"  => $this->passwd,
@@ -174,11 +252,11 @@ class OrderService {
     }
 
     public function createOrderForOther(array $data) {
-//        var_dump('start'.time());
+        //        var_dump('start'.time());
         $this->time[] = 'createOrder-start-' . time();
         $client = new Client();
         $res = $client->request('Post',
-            Config::get('domain')."api/supers/wx-pay/gateway-no-order", [
+            Config::get('domain') . "api/supers/wx-pay/gateway-no-order", [
                 'json'    => $data,
                 'headers' => [
                     'API-TOKEN-V1' => $this->getPayToken()
@@ -189,7 +267,7 @@ class OrderService {
             throw new ApiException($info['msg']);
         }
         $this->time[] = 'createOrder-end-' . time();
-//        var_dump('end'.time());
+        //        var_dump('end'.time());
         return $info['data'];
     }
 
@@ -200,14 +278,14 @@ class OrderService {
             return;
         }
 
-//        var_dump($rs);
-        $model::where(['order_sn' => $orderSn])->update(['status' => 2,'pay_time' => date('Y-m-d H:i:s')]);
-        $model::where(['pay_sn' => $orderSn])->update(['status' => 2,'pay_time' => date('Y-m-d H:i:s')]);
+        //        var_dump($rs);
+        $model::where(['order_sn' => $orderSn])->update(['status' => 2, 'pay_time' => date('Y-m-d H:i:s')]);
+        $model::where(['pay_sn' => $orderSn])->update(['status' => 2, 'pay_time' => date('Y-m-d H:i:s')]);
         $wModel = new WriteOffModel();
-        $code  = $this->changeCode();
+        $code = $this->changeCode();
         $wModel::where(['order_id' => $rs['id']])->update([
             'write_off_code' => $code,
-            'over_time' => date('Y-m-d  H:i:s', time() + 2 * 60),
+            'over_time'      => date('Y-m-d  H:i:s', time() + 2 * 60),
         ]);
     }
 
@@ -215,10 +293,10 @@ class OrderService {
     public function changeCode() {
         $wModel = new WriteOffModel();
         $codeList = $wModel::where(['write_off_status' => WriteOffModel::NO_WRITE_OFF])->field('write_off_code')->select();
-        $codeList  = Until::modelToArray($codeList);
+        $codeList = Until::modelToArray($codeList);
 
         $codeArr = [];
-        foreach ($codeList as $v)  {
+        foreach ($codeList as $v) {
             $codeArr[] = $v['write_off_code'];
         }
         $code = $this->makeUniqCode($codeArr);

+ 49 - 0
public/api.yaml

@@ -913,6 +913,44 @@ paths:
       responses:
         '200':
           description: 请求成功
+  /api/Order/createFoodOrder:
+    post:
+      tags:
+        - 订单管理
+      summary: 创建订单信息
+      operationId: 'app\api\controller\Order::createFoodOrder'
+      parameters:
+        -
+          name: token
+          in: header
+          description: token
+          schema:
+            type: string
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              required:
+                - productIdAndNum
+                - storeId
+                - mobile
+              properties:
+                productIdAndNum:
+                  description: '商品id和数量[''productId'' => 1,''num'' => 1]'
+                  type: integer
+                  default: '1'
+                storeId:
+                  description: 门店id
+                  type: integer
+                  default: '1'
+                mobile:
+                  description: 手机号
+                  type: string
+                  default: '15623655623'
+              type: object
+      responses:
+        '200':
+          description: 请求成功
   /api/Order/assignStaff:
     post:
       tags:
@@ -1291,6 +1329,13 @@ paths:
           schema:
             type: integer
             default: '10'
+        -
+          name: type
+          in: query
+          description: '1为洗浴 2为小食'
+          schema:
+            type: integer
+            default: '10'
       requestBody: {  }
       responses:
         '200':
@@ -1324,6 +1369,10 @@ paths:
                   description: 产品类型图片
                   type: integer
                   default: 'http://xxx.com'
+                type:
+                  description: '类型 1位洗浴 2为小食'
+                  type: integer
+                  default: 'http://xxx.com'
               type: object
       responses:
         '200':