|
@@ -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)
|