APPLE 3 лет назад
Родитель
Сommit
c2eeed0165

+ 39 - 0
app/Http/Controllers/Api/v1/GoodsController.php

@@ -27,6 +27,45 @@ class GoodsController extends webApp
     }
 
     /**
+     * @return array
+     */
+    public function lists()
+    {
+        $params = request()->all();
+        $pageSize = isset($params['pageSize'])? $params['pageSize'] : 18;
+        $params['shop_id'] = $this->shopId;
+        $datas = GoodsService::make()->getDataList($params, $pageSize);
+        return message(1010, true, $datas);
+    }
+
+    /**
+     * @return array
+     */
+    public function wait()
+    {
+        $params = request()->all();
+        $pageSize = isset($params['pageSize'])? $params['pageSize'] : 18;
+        $params['shop_id'] = $this->shopId;
+        $params['is_trade'] = 2;
+        $datas = GoodsService::make()->getDataList($params, $pageSize);
+        return message(1010, true, $datas);
+    }
+
+    /**
+     * 上架审核
+     * @return array
+     */
+    public function sell()
+    {
+        $params = request()->all();
+        $pageSize = isset($params['pageSize'])? $params['pageSize'] : 18;
+        $params['shop_id'] = $this->shopId;
+        $params['status'] = 4;
+        $datas = GoodsService::make()->getTradeGoods($params, $pageSize);
+        return message(1010, true, $datas);
+    }
+
+    /**
      * 积分商品
      * @return array
      */

+ 37 - 5
app/Http/Controllers/Api/v1/OrderController.php

@@ -7,6 +7,7 @@ use App\Services\Common\GoodsService;
 use App\Services\Common\MemberService;
 use App\Services\Common\OrderService;
 use App\Services\Common\ScoreGoodsService;
+use App\Services\Common\TradeService;
 
 /**
  * 积分订单
@@ -25,18 +26,49 @@ class OrderController extends webApp
         return message(1010, true, $datas);
     }
 
+    public function info()
+    {
+        $id = request()->post('id', 0);
+        $info = OrderService::make()->getInfo($id);
+        return message(1010, true, $info);
+    }
+
     /**
      * 兑换
      * @return array
      */
     public function exchange()
     {
-        $params = request()->all();
-        $goodsId = isset($params['id'])? $params['id'] : 0;
-        if(GoodsService::make()->exchange($goodsId)){
-            return message(GoodsService::make()->getError(), true);
+        if($id = OrderService::make()->exchange($this->userId, $this->shopId)){
+            return message(2071, true,['id'=> $id]);
+        }else{
+            return message(2072, false);
+        }
+    }
+
+    /**
+     * 订单支付
+     * @return array
+     */
+    public function pay()
+    {
+        if(OrderService::make()->pay($this->userId)){
+            return message(OrderService::make()->getError(), true);
+        }else{
+            return message(OrderService::make()->getError(), false);
+        }
+    }
+
+    /**
+     * 收货
+     * @return array
+     */
+    public function receive()
+    {
+        if(OrderService::make()->receive()){
+            return message(OrderService::make()->getError(), true);
         }else{
-            return message(GoodsService::make()->getError(), false);
+            return message(OrderService::make()->getError(), false);
         }
     }
 }

+ 4 - 0
app/Http/Controllers/Api/v1/TradeController.php

@@ -39,6 +39,10 @@ class TradeController extends webApp
         return message(1010, true, $datas);
     }
 
+    /**
+     * 详情
+     * @return array|mixed
+     */
     public function info()
     {
         $id = request()->post('id', 0);

+ 49 - 0
app/Services/Common/GoodsService.php

@@ -80,7 +80,11 @@ class GoodsService extends BaseService
                 $keyword = isset($params['keyword'])? $params['keyword'] : '';
                 if($keyword){
                     $query->where('a.goods_name','like',"%{$keyword}%")->orWhere('c.name','like',"%{$keyword}%")->orWhere('b.nickname','like',"%{$keyword}%")->orWhere('b.mobile','like',"%{$keyword}%");
+                }
 
+                $username = isset($params['username'])? $params['username'] : '';
+                if($username){
+                    $query->orWhere('b.nickname','like',"%{$keyword}%")->orWhere('b.mobile','like',"%{$keyword}%");
                 }
             })
             ->where(function($query) use ($params){
@@ -107,6 +111,51 @@ class GoodsService extends BaseService
         ];
     }
 
