dever 3 年之前
父节点
当前提交
7b4673a020

+ 18 - 17
app/cash/lib/Order.php

@@ -51,27 +51,28 @@ class Order
                 $update['fdate'] = $order['fdate'];
             }
         }
+
+        $update['source_order_num'] = $order['order_num'];
+        $update['num'] = $order['num'];
+
+        if ($refund) {
+            $update['cash'] = $refund['cash'];
+            $update['p_cash'] = isset($refund['p_cash']) ? $refund['p_cash'] : 0;
+        } else {
+            $update['cash'] = $order['price'];
+            $update['p_cash'] = $order['p_price'];
+        }
+
+        if ($jstype == 2) {
+            $update['cash'] = -1*$update['cash'];
+            $update['p_cash'] = -1*$update['p_cash'];
+            $update['num'] = -1*$update['num'];
+        }
+
         if ($info) {
         	$update['where_id'] = $info['id'];
         	$state = Dever::db('cash/order')->update($update);
         } else {
-            $update['source_order_num'] = $order['order_num'];
-            $update['num'] = $order['num'];
-
-            if ($refund) {
-                $update['cash'] = $refund['cash'];
-                $update['p_cash'] = isset($refund['p_cash']) ? $refund['p_cash'] : 0;
-            } else {
-                $update['cash'] = $order['price'];
-                $update['p_cash'] = $order['p_price'];
-            }
-
-            if ($jstype == 2) {
-                $update['cash'] = -1*$update['cash'];
-                $update['p_cash'] = -1*$update['p_cash'];
-                $update['num'] = -1*$update['num'];
-            }
-        
         	$update['order_num'] = $this->getOrderId();
         	$state = Dever::db('cash/order')->insert($update);
         }

+ 306 - 22
app/mshop/lib/Buy.php

@@ -1160,6 +1160,7 @@ class Buy
     }*/
 
     # 采购订单审核 拆单
