From 8904df7cacd97fbfcb9489749b31d9d13b89e792 Mon Sep 17 00:00:00 2001
From: Anyon <zoujingli@qq.com>
Date: Wed, 9 May 2018 11:03:33 +0800
Subject: [PATCH] =?UTF-8?q?[=E6=9B=B4=E6=96=B0]=E4=BF=AE=E6=AD=A3=E5=BE=AE?=
 =?UTF-8?q?=E4=BF=A1=E5=95=86=E5=9F=8E=E8=AE=A2=E5=8D=95=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 application/store/service/MemberService.php | 37 +++++++++++++++++++++
 application/store/service/OrderService.php  | 13 ++++----
 extend/controller/BasicWechat.php           | 25 ++++++++++++++
 3 files changed, 69 insertions(+), 6 deletions(-)
 create mode 100644 application/store/service/MemberService.php

diff --git a/application/store/service/MemberService.php b/application/store/service/MemberService.php
new file mode 100644
index 000000000..92c6c77d3
--- /dev/null
+++ b/application/store/service/MemberService.php
@@ -0,0 +1,37 @@
+<?php
+
+// +----------------------------------------------------------------------
+// | ThinkAdmin
+// +----------------------------------------------------------------------
+// | 版权所有 2014~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// +----------------------------------------------------------------------
+// | 官方网站: http://think.ctolog.com
+// +----------------------------------------------------------------------
+// | 开源协议 ( https://mit-license.org )
+// +----------------------------------------------------------------------
+// | github开源项目:https://github.com/zoujingli/ThinkAdmin
+// +----------------------------------------------------------------------
+
+namespace app\store\service;
+
+use service\DataService;
+
+/**
+ * 会员数据初始化
+ * Class MemberService
+ * @package app\store\service
+ */
+class MemberService
+{
+    /**
+     * 创建会员数据
+     * @param array $data 会员数据
+     * @return bool
+     * @throws \think\Exception
+     * @throws \think\exception\PDOException
+     */
+    public static function create($data)
+    {
+        return DataService::save('StoreMember', $data, 'id');
+    }
+}
\ No newline at end of file
diff --git a/application/store/service/OrderService.php b/application/store/service/OrderService.php
index 84dca73de..e6d3d4ddd 100644
--- a/application/store/service/OrderService.php
+++ b/application/store/service/OrderService.php
@@ -14,7 +14,6 @@
 
 namespace app\store\service;
 
-use Pay\Pay;
 use service\DataService;
 use service\ToolsService;
 use think\Db;
@@ -40,18 +39,18 @@ class OrderService
      * @throws \think\db\exception\ModelNotFoundException
      * @throws \think\exception\DbException
      */
-    public static function create($mid, $params, $addressId = 0, $expressId = 0, $orderDesc = '', $orderType = 1, $from = 'wechat')
+    public static function create($mid, $params, $addressId, $expressId, $orderDesc = '', $orderType = 1, $from = 'wechat')
     {
         // 会员数据获取与检验
         if (!($member = Db::name('StoreMember')->where(['id' => $mid])->find())) {
             return ['code' => 0, 'msg' => '会员数据处理异常,请刷新重试!'];
         }
         // 订单数据生成
-        list($order_no, $orderList) = [[], DataService::createSequence(10, 'ORDER'), []];
-        $order = ['mid' => $mid, 'order_no' => $order_no, 'real_price' => 0, 'total_price' => 0, 'desc' => $orderDesc, 'type' => $orderType, 'from' => $from,];
+        list($order_no, $orderList) = [DataService::createSequence(10, 'ORDER'), []];
+        $order = ['mid' => $mid, 'order_no' => $order_no, 'real_price' => 0, 'goods_price' => 0, 'desc' => $orderDesc, 'type' => $orderType, 'from' => $from];
         foreach (explode(';', trim($params, ',;@')) as $param) {
             list($goods_id, $goods_spec, $number) = explode('@', "{$param}@@");
-            $item = ['mid' => $mid, 'type' => $orderType, 'order_no' => $order_no, 'goods_id' => $goods_id, 'goods_spec' => $goods_spec, 'goods_number' => $number,];
+            $item = ['mid' => $mid, 'type' => $orderType, 'order_no' => $order_no, 'goods_id' => $goods_id, 'goods_spec' => $goods_spec, 'goods_number' => $number];
             $goodsResult = self::buildOrderData($item, $order, $orderList, 'selling_price');
             if (empty($goodsResult['code'])) {
                 return $goodsResult;
@@ -132,13 +131,15 @@ class OrderService
         }
         // 商品规格信息
         $specField = 'goods_id,goods_spec,market_price,selling_price,goods_stock,goods_sale';
-        $specWhere = ['status' => '1', 'is_deleted' => '0', 'package_id' => '0', 'goods_id' => $goods_id, 'goods_spec' => $goods_spec];
+        $specWhere = ['status' => '1', 'is_deleted' => '0', 'goods_id' => $goods_id, 'goods_spec' => $goods_spec];
         if (!($goodsSpec = Db::name('StoreGoodsList')->field($specField)->where($specWhere)->find())) {
             return ['code' => 0, 'msg' => '无效的商品规格信息!', 'data' => "{$goods_id}, {$goods_spec}, {$number}"];
         }
+        // 商品库存检查
         if ($goodsSpec['goods_stock'] - $goodsSpec['goods_sale'] < $number) {
             return ['code' => 0, 'msg' => '商品库存不足,请更换其它商品!', 'data' => "{$goods_id}, {$goods_spec}, {$number}"];
         }
+        // 订单价格处理
         $goodsSpec['price_field'] = $price_field;
         $orderList[] = array_merge($goods, $goodsSpec, ['mid' => $mid, 'number' => $number, 'order_no' => $order_no, 'type' => $type]);
         $order['goods_price'] += floatval($goodsSpec[$price_field]) * $number;
diff --git a/extend/controller/BasicWechat.php b/extend/controller/BasicWechat.php
index 4629488c3..1e81becd9 100644
--- a/extend/controller/BasicWechat.php
+++ b/extend/controller/BasicWechat.php
@@ -14,8 +14,10 @@
 
 namespace controller;
 
+use app\store\service\MemberService;
 use service\WechatService;
 use think\Controller;
+use think\Db;
 
 /**
  * 微信基础控制器
@@ -31,6 +33,29 @@ class BasicWechat extends Controller
      */
     protected $openid;
 
+    /**
+     * 当前会员数据记录
+     * @var array
+     */
+    protected $member = [];
+
+    /**
+     * 初始化会员数据记录
+     * @throws \think\Exception
+     * @throws \think\exception\PDOException
+     * @return array
+     */
+    protected function initMember()
+    {
+        $openid = $this->getOpenid();
+        $this->member = Db::name('StoreMember')->where(['openid' => $openid])->find();
+        if (empty($this->member)) {
+            MemberService::create(['openid' => $openid]);
+            $this->member = Db::name('StoreMember')->where(['openid' => $openid])->find();
+        }
+        return $this->member;
+    }
+
     /**
      * 获取粉丝用户OPENID
      * @return bool|string