|
@@ -0,0 +1,309 @@
|
|
|
|
+<?php
|
|
|
|
+
|
|
|
|
+# 支付
|
|
|
|
+
|
|
|
|
+namespace Mshop\Lib;
|
|
|
|
+
|
|
|
|
+use Dever;
|
|
|
|
+
|
|
|
|
+class Buy
|
|
|
|
+{
|
|
|
|
+ # 发起支付
|
|
|
|
+ public function action($shop, $name, $num, $goods, $price, $info, $refer = '')
|
|
|
|
+ {
|
|
|
|
+ if (!$shop) {
|
|
|
|
+ Dever::alert('错误的门店信息');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $order_data['shop_id'] = $shop['id'];
|
|
|
|
+ $order_data['mobile'] = $shop['mobile'];
|
|
|
|
+ $order_data['name'] = $name;
|
|
|
|
+ $order_data['num'] = $num;
|
|
|
|
+ $order_data['info'] = $info;
|
|
|
|
+ $order_data['price'] = $price;
|
|
|
|
+
|
|
|
|
+ $order_data['area'] = $shop['area'];
|
|
|
|
+ $order_data['province'] = $shop['province'];
|
|
|
|
+ $order_data['city'] = $shop['city'];
|
|
|
|
+ $order_data['county'] = $shop['county'];
|
|
|
|
+ $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) {
|
|
|
|
+ Dever::alert('支付失败');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ foreach($goods as $k => $v) {
|
|
|
|
+ if ($v['ku_state'] == 1) {
|
|
|
|
+ $data['shop_id'] = $shop['id'];
|
|
|
|
+ $data['order_id'] = $id;
|
|
|
|
+ $data['goods_id'] = $v['id'];
|
|
|
|
+ $data['sku_id'] = $v['sku_id'];
|
|
|
|
+ $data['price'] = $v['price'];
|
|
|
|
+ $data['num'] = $v['buy_num'];
|
|
|
|
+
|
|
|
|
+ Dever::db('shop/buy_order_goods')->insert($data);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ($card || $price <= 0) {
|
|
|
|
+
|
|
|
|
+ $param['pay_product_id'] = $id;
|
|
|
|
+ $param['pay_order_id'] = $order_data['pay_id'];
|
|
|
|
+ $param['pay_status'] = 2;
|
|
|
|
+ $param['pay_cash'] = $price;
|
|
|
|
+ $param['pay_msg'] = '';
|
|
|
|
+ $this->success($param);
|
|
|
|
+ return 'ok';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $param = array
|
|
|
|
+ (
|
|
|
|
+ 'project_id' => 1,
|
|
|
|
+ 'channel_id' => 1,
|
|
|
|
+ 'system_source' => 5,
|
|
|
|
+ 'uid' => -1,
|
|
|
|
+ 'name' => $order_data['name'],
|
|
|
|
+ 'cash' => $price,
|
|
|
|
+ 'product_id' => $id,
|
|
|
|
+ 'order_id' => $order_data['pay_id'],
|
|
|
|
+ 'refer' => $refer,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ $receipt = Dever::input('receipt');
|
|
|
|
+ if ($receipt) {
|
|
|
|
+ $param['receipt'] = $receipt;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result = Dever::load('pay/api.pay', $param);
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # 再次发起支付
|
|
|
|
+ public function raction($id, $refer = '')
|
|
|
|
+ {
|
|
|
|
+ $order = Dever::db('goods/order')->find($id);
|
|
|
|
+
|
|
|
|
+ if (!$order) {
|
|
|
|
+ Dever::alert('订单信息错误');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ($order['status'] > 1) {
|
|
|
|
+ Dever::alert('订单已支付或已取消');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $param = array
|
|
|
|
+ (
|
|
|
|
+ 'project_id' => 1,
|
|
|
|
+ 'account_id' => 5,
|
|
|
|
+ 'uid' => -1;
|
|
|
|
+ 'name' => $order['name'],
|
|
|
|
+ 'cash' => $order['price'],
|
|
|
|
+ 'product_id' => $id,
|
|
|
|
+ 'order_id' => $order['pay_id'],
|
|
|
|
+ 'refer' => $refer,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ $receipt = Dever::input('receipt');
|
|
|
|
+ if ($receipt) {
|
|
|
|
+ $param['receipt'] = $receipt;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result = Dever::load('pay/api.pay', $param);
|
|
|
|
+
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # 支付成功回调 安全加密 设置token
|
|
|
|
+ public function success_secure_api_token()
|
|
|
|
+ {
|
|
|
|
+ $project_id = Dever::input('pay_project_id');
|
|
|
|
+ $info = Dever::db('pay/project')->one($project_id);
|
|
|
|
+ if ($info) {
|
|
|
|
+ return $info['key'];
|
|
|
|
+ }
|
|
|
|
+ return 'shop_buy_dever_2020';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # 支付成功回调 安全加密
|
|
|
|
+ public function success_secure_api($param = array())
|
|
|
|
+ {
|
|
|
|
+ $this->success($param);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # 支付成功回调
|
|
|
|
+ public function success($param = array())
|
|
|
|
+ {
|
|
|
|
+ $send = $param ? $param : Dever::preInput('pay_');
|
|
|
|
+ $product_id = $send['pay_product_id'];
|
|
|
|
+ $order_id = $send['pay_order_id'];
|
|
|
|
+ $status = $send['pay_status'];
|
|
|
|
+ $cash = $send['pay_cash'];
|
|
|
|
+ $msg = $send['pay_msg'];
|
|
|
|
+
|
|
|
|
+ $order = Dever::db('shop/buy_order')->one(array('id' => $product_id, 'time' => time()));
|
|
|
|
+ if ($order && $order['pay_status'] == 1) {
|
|
|
|
+
|
|
|
|
+ if ($status == 2) {
|
|
|
|
+ # 减少库存 增加销量
|
|
|
|
+ $this->updateSell($order);
|
|
|
|
+
|
|
|
|
+ # 发消息
|
|
|
|
+ if (Dever::project('message')) {
|
|
|
|
+ Dever::load('message/lib/data')->push(-1, $order['uid'], '订购成功通知', '购买成功', 1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $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);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 'ok';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # 生成订单号
|
|
|
|
+ public function getOrderId()
|
|
|
|
+ {
|
|
|
|
+ $where['order_num'] = Dever::order('C');
|
|
|
|
+ $state = Dever::db('shop/buy_order')->one($where);
|
|
|
|
+ if (!$state) {
|
|
|
|
+ return $where['order_num'];
|
|
|
|
+ } else {
|
|
|
|
+ return $this->getOrderId();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # 展示订单详情
|
|
|
|
+ public function show()
|
|
|
|
+ {
|
|
|
|
+ $id = Dever::input('order_id');
|
|
|
|
+
|
|
|
|
+ $config = Dever::db('shop/buy_order')->config;
|
|
|
|
+
|
|
|
|
+ $info = Dever::db('shop/buy_order')->one($id);
|
|
|
|
+
|
|
|
|
+ $shop = Dever::db('shop/info')->find($info['shop_id']);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ $html = '[基本信息]:<table class="layui-table"><thead><tr><th style="width:20%">项目</th><th style="width:80%">详情</th></tr> </thead><tbody>';
|
|
|
|
+
|
|
|
|
+ $html .= '<tr>
|
|
|
|
+ <td>订单号</td>
|
|
|
|
+ <td>'.$this->table(false, array(array($info['order_num']))).'</td>
|
|
|
|
+
|
|
|
|
+ </tr>';
|
|
|
|
+
|
|
|
|
+ $html .= '<tr>
|
|
|
|
+ <td>门店信息</td>
|
|
|
|
+ <td>'.$this->table(false, array(array('门店名称:' . $shop['name'], '联系人:' . $shop['truename'], '联系电话:' . $shop['mobile']))).'</td>
|
|
|
|
+
|
|
|
|
+ </tr>';
|
|
|
|
+
|
|
|
|
+ $html .= '<tr>
|
|
|
|
+ <td>订单信息</td>
|
|
|
|
+ <td>'.$this->table(array('订单状态', '金额', '数量'), array(array($config['status'][$info['status']], $info['price'], $info['num']))).'</td>
|
|
|
|
+ </tr>';
|
|
|
|
+
|
|
|
|
+ # 增加仓库和工厂信息
|
|
|
|
+
|
|
|
|
+ $html .= '</tbody></table>';
|
|
|
|
+
|
|
|
|
+ $html .= '[商品清单]:';
|
|
|
|
+
|
|
|
|
+ $head = array('商品名称', '商品属性', '商品价格', '商品数量');
|
|
|
|
+
|
|
|
|
+ $body = array();
|
|
|
|
+ $goods = Dever::db('shop/buy_order_goods')->select(array('order_id' => $info['id']));
|
|
|
|
+ foreach ($goods as $k => $v) {
|
|
|
|
+ $goods_info = Dever::load('goods/lib/info')->getInfoBySku($v['goods_id'], $v['sku_id']);
|
|
|
|
+ $body[$k] = array
|
|
|
|
+ (
|
|
|
|
+ $goods_info['name'],
|
|
|
|
+ $v['price'],
|
|
|
|
+ $v['price'],
|
|
|
|
+ $v['num'],
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ $html .= $this->table($head, $body);
|
|
|
|
+
|
|
|
|
+ return $html;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function table($head, $data)
|
|
|
|
+ {
|
|
|
|
+ $html = '';
|
|
|
|
+ if ($head) {
|
|
|
|
+ $html = '<table class="layui-table">';
|
|
|
|
+
|
|
|
|
+ $html .= '<thead><tr>';
|
|
|
|
+ foreach ($head as $k => $v) {
|
|
|
|
+ $html .= '<th>'.$v.'</th>';
|
|
|
|
+ }
|
|
|
|
+ $html .= '</tr></thead>';
|
|
|
|
+
|
|
|
|
+ $html .= '<tbody>';
|
|
|
|
+ foreach ($data as $k => $v) {
|
|
|
|
+ $html .= '<tr>';
|
|
|
|
+ foreach ($v as $k1 => $v1) {
|
|
|
|
+ $html .= '<td>'.$v1.'</td>';
|
|
|
|
+ }
|
|
|
|
+ $html .= '</tr>';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $html .= '</tbody>';
|
|
|
|
+
|
|
|
|
+ $html .= '</table>';
|
|
|
|
+ } else {
|
|
|
|
+ foreach ($data as $k => $v) {
|
|
|
|
+ $html .= '';
|
|
|
|
+ foreach ($v as $k1 => $v1) {
|
|
|
|
+ $html .= $v1 . ' ';
|
|
|
|
+ }
|
|
|
|
+ $html .= '';
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return $html;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # 采购订单审核 拆单
|
|
|
|
+ public function audit()
|
|
|
|
+ {
|
|
|
|
+ $order_id = Dever::input('id');
|
|
|
|
+ $info = Dever::db('shop/buy_order')->find($order_id);
|
|
|
|
+
|
|
|
|
+ $goods = Dever::db('shop/buy_order_goods')->select(array('order_id' => $order_id));
|
|
|
|
+
|
|
|
|
+ $shop = Dever::db('shop/info')->find($info['shop_id']);
|
|
|
|
+
|
|
|
|
+ # 获取门店分配的仓库和工厂
|
|
|
|
+
|
|
|
|
+ $store = Dever::db('shop/store')->select(array('shop_id' => $shop['id']));
|
|
|
|
+ $store_id = array();
|
|
|
|
+ foreach ($store as $k => $v) {
|
|
|
|
+ $store_id[] = $v['store_id'];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $store_id = implode(',', $store_id);
|
|
|
|
+
|
|
|
|
+ $where = ' id in('.$store_id.') and status = 1 ';
|
|
|
|
+
|
|
|
|
+ $sql = 'select *,round((st_distance(point(lng, lat), point('.$shop['lng'].', '.$shop['lat'].'))*111195)/1000, 2) as distance from {table} where '.$where.' order by distance asc';
|
|
|
|
+
|
|
|
|
+ $store = Dever::db('factory/info')->$method($sql, array(), $page);
|
|
|
|
+
|
|
|
|
+ # 得到所有的仓库,先验证库存
|
|
|
|
+ foreach ($goods as $k => $v) {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+}
|