rabin 9 hours ago
parent
commit
393aa78dcf

+ 3 - 1
src/place/order/app/Lib/Pay.php

@@ -10,7 +10,7 @@ class Pay
     protected $coupon = [];
     protected $gift = [];
     protected $set = [];
-    private $place;
+    protected $place;
 
     public function __construct(Place $place)
     {
@@ -266,6 +266,8 @@ class Pay
             $result['pay'] = true;
         }
         if ($result['pay']) {
+            $this->order['env_platform'] = Dever::input('platform', 'is_string', '账户', 'weixin');
+            $this->order['env_type'] = Dever::input('env', 'is_numeric', '运行环境', 3);
             $result['order_id'] = Dever::db($table)->insert($this->order);
             if ($result['order_id']) {
                 $result['order_num'] = $this->order['order_num'];

+ 5 - 0
src/place/order/app/Lib/Source/Delivery.php

@@ -54,6 +54,11 @@ class Delivery
             $info = $delivery['name'] . ',' . $content;
             $msg = '已发货:' . $info;
             Dever::load(\Porder\Lib\Source\Log::class)->up($utype, $uid, $order_id, $msg, false);
+
+            # 微信小程序发货
+            $order = Dever::db('porder/info')->find($order_id);
+            $data[] = ['code' => $delivery['code'], 'content' => $content];
+            Dever::load(\Place\Lib\Account::class)->delivery($order, $detail, $data, 1);
         }
     }
 

+ 40 - 1
src/place/order/manage/Lib/Source/Delivery.php

@@ -49,10 +49,23 @@ class Delivery
             $express = Dever::db('porder/source_delivery_express')->select(['order_id' => $data['order_id']]);
             $delivery = [];
             $detail_id = [];
+
+            # 这几个是微信发货相关的,以后优化吧
+            $delivery_express = [];
+            $delivery_express_detail = [];
+            $delivery_virtual = [];
+            $delivery_virtual_detail = [];
+            $mode = 1;
             if ($express) {
                 foreach ($express as $k => $v) {
                     if ($v['delivery_id']) {
                         $delivery_info = Dever::db('sector/delivery')->find($v['delivery_id']);
+                        if ($v['content']) {
+                            if (!$delivery_express_detail) {
+                                $delivery_express_detail = Dever::db('porder/source_detail')->find($v['detail_id']);
+                            }
+                            $delivery_express[] = ['code' => $delivery_info['code'], 'content' => $v['content']];
+                        }
                         if (!$v['content']) {
                             $v['content'] = '无单号';
                         }
@@ -68,6 +81,16 @@ class Delivery
                         $delivery_info = Dever::db('sector/delivery')->find($v['delivery_id']);
                         $delivery[] = $delivery_info['name'] . ',' . $v['content'];
                         $detail_id[] = $v['detail_id'];
+                        if ($v['content']) {
+                            if (!$delivery_virtual_detail) {
+                                $delivery_virtual_detail = Dever::db('porder/source_detail')->find($v['detail_id']);
+                            }
+                            $delivery_virtual[] = ['code' => $delivery_info['code'], 'content' => $v['content']];
+                            if ($delivery_express) {
+                                # 分拆发货
+                                $mode = 2;
+                            }
+                        }
                     }
                 }
             }
@@ -75,10 +98,26 @@ class Delivery
                 $msg = '已发货:' . implode('、', $delivery);
                 Dever::db('porder/source_detail')->update(['id' => ['in', $detail_id]], ['status' => 2, 'ddate' => time()]);
                 $state = Dever::db('porder/source_detail')->find(['order_id' => $data['order_id'], 'status' => 1]);
-                if (!$state) {
+                $delivered = false;
+                if ($state) {
+                    $delivered = false;
+                    if ($mode == 1) {
+                        $mode = 2;
+                    }
+                } else {
+                    $delivered = true;
                     Dever::db('porder/source')->update($data['order_id'], ['status' => 3, 'ddate' => time()]);
                 }
                 Dever::load(\Porder\Lib\Source\Log::class)->up(2, Dever::getData('muser')['id'], $data['order_id'], $msg, $data['id']);
+
+                # 微信小程序发货
+                if ($delivery_express) {
+                    Dever::load(\Place\Lib\Account::class)->delivery($order, $delivery_express_detail, $delivery_express, $mode, $delivered);
+                }
+                if ($delivery_virtual) {
+                    Dever::load(\Place\Lib\Account::class)->delivery($order, $delivery_virtual_detail, $delivery_virtual, $mode, $delivered);
+                }
+                
             } else {
                 Dever::error('发货失败,请检查重试');
             }

