|
@@ -360,80 +360,112 @@ class Order extends Base
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- /*if ($order['have_paid'] != \addons\unishop\model\Order::PAID_NO) {
|
|
|
+ if ($order['have_paid'] != \addons\unishop\model\Order::PAID_NO) {
|
|
|
$this->error('此订单已支付,无法取消');
|
|
|
- }*/
|
|
|
- if ($order['have_delivered'] != \addons\unishop\model\Order::DELIVERED_NO) {
|
|
|
- $this->error('此订单已发货,无法取消');
|
|
|
+ }
|
|
|
+ if ($order['have_received'] != \addons\unishop\model\Order::RECEIVED_NO) {
|
|
|
+ $this->error('此订单已核销,无法取消');
|
|
|
}
|
|
|
|
|
|
-// if ($order['status'] == \addons\unishop\model\Order::STATUS_NORMAL && $order['have_paid'] == \addons\unishop\model\Order::PAID_NO) {
|
|
|
- if ($order['status'] == \addons\unishop\model\Order::STATUS_NORMAL && $order['have_delivered'] == \addons\unishop\model\Order::DELIVERED_NO) {
|
|
|
+ if ($order['status'] == \addons\unishop\model\Order::STATUS_NORMAL && $order['have_paid'] == \addons\unishop\model\Order::PAID_NO) {
|
|
|
+ $order->status = \addons\unishop\model\Order::STATUS_CANCEL;
|
|
|
+ $order->canceltime = time();
|
|
|
+ $order->save();
|
|
|
|
|
|
- Db::startTrans();
|
|
|
- /*$order->status = \addons\unishop\model\Order::STATUS_CANCEL;
|
|
|
- $order->save();*/
|
|
|
-
|
|
|
-
|
|
|
- //已付款的,自动退款
|
|
|
- if($order['have_paid'] != \addons\unishop\model\Order::PAID_NO){
|
|
|
- $refund_amount = $order['total_price'];
|
|
|
- $refund_status = 3;
|
|
|
-
|
|
|
- // 退款
|
|
|
- $params = [
|
|
|
- 'refund_status' => $refund_status,
|
|
|
- 'updatetime' => time(),
|
|
|
- 'refund_amount' => $refund_amount,
|
|
|
- 'status' => \addons\unishop\model\Order::STATUS_CANCEL,
|
|
|
- ];
|
|
|
- if($refund_status == 3) {
|
|
|
- $params['had_refund'] = time();
|
|
|
- }
|
|
|
+ //归还优惠券
|
|
|
+ $coupon_user_id = Db::name('unishop_order_extend')->where('order_id',$order_id)->value('coupon_user_id');
|
|
|
+ if(!empty($coupon_user_id)){
|
|
|
+ Db::name('unishop_coupon_user')->where('id',$coupon_user_id)->where('user_id',$this->auth->id)->update(['status'=>0]);
|
|
|
+ }
|
|
|
|
|
|
- $result = Db::name('unishop_order')->where(['id' => $order_id])->update($params);
|
|
|
- if (!$result) {
|
|
|
- Db::rollback();
|
|
|
- $this->error('取消失败');
|
|
|
- }
|
|
|
+ $this->success('取消成功', true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //已支付取消,申请退订
|
|
|
+ public function payed_cancel()
|
|
|
+ {
|
|
|
+ $order_id = input('order_id', 0);
|
|
|
+ $order_id = \addons\unishop\extend\Hashids::decodeHex($order_id);
|
|
|
|
|
|
- //同意并执行退款
|
|
|
- if($refund_status == 3 && $refund_amount > 0){
|
|
|
- $order = Db::name('unishop_order')->where('id',$order_id)->find();
|
|
|
-
|
|
|
- if($order['pay_type'] == 2){
|
|
|
- $wallet = new \app\common\model\Wallet();
|
|
|
- $wallet_rs = $wallet->lockChangeAccountRemain($order['user_id'],'money',$refund_amount,32,'商城取消订单退款'.$order['out_trade_no'],'unishop_order',$order_id);
|
|
|
- if($wallet_rs['status'] === false){
|
|
|
- Db::rollback();
|
|
|
- $this->error($wallet_rs['msg']);
|
|
|
- }
|
|
|
- }elseif($order['pay_type'] == 3 || $order['pay_type'] == 4){
|
|
|
- $refund_result = $this->old_refund($order,$refund_amount);
|
|
|
- if($refund_result !== true){
|
|
|
- Db::rollback();
|
|
|
- $this->error($refund_result);
|
|
|
- }
|
|
|
- }
|
|
|
+ $orderModel = new \addons\unishop\model\Order();
|
|
|
+ $order = $orderModel->where(['id' => $order_id, 'user_id' => $this->auth->id])->find();
|
|
|
|
|
|
- }
|
|
|
- }else{
|
|
|
- $params = [
|
|
|
- 'status' => \addons\unishop\model\Order::STATUS_CANCEL,
|
|
|
- ];
|
|
|
- $result = Db::name('unishop_order')->where(['id' => $order_id])->update($params);
|
|
|
- if ($result === false) {
|
|
|
- Db::rollback();
|
|
|
- $this->error('取消失败');
|
|
|
- }
|
|
|
+ if (!$order) {
|
|
|
+ $this->error(__('Order not exist'));
|
|
|
+ }
|
|
|
+
|
|
|
+ switch ($order['status']) {
|
|
|
+ case \addons\unishop\model\Order::STATUS_REFUND:
|
|
|
+ $this->error('此订单已退款,无法取消');
|
|
|
+ break;
|
|
|
+ case \addons\unishop\model\Order::STATUS_CANCEL:
|
|
|
+ $this->error('此订单已取消, 无需再取消');
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($order['have_paid'] == \addons\unishop\model\Order::PAID_NO) {
|
|
|
+ $this->error('未支付订单,直接取消即可');
|
|
|
+ }
|
|
|
+ if ($order['have_received'] != \addons\unishop\model\Order::RECEIVED_NO) {
|
|
|
+ $this->error('此订单已核销,无法退订');
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::startTrans();
|
|
|
+ if ($order['status'] == \addons\unishop\model\Order::STATUS_NORMAL && $order['have_received'] == \addons\unishop\model\Order::RECEIVED_NO) {
|
|
|
+
|
|
|
+ $refund_amount = $order['total_price'];
|
|
|
+ $refund_status = 3; //申请售后状态 0=无,1=申请中,2=通过(让用户发货),3=通过,4=拒绝
|
|
|
+
|
|
|
+ // 退款
|
|
|
+ $params = [
|
|
|
+ 'refund_status' => $refund_status,
|
|
|
+ 'updatetime' => time(),
|
|
|
+ 'refund_amount' => $refund_amount,
|
|
|
+ 'status' => \addons\unishop\model\Order::STATUS_CANCEL,
|
|
|
+ 'canceltime' => time(),
|
|
|
+ ];
|
|
|
+ if($refund_status == 3) {
|
|
|
+ $params['had_refund'] = time();
|
|
|
}
|
|
|
|
|
|
- Db::commit();
|
|
|
+ $result = Db::name('unishop_order')->where(['id' => $order_id])->update($params);
|
|
|
+ if (!$result) {
|
|
|
+ Db::rollback();
|
|
|
+ $this->error('取消失败');
|
|
|
+ }
|
|
|
|
|
|
- $this->success('取消成功', true);
|
|
|
+ //归还优惠券
|
|
|
+ $coupon_user_id = Db::name('unishop_order_extend')->where('order_id',$order_id)->value('coupon_user_id');
|
|
|
+ if(!empty($coupon_user_id)){
|
|
|
+ Db::name('unishop_coupon_user')->where('id',$coupon_user_id)->where('user_id',$this->auth->id)->update(['status'=>0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //同意并执行退款
|
|
|
+ if($refund_status == 3 && $refund_amount > 0){
|
|
|
+ $order = Db::name('unishop_order')->where('id',$order_id)->find();
|
|
|
+
|
|
|
+ if($order['pay_type'] == 2){
|
|
|
+ $wallet = new \app\common\model\Wallet();
|
|
|
+ $wallet_rs = $wallet->lockChangeAccountRemain($order['user_id'],'money',$refund_amount,32,'商城取消订单退款'.$order['out_trade_no'],'unishop_order',$order_id);
|
|
|
+ if($wallet_rs['status'] === false){
|
|
|
+ Db::rollback();
|
|
|
+ $this->error($wallet_rs['msg']);
|
|
|
+ }
|
|
|
+ }elseif($order['pay_type'] == 3){
|
|
|
+ $refund_result = $this->old_refund($order,$refund_amount);
|
|
|
+ if($refund_result !== true){
|
|
|
+ Db::rollback();
|
|
|
+ $this->error($refund_result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
+ Db::commit();
|
|
|
+
|
|
|
+ $this->success('退订成功', true);
|
|
|
+ }
|
|
|
// 退款
|
|
|
public function old_refund($order, $refund_price)
|
|
|
{
|
|
@@ -821,9 +853,9 @@ class Order extends Base
|
|
|
'products' => function ($query) {
|
|
|
$query->field('id,order_id,image,number,price,spec,title,product_id');
|
|
|
},
|
|
|
- 'extend' => function ($query) {
|
|
|
+ /*'extend' => function ($query) {
|
|
|
$query->field('id,order_id,address_id,address_json,express_number,express_company');
|
|
|
- },
|
|
|
+ },*/
|
|
|
'evaluate' => function ($query) {
|
|
|
$query->field('id,order_id,product_id');
|
|
|
}
|
|
@@ -833,23 +865,24 @@ class Order extends Base
|
|
|
if ($order) {
|
|
|
$order = $order->append(['state', 'paidtime', 'deliveredtime', 'receivedtime', 'commentedtime', 'pay_type_text', 'refund_status_text'])->toArray();
|
|
|
|
|
|
+ $order['state_text'] = $orderModel->getStatetextAttr($order['state'],$order['refund_status']);//状态中文
|
|
|
// 快递单号
|
|
|
- $order['express_number'] = $order['extend']['express_number'];
|
|
|
+ /* $order['express_number'] = $order['extend']['express_number'];
|
|
|
$order['express_company'] = '快递单号';
|
|
|
$order['express'] = '';
|
|
|
if (class_exists(\addons\expressquery\library\Expressquery::class)) {
|
|
|
$expressInfo = Db::name('expressquery')->where(['express' => $order['extend']['express_company']])->find();
|
|
|
$order['express_company'] = $expressInfo['name'] ?? '快递单号';
|
|
|
$order['express'] = $expressInfo['express'] ?? '';
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
// 送货地址
|
|
|
- $address = json_decode($order['extend']['address_json'], true);
|
|
|
+ /*$address = json_decode($order['extend']['address_json'], true);
|
|
|
|
|
|
$delivery['username'] = $address['name'];
|
|
|
$delivery['mobile'] = $address['mobile'];
|
|
|
$delivery['address'] = $address['province_name'] . ' ' . $address['city_name'] . ' ' . $address['area_name'] . ' ' . $address['address'];
|
|
|
- $order['delivery'] = $delivery;
|
|
|
+ $order['delivery'] = $delivery;*/
|
|
|
|
|
|
// 是否已评论
|
|
|
$evaluate = array_column($order['evaluate'], 'product_id');
|
|
@@ -864,6 +897,11 @@ class Order extends Base
|
|
|
|
|
|
unset($order['evaluate']);
|
|
|
unset($order['extend']);
|
|
|
+ unset($order['pay_out_trade_no']);
|
|
|
+
|
|
|
+ //电子凭证,核销码
|
|
|
+ $qrcode_string = 'order_hexiao_no|' . $order['out_trade_no'];
|
|
|
+ $order['order_hexiao_qrcode'] = httpurllocal($this->inviteimage($qrcode_string));
|
|
|
}
|
|
|
|
|
|
} catch (Exception $e) {
|
|
@@ -873,6 +911,25 @@ class Order extends Base
|
|
|
$this->success('', $order);
|
|
|
}
|
|
|
|
|
|
+ //生成核销码
|
|
|
+ private function inviteimage($introcode) {
|
|
|
+ $params['text'] = $introcode;
|
|
|
+ $qrcode_service = \addons\qrcode\library\Service::qrcode($params);
|
|
|
+
|
|
|
+ $qrcodePath = ROOT_PATH . 'public/uploads/qrcode/';
|
|
|
+ if (!is_dir($qrcodePath)) {
|
|
|
+ @mkdir($qrcodePath);
|
|
|
+ }
|
|
|
+ if (is_really_writable($qrcodePath)) {
|
|
|
+ $filename = md5(implode('', $params)) . '.png';
|
|
|
+ $filePath = $qrcodePath . $filename;
|
|
|
+ $qrcode_service->writeFile($filePath);
|
|
|
+ }
|
|
|
+
|
|
|
+ return '/uploads/qrcode/' . $filename;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* @ApiTitle (申请售后信息)
|
|
|
* @ApiSummary (申请售后信息)
|
|
@@ -1138,11 +1195,7 @@ class Order extends Base
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * 申请退货原因
|
|
|
- * */
|
|
|
- public function refund_reason(){
|
|
|
- $list = Db::name('unishop_refundreason')->order('weigh asc')->select();
|
|
|
- $this->success(1,$list);
|
|
|
- }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|