+    public function getTradeGoods($params, $pageSize = 15)
+    {
+        $where = ['a.mark' => 1];
+        $status = isset($params['status'])? $params['status'] : 0;
+        $userId = isset($params['user_id'])? $params['user_id'] : 0;
+        $shopId = isset($params['shop_id'])? $params['shop_id'] : 0;
+        $isSell = isset($params['is_sell'])? $params['is_sell'] : 0;
+        if($status>0){
+            $where['a.status'] = $status;
+        }
+        if($shopId>0){
+            $where['a.shop_id'] = $shopId;
+        }
+        if($isSell>0){
+            $where['a.is_sell'] = $isSell;
+        }
+        $list = $this->model->from('trade as a')
+            ->leftJoin('member as b', 'b.id', '=', 'a.user_id')
+            ->leftJoin('shop as c', 'c.id', '=', 'a.shop_id')
+            ->leftJoin('goods as d', 'd.id', '=', 'a.goods_id')
+            ->where($where)
+            ->where(function ($query) use($params){
+                $keyword = isset($params['keyword'])? $params['keyword'] : '';
+                if($keyword){
+                    $query->orWhere('b.nickname','like',"%{$keyword}%")->orWhere('b.mobile','like',"%{$keyword}%");
+                }
+            })
+            ->select(['a.*','b.nickname','b.mobile as mobile','c.name as shop_name','d.goods_name','d.thumb','d.code'])
+            ->orderBy('a.id','desc')
+            ->paginate($pageSize > 0 ? $pageSize : 9999999);
+        $list = $list? $list->toArray() :[];
+        if($list){
+            foreach($list['data'] as &$item){
+                $item['create_time'] = $item['create_time']? datetime($item['create_time'],'Y-m-d H.i.s') : '';
+                $item['thumb'] = isset($item['thumb']) && $item['thumb']? get_image_url($item['thumb']) : '';
+            }
+        }
+
+        return [
+            'pageSize'=> $pageSize,
+            'total'=>isset($list['total'])? $list['total'] : 0,
+            'list'=> isset($list['data'])? $list['data'] : []
+        ];
+    }
+
     /**
      * 添加编辑
      * @return array

+ 1 - 0
app/Services/Common/MemberAddressService.php

@@ -156,6 +156,7 @@ class MemberAddressService extends BaseService
             ->orderBy('is_default','asc')
             ->orderBy('id','desc')
             ->first();
+        $info = $info? $info->toArray() : [];
         if($info){
             RedisService::set($cacheKey, $info, rand(5, 10));
         }

+ 1 - 0
app/Services/Common/MemberBankService.php

@@ -150,6 +150,7 @@ class MemberBankService extends BaseService
             ->orderBy('is_default','asc')
             ->orderBy('id','desc')
             ->first();
+        $info = $info? $info->toArray() : [];
         if($info){
             RedisService::set($cacheKey, $info, rand(5, 10));
         }

+ 5 - 0
app/Services/Common/MemberService.php

@@ -81,6 +81,11 @@ class MemberService extends BaseService
             $info['mobile'] = $info['mobile']? format_mobile($info['mobile']):'';
             $info['show_bonus'] = GoodsService::make()->checkNewGoods($info['id']);
 
+            // 积分
+            $scoreRate = isset($info['score_rate'])? $info['score_rate'] : 1;
+            $scoreRate = $scoreRate>0 && $scoreRate<=1? $scoreRate : 1;
+            $info['real_score'] = intval($scoreRate * $info['score']);
+
             // 二维码
             $inviteUrl = env('WEB_URL').'h5/#/pages/register/index?code='.$info['code'];
             $qrcode = $this->makeQrcode($inviteUrl);

+ 188 - 2
app/Services/Common/OrderService.php

@@ -11,8 +11,12 @@
 
 namespace App\Services\Common;
 
+use App\Models\GoodsModel;
+use App\Models\MemberModel;
 use App\Models\OrderModel;
+use App\Models\ScoreGoodsModel;
 use App\Services\BaseService;
+use App\Services\ConfigService;
 
 /**
  * 积分商城订单管理-服务类
@@ -75,7 +79,7 @@ class OrderService extends BaseService
         $list = $this->model->from('orders as a')
             ->leftJoin('member as b', 'a.user_id', '=', 'b.id')
             ->leftJoin('score_goods as g', 'g.id', '=', 'a.goods_id')
-            ->leftJoin('score_goods_cate as c', 'c.id', '=', 'a.cate_id')
+            ->leftJoin('score_goods_cate as c', 'c.id', '=', 'g.cate_id')
             ->where($where)
             ->where(function ($query) use ($params) {
                 $keyword = isset($params['keyword']) ? $params['keyword'] : '';
@@ -84,7 +88,6 @@ class OrderService extends BaseService
                 }
             })
             ->where(function ($query) use ($userId) {
-
                 if($userId){
                     $query->where('a.user_id', '=', $userId);
                 }
@@ -139,4 +142,187 @@ class OrderService extends BaseService
             })
             ->count('id');
     }
+
+    /**
+     * 详情
+     * @param $id
+     * @return mixed
+     */
+    public function getInfo($id)
+    {
+        $info = $this->model->from('orders as a')
+            ->leftJoin('member as b', 'a.user_id', '=', 'b.id')
+            ->leftJoin('score_goods as g', 'g.id', '=', 'a.goods_id')
+            ->where(['a.id'=>$id,'a.mark'=>1])
+            ->select(['a.*', 'b.nickname', 'b.mobile as buy_mobile', 'g.goods_name','g.source_price', 'g.code', 'g.thumb'])
+            ->first();
+        if($info){
+            $info['create_time_text'] = $info['create_time'] ? datetime($info['create_time'], 'Y-m-d H:i:s') : '';
+            $info['pay_time'] = $info['pay_time'] ? datetime($info['pay_time'], 'Y-m-d H:i:s') : '';
+            $info['thumb'] = isset($info['thumb']) && $info['thumb'] ? get_image_url($info['thumb']) : '';
+            $info['pay_img'] = isset($info['pay_img']) && $info['pay_img'] ? get_image_url($info['pay_img']) : '';
+
+            $address = MemberAddressService::make()->getBindInfo($info['user_id']);
+            $info['address'] = $address? $address : [];
+
+            // 积分
+            $scoreRate = MemberModel::where(['id'=> $info['user_id']])->value('score_rate');
+            $scoreRate = $scoreRate>0 && $scoreRate<=1? $scoreRate : 1;
+            $info['score'] = round($info['total']/$scoreRate, 0);
+
+            $bankInfo = ConfigService::make()->getConfigByGroupValue('8');
+            $info['bank_info'] = $bankInfo? $bankInfo : ['realname'=>'','bank_name'=>'','bank_num'=>''];
+        }
+
+        return $info;
+    }
+
+    /**
+     * 兑换
+     * @param $userId
+     */
+    public function exchange($userId, $shopId)
+    {
+        $params = request()->all();
+        $goodsId = isset($params['id'])? $params['id'] : 0;
+        $info = ScoreGoodsModel::where(['id'=> $goodsId,'mark'=>1,'status'=>1])->first();
+        if(empty($info)){
+            $this->error = 2061;
+            return false;
+        }
+
+        $memberInfo = MemberModel::where(['id'=> $userId,'mark'=>1,'status'=>1])->select(['id','member_level','nickname'])->first();
+        $memberLevel = isset($memberInfo['member_level'])? $memberInfo['member_level'] : 0;
+        if(empty($memberInfo)){
+            $this->error = 2019;
+            return false;
+        }
+
+        $total = $memberLevel? $info['price'] : $info['source_price'];
+        $order = [
+            'user_id'=> $userId,
+            'shop_id'=> $shopId,
+            'goods_id'=> $goodsId,
+            'order_sn'=> get_order_num('S'),
+            'price'=> $info['price'],
+            'num'=> 1,
+            'total'=> $total,
+            'pay_money'=> $total,
+            'status'=>1,
+            'create_time'=> time(),
+            'update_time'=> time(),
+            'mark'=>1
+        ];
+
+        return $this->model->insertGetId($order);
+    }
+
+    /**
+     * 支付兑换
+     * @param $userId
+     * @return bool
+     */
+    public function pay($userId)
+    {
+        $params = request()->all();
+        $id = isset($params['id'])? $params['id'] : 0;
+        $info = $this->model->where(['id'=> $id,'mark'=>1,'status'=>1])->first();
+        $total = isset($info['total'])? $info['total'] : 0;
+        if(!$id || empty($info)){
+            $this->error = 2073;
+            return false;
+        }
+
+        $payScore = isset($params['score'])? intval($params['score']) : 0;
+        $addressInfo = isset($params['address'])? $params['address'] : [];
+        $payImg = isset($params['pay_img'])? $params['pay_img'] : '';
+        if(empty($addressInfo)){
+            $this->error = 2075;
+            return false;
+        }
+
+        if($payScore<=0 && empty($payImg)){
+            $this->error = 2074;
+            return false;
+        }
+
+        $memberInfo = MemberModel::where(['id'=> $userId,'mark'=>1,'status'=>1])->first();
+        $score = isset($memberInfo['score'])? $memberInfo['score'] : 0;
+        $scoreRate = isset($memberInfo['score_rate'])? $memberInfo['score_rate'] : 0;
+        $scoreRate = $scoreRate>0 && $scoreRate<=1? $scoreRate : 1;
+        if(empty($memberInfo)){
+            $this->error = 2019;
+            return false;
+        }
+
+        if($payScore > $score){
+            $this->error = 2077;
+            return false;
+        }
+
+        // 所需积分
+        $needScore = round($total/$scoreRate, 0);
+        if($payScore<$needScore && empty($payImg)){
+            $this->error = 2076;
+            return false;
+        }
+
+        $scorePayMoney = intval($payScore*$scoreRate, 0);
+        $payMoney = round($total - $scorePayMoney, 0);
+
+        $address = [];
+        $address[] = isset($addressInfo['province'])? $addressInfo['province'] : '';
+        $address[] = isset($addressInfo['city'])? $addressInfo['city'] : '';
+        $address[] = isset($addressInfo['district'])? $addressInfo['district'] : '';
+        $address[] = isset($addressInfo['address'])? $addressInfo['address'] : '';
+        $address = array_filter($address);
+        $data = [
+            'pay_img'=> $payImg,
+            'pay_time'=> time(),
+            'user_address'=> $address? implode(' ', $address) : '',
+            'realname'=> isset($addressInfo['realname'])? $addressInfo['realname'] : '',
+            'user_mobile'=> isset($addressInfo['mobile'])? $addressInfo['mobile'] : '',
+            'pay_score'=> $payScore,
+            'pay_money'=> $payMoney,
+            'status'=> 2,
+            'update_time'=>time()
+        ];
+
+        if($this->model->where(['id'=> $id])->update($data)){
+            $this->error = 2078;
+            return true;
+        }else{
+            $this->error = 2079;
+            return false;
+        }
+    }
+
+    /**
+     *
+     * @return bool
+     */
+    public function receive()
+    {
+        $params = request()->all();
+        $id = isset($params['id'])? $params['id'] : 0;
+        $info = $this->model->where(['id'=> $id,'mark'=>1])->first();
+        $status = isset($info['status'])? $info['status'] : 0;
+        if(!$id || empty($info)){
+            $this->error = 2081;
+            return false;
+        }
+
+        if(!in_array($status, [3,4,5])){
+            $this->error = 2082;
+            return false;
+        }
+
+        if($this->model->where(['id'=> $id])->update(['status'=> 5, 'update_time'=> time()])){
+            $this->error = 2083;
+            return true;
+        }else{
+            $this->error = 2084;
+            return false;
+        }
+    }
 }

