浏览代码

fix():增加分类

geek 4 年之前
父节点
当前提交
286cf8824e

+ 107 - 27
application/api/controller/Order.php

@@ -14,6 +14,7 @@ use app\api\model\CartProductModel;
 use app\api\model\CartModel;
 use app\api\model\GroupModel;
 use app\api\model\OrderModel;
+use app\api\model\OrderProductModel;
 use app\api\model\ProductModel;
 use app\api\model\UserModel;
 use app\api\model\WriteOffModel;
@@ -72,8 +73,13 @@ class Order extends BaseController {
             $where[] = ['o.mobile', 'like', "%{$input['mobile']}%"];
         }
 
+
         if (!empty($input['writeOffStatus'])) {
-            $where[] = ['wo.write_off_status', '=', (int)$input['writeOffStatus']];
+            if (empty($input['foodOrder'])) {
+                $where[] = ['wo.write_off_status', '=', (int)$input['writeOffStatus']];
+            }else if ($input['foodOrder'] == 2){
+                $model->setOp('write_off_status', 'left');
+            }
         }
 
         if (!empty($input['orderStatus'])) {
@@ -99,7 +105,7 @@ class Order extends BaseController {
         }
 
         if (!empty($input['orderType'])) {
-            $where[] = ['store.order_type', '=', $input['orderType']];
+            $where[] = ['o.order_type', '=', $input['orderType']];
         }
 
         if (!$this->isAdmin()) {
@@ -111,9 +117,20 @@ class Order extends BaseController {
 
         $model->setWhere($where);
         $data = $model->getOrderList();
+        $orderIds = array_column($data['list'], 'id');
+        $productList = (new OrderProductModel())::where([['order_id', 'in', $orderIds]])->select();
+        $productList = Until::modelToArray($productList);
+        $product = [];
+        foreach ($productList as &$v) {
+            unset($v['product_snap']);
+            $product[$v['order_id']][] = $v;
+        }
+
         $statusFilter = [1 => '未支付', 2 => '已支付', 3 => '已关闭'];
 
         foreach ($data['list'] as &$one) {
+
+            $one['productList'] = $product[$one['id']] ?? [];
             $one['statusText'] = $statusFilter[$one['status']];
             if ($one['status'] === OrderModel::IS_PAY) {
                 if ($one['write_off_status'] == 1) {
@@ -171,6 +188,12 @@ class Order extends BaseController {
         $where[] = ['o.id', '=', (int)$id];
         $model->setWhere($where);
         $info = $model->getOrderInfo();
+        $productList = (new OrderProductModel())::where([['order_id', '=', $info['id']]])->select();
+        $productList = Until::modelToArray($productList);
+        foreach ($productList as &$v) {
+            unset($v['product_snap']);
+        }
+        $info['productList'] = $productList;
         Until::output(['info' => $info]);
     }
 
@@ -250,7 +273,8 @@ class Order extends BaseController {
      *       mediaType="multipart/form-data",
      *         @OA\Schema(
      *           @OA\Property(description="购物车id", property="cartId", type="integer", default="1"),
-     *           required={"cartId"})
+     *           @OA\Property(description="台桌id", property="tableId", type="integer", default="1"),
+     *           required={"cartId","tableId"})
      *       )
      *     ),
      *   @OA\Response(response="200", description="请求成功")
@@ -260,6 +284,7 @@ class Order extends BaseController {
         $input = Until::getInput();
         $rule = [
             'cartId|商品id和数量' => 'require',
+            'tableId|桌台id' => 'require',
         ];
         Until::check($rule, $input);
         $data = (new OrderService())->payFoodOrder($input);
@@ -520,17 +545,28 @@ class Order extends BaseController {
             }
 
             if ($input['type'] == 2) {
+                if ($rs['num'] == 1) {
+                    $cartProductModel::where(['id' => $rs['id']])->delete();
+                }
                 $cartProductModel::where(['id' => $rs['id']])->dec('num', 1)->update();
             }
         }
         $cartInfo = Until::modelToArray($cartInfo);
-        $cartModel->setFields('cp.product_id,cp.num,p.product_name,p.current_price,p.product_img');
+        $cartModel->setFields('c.*,cp.product_id,cp.num,p.product_name,p.current_price,p.product_img');
         $rs = $cartModel->getCartList();
-        $cartInfo['list'] = $rs;
+        $cartInfo['totalNum'] = 0;
+        $cartInfo['totalPrice'] = 0;
+        foreach ($rs as $v) {
+            $cartInfo['totalNum'] += $v['num'];
+            $cartInfo['totalPrice'] += $v['num'] * $v['current_price'];
+        }
+        $cartInfo['id'] = $v['id'];
+        $cartInfo['table_id'] = $v['table_id'];
+        $cartInfo['store_id'] = $v['store_id'];
+        $cartInfo['user_id'] = $v['user_id'];
+        $cartInfo['create_time'] = $v['create_time'];
+        $cartInfo['list'] = $cartInfo['totalNum'] == 0 ? [] : $rs;
         Until::output($cartInfo);
-
-
-        Until::output();
     }
 
     /**
@@ -558,30 +594,74 @@ class Order extends BaseController {
         ];
         Until::check($rule, $input);
         $model = new CartModel();
-        $cartInfo = $model::where([
-            'table_id' => $input['tableId'],
-            'store_id' => (int)$input['storeId'],
-            'user_id'  => $this->userId,
-            'status'   => CartModel::NORMAL
-        ])->find();
-        if (empty($cartInfo)) {
-            $model->insertGetId([
-                'table_id' => $input['tableId'],
+        try {
+            $model->startTrans();
+            $whereData = [
+                'table_id' => (int)$input['tableId'],
                 'store_id' => (int)$input['storeId'],
                 'user_id'  => $this->userId,
                 'status'   => CartModel::NORMAL
+            ];
+            $cartInfo = $model::where($whereData)->find();
+            $cartInfo = Until::modelToArray($cartInfo);
+            if (empty($cartInfo)) {
+                $id = $model->insertGetId($whereData);
+            }
+            $model->setWhere([
+                'c.status'   => CartModel::NORMAL,
+                'c.user_id'  => $this->userId,
+                'c.table_id' => (int)$input['tableId'],
+                'c.store_id' => (int)$input['storeId']
             ]);
+
+            $model->setFields('c.*,cp.product_id,cp.num,p.product_name,p.current_price,p.product_img');
+            $rs = $model->getCartList();
+            $model->commit();
+        }catch (\Exception $e) {
+            $model->rollback();
+            throw new ApiException($e->getMessage());
         }
-        $model->setWhere([
-            'c.status'   => CartModel::NORMAL,
-            'c.user_id'  => $this->userId,
-            'c.table_id' => $input['tableId'],
-            'c.store_id' => $input['storeId']
-        ]);
-        $cartInfo = Until::modelToArray($cartInfo);
-        $model->setFields('cp.product_id,cp.num,p.product_name,p.current_price,p.product_img');
-        $rs = $model->getCartList();
-        $cartInfo['list'] = $rs;
+
+        $cartInfo['totalPrice'] = 0;
+        $cartInfo['totalNum'] = 0;
+        foreach ($rs as $v) {
+            $cartInfo['totalNum'] += $v['num'];
+            $cartInfo['totalPrice'] += $v['num'] * $v['current_price'];
+        }
+        $cartInfo['id'] = $v['id'];
+        $cartInfo['table_id'] = $v['table_id'];
+        $cartInfo['store_id'] = $v['store_id'];
+        $cartInfo['user_id'] = $v['user_id'];
+        $cartInfo['create_time'] = $v['create_time'];
+        $cartInfo['totalPrice'] = number_format($cartInfo['totalPrice'], 2);
+        $cartInfo['list'] = $cartInfo['totalNum'] == 0 ? [] : $rs;
         Until::output($cartInfo);
     }
+
+    /**
+     * @OA\Post(path="/api/Order/clearCart",
+     *   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", property="cartId", type="integer", default="1"),
+     *           required={"cartId"})
+     *       )
+     *     ),
+     *   @OA\Response(response="200", description="请求成功")
+     * )
+     */
+    public function clearCart() {
+        $input = Until::getInput();
+        $rule = [
+            'cartId|购物车id' => 'require',
+        ];
+        Until::check($rule, $input);
+        $model = new CartModel();
+        $model::where(['id' => $input['cartId']])->update(['status' => 0]);
+        Until::output();
+    }
 }

+ 10 - 5
application/api/controller/Product.php

@@ -85,23 +85,28 @@ 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\Parameter(name="type", in="query", description="1为洗浴 2为小食 3全部", @OA\Schema(type="integer",default="1")),
      *   @OA\RequestBody(
      *     ),
      *   @OA\Response(response="200", description="请求成功")
      * )
      */
     public function typeList() {
-        $input = request()->get();
-        $model = new ProductModel();
+        $input = Until::getInput();
+        $model = new ProductTypeModel();
         $model->setPage($input['page'] ?? 1);
         $model->setPageSize($input['pageSize'] ?? 10);
+        $where = [];
         if (!$this->isAdmin()) {
-            $model->setWhere(['status' => 1]);
+            $where[] = ['status','=', 1];
         }
         if (!empty($input['type']) && $input['type'] == 2) {
-            $model->setWhere(['type' => 2]);
+            $where[] = ['type','=', 2];
+        }
+        if (!empty($input['type']) && $input['type'] == 1) {
+            $where[] = ['type','=', 1];
         }
+        $model->setWhere($where);
         $data = $model->getProductTypeList();
         foreach ($data['list'] as &$v) {
             $v['title'] = $v['product_type_name'];

+ 16 - 0
application/api/model/BaseModel.php

@@ -21,6 +21,7 @@ class BaseModel extends Model {
     private $sort = false;
     private $sortWhere = '';
     private $fields = '';
+    private $op = [];
 
     /**
      * @return string
@@ -79,6 +80,7 @@ class BaseModel extends Model {
                 ->where($this->where)
                 ->page($this->getPage(), $this->getPageSize())
                 ->select();
+//            var_dump($selectModel->getLastSql());
             $list = Until::modelToArray($list);
         }
         return [
@@ -162,4 +164,18 @@ class BaseModel extends Model {
     public function getField(string $field) {
         $this->field = $field;
     }
+
+    /**
+     * @return string
+     */
+    public function getOp(string $field) {
+        return $this->op[$field] ?? '';
+    }
+
+    /**
+     * @param array $op
+     */
+    public function setOp(string $field,$value) {
+        $this->op[$field] = $value;
+    }
 }

+ 3 - 2
application/api/model/CartModel.php

@@ -18,10 +18,11 @@ class CartModel extends  BaseModel {
     public function getCartList() {
         $rs = $this->alias('c')
             ->field($this->getFields())
-            ->join('cart_product cp', 'cp.cart_id = c.id')
-            ->join('product p','p.id = cp.product_id')
+            ->join('cart_product cp', 'cp.cart_id = c.id','left')
+            ->join('product p','p.id = cp.product_id','left')
             ->where($this->getWhere())
             ->select();
+//        var_dump($this->getLastSql());
         return Until::modelToArray($rs);
     }
 

+ 9 - 4
application/api/model/OrderModel.php

@@ -21,22 +21,27 @@ class OrderModel  extends BaseModel {
 
 
     public function getOrderList() {
+        if ($this->getOp('write_off_status')) {
+            $con = 'wo.order_id = o.id and wo.write_off_status = 2';
+        }else {
+            $con = 'wo.order_id = o.id';
+        }
         $countModel = $this->alias('o')
             ->join('store store', 'store.id = o.store_id','left')
             ->join('staff staff', 'staff.id = o.staff_id','left')
-            ->join('write_off wo', 'wo.order_id = o.id','left')
+            ->join('write_off wo', $con,'left')
             ->join('admin ad','ad.id = wo.admin_id','left')
             ->join('user u','u.id = o.user_id','left')
             ->join('discuss_order discussOrder','discussOrder.order_id = o.id and discussOrder.user_id = o.user_id','left');
         $selectModel = $this->alias('o')
             ->field('o.*,store.store_name,store.address,discussOrder.id as discussId,staff.staff_name,wo.write_off_code,
             wo.write_off_status,wo.write_off_time,wo.admin_id as writeOffAdminId,wo.over_time as  writeOffOverTime,
-            p.product_name,p.product_img,
+            p.product_name,p.product_img,p.type as productType,
             u.name as userName,ad.name as writeOffName')
             ->join('store store', 'store.id = o.store_id','left')
             ->join('staff staff', 'staff.id = o.staff_id','left')
             ->join('product p', 'p.id = o.product_id','left')
-            ->join('write_off wo', 'wo.order_id = o.id','left')
+            ->join('write_off wo', $con,'left')
             ->join('user u','u.id = o.user_id','left')
             ->join('admin ad','ad.id = wo.admin_id','left')
             ->join('discuss_order discussOrder','discussOrder.order_id = o.id and discussOrder.user_id = o.user_id','left')
@@ -50,7 +55,7 @@ class OrderModel  extends BaseModel {
         $selectModel = $this->alias('o')
             ->field('o.*,store.store_name,store.address,store.mobile as storeMobile,discussOrder.id as discussId,staff.staff_name,wo.write_off_code,
             wo.write_off_status,wo.write_off_time,wo.admin_id as writeOffAdminId,wo.over_time as writeOffOverTime,wo.create_time as writeOffCreateTime,
-            p.product_name,p.product_img,store.latitude,store.longitude,ad.name as writeOffName')
+            p.product_name,p.product_img,p.type as productType,store.latitude,store.longitude,ad.name as writeOffName')
             ->join('store store', 'store.id = o.store_id','left')
             ->join('staff staff', 'staff.id = o.staff_id','left')
             ->join('product p', 'p.id = o.product_id','left')

+ 0 - 5
application/api/model/ProductModel.php

@@ -44,9 +44,4 @@ class ProductModel  extends BaseModel {
         return Until::modelToArray($selectModel);
     }
 
-    public function getProductTypeList() {
-        $count = Db::table('product_type');
-        $select= Db::table('product_type');
-        return $this->joinModelPageList($count, $select);
-    }
 }

+ 8 - 0
application/api/model/ProductTypeModel.php

@@ -7,7 +7,15 @@
 namespace app\api\model;
 
 
+use think\Db;
+
 class ProductTypeModel extends BaseModel {
 
     protected $table  = 'product_type';
+
+    public function getProductTypeList() {
+        $count = $this;
+        $select = $this;
+        return $this->joinModelPageList($count, $select);
+    }
 }

+ 7 - 14
application/common/service/OrderService.php

@@ -62,16 +62,6 @@ class OrderService {
                 'user_id'          => $userId,
             ]);
             $opModel = new OrderProductModel();
-            //  `product_name` varchar(255) NOT NULL,
-            //  `product_content` text COMMENT '产品介绍',
-            //  `product_img` varchar(1024) NOT NULL COMMENT '产品图片',
-            //  `old_price` decimal(10,2) NOT NULL COMMENT '原价',
-            //  `current_price` decimal(10,2) NOT NULL COMMENT '现价',
-            //  `company_id` int(11) NOT NULL COMMENT '所属公司',
-            //  `brand_id` int(11) NOT NULL COMMENT '所属品牌',
-            //  `product_type_id` int(11) NOT NULL COMMENT '分类id',
-            //  `type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '1 洗浴产品  2小食',
-            //  `status` tinyint(2) NOT NULL COMMENT '状态  1正常 2下架',
             $opModel->insert([
                 'order_id'      => $orderId,
                 'product_id'    => $input['productId'],
@@ -154,12 +144,14 @@ class OrderService {
             $userId = Until::$userId;
             $orderType = 3;
             $model->startTrans();
+            $cartModel::where(['id' => $input['cartId']])->update(['status' => 0]);
             $orderId = $model->insertGetId([
                 'order_sn'         => $orderSn,
                 'order_money'      => $orderMoney,
                 'product_id'       => 0,
                 'num'              => 0,
                 'store_id'         => $storeId,
+                'table_id'         => $input['tableId'],
                 'appointment_time' => null,
                 'end_time'         => null,
                 'mobile'           => '',
@@ -184,7 +176,7 @@ class OrderService {
                 ];
             }
             $opModel->insertAll($recordData);
-
+            $cartModel::where(['id' => $input['cartId']])->update(['status' => 0]);
             $model->commit();
         } catch (\Exception $e) {
             $model->rollback();
@@ -228,7 +220,7 @@ class OrderService {
     public function payAgain(int $orderId) {
         $model = new OrderModel();
         $info = $model::where(['id' => $orderId])->find();
-        $productInfo = (new ProductModel())::where(['id' => $info['product_id']])->find();
+//        $productInfo = (new ProductModel())::where(['id' => $info['product_id']])->find();
         if ($info['status'] === OrderModel::IS_PAY) {
             throw new ApiException('订单已支付');
         }
@@ -241,8 +233,8 @@ class OrderService {
         $otherData = [
             'openId'   => $userInfo['open_id'],
             'attach'   => 'storeId:' . $info['store_id'],
-            'money'    => $info['order_money'] * $info['num'] * 100,
-            'mark'     => '购买了' . $productInfo['product_name'] ?? '',
+            'money'    => $info['order_money'] * 100,
+            'mark'     => '购买了商品',
             'orderId'  => $paySn,
             'username' => $userInfo['name'],
             'payCode'  => strtoupper($this->userName),
@@ -356,4 +348,5 @@ class OrderService {
         return $code;
     }
 
+
 }

+ 5 - 0
public/api.yaml

@@ -932,11 +932,16 @@ paths:
             schema:
               required:
                 - cartId
+                - tableId
               properties:
                 cartId:
                   description: 购物车id
                   type: integer
                   default: '1'
+                tableId:
+                  description: 台桌id
+                  type: integer
+                  default: '1'
               type: object
       responses:
         '200':