Ver Fonte

一些功能

Kirin há 3 anos atrás
pai
commit
9d41d3e647

+ 3 - 3
app/api/controller/activity/StoreExchangeController.php

@@ -72,10 +72,10 @@ class StoreExchangeController
         $siteUrl = sys_config('site_url');
         $storeInfo['image'] = set_file_url($storeInfo['image'], $siteUrl);
         $storeInfo['image_base'] = set_file_url($storeInfo['image'], $siteUrl);
-        $storeInfo['code_base'] = QrcodeService::getWechatQrcodePath($id . '_seckill_detail_wap.jpg', '/activity/seckill_detail/' . $id . '/' . $time);
+        $storeInfo['code_base'] = QrcodeService::getWechatQrcodePath($id . '_exchange_detail_wap.jpg', '/activity/exchange_detail/' . $id . '/' . $time);
         $uid = $request->uid();
-        $storeInfo['userLike'] = StoreProductRelation::isProductRelation($id, $uid, 'like', 'product_seckill');
-        $storeInfo['like_num'] = StoreProductRelation::productRelationNum($id, 'like', 'product_seckill');
+        $storeInfo['userLike'] = StoreProductRelation::isProductRelation($id, $uid, 'like', 'product_exchange');
+        $storeInfo['like_num'] = StoreProductRelation::productRelationNum($id, 'like', 'product_exchange');
         $storeInfo['userCollect'] = StoreProductRelation::isProductRelation($storeInfo['product_id'], $uid, 'collect');
         $storeInfo['uid'] = $uid;
         $storeInfo['description'] = htmlspecialchars_decode(StoreDescription::getDescription($id, 5));

+ 140 - 3
app/api/controller/admin/StoreOrderController.php

@@ -21,9 +21,7 @@ use crmeb\repositories\ShortLetterRepositories;
 use crmeb\services\{
     MiniProgramService, UtilService, WechatService
 };
