You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
5.6 KiB
218 lines
5.6 KiB
<?php
|
|
|
|
namespace app\appapi\controller\v1;
|
|
|
|
use app\appapi\ApiController;
|
|
use think\facade\Db;
|
|
use asc\line\LinePay;
|
|
|
|
use app\common\shipping\ShippingStrategy;
|
|
use app\common\User;
|
|
|
|
class Order extends ApiController
|
|
{
|
|
|
|
/**
|
|
* 添加訂單
|
|
* @author wayne <wwayne.hsu@gmail.com>
|
|
* @param string
|
|
*
|
|
* @return json
|
|
*/
|
|
public function add()
|
|
{
|
|
$data = input('post.');
|
|
|
|
//檢查參數
|
|
//取得用戶資料
|
|
$user_info = User::getUserInfo($this->user_id);
|
|
|
|
//檢查優惠券
|
|
$update_bonus = false;
|
|
if(isset($data['bonus_sn']) && strlen($data['bonus_sn']) == 10){
|
|
$bonus = Db::name('bonus')
|
|
->where('bonus_sn', $data['bonus_sn'])
|
|
->find();
|
|
|
|
if($bonus['remain_number'] == 0){
|
|
return $this->Error('優惠券已用完');
|
|
}
|
|
|
|
Db::name('bonus')
|
|
->where('bonus_sn', $data['bonus_sn'])
|
|
->dec('remain_number')
|
|
->update();
|
|
|
|
$update_bonus = true;
|
|
}
|
|
|
|
//加入訂單
|
|
$order = [
|
|
'order_sn' => get_order_sn(),
|
|
'user_id' => $this->user_id,
|
|
'order_status' => 1,
|
|
'shipping_status' => 0,
|
|
'pay_status' => 0,
|
|
'shipping_id' => intval($data['shipping']['shipping_id']),
|
|
'shipping_name' => Db::name('shipping')->where('shipping_id', $data['shipping']['shipping_id'])->value('shipping_name'),
|
|
'address' => json_encode($data['shipping']['extra_data']),
|
|
'pay_id' => intval($data['payment']['pay_id']),
|
|
'pay_name' => ($data['payment']['pay_id']!=0)?Db::name('payment')->where('pay_id', $data['payment']['pay_id'])->value('pay_name'):'貨到付款',
|
|
'shipping_fee' => floatval($data['shipping']['shipping_fee']),
|
|
'pay_fee' => floatval($data['payment']['pay_fee']),
|
|
'goods_amount' => intval($data['goods_amount']),
|
|
'order_amount' => intval($data['order_amount']),
|
|
'discount' => intval($data['discount']),
|
|
'consignee' => $user_info['real_name'],
|
|
'mobile' => $user_info['mobile_phone'],
|
|
'email' => $user_info['email'],
|
|
'add_time' => time(),
|
|
'extension_code' => isset($data['extension_code']) ? $data['extension_code'] : '',
|
|
];
|
|
|
|
|
|
$order_id = Db::name('order_info')
|
|
->insertGetId($order);
|
|
|
|
$is_main_goods = 0;
|
|
//加入訂單商品項
|
|
foreach ($data['goodsItems'] as $key => $val) {
|
|
$goods_data = [
|
|
'order_id' => $order_id,
|
|
'goods_id' => $val['goods_id'],
|
|
'goods_sn' => $val['goods_sn'],
|
|
'goods_name' => $val['goods_name'],
|
|
'goods_price' => $val['goods_price'],
|
|
'goods_number' => $val['goods_number'],
|
|
'add_info' => isset($val['add_info']) ? $val['add_info'] : ''
|
|
];
|
|
Db::name('order_goods')
|
|
->insert($goods_data);
|
|
|
|
// if($val['goods_id']==1){
|
|
// $is_main_goods = 1;
|
|
// }
|
|
}
|
|
|
|
//如果有主商品,則加入主商品額外屬性
|
|
// if($is_main_goods){
|
|
// $main_goods_data = [
|
|
// 'order_id' => $order_id,
|
|
// 'goods_id' => 1,
|
|
// 'goods_name' => '主商品額外屬性',
|
|
// 'goods_price' => 0,
|
|
// 'goods_number' => 1
|
|
// ];
|
|
|
|
// Db::name('order_info')
|
|
// ->where('order_id',$order_id)
|
|
// ->update($main_goods_data);
|
|
// }
|
|
if($update_bonus){
|
|
Db::name('user_bonus')
|
|
->insert([
|
|
'bonus_id' => $bonus['bonus_id'],
|
|
'bonus_sn' => $bonus['bonus_sn'],
|
|
'user_id' => $this->user_id,
|
|
'used_time' => time(),
|
|
'order_id' => $order_id
|
|
]);
|
|
}
|
|
|
|
if ($data['shipping']['shipping_code'] == 'ecpay' && $data['payment']['pay_code'] == 'cod') {
|
|
//串接綠界物流
|
|
$rtn = \app\common\shipping\Shipping::createShipping('ecpay', $order['order_sn']);
|
|
if ($rtn['code'] != 200) {
|
|
return $this->Error($rtn['msg']);
|
|
}
|
|
}
|
|
// 資料後處理
|
|
// 清空購物車
|
|
$db_rtn = Db::name('cart');
|
|
|
|
if ($this->uid > 0) {
|
|
$db_rtn->where('user_id', $this->uid)
|
|
->where('session_id', $this->SessionId);
|
|
} else {
|
|
$db_rtn->where('session_id', $this->SessionId);
|
|
}
|
|
|
|
$db_rtn->delete();
|
|
|
|
// 使用payment_id取得pay_code
|
|
// $pay_code = Db::name('payment')->where('pay_id', $order['pay_id'])->value('pay_code');
|
|
|
|
return $this->Success(['order_sn' => $order['order_sn'], 'pay_code' => $data['payment']['pay_code']]);
|
|
}
|
|
|
|
//取得訂單列表
|
|
public function list()
|
|
{
|
|
if (!$this->user_id) {
|
|
return $this->Error('請先登入');
|
|
}
|
|
|
|
$status = input('status');
|
|
|
|
$do = Db::name('order_info')
|
|
->field('order_id,order_sn,order_status,shipping_status,pay_status,consignee,mobile,order_amount,pay_id,add_time')
|
|
->where('user_id', $this->user_id)
|
|
->order('order_id', 'desc');
|
|
|
|
if ($status != -1) {
|
|
$do->where('order_status', $status);
|
|
}
|
|
$result = $do->select()->toArray();
|
|
|
|
$SName = getStatusName();
|
|
|
|
foreach ($result as $key => $val) {
|
|
$result[$key]['add_time'] = date('Y-m-d H:i:s', $val['add_time']);
|
|
$result[$key]['goods_items'] = Db::name('order_goods')
|
|
->field('goods_id,goods_name,goods_price,goods_number')
|
|
->where('order_id', $val['order_id'])
|
|
->select()
|
|
->toArray();
|
|
|
|
$ss_status = $val['shipping_status'];
|
|
$os_status = $val['order_status'];
|
|
$ps_status = $val['pay_status'];
|
|
|
|
$status = '';
|
|
|
|
if($os_status==0){
|
|
$status='未確認';
|
|
}elseif($os_status==2){
|
|
$status='已取消';
|
|
}elseif($os_status==3){
|
|
$status='無效';
|
|
}elseif($os_status==7){
|
|
$status='已完成';
|
|
}elseif($os_status==1){
|
|
if($ps_status==1){
|
|
$status='待付款';
|
|
}else{
|
|
if($ss_status<>0 && $ss_status<>4 && $ss_status<>7){
|
|
$status='待出貨';
|
|
}elseif($ss_status==7){
|
|
$status='已達指定門市';
|
|
}else{
|
|
if($val['pay_id']==0){
|
|
$status='待出貨';
|
|
}else{
|
|
$status='未付款';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
$result[$key]['status'] = $status;
|
|
}
|
|
|
|
return $this->Success($result);
|
|
}
|
|
}
|