+    /*
     public function audit_commit()
     {
         $order_id = Dever::input('order_id');
@@ -1183,38 +1184,43 @@ class Buy
         $distance = array();
 
         # 按照距离排序
-        foreach ($shop_store as $k => $v) {
-            $info = Dever::db('store/info')->find($v['store_id']);
-            if ($info && $info['status'] == 1) {
-                $distance[] = $info['distance'] = Dever::distance($shop['lng'], $shop['lat'], $info['lng'], $info['lat']);
-                $store[] = $info;
+        if ($shop_store) {
+            foreach ($shop_store as $k => $v) {
+                $info = Dever::db('store/info')->find($v['store_id']);
+                if ($info && $info['status'] == 1) {
+                    $distance[] = $info['distance'] = Dever::distance($shop['lng'], $shop['lat'], $info['lng'], $info['lat']);
+                    $store[] = $info;
+                }
             }
-        }
 
-        if (!$store) {
-            Dever::alert('未分配仓库');
+            if ($store) {
+                array_multisort($distance, SORT_ASC, SORT_NUMERIC, $store);
+            }
         }
 
-        array_multisort($distance, SORT_ASC, SORT_NUMERIC, $store);
-
         $shop_factory = Dever::db('shop/factory')->select(array('shop_id' => $shop['id']));
         $factory = array();
         $distance = array();
 
         # 按照距离排序
-        foreach ($shop_factory as $k => $v) {
-            $info = Dever::db('factory/info')->find($v['factory_id']);
-            if ($info && $info['status'] == 1) {
-                $distance[] = $info['distance'] = Dever::distance($shop['lng'], $shop['lat'], $info['lng'], $info['lat']);
-                $factory[] = $info;
+        if ($shop_factory) {
+            foreach ($shop_factory as $k => $v) {
+                $info = Dever::db('factory/info')->find($v['factory_id']);
+                if ($info && $info['status'] == 1) {
+                    $distance[] = $info['distance'] = Dever::distance($shop['lng'], $shop['lat'], $info['lng'], $info['lat']);
+                    $factory[] = $info;
+                }
             }
-        }
 
-        if (!$factory) {
-            Dever::alert('未分配工厂');
+
+            if ($factory) {
+                array_multisort($distance, SORT_ASC, SORT_NUMERIC, $factory);
+            }
         }
 
-        array_multisort($distance, SORT_ASC, SORT_NUMERIC, $factory);
+        if (!$factory && !$store) {
+            Dever::alert('未分配仓库或者未分配工厂');
+        }
 
         $this->order_num = 0;
         $this->order_id = array();
@@ -1272,7 +1278,7 @@ class Buy
                     $price = 0;
                     $num = 0;
                     foreach ($delete as $k => $v) {
-                        Dever::db('shop/buy_order_goods')->delete(array('where_id' => $v['id']));
+                        Dever::db('shop/buy_order_goods')->delete(array('id' => $v['id']));
                         $price += $v['price'];
                         $num += $v['num'];
                     }
@@ -1286,7 +1292,8 @@ class Buy
             }
         } else {
             # 没有找到,退款
-            Dever::load('shop/lib/refund')->set('buy')->apply(1, $shop['id'], $order_id, false, 3, 0, '供货商库存不足');
+            Dever::alert('供货商库存不足,请联系供货商备货');
+            //Dever::load('shop/lib/refund')->set('buy')->apply(1, $shop['id'], $order_id, false, 3, 0, '供货商库存不足');
         }
 
         if ($this->order_id) {
@@ -1302,7 +1309,230 @@ class Buy
 
         return 'ok';
     }
+    */
+
+    # 采购订单审核 拆单
+    public function audit_commit()
+    {
+        $order_id = Dever::input('order_id');
+        $order = Dever::db('shop/buy_order')->find($order_id);
+
+        if (!$order || ($order && $order['status'] != 2)) {
+            Dever::alert('当前订单状态无法拆单');
+        }
+
+        if ($order['type'] != 1) {
+            Dever::alert('这不是门店的订单');
+        }
+
+        $goods = Dever::db('shop/buy_order_goods')->select(array('order_id' => $order['id']));
+
+        $shop = Dever::db('shop/info')->find($order['type_id']);
+
+        $data = $this->assign($goods, $order, $shop);
+        $send = array();
+
+        if ($data) {
+            # 开始生成订单
+            $num = count($data);
+            if (!$goods && $num == 1) {
+                foreach ($data as $k => $v) {
+                    $k = explode('_', $k);
+
+                    $p_price = 0;
+                    foreach ($v as $k1 => $v1) {
+                        Dever::db('shop/buy_order_goods')->update(array('where_id' => $v1['order_goods_id'], 'set_p_price' => $v1['p_price']));
+                        $p_price += $v1['p_price'];
+                        $send[$order['id']] = $v1;
+                    }
+                    Dever::db('shop/buy_order')->update(array('where_id' => $order['id'], 'status' => 3, 'source_type' => $k[0], 'source_id' =>  $k[1], 'p_price' => $p_price, 'operdate' => time()));
+                }
+            } elseif ($num >= 1) {
+                $i = $order['order_index'];
+                $price = 0;
+                $num = 0;
+                foreach ($data as $k => $v) {
+                    $k = explode('_', $k);
+                    foreach ($v as $k1 => $v1) {
+                        $v1['order_num'] .= '_' . $i;
+
+                        $state = $this->createOrder($v1);
+                        $send[$state] = $v1;
+
+                        Dever::db('shop/buy_order_goods')->delete(array('id' => $v1['order_goods_id'], 'clear' => true));
+                        $price += $v1['price'];
+                        $num += $v1['num'];
+                    }
+                    $i++;
+                }
+
+                $order['price'] = $order['price'] - $price;
+                $order['num'] = $order['num'] - $num;
+                Dever::db('shop/buy_order')->update(array('where_id' => $order['id'], 'price' => $order['price'], 'num' => $order['num'], 'audit' => 1, 'order_num' => $order['order_num'] . '_' . $i, 'clear' => true));
+            }
+        } else {
+            Dever::db('shop/buy_order')->update(array('where_id' => $order['id'], 'audit' => 1));
+            Dever::alert('供货商库存不足,请联系供货商备货,该订单进入重新审核状态');
+        }
+
+        if ($send) {
+            foreach ($send as $k => $v) {
+                $this->sendMsg($v['source_type'], $v['source_id'], $k);
+
+                if ($k != $order['id']) {
+                    $order_info = Dever::db('shop/buy_order')->find(array('id' => $k, 'clear' => true));
+                    Dever::load('cash/lib/order')->up($order_info, 1, 1);
+                }
+            }
+        }
+
+        if ($goods) {
+            $send = array();
+            foreach ($goods as $k => $v) {
+                $send[$v['order_id']] = $v;
+            }
+
+            if ($send) {
+                foreach ($send as $k => $v) {
+                    $order_info = Dever::db('shop/buy_order')->find(array('id' => $k, 'clear' => true));
+                    Dever::load('cash/lib/order')->up($order_info, 1, 1);
+                }
+            }
+        }
+
+        return 'ok';
+    }
+
+    public function assign(&$goods, &$order, $shop)
+    {
+        if (strstr($order['order_num'], '_')) {
+            $temp = explode('_', $order['order_num']);
+            $order['order_num'] = $temp[0];
+            $order['order_index'] = $temp[1];
+        } else {
+            $order['order_index'] = 0;
+        }
+        # 获取门店分配的仓库和工厂
+        $data = array();
+
+        $this->assign_store($data, $goods, $order, $shop);
+        $this->assign_factory($data, $goods, $order, $shop);
+
+        return $data;
+    }
+
+    private function assign_store(&$data, &$goods, $order, $shop)
+    {
+        $shop_store = Dever::db('shop/store')->select(array('shop_id' => $shop['id']));
+        $store = array();
+        $distance = array();
+
+        # 按照距离排序
+        if ($shop_store) {
+            foreach ($shop_store as $k => $v) {
+                $info = Dever::db('store/info')->find($v['store_id']);
+                if ($info && $info['status'] == 1) {
+                    $distance[] = $info['distance'] = Dever::distance($shop['lng'], $shop['lat'], $info['lng'], $info['lat']);
+                    $store[] = $info;
+                }
+            }
 
+            if ($store) {
+                array_multisort($distance, SORT_ASC, SORT_NUMERIC, $store);
+
+                foreach ($store as $k => $v) {
+                    if ($goods) {
+                        foreach ($goods as $gk => $gv) {
+                            $where = array();
+                            $where['store_id'] = $v['id'];
+                            $where['goods_id'] = $gv['goods_id'];
+                            $where['sku_id'] = ($gv['sku_id'] && $gv['sku_id'] > 0) ? $gv['sku_id'] : -1;
+                            $sku = Dever::db('store/goods_sku')->getOne($where);
+                            if ($sku) {
+                                if ($gv['num'] <= $sku['total']) {
+                                    # 库存符合
+                                    $data['2_' . $v['id']][] = array
+                                    (
+                                        'order_id' => $order['id'],
+                                        'order_num' => $order['order_num'],
+                                        'order_index' => $order['order_index'],
+                                        'type' => 1,
+                                        'type_id' => $shop['id'],
+                                        'source_type' => 2,
+                                        'source_id' => $v['id'],
+                                        'source_name' => $v['name'],
+                                        'order_goods_id' => $gv['id'],
+                                        'goods_id' => $where['goods_id'],
+                                        'sku_id' => $where['sku_id'],
+                                        'price' => $gv['price'],
+                                        'p_price' => $gv['price'],
+                                        'num' => $gv['num'],
+                                    );
+                                    unset($goods[$gk]);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private function assign_factory(&$data, &$goods, $order, $shop)
+    {
+        $shop_factory = Dever::db('shop/factory')->select(array('shop_id' => $shop['id']));
+        $factory = array();
+        $distance = array();
+
+        # 按照距离排序
+        if ($shop_factory && $goods) {
+            foreach ($shop_factory as $k => $v) {
+                $info = Dever::db('factory/info')->find($v['factory_id']);
+                if ($info && $info['status'] == 1) {
+                    $distance[] = $info['distance'] = Dever::distance($shop['lng'], $shop['lat'], $info['lng'], $info['lat']);
+                    $factory[] = $info;
+                }
+            }
+
+            if ($factory) {
+                array_multisort($distance, SORT_ASC, SORT_NUMERIC, $factory);
+
+                foreach ($factory as $k => $v) {
+                    if ($goods) {
+                        foreach ($goods as $gk => $gv) {
+                            $where = array();
+                            $where['factory_id'] = $v['id'];
+                            $where['goods_id'] = $gv['goods_id'];
+                            $where['sku_id'] = ($gv['sku_id'] && $gv['sku_id'] > 0) ? $gv['sku_id'] : -1;
+                            $sku = Dever::db('factory/goods_sku')->getOne($where);
+                            if ($sku) {
+                                $data['3_' . $v['id']][] = array
+                                (
+                                    'order_id' => $order['id'],
+                                    'order_num' => $order['order_num'],
+                                    'order_index' => $order['order_index'],
+                                    'type' => 1,
+                                    'type_id' => $shop['id'],
+                                    'source_type' => 3,
+                                    'source_id' => $v['id'],
+                                    'source_name' => $v['name'],
+                                    'order_goods_id' => $gv['id'],
+                                    'goods_id' => $where['goods_id'],
+                                    'sku_id' => $where['sku_id'],
+                                    'price' => $gv['price'],
+                                    'p_price' => $sku['p_price'],
+                                    'num' => $gv['num'],
+                                );
+                                unset($goods[$gk]);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /*
     private function store($order_id, $order_num, $shop, $store, $goods, $state = 2)
     {
         $find = array();
@@ -1381,9 +1611,10 @@ class Buy
 
         return array(3, $type_id, $id);
     }
+    */
 
     # 发送消息
-    private function sendMsg($source_type, $source_id, $id)
+    public function sendMsg($source_type, $source_id, $id)
     {
         if (Dever::project('message')) {
             $msg_param['type'] = 1;//消息类型1是订单消息
@@ -1398,6 +1629,7 @@ class Buy
     }
 
     # 生成拆单的订单
+    /*
     private function createOrder($order_id, $order_num, $type, $type_id, $source_type, $source_id, $price, $p_price, $num, $goods_id, $sku_id)
     {
         $where['parent_order_id'] = $order_id;
@@ -1449,6 +1681,58 @@ class Buy
 
         return false;
     }
+    */
+    public function createOrder($data)
+    {
+        $where['parent_order_id'] = $data['order_id'];
+        $where['type'] = $data['type'];
+        $where['type_id'] = $data['type_id'];
+        $where['source_type'] = $data['source_type'];
+        $where['source_id'] = $data['source_id'];
+        $where['clear'] = true;
+        $info = Dever::db('shop/buy_order')->find($where);
+
+        if (!$info) {
+            $insert = $where;
+            $insert['name'] = $data['order_id'];
+            $insert['order_num'] = $data['order_num'];
+            $insert['operdate'] = time();
+            $insert['status'] = 3;
+            $insert['price'] = $data['price'] * $data['num'];
+            $insert['p_price'] = $data['p_price'] * $data['num'];
+            $insert['num'] = $data['num'];
+            $insert['refund_cash'] = 0;
+            $insert['refund_p_cash'] = 0;
+            $id = $state = Dever::db('shop/buy_order')->insert($insert);
+        } else {
+            $id = $info['id'];
+
+            $update['where_id'] = $id;
+            $update['price'] = $info['price'] + ($data['price'] * $data['num']);
+            $update['p_price'] = $info['p_price'] + ($data['p_price'] * $data['num']);
+            $update['num'] = $info['num'] + $data['num'];
+            $state = Dever::db('shop/buy_order')->update($update);
+        }
+
+        if ($state && $id > 0) {
+            $goods_info = Dever::db('shop/buy_order_goods')->find(array('order_id' => $id));
+            if (!$goods_info) {
+                $goods['order_id'] = $id;
+                $goods['goods_id'] = $data['goods_id'];
+                $goods['sku_id'] = $data['sku_id'];
+                $goods['price'] = $data['price'];
+                $goods['p_price'] = $data['p_price'];
+                $goods['num'] = $data['num'];
+                Dever::db('shop/buy_order_goods')->insert($goods);
+            }
+
+            $state = $this->updateSell($data['source_type'], $data['source_id'], $data['goods_id'], $data['sku_id'], $data['num']);
+
+            return $id;
+        }
+
+        return false;
+    }
 
     # 减少库存,增加销量
     public function updateSell($source_type, $source_id, $goods_id, $sku_id, $num)

+ 1 - 33
app/mshop/src/Data.php

@@ -100,39 +100,7 @@ class Data extends Core
 
         $info = Dever::db('shop/sell_order')->find(array('code' => $code, 'id' => $order_id));
 
-        if ($info && $info['shop_id'] == $this->shop_id && $info['status'] <= 4) {
-
-            if ($info['refund_cash'] > 0) {
-                $status = 6;
-            } else {
-                $status = 5;
-            }
-            $state = Dever::db('shop/sell_order')->update(array('where_id' => $info['id'], 'status' => $status, 'fdate' => time()));
-
-            # 给用户发消息
-            if ($info['uid'] && $info['uid'] > 0) {
-                $shop = Dever::db('shop/info')->one($info['shop_id']);
-                $msg_param['type'] = 1;//消息类型1是订单消息
-                $msg_param['id'] = $info['id'];
-                $msg_param['name'] = $shop['name'];
-                $msg_param = Dever::json_encode($msg_param);
-                $msg = '您有一笔订单已签收,祝您用餐愉快~';
-                Dever::load('message/lib/data')->push(-1, $info['uid'], '订单完成通知', $msg, 1, 1, false, $msg_param);
-            }
-            if ($info['method'] == 2) {
-                Dever::load('shop/lib/sell')->updatePs($info, 3);
-            }
-
-            if ($info['pay_method'] == 3 && $info['card_code_id']) {
-                # 更新礼品卡状态
-                $card_update['where_id'] = $info['card_code_id'];
-                $card_update['status'] = 4;
-                Dever::db('goods/card_code')->update($card_update);
-            }
-            return 'ok';
-        } else {
-            Dever::alert('您没有权限核销');
-        }
+        Dever::load('shop/lib/sell')->finish($info, $this->shop_id);
     }
 
     # 取消订单

+ 30 - 4
app/shop/database/buy_order.php

@@ -26,6 +26,13 @@ $refund_status = array
     2 => '已申请',
 );
 
+$parent_type = array
+(
+    1 => '直接下单',
+    2 => '平台店订单',
+    3 => '代理商订单',
+);
+
 $type = Dever::config('base')->source;
 unset($type[3]);
 $shop = function()
@@ -245,13 +252,23 @@ return array
             'update'    => 'text',
         ),
 
+        'parent_type'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '原订单类型',
+            'default'   => '1',
+            'desc'      => '原订单类型',
+            'match'     => 'is_numeric',
+            'option'    => $parent_type,
+        ),
+
         'parent_order_id'      => array
         (
-            'type'      => 'varchar-100',
-            'name'      => '原订单编号',
+            'type'      => 'int-11',
+            'name'      => '原订单id',
             'default'   => '',
-            'desc'      => '订单编号',
-            'match'     => 'is_string',
+            'desc'      => '原订单id',
+            'match'     => 'is_numeric',
         ),
 
         'order_num'      => array
@@ -486,6 +503,15 @@ return array
         ),
     ),
 
+    'alter' => array
+    (
+        2 => array
+        (
+            array('update', 'parent_order_id', 'parent_order_id', 'int-11 0 原订单id'),
+        ),
+        'version' => 2,
+    ),
+
     'request' => array
     (
         'getAll' => array

+ 40 - 2
app/shop/database/sell_order.php

@@ -15,6 +15,13 @@ $pay_method = array
     3 => '礼品卡',
 );
 
+$audit = array
+(
+    //1 => '待审核',
+    2 => '审核通过',
+    3 => '审核未通过',
+);
+
 $pay_type = array
 (
     1 => '微信',
@@ -117,6 +124,11 @@ return array
     'pay_method' => $pay_method,
     'pay_type' => $pay_type,
     'method' => $method,
+    'end' => array
+    (
+        'insert' => 'shop/lib/manage.sellOrderUpdate',
+        'update' => 'shop/lib/manage.sellOrderUpdate',
+    ),
     # 数据结构
     'struct' => array
     (
@@ -545,6 +557,28 @@ return array
             'list_order' => 14,
         ),
 
+        'audit'        => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '审核状态',
+            'default'   => '2',
+            'desc'      => '审核状态',
+            'match'     => 'is_numeric',
+            'option'    => $audit,
+            //'search'    => 'select',
+            'update'    => 'radio',
+        ),
+
+        'audit_desc'        => array
+        (
+            'type'      => 'varchar-500',
+            'name'      => '未通过原因',
+            'default'   => '',
+            'desc'      => '未通过原因',
+            'match'     => 'option',
+            'update'    => 'textarea',
+        ),
+
         'notice'        => array
         (
             'type'      => 'tinyint-1',
@@ -641,9 +675,13 @@ return array
 
             //'location2' => array('分配仓库', Dever::url('lib/set.store', 'shop')),
 
-            'edit' => array('分配仓库', 'store_id', '{shop_type} == 2'),
+            //'edit' => array('分配仓库', 'store_id', '{status} == 2 && {shop_type} == 2'),
+
+            //'fast1' => array('发货', '"sell_order_ps&where_id={id}&search_option_order_id={id}&oper_save_jump=sell_order&oper_table=sell_order&oper_parent=sell_order"', '{status} == 2 && {shop_type} == 2'),
+
+            'fast' => array('审核', '"sell_order&where_id={id}&col=audit,audit_desc&oper_save_jump=sell_order&oper_table=sell_order&oper_parent=sell_order"', '{status} == 2 && {shop_type} == 2'),
 
-            'fast1' => array('发货', '"sell_order_ps&where_id={id}&search_option_order_id={id}&oper_save_jump=sell_order&oper_table=sell_order&oper_parent=sell_order"', '{status} == 2 && {shop_type} == 2'),
+            'oper'  => array('已收货', '"shop/lib/manage.setSellOrderStatus?shop_id={shop_id}&order_id={id}"', '{status} == 4 && {shop_type} == 2'),
 
             //'edit' => array('退款', 'status,tk_time,tk_pic,tk_desc,tk_admin,tk_status', '{status} == 6'),
             //'delete' => array('删除', '', '{status} == 1'),

+ 10 - 0
app/shop/lib/Goods.php

@@ -60,6 +60,16 @@ class Goods
         $table = 'shop';
         if (isset($order['shop_id'])) {
             $up['where_shop_id'] = $order['shop_id'];
+            /*
+            # 如果是仓库直发
+            if (isset($order['store_id']) && $order['store_id'] && isset($order['store']) && $order['store'] == 1) {
+                $table = 'store';
+                $up['where_store_id'] = $order['store_id'];
+            } elseif (isset($order['shop_type']) && $order['shop_type'] == 2) {
+                # 如果是平台店下单,就不扣库存了
+                return;
+            }
+            */
         } elseif (isset($order['type'])) {
             if ($order['type'] == 1) {
                 $up['where_shop_id'] = $order['type_id'];

+ 19 - 0
app/shop/lib/Manage.php

@@ -236,6 +236,25 @@ class Manage
         }
     }
 
+    public function sellOrderUpdate($id, $name, $data)
+    {
+        Dever::config('base')->hook = true;
+        $update = array();
+        $audit = Dever::param('audit', $data);
+        $info = Dever::db('shop/sell_order')->one($id);
+        if ($audit > 1 && $info && $info['status'] == 2) {
+            if ($audit == 2) {
+                # 成功
+                Dever::setInput('order_id', $id);
+                Dever::load('shop/lib/sell.audit_commit');
+            } else {
+                # 退款
+                $shop = Dever::db('shop/info')->find($info['type_id']);
+                Dever::load('shop/lib/refund')->set('sell')->apply(1, $shop['id'], $id, false, 3, 0, '未通过审核');
+            }
+        }
+    }
+
     /**
      * 更新信息
      *

+ 149 - 0
app/shop/lib/Sell.php

@@ -1129,6 +1129,61 @@ class Sell
         }
     }
 
+    # 完成
+    public function finish($info, $shop_id)
+    {
+        if ($info && $info['shop_id'] == $shop_id && $info['status'] <= 4) {
+
+            if ($info['refund_cash'] > 0) {
+                $status = 6;
+            } else {
+                $status = 5;
+            }
+            $state = Dever::db('shop/sell_order')->update(array('where_id' => $info['id'], 'status' => $status, 'fdate' => time()));
+
+            # 给用户发消息
+            if ($info['uid'] && $info['uid'] > 0) {
+                $shop = Dever::db('shop/info')->one($info['shop_id']);
+                $msg_param['type'] = 1;//消息类型1是订单消息
+                $msg_param['id'] = $info['id'];
+                $msg_param['name'] = $shop['name'];
+                $msg_param = Dever::json_encode($msg_param);
+                $msg = '您有一笔订单已签收,祝您用餐愉快~';
+                Dever::load('message/lib/data')->push(-1, $info['uid'], '订单完成通知', $msg, 1, 1, false, $msg_param);
+            }
+            if ($info['method'] == 2) {
+                Dever::load('shop/lib/sell')->updatePs($info, 3);
+            }
+
+            if ($info['pay_method'] == 3 && $info['card_code_id']) {
+                # 更新礼品卡状态
+                $card_update['where_id'] = $info['card_code_id'];
+                $card_update['status'] = 4;
+                Dever::db('goods/card_code')->update($card_update);
+            }
+            return 'ok';
+        } else {
+            Dever::alert('您没有权限核销');
+        }
+    }
+
+    # 平台订单已收货
+    public function yes_api()
+    {
+        $shop_id = Dever::input('shop_id');
+        $order_id = Dever::input('order_id');
+
+        $info = Dever::db('shop/sell_order')->find(array('id' => $order_id));
+
+        if ($info && $info['type'] == 10) {
+            $this->finish($info, $shop_id);
+        } else {
+            Dever::alert('您没有权限核销');
+        }
+
+        return 'reload';
+    }
+
     # 生成自提码
     public function getCode()
     {
@@ -1529,4 +1584,98 @@ class Sell
             }
         }
     }
+
+    # 采购订单审核 拆单
+    public function audit_commit()
+    {
+        $order_id = Dever::input('order_id');
+        $order = Dever::db('shop/sell_order')->find($order_id);
+
+        if (!$order || ($order && $order['status'] != 2)) {
+            Dever::alert('当前订单状态无法拆单');
+        }
+
+        if ($order['type'] != 10) {
+            Dever::alert('这不是平台店的订单');
+        }
+
+        $goods = Dever::db('shop/sell_order_goods')->select(array('order_id' => $order_id));
+
+        $shop = Dever::db('shop/info')->find($order['shop_id']);
+
+        $data = Dever::load('mshop/lib/buy')->assign($goods, $order, $shop);
+
+        $send = array();
+
+        if ($data) {
+            # 开始生成订单
+            $num = count($data);
+            if (!$goods && $num == 1) {
+                foreach ($data as $k => $v) {
+                    $k = explode('_', $k);
+
+                    $p_price = 0;
+                    foreach ($v as $k1 => $v1) {
+                        $v1['order_num'] .= '_' . $i;
+
+                        $state = Dever::load('mshop/lib/buy')->createOrder($v1);
+                        $send[$state] = $v1;
+                    }
+                    Dever::db('shop/buy_order')->update(array('where_id' => $order['id'], 'status' => 3, 'source_type' => $k[0], 'source_id' =>  $k[1], 'p_price' => $p_price, 'operdate' => time()));
+                }
+            } elseif ($num >= 1) {
+                $i = $order['order_index'];
+                $price = 0;
+                $num = 0;
+                foreach ($data as $k => $v) {
+                    $k = explode('_', $k);
+                    foreach ($v as $k1 => $v1) {
+                        $v1['order_num'] .= '_' . $i;
+
+                        $state = Dever::load('mshop/lib/buy')->createOrder($v1);
+                        $send[$state] = $v1;
+
+                        Dever::db('shop/buy_order_goods')->delete(array('id' => $v1['order_goods_id'], 'clear' => true));
+                        $price += $v1['price'];
+                        $num += $v1['num'];
+                    }
+                    $i++;
+                }
+
+                $order['price'] = $order['price'] - $price;
+                $order['num'] = $order['num'] - $num;
+                Dever::db('shop/buy_order')->update(array('where_id' => $order['id'], 'price' => $order['price'], 'num' => $order['num'], 'audit' => 1, 'order_num' => $order['order_num'] . '_' . $i, 'clear' => true));
+            }
+        } else {
+            Dever::db('shop/buy_order')->update(array('where_id' => $order['id'], 'audit' => 1));
+            Dever::alert('供货商库存不足,请联系供货商备货,该订单进入重新审核状态');
+        }
+
+        if ($send) {
+            foreach ($send as $k => $v) {
+                Dever::load('mshop/lib/buy')->sendMsg($v['source_type'], $v['source_id'], $k);
+
+                if ($k != $order['id']) {
+                    $order_info = Dever::db('shop/buy_order')->find(array('id' => $k, 'clear' => true));
+                    Dever::load('cash/lib/order')->up($order_info, 1, 1);
+                }
+            }
+        }
+
+        if ($goods) {
+            $send = array();
+            foreach ($goods as $k => $v) {
+                $send[$v['order_id']] = $v;
+            }
+
+            if ($send) {
+                foreach ($send as $k => $v) {
+                    $order_info = Dever::db('shop/buy_order')->find(array('id' => $k, 'clear' => true));
+                    Dever::load('cash/lib/order')->up($order_info, 1, 1);
+                }
+            }
+        }
+
+        return 'ok';
+    }
 }