+ 6 - 0
app/Services/Common/TradeService.php

@@ -593,6 +593,12 @@ class TradeService extends BaseService
             return false;
         }
 
+        if(!MemberModel::where(['id'=> $userId])->update(['memvr_level'=>1,'update_time'=>time()])){
+            $this->error = 2050;
+            DB::rollBack();
+            return false;
+        }
+
         // 佣金结算
         $memberInfo = MemberModel::where(['id' => $info['user_id'], 'mark' => 1])->first();
         $parentId = isset($memberInfo['parent_id']) ? $memberInfo['parent_id'] : 0;

+ 30 - 0
app/Services/ConfigService.php

@@ -96,6 +96,36 @@ class ConfigService extends BaseService
     }
 
     /**
+     * 获取分组配置
+     * @param $groupId
+     * @return mixed
+     */
+    public function getConfigByGroupValue($groupId){
+        $cacheKey = "caches:config:groups1:{$groupId}";
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
+        }
+        $datas = $this->model::where(['config_group_id'=> $groupId, 'status'=> 1])
+            ->select('title','code','value')
+            ->orderBy('sort','asc')
+            ->get()
+            ->keyBy('code');
+        $datas = $datas? $datas->toArray() : [];
+        if($datas){
+            $config = [];
+            foreach ($datas as $v){
+                $config[$v['code']] = $v['value'];
+            }
+
+            $datas = $config;
+            RedisService::set($cacheKey, $datas, 30);
+        }
+
+        return $datas;
+    }
+
+    /**
      * 获取单个配置
      * @param $groupId
      * @return mixed