|
@@ -8,6 +8,140 @@ use Dever;
|
|
|
|
|
|
class Buy
|
|
|
{
|
|
|
+ # 获取配置
|
|
|
+ public $config = array();
|
|
|
+ # table
|
|
|
+ public $table = 'shop/buy_order';
|
|
|
+
|
|
|
+ public function __construct()
|
|
|
+ {
|
|
|
+ $this->config = Dever::db($this->table)->config;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取公共的where
|
|
|
+ public function where($id)
|
|
|
+ {
|
|
|
+ $where = array();
|
|
|
+ $where['shop_id'] = $id;
|
|
|
+ if (!$where) {
|
|
|
+ Dever::alert('参数错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ return $where;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取订单列表
|
|
|
+ public function getList($id)
|
|
|
+ {
|
|
|
+ $result = array();
|
|
|
+ $where = $this->where($id);
|
|
|
+ $mobile = Dever::input('mobile');
|
|
|
+ if ($mobile) {
|
|
|
+ $where['mobile'] = $mobile;
|
|
|
+ }
|
|
|
+ $status = Dever::input('status');
|
|
|
+ if ($status) {
|
|
|
+ $where['status'] = $status;
|
|
|
+ }
|
|
|
+
|
|
|
+ $result['search_value'] = $where;
|
|
|
+ $result['search_value']['day'] = $day = Dever::input('day');
|
|
|
+ if ($day) {
|
|
|
+ $where['start'] = Dever::maketime($day . ' 00:00:00');
|
|
|
+ $where['end'] = Dever::maketime($day . ' 23:59:59');
|
|
|
+ }
|
|
|
+
|
|
|
+ $result['order'] = Dever::db($this->table)->getAll($where);
|
|
|
+
|
|
|
+ if ($result['order']) {
|
|
|
+ foreach ($result['order'] as $k => $v) {
|
|
|
+ $result['order'][$k] = $this->getInfo($v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $result['search'] = array();
|
|
|
+ $result['search']['status'] = array
|
|
|
+ (
|
|
|
+ array('value' => 1, 'name' => '待支付'),
|
|
|
+ array('value' => 2, 'name' => '待审核'),
|
|
|
+ array('value' => 3, 'name' => '待发货'),
|
|
|
+ array('value' => 4, 'name' => '待收货确认'),
|
|
|
+ array('value' => 5, 'name' => '已完成'),
|
|
|
+ array('value' => 6, 'name' => '已完成(有退款)'),
|
|
|
+ array('value' => 7, 'name' => '已取消'),
|
|
|
+ );
|
|
|
+
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 查看详情
|
|
|
+ public function getView($id, $order_id, $show = true)
|
|
|
+ {
|
|
|
+ $where = $this->where($id);
|
|
|
+ $where['id'] = $order_id;
|
|
|
+
|
|
|
+ $result = Dever::db($this->table)->find($where);
|
|
|
+
|
|
|
+ if (!$result) {
|
|
|
+ Dever::alert('订单不存在');
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($show) {
|
|
|
+ $result = $this->getInfo($result, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取订单详细信息
|
|
|
+ public function getInfo($info, $view = false)
|
|
|
+ {
|
|
|
+ if ($info['status'] == 1) {
|
|
|
+ # 15分钟内支付,900秒
|
|
|
+ $m = 9000;
|
|
|
+ # 支付倒计时
|
|
|
+ $info['time'] = time() - $info['cdate'];
|
|
|
+ if ($info['time'] >= $m) {
|
|
|
+ # 已过期,自动取消
|
|
|
+ $info['time'] = -1;
|
|
|
+ Dever::db($this->table)->update(array('where_id' => $info['id'], 'status' => 11));
|
|
|
+ $info['status'] = 11;
|
|
|
+ } else {
|
|
|
+ $info['time'] = $m - $info['time'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $info['status_name'] = $this->config['status'][$info['status']];
|
|
|
+
|
|
|
+ $info['goods'] = Dever::db('shop/buy_order_goods')->select(array('order_id' => $info['id']));
|
|
|
+ $info['shop'] = Dever::db('shop/info')->getOne($info['shop_id']);
|
|
|
+ $info['cdate'] = date('Y-m-d H:i', $info['cdate']);
|
|
|
+
|
|
|
+ if ($view) {
|
|
|
+ foreach ($info['goods'] as $k => $v) {
|
|
|
+ $info['goods'][$k]['info'] = Dever::load('goods/lib/info')->getPayInfo($v['goods_id'], $v['sku_id']);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ foreach ($info['goods'] as $k => $v) {
|
|
|
+ $goods = Dever::db('goods/info')->one($v['goods_id']);
|
|
|
+ $info['goods'][$k]['name'] = $goods['name'];
|
|
|
+ $info['goods'][$k]['cover'] = $goods['cover'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($info['fdate']) {
|
|
|
+ $info['fdate'] = date('Y-m-d H:i', $info['fdate']);
|
|
|
+ }
|
|
|
+ if ($info['qfdate']) {
|
|
|
+ $info['qfdate'] = date('Y-m-d H:i', $info['qfdate']);
|
|
|
+ }
|
|
|
+ if ($info['operdate']) {
|
|
|
+ $info['operdate'] = date('Y-m-d H:i', $info['operdate']);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $info;
|
|
|
+ }
|
|
|
+
|
|
|
# 发起支付
|
|
|
public function action($shop, $name, $num, $goods, $price, $info, $refer = '')
|
|
|
{
|
|
@@ -30,9 +164,6 @@ class Buy
|
|
|
$order_data['town'] = $shop['town'];
|
|
|
|
|
|
$order_data['order_num'] = $this->getOrderId();
|
|
|
- $order_data['pay_id'] = $order_data['order_num'];
|
|
|
- $order_data['pay_status'] = 1;
|
|
|
- $order_data['pay_price'] = 0;
|
|
|
$id = Dever::db('shop/buy_order')->insert($order_data);
|
|
|
|
|
|
if (!$id) {
|
|
@@ -50,15 +181,21 @@ class Buy
|
|
|
Dever::db('shop/buy_order_goods')->insert($data);
|
|
|
}
|
|
|
|
|
|
- if ($card || $price <= 0) {
|
|
|
+ if ($price <= 0) {
|
|
|
|
|
|
$param['pay_product_id'] = $id;
|
|
|
- $param['pay_order_id'] = $order_data['pay_id'];
|
|
|
+ $param['pay_order_id'] = $order_data['order_num'];
|
|
|
$param['pay_status'] = 2;
|
|
|
$param['pay_cash'] = $price;
|
|
|
$param['pay_msg'] = '';
|
|
|
$this->success($param);
|
|
|
- return 'ok';
|
|
|
+ return array
|
|
|
+ (
|
|
|
+ 'order' => '',
|
|
|
+ 'order_num' => $order_data['order_num'],
|
|
|
+ 'order_id' => $id,
|
|
|
+ 'type' => 'pay',
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
$param = array
|
|
@@ -70,7 +207,7 @@ class Buy
|
|
|
'name' => $order_data['name'],
|
|
|
'cash' => $price,
|
|
|
'product_id' => $id,
|
|
|
- 'order_id' => $order_data['pay_id'],
|
|
|
+ 'order_id' => $order_data['order_num'],
|
|
|
'refer' => $refer,
|
|
|
);
|
|
|
|
|
@@ -80,13 +217,15 @@ class Buy
|
|
|
}
|
|
|
|
|
|
$result = Dever::load('pay/api.pay', $param);
|
|
|
+ $result['order_num'] = $order_data['order_num'];
|
|
|
+ $result['order_id'] = $id;
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
# 再次发起支付
|
|
|
public function raction($id, $refer = '')
|
|
|
{
|
|
|
- $order = Dever::db('goods/order')->find($id);
|
|
|
+ $order = Dever::db('goods/buy_order')->find($id);
|
|
|
|
|
|
if (!$order) {
|
|
|
Dever::alert('订单信息错误');
|
|
@@ -99,12 +238,13 @@ class Buy
|
|
|
$param = array
|
|
|
(
|
|
|
'project_id' => 1,
|
|
|
- 'account_id' => 5,
|
|
|
- 'uid' => -1;
|
|
|
+ 'channel_id' => 1,
|
|
|
+ 'system_source' => 5,
|
|
|
+ 'uid' => -1,
|
|
|
'name' => $order['name'],
|
|
|
'cash' => $order['price'],
|
|
|
'product_id' => $id,
|
|
|
- 'order_id' => $order['pay_id'],
|
|
|
+ 'order_id' => $order['order_num'],
|
|
|
'refer' => $refer,
|
|
|
);
|
|
|
|
|
@@ -114,6 +254,8 @@ class Buy
|
|
|
}
|
|
|
|
|
|
$result = Dever::load('pay/api.pay', $param);
|
|
|
+ $result['order_num'] = $order['order_num'];
|
|
|
+ $result['order_id'] = $id;
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
@@ -152,11 +294,8 @@ class Buy
|
|
|
|
|
|
}
|
|
|
|
|
|
- $update['pay_status'] = $status;
|
|
|
$update['status'] = 2;
|
|
|
$update['where_id'] = $order['id'];
|
|
|
- $update['pay_time'] = time();
|
|
|
- $update['pay_price'] = $cash;
|
|
|
Dever::db('shop/buy_order')->update($update);
|
|
|
}
|
|
|
|
|
@@ -175,6 +314,111 @@ class Buy
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ # 取消订单
|
|
|
+ public function cancel($id, $order_id)
|
|
|
+ {
|
|
|
+ $data = $this->getView($id, $order_id, false);
|
|
|
+ if ($data['status'] == 1) {
|
|
|
+ $state = Dever::db('shop/buy_order')->update(array('where_id' => $data['id'], 'status' => 7, 'operdate' => time()));
|
|
|
+ if ($state) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return 'ok';
|
|
|
+ } else {
|
|
|
+ Dever::alert('当前订单状态不允许取消');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ # 全部退款
|
|
|
+ public function tui($id, $order_id, $status = 6, $desc = '')
|
|
|
+ {
|
|
|
+ if ($status != 8 && $status != 9) {
|
|
|
+ Dever::alert('当前订单状态不允许退货退款');
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = $this->getView($id, $order_id, false);
|
|
|
+ if ($data['status'] == 2) {
|
|
|
+ $state = Dever::db('shop/buy_order')->update(array('where_id' => $data['id'], 'status' => $status, 'tk_desc' => $desc, 'tk_cash' => $data['price']));
|
|
|
+
|
|
|
+ $this->pay_tui($state, $data, $data['price']);
|
|
|
+
|
|
|
+ return 'ok';
|
|
|
+ } else {
|
|
|
+ Dever::alert('当前订单状态不允许退货退款');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ # 获取部分退款的详情
|
|
|
+ public function tui_one_info($id, $order_id, $order_goods_id)
|
|
|
+ {
|
|
|
+ $data = $this->getView($id, $order_id, false);
|
|
|
+ if ($data['status'] == 2 || $data['status'] == 3 || $data['status'] == 4) {
|
|
|
+ $info = Dever::db('shop/buy_order_goods')->find(array('id' => $order_goods_id, 'order_id' => $data['id'], 'shop_id' => $id));
|
|
|
+ if ($info && $info['status'] <= 4) {
|
|
|
+ $info['tui_price'] = $info['price'];
|
|
|
+ $info['tui_one_price'] = round($info['tui_price'] / $info['num'], 2);
|
|
|
+ $info['goods'] = Dever::db('goods/info')->find($info['goods_id']);
|
|
|
+ }
|
|
|
+ return $info;
|
|
|
+ } else {
|
|
|
+ Dever::alert('当前订单状态不允许退货退款');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ # 部分退款
|
|
|
+ public function tui_one($id, $order_id, $order_goods_id, $num = false, $status = 6, $desc = '')
|
|
|
+ {
|
|
|
+ if ($status != 5 && $status != 6) {
|
|
|
+ Dever::alert('当前订单状态不允许退货退款');
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = $this->getView($id, $order_id, false);
|
|
|
+ if ($data['status'] == 2 || $data['status'] == 3 || $data['status'] == 4 || $data['status'] == 5) {
|
|
|
+ $info = Dever::db('shop/buy_order_goods')->find(array('id' => $order_goods_id, 'order_id' => $data['id'], 'shop_id' => $id));
|
|
|
+ if ($info && $info['status'] <= 4) {
|
|
|
+ $info['price'] = $info['price'];
|
|
|
+ if ($num > 0 && $info['num'] >= $num) {
|
|
|
+ $price = round($info['price'] / $info['num'], 2);
|
|
|
+ $info['price'] = round($price * $num, 2);
|
|
|
+ }
|
|
|
+ $state = Dever::db('shop/buy_order_goods')->update(array('where_id' => $info['id'], 'status' => $status, 'tk_desc' => $desc, 'tk_cash' => $info['price']));
|
|
|
+
|
|
|
+ if ($state) {
|
|
|
+ $this->pay_tui($state, $data, $info['price']);
|
|
|
+
|
|
|
+ # 检查这个订单下的商品是不是都退了
|
|
|
+ $total = Dever::db('shop/buy_order_goods')->total(array('order_id' => $data['id'], 'shop_id' => $id, 'status' => 1));
|
|
|
+ if ($total <= 0) {
|
|
|
+ $state = Dever::db('shop/buy_order')->update(array('where_id' => $data['id'], 'status' => 8, 'tk_desc' => $desc, 'tk_cash' => $info['price']));
|
|
|
+ } elseif ($data['status'] == 5) {
|
|
|
+ $state = Dever::db('shop/buy_order')->update(array('where_id' => $data['id'], 'status' => 6));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 'ok';
|
|
|
+ } else {
|
|
|
+ Dever::alert('当前订单状态不允许退货退款');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ # 退款通知
|
|
|
+ public function pay_tui($state, $data, $price)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ if ($state) {
|
|
|
+ $shop = Dever::db('shop/info')->one($data['shop_id']);
|
|
|
+ $msg_param['type'] = 1;//消息类型1是订单消息
|
|
|
+ $msg_param['id'] = $data['id'];
|
|
|
+ $msg_param['name'] = $shop['name'];
|
|
|
+ $msg_param = Dever::json_encode($msg_param);
|
|
|
+ $msg = '您有一笔订单已退款,退款将在3个工作日内返回原支付账户';
|
|
|
+ Dever::load('message/lib/data')->push(-1, $data['uid'], '退款成功通知', $msg, 1, 1, false, $msg_param);
|
|
|
+
|
|
|
+ # 退款到原支付账户 待处理
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
# 展示订单详情
|
|
|
public function show()
|
|
|
{
|