|
|
<?php
|
|
|
namespace app\order\controller;
|
|
|
use app\coupons\model\CouponModel;
|
|
|
use app\order\model\OrderModel;
|
|
|
use cmf\controller\HomeBaseController;
|
|
|
use think\Db;
|
|
|
|
...
|
...
|
@@ -36,9 +37,10 @@ class OrderController extends HomeBaseController |
|
|
$coupons = new CouponModel;
|
|
|
$couponsList = $coupons->orderCoupon($post['activity_id'], $post['schedule_id'], $post['num'], session('user.id'));
|
|
|
$schedule = Db::name('activity_schedule')
|
|
|
->field('id as schedule_id,start_time,end_time,maximum,real_join_num,addition_join_num')
|
|
|
->field('id as schedule_id,start_time,end_time,maximum,real_join_num,addition_join_num,price')
|
|
|
->where(['activity_id' => $post['activity_id']])
|
|
|
->select();
|
|
|
$total = 0;
|
|
|
foreach ($schedule as $k => $v) {
|
|
|
$v['start_time'] = date('Y.m.d', $v['start_time']);
|
|
|
$v['end_time'] = date('Y.m.d', $v['end_time']);
|
...
|
...
|
@@ -47,12 +49,22 @@ class OrderController extends HomeBaseController |
|
|
unset($v['real_join_num']);
|
|
|
unset($v['addition_join_num']);
|
|
|
unset($v['maximum']);
|
|
|
if ($v['schedule_id'] == $post['schedule_id']) {
|
|
|
$v['checked'] = 1;
|
|
|
$v['num'] = $post['num'];
|
|
|
$total = $v['price'] * $post['num'];
|
|
|
} else {
|
|
|
$v['checked'] = 0;
|
|
|
}
|
|
|
unset($v['price']);
|
|
|
$schedule[$k] = $v;
|
|
|
}
|
|
|
$result = [
|
|
|
'activity' => Db::name('activity')->field('id as activity,name')->where(['id' => $post['activity_id']])->find(),
|
|
|
'activity' => Db::name('activity')->field('id as activity_id,name, is_down_payment as type')->where(['id' => $post['activity_id']])->find(),
|
|
|
'schedule' => $schedule,
|
|
|
'coupons' => $couponsList
|
|
|
'coupons' => $couponsList,
|
|
|
'down_price' => Db::name('activity')->where(['id' => $post['activity_id']])->value('down_price') * $post['num'],
|
|
|
'total' => $total
|
|
|
];
|
|
|
echo json_encode(['data' => $result]);
|
|
|
exit();
|
...
|
...
|
@@ -70,7 +82,7 @@ class OrderController extends HomeBaseController |
|
|
* @param name:num type:int require:1 default:2 desc:上一页选中的购买数量
|
|
|
* @param name:escort type:char require:1 default:同行人id字符串(逗号分隔) desc:1,2,3
|
|
|
* @param name:payment type:int require:1 default:支付方式 desc:0余额,1微信,2支付宝
|
|
|
* @param name:discount_coupon_id type:int require:1 default:1 desc:优惠券id
|
|
|
* @param name:discount_coupon_id type:int require:1 default:112 desc:优惠券id
|
|
|
* @param name:room type:char require:1 default:1 desc:房间信息
|
|
|
* @param name:desc type:text require:1 default:1 desc:商家备注
|
|
|
*/
|
...
|
...
|
@@ -89,12 +101,12 @@ class OrderController extends HomeBaseController |
|
|
$data['order_type'] = $activity['is_down_payment'];
|
|
|
$data['is_use_discount_coupon'] = (empty($post['discount_coupon_id'])) ? 0 : 1;
|
|
|
$data['discount_coupon_id'] = $post['discount_coupon_id'];
|
|
|
$data['payment'] = $post['payment'];
|
|
|
$data['status'] = 0;
|
|
|
if ($data['order_type'] == 0) {
|
|
|
$data['payment1'] = $post['payment'];
|
|
|
} else {
|
|
|
$post['payment2'] = $post['payment'];
|
|
|
}
|
|
|
$data['room'] = $post['room'];
|
|
|
$data['desc'] = $post['desc'];
|
|
|
$final_price = $this->getFinalPrice($data['activity_id'], $data['schedule_id'], $post['num'], $data['discount_coupon_id']);
|
|
|
$this->checkOrder($data['schedule_id'], $data['payment'], $post['escort'], $post['num'], $final_price);
|
|
|
Db::startTrans();
|
|
|
if (Db::name('order_info')->insert($data)) {
|
|
|
$oid = Db::name('order_info')->getLastInsID();
|
...
|
...
|
@@ -110,20 +122,21 @@ class OrderController extends HomeBaseController |
|
|
];
|
|
|
}
|
|
|
if (Db::name('order_detail')->insertAll($detail)) {
|
|
|
//插入订单记录表(包含订单总价)
|
|
|
$log = [
|
|
|
'oid' => $oid,
|
|
|
'order_amount' => $final_price,
|
|
|
'type' => $data['order_type']
|
|
|
];
|
|
|
if (Db::name('order_log')->insert($log)) {
|
|
|
Db::commit();
|
|
|
//选择支付方式0,1,2
|
|
|
//余额支付
|
|
|
if ($post['payment'] == 0) {
|
|
|
|
|
|
} elseif ($post['payment'] == 1) {
|
|
|
|
|
|
} elseif ($post['payment'] == 2) {
|
|
|
|
|
|
} else {
|
|
|
echo json_encode(['msg' => '请选择支付方式', 'code' => 40000]);
|
|
|
$model = new OrderModel;
|
|
|
if ($model->orderCallBack($oid)) {
|
|
|
echo json_encode(['msg' => '下单成功', 'code' => 20000]);
|
|
|
exit();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
Db::rollback();
|
|
|
echo json_encode(['msg' => '下单失败', 'code' => 40000]);
|
...
|
...
|
@@ -136,4 +149,65 @@ class OrderController extends HomeBaseController |
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算订单最终价格
|
|
|
* @param $activityId
|
|
|
* @param $scheduleId
|
|
|
* @param $num
|
|
|
* @param null $discountCouponId
|
|
|
* @return float|int|mixed
|
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
|
* @throws \think\exception\DbException
|
|
|
*/
|
|
|
private function getFinalPrice($activityId, $scheduleId, $num, $discountCouponId = null)
|
|
|
{
|
|
|
$info = Db::name('activity')->field('is_down_payment,down_price')->where(['id' => $activityId])->find();
|
|
|
//如果有定金则支付定金*数量
|
|
|
if ($info['is_down_payment'] == 1) {
|
|
|
$sum = $info['down_price'] * $num;
|
|
|
} //如果没有定金则支付批次金额*数量
|
|
|
else {
|
|
|
$price = Db::name('activity_schedule')->where(['activity_id' => $activityId, 'id' => $scheduleId])->value('price');
|
|
|
$sum = $price * $num;
|
|
|
}
|
|
|
//如果有使用优惠券
|
|
|
if (!empty($discountCouponId)) {
|
|
|
//判断该优惠券是否已使用
|
|
|
$coupons = Db::name('discount_coupon')->field('status,reduce,overflow')->where(['id' => $discountCouponId])->find();
|
|
|
if ($coupons['status'] == 1) {
|
|
|
//是否符合满减
|
|
|
if ($sum >= $coupons['overflow']) {
|
|
|
$sum -= $coupons['reduce'];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return $sum;
|
|
|
}
|
|
|
|
|
|
private function checkOrder($scheduleId, $payment = 0, $escort, $num, $finalPrice)
|
|
|
{
|
|
|
//判断支付方式
|
|
|
if ($payment != 0 && $payment != 1 && $payment != 2) {
|
|
|
echo json_encode(['msg' => '请选择支付方式', 'code' => 40000]);
|
|
|
exit();
|
|
|
}
|
|
|
//判断活动是否过期
|
|
|
if (Db::name('activity_schedule')->where(['id' => $scheduleId])->value('deadline') < time()) {
|
|
|
echo json_encode(['msg' => '本次活动已过期,请重新选择', 'code' => 40000]);
|
|
|
exit();
|
|
|
}
|
|
|
//判断用户余额能否支持余额支付
|
|
|
if (Db::name('user')->where(['id' => session('user.id')])->value('balance') < $finalPrice) {
|
|
|
echo json_encode(['msg' => '您的余额不足,请选择其他支付方式', 'code' => 40000]);
|
|
|
exit();
|
|
|
}
|
|
|
//判断出行人与购买数量是否匹配
|
|
|
$escortNum = (strlen($escort) == 1) ? 1 : count(explode(',', $escort));
|
|
|
if ($escortNum != $num) {
|
|
|
echo json_encode(['msg' => '购买数量需与出行人数量一致', 'code' => 40000]);
|
|
|
exit();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
} |
|
|
\ No newline at end of file |
...
|
...
|
|