-use app\models\store\{
-    StoreCart, StoreOrder, StoreOrderStatus, StorePink, StoreService
-};
+use app\models\store\{StoreCart, StoreExchangeOrder, StoreOrder, StoreOrderStatus, StorePink, StoreService};
 use app\models\system\SystemStoreStaff;
 
 /**
@@ -318,6 +316,34 @@ class StoreOrderController
         return app('json')->successful(StoreOrder::orderList($where));
     }
 
+    /**
+     * 订单列表
+     * @param Request $request
+     * @return mixed
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function exchange_order_lst(Request $request)
+    {
+        $uid = $request->uid();
+        $where = UtilService::getMore([
+            ['status', ''],
+            ['user_phone', ''],
+            ['is_del', 0],
+            ['data', ''],
+            ['order', ''],
+            ['page', 0],
+            ['limit', 0]
+        ], $request);
+        $info = SystemStoreStaff::where('uid', $uid)->where('status', 1)->find();
+        if ($info) {
+            $where['store_id'] = $info['store_id'];
+        }
+        if (!$where['limit']) return app('json')->successful([]);
+        return app('json')->successful(StoreExchangeOrder::orderList($where));
+    }
+
     /**
      * 订单详情
      * @param Request $request
@@ -805,6 +831,55 @@ class StoreOrderController
         }
     }
 
+    /**
+     * 门店核销
+     * @param Request $request
+     * @return
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function exchange_order_verific(Request $request)
+    {
+        $uid = $request->uid();
+        list($verify_code, $is_confirm) = UtilService::postMore([
+            ['verify_code', ''],
+            ['is_confirm', 0]
+        ], $request, true);
+        if (!$verify_code) return app('json')->fail('缺少核销码');
+        $orderInfo = StoreExchangeOrder::where('verify_code', $verify_code)->where('store_id', 'in', [SystemStoreStaff::where('uid', $uid)->value('store_id'), 0])->where('refund_status', 0)->find();
+        if (!$orderInfo) return app('json')->fail('核销的兑换券不存在于该门店或未支付或已退款');
+        if ($orderInfo->status > 0) return app('json')->fail('兑换券已经核销');
+        if (!$is_confirm) {
+            $orderInfo['image'] = StoreCart::getProductImage($orderInfo->cart_id);
+            return app('json')->success($orderInfo->toArray());
+        }
+        StoreExchangeOrder::beginTrans();
+        try {
+            if (SystemStoreStaff::verifyStatus($uid) && ($storeStaff = SystemStoreStaff::where('uid', $uid)->field(['store_id', 'id'])->find())) {
+                $orderInfo->clerk_id = $storeStaff['id'];
+            }
+            $orderInfo->status = 1;
+            if ($orderInfo->store_id == 0) {
+                $orderInfo->store_id = SystemStoreStaff::where('uid', $uid)->value('store_id');
+                SystemStore::decStock($orderInfo);
+            }
+            if ($orderInfo->save()) {
+                StoreExchangeOrder::commitTrans();
+                return app('json')->success('核销成功');
+            } else {
+                StoreExchangeOrder::rollbackTrans();
+                return app('json')->fail('核销失败');
+            }
+        } catch (\PDOException $e) {
+            StoreExchangeOrder::rollbackTrans();
+            return app('json')->fail($e->getMessage());
+        } catch (\Exception $e) {
+            StoreExchangeOrder::rollbackTrans();
+            return app('json')->fail($e->getMessage());
+        }
+    }
+
     public function rechargeList(Request $request)
     {
         $uid = $request->uid();
@@ -882,4 +957,66 @@ class StoreOrderController
         }
     }
 
+    public function exchange_order_back_deposit(Request $request)
+    {
+        $uid = $request->uid();
+        $data = UtilService::postMore([
+            ['id', ''],
+            ['refund_price', 0],
+            ['type', 1],
+        ]);
+        if (!$data['id']) return app('json')->fail('数据不存在');
+        $orderInfo = StoreExchangeOrder::where('id', $data['id'])->where('store_id', SystemStoreStaff::where('uid', $uid)->value('store_id'))->where('refund_status', 0)->find();
+        if (!$orderInfo) return app('json')->fail('订单不存在于该门店或未支付或已退款');
+        if ($orderInfo['deposit'] == $orderInfo['deposit_back']) return app('json')->fail('已退完押金!不能再退款了');
+        if (!$data['refund_price']) return app('json')->fail('请输入退款金额');
+        $refund_price = $data['refund_price'];
+        $data['deposit_back'] = bcadd($data['refund_price'], $orderInfo['deposit_back'], 2);
+        $bj = bccomp((float)$orderInfo['deposit'], (float)$data['deposit_back'], 2);
+        if ($bj < 0) return app('json')->fail('退押金额大于支付押金,请修改退押金额');
+        if ($data['type'] == 1) {
+            $data['deposit_status'] = 1;
+        } else if ($data['type'] == 2) {
+            $data['deposit_status'] = 0;
+        }
+//        $type = $data['type'];
+        unset($data['type']);
+        unset($data['refund_price']);
+        $refund_data['pay_price'] = bcadd($orderInfo['pay_price'], $orderInfo['deposit'], 2);
+        $refund_data['refund_price'] = $refund_price;
+        $refund_data['refund_id'] = 'refund_deposit' . $orderInfo['order_id'] . time();
+
+        if ($orderInfo['pay_type'] == 'weixin') {
+            if ($orderInfo['is_channel'] == 1) {//小程序
+                try {
+                    MiniProgramService::payOrderRefund($orderInfo['order_id'], $refund_data);//2.5.36
+                } catch (\Exception $e) {
+                    return app('json')->fail($e->getMessage());
+                }
+            } else {//TODO 公众号
+                try {
+                    WechatService::payOrderRefund($orderInfo['order_id'], $refund_data);
+                } catch (\Exception $e) {
+                    return app('json')->fail($e->getMessage());
+                }
+            }
+        } else if ($orderInfo['pay_type'] == 'yue') {
+            BaseModel::beginTrans();
+            $usermoney = User::where('uid', $orderInfo['uid'])->value('now_money');
+            $res1 = User::bcInc($orderInfo['uid'], 'now_money', $refund_price, 'uid');
+            $res2 = UserBill::income('商品退押金', $orderInfo['uid'], 'now_money', 'pay_deposit_refund', $refund_price, $orderInfo['id'], bcadd($usermoney, $refund_price, 2), '订单退押金到余额' . floatval($refund_price) . '元');
+            $res = $res1 && $res2;
+            BaseModel::checkTrans($res);
+            if (!$res) return app('json')->fail('余额退押金失败!');
+        }
+        $resEdit = StoreExchangeOrder::edit($data, $orderInfo['id']);
+        if ($resEdit) {
+            \app\admin\model\order\StoreOrderStatus::setStatus($orderInfo['oid'], 'refund_deposit', '退押金给用户' . $refund_price . '元');
+            return app('json')->success('成功!');
+        } else {
+            \app\admin\model\order\StoreOrderStatus::setStatus($orderInfo['oid'], 'refund_deposit', '退押金给用户' . $refund_price . '元失败');
+            return app('json')->fail('失败!');
+        }
+    }
+
 }

+ 2 - 0
app/api/controller/order/StoreOrderController.php

@@ -372,6 +372,8 @@ class StoreOrderController
         return app('json')->successful(StoreOrder::getUserOrderSearchList($request->uid(), $type, $page, $limit, $search));
     }
 
+
+
     public function gift($uni, Request $request)
     {
         list($uid) = UtilService::postMore([['uid', 0]], $request, true);

+ 1 - 1
app/models/store/StoreExchange.php

@@ -229,7 +229,7 @@ class StoreExchange extends BaseModel
                     ]);
             }
         }
-        StoreOrder::where('id', $order['id'])->update(['status' => 2]);
+        StoreOrder::where('id', $order['id'])->update(['status' => 2, 'deposit' => 0]);
         return $res;
     }
 

+ 48 - 0
app/models/store/StoreExchangeOrder.php

@@ -31,6 +31,54 @@ class StoreExchangeOrder extends BaseModel
     use ModelTrait;
 
 
+    public static function orderList($where)
+    {
+        $model = self::getOrderWhere($where, self::alias('a')->join('user r', 'r.uid=a.uid', 'LEFT'), 'a.', 'r')->field('a.*');
+        if ($where['order'] != '') {
+            $model = $model->order(self::setOrder($where['order']));
+        } else {
+            $model = $model->order('a.id desc');
+        }
+        return ($data = $model->page((int)$where['page'], (int)$where['limit'])->select()) && count($data) ? $data->toArray() : [];
+    }
+
+    public static function getOrderWhere($where, $model, $aler = '', $join = '')
+    {
+        if (isset($where['status']) && $where['status'] != '') $model = self::statusWhere($where['status'], $model, $aler);
+        if (isset($where['store_id']) && $where['store_id'] != '' && $where['store_id'] != -1) $model = $model->where($aler . 'store_id', $where['store_id']);
+        if (isset($where['user_phone']) && $where['user_phone'] != '')
+            $model = $model->where($aler . 'user_phone', 'LIKE', "%$where[user_phone]%");
+        if (isset($where['real_name']) && $where['real_name'] != '')
+            $model = $model->where($aler . 'order_id|' . $aler . 'real_name|' . $aler . 'user_phone' . ($join ? '|' . $join . '.nickname|' . $join . '.uid' : ''), 'LIKE', "%$where[real_name]%");
+        if (isset($where['data']) && $where['data'] !== '')
+            $model = self::getModelTime($where, $model, $aler . 'add_time');
+        return $model;
+    }
+
+    public static function getAdminOrderDetail($orderId, $field = '*', $other_where = [])
+    {
+        return self::where('order_id', $orderId)->where($other_where)->field($field)->find();
+    }
+
+    public static function statusWhere($status, $model = null, $alert = '')
+    {
+        if ($model == null) $model = new self;
+        if ('' === $status)
+            return $model;
+        else if ($status == 0)//待使用
+            return $model->where($alert . 'status', 0)->where($alert . 'refund_status', 0);
+        else if ($status == 1)//已使用
+            return $model->where($alert . 'status', 1)->where($alert . 'refund_status', 0);
+        else if ($status == -1)//退款中
+            return $model->where($alert . 'refund_status', 1);
+        else if ($status == -2)//已退款
+            return $model->where($alert . 'refund_status', 2);
+        else if ($status == -3)//退款
+            return $model->where($alert . 'refund_status', 'in', '1,2');
+        else
+            return $model;
+    }
+
     public static function getUserOrderSearchList($uid, $type, $page, $limit, $search)
     {
         if ($search) {

+ 5 - 1
route/api/route.php

@@ -37,6 +37,7 @@ Route::group(function () {
     Route::get('admin/order/statistics', 'admin.StoreOrderController/statistics')->name('adminOrderStatistics');//订单数据统计
     Route::get('admin/order/data', 'admin.StoreOrderController/data')->name('adminOrderData');//订单每月统计数据
     Route::get('admin/order/list', 'admin.StoreOrderController/lst')->name('adminOrderList');//订单列表
+    Route::get('admin/exchange_order/list', 'admin.StoreOrderController/exchange_order_lst')->name('exchange_order_lst');//订单列表
     Route::get('admin/order/detail/:orderId', 'admin.StoreOrderController/detail')->name('adminOrderDetail');//订单详情
     Route::get('admin/order/delivery/gain/:orderId', 'admin.StoreOrderController/delivery_gain')->name('adminOrderDeliveryGain');//订单发货获取订单信息
     Route::post('admin/order/delivery/keep', 'admin.StoreOrderController/delivery_keep')->name('adminOrderDeliveryKeep');//订单发货
@@ -47,7 +48,9 @@ Route::group(function () {
     Route::post('admin/order/offline', 'admin.StoreOrderController/offline')->name('adminOrderOffline');//订单支付
     Route::post('admin/order/refund', 'admin.StoreOrderController/refund')->name('adminOrderRefund');//订单退款
     Route::post('admin/order/back_deposit', 'admin.StoreOrderController/back_deposit')->name('adminOrderBackDeposit');//退押金
+    Route::post('admin/exchange_order/back_deposit', 'admin.StoreOrderController/exchange_order_back_deposit')->name('exchange_order_back_deposit');//退押金
     Route::post('order/order_verific', 'admin.StoreOrderController/order_verific')->name('order');//订单核销
+    Route::post('order/exchange_order_verific', 'admin.StoreOrderController/exchange_order_verific')->name('exchange_order_verific');//订单核销
     Route::get('admin/recharge', 'admin.StoreOrderController/rechargeList')->name('rechargeList');//充值列表
 
     Route::get('order/stock', 'admin.StoreOrderController/stockList')->name('stock');//商品列表
@@ -131,7 +134,7 @@ Route::group(function () {
     Route::post('order/computed/:key', 'order.StoreOrderController/computedOrder')->name('computedOrder'); //计算订单金额
     Route::post('order/create/:key', 'order.StoreOrderController/create')->name('orderCreate'); //订单创建
     Route::get('order/data', 'order.StoreOrderController/data')->name('orderData'); //订单统计数据
-    Route::get('order/list', 'order.StoreOrderController/lst')->name('orderList'); //订单列表
+    Route::get('order/exchange/list', 'order.StoreOrderController/exchange_lst')->name('exchange_lst'); //订单列表
     Route::get('order/detail/:uni', 'order.StoreOrderController/detail')->name('orderDetail'); //订单详情
     Route::get('order/refund/reason', 'order.StoreOrderController/refund_reason')->name('orderRefundReason'); //订单退款理由
     Route::post('order/refund/verify', 'order.StoreOrderController/refund_verify')->name('orderRefundVerify'); //订单退款审核
@@ -213,6 +216,7 @@ Route::group(function () {
     Route::get('seckill/detail/:id/[:time]', 'activity.StoreSeckillController/detail')->name('seckillDetail');//秒杀产品详情
     //活动---积分
     Route::get('exchange/list', 'activity.StoreExchangeController/lst')->name('integralList');//积分产品列表
+    Route::get('exchange/order_list', 'activity.StoreExchangeController/order_list')->name('integralList');//积分产品列表
     Route::get('store_integral/list', 'activity.StoreIntegralController/lst')->name('integralList');//积分产品列表
     Route::get('exchange/detail/:id', 'activity.StoreExchangeController/detail')->name('integralDetail');//积分产品详情
     Route::get('store_integral/detail/:id', 'activity.StoreIntegralController/detail')->name('integralDetail');//积分产品详情