+ 10 - 0
src/place/order/table/role.php

@@ -29,6 +29,16 @@ return [
             'name'      => '订单号',
         ],
 
+        'env_platform'        => [
+            'type'      => 'varchar(20)',
+            'name'      => '运行环境',
+        ],
+
+        'env_type'        => [
+            'type'      => 'tinyint(1)',
+            'name'      => '运行环境',
+        ],
+
         'score_id' => [
             'name'      => '支付积分',
             'type'      => 'int(11)',

+ 10 - 0
src/place/order/table/source.php

@@ -40,6 +40,16 @@ return [
             'type'      => 'varchar(50)',
         ],
 
+        'env_platform'        => [
+            'type'      => 'varchar(20)',
+            'name'      => '运行环境',
+        ],
+
+        'env_type'        => [
+            'type'      => 'tinyint(1)',
+            'name'      => '运行环境',
+        ],
+
         'score_id' => [
             'name'      => '支付积分',
             'type'      => 'int(11)',

+ 61 - 0
src/place/set/app/Lib/Account.php

@@ -46,6 +46,67 @@ class Account
         return Dever::load(\Api\Lib\Account::class)->run($account, 'order_refund', $order, $env, 'run', 'place');
     }
 
+    # 微信小程序发货操作
+    public function delivery($order, $detail, $data, $mode = 1, $delivered = true)
+    {
+        if ($order['env_platform'] == 'weixin' && $order['env_type'] == 5) {
+            # 虚拟商品
+            $method = 3;
+            if (isset($order['method'])) {
+                if ($order['method'] == 3) {
+                    # 自提
+                    $method = 4;
+                } elseif ($detail['source_type'] == 1) {
+                    # 快递
+                    $method = 1;
+                }
+            }
+            $goods = $detail['name'];
+            $delivery = [];
+            if ($method == 1) {
+                $address = Dever::db('puser/address')->find($order['address_id']);
+                $contact = '';
+                if ($address) {
+                    $contact = ['receiver_contact' => \Dever\Helper\Str::hide($address['phone'])];
+                }
+                foreach ($data as $v) {
+                    $content = explode(',', $v['content']);
+                    $code = $v['code'];
+                    foreach ($content as $v1) {
+                        $delivery[] = [
+                            'tracking_no' => $v1,
+                            'express_company' => $code,
+                            'item_desc' => $goods,
+                            'contact' => $contact,
+                        ];
+                    }
+                }
+            } else {
+                $delivery[] = [
+                    'item_desc' => $goods,
+                ];
+            }
+            $result = $this->openid(['key' => $order['env_platform']], $order['env_type'], $order['uid']);
+            if (!$result['openid']) {
+                return;
+            }
+            $account = $this->getInfo(['key' => $order['env_platform']]);
+            if (!$account) {
+                Dever::error('账户配置错误');
+            }
+            $param = [];
+            $param['order_num'] = $order['order_num'];
+            $param['method'] = $method;
+            $param['delivery'] = $delivery;
+            $param['mode'] = $mode;
+            $param['delivered'] = $delivered;
+            $param['time'] = time();
+            $param['openid'] = $result['openid'];
+
+            return Dever::load(\Api\Lib\Account::class)->run($account, 'delivery', $param, $env, 'run', 'place');
+        }
+    }
+
     # 获取openid
     public function openid($account, $env, $uid, $result = [])
     {

+ 1 - 0
src/place/source/manage/info.php

@@ -11,6 +11,7 @@ $config = [
             ],
             'sort',
             'name' => [
+                'maxlength' => '80',
                 'truncate' => true,
             ],
             'pic' => [

+ 1 - 1
src/place/source/table/info.php

@@ -6,7 +6,7 @@ return [
     'struct' => [
         'name' => [
             'name'      => '名称',
-            'type'      => 'varchar(32)',
+            'type'      => 'varchar(80)',
         ],
 
         'cate' => [