225 lines
7.8 KiB
PHP
225 lines
7.8 KiB
PHP
<?php
|
|
|
|
namespace app\api\controller\order;
|
|
|
|
use app\admin\logic\order\CartLogic;
|
|
use app\admin\logic\retail\CashierclassLogic;
|
|
use app\api\logic\order\OrderLogic;
|
|
use app\api\controller\BaseApiController;
|
|
use app\api\lists\order\RetailOrderList;
|
|
use app\api\service\WechatUserService;
|
|
use app\common\logic\order\RetailOrderLogic;
|
|
use app\common\enum\PayEnum;
|
|
use app\common\logic\PaymentLogic;
|
|
use app\common\model\order\Cart;
|
|
use app\common\model\retail\Cashierclass;
|
|
use app\common\model\user\User;
|
|
use app\common\model\user\UserAddress;
|
|
use app\common\service\wechat\WeChatConfigService;
|
|
use support\Log;
|
|
|
|
class RetailOrderController extends BaseApiController
|
|
{
|
|
|
|
/**
|
|
* 订单列表
|
|
*/
|
|
public function order_list(){
|
|
|
|
return $this->dataLists(new RetailOrderList());
|
|
}
|
|
|
|
public function order_count(){
|
|
$userId=$this->request->userId;
|
|
$where=['uid'=>$userId,'paid'=>0];
|
|
$no_pay=Cashierclass::where($where)->count();
|
|
$where['paid']=1;
|
|
$where['status']=0;
|
|
$waiting=Cashierclass::where($where)->count();
|
|
$where['status']=1;
|
|
$receiving=Cashierclass::where($where)->count();
|
|
return $this->success('ok',['no_pay'=>$no_pay,'waiting'=>$waiting,'receiving'=>$receiving]);
|
|
}
|
|
/**
|
|
* @notes 检测零售订单
|
|
*/
|
|
public function checkOrder(){
|
|
$cartId = (Array)$this->request->post('cart_id', []);
|
|
$addressId = (int)$this->request->post('address_id');
|
|
$pay_type = (int)$this->request->post('pay_type');
|
|
$auth_code = $this->request->post('auth_code'); //微信支付条码
|
|
$params=$this->request->post();
|
|
$res=OrderLogic::cartIdByOrderInfo($cartId,$addressId,null,$params);
|
|
if($res==false){
|
|
$msg=OrderLogic::getError();
|
|
if($msg=='购物车为空'){
|
|
return $this->data([]);
|
|
}
|
|
return $this->fail(OrderLogic::getError());
|
|
}
|
|
return $this->data($res);
|
|
}
|
|
|
|
/**
|
|
* @notes 创建零售订单
|
|
*/
|
|
public function createOrder(){
|
|
|
|
// d(WeChatConfigService::getPayConfigByTerminal(1));
|
|
$user=User::where('id',$this->request->userId)->find();
|
|
$cartId = (Array)$this->request->post('cart_id', []);
|
|
$mer_id = (Array)$this->request->post('mer_id', 0);
|
|
if($mer_id<=0){
|
|
return $this->fail('自提点不能为空');
|
|
}
|
|
if(count($cartId)>100){
|
|
return $this->fail('购物车商品不能超过100个');
|
|
}
|
|
$addressId = (int)$this->request->post('address_id');
|
|
$pay_type = (int)$this->request->post('pay_type');
|
|
$auth_code = $this->request->post('auth_code'); //微信支付条码
|
|
$params=$this->request->post();
|
|
$order=OrderLogic::createOrder($cartId,$addressId,null,$params);
|
|
if($order!=false){
|
|
if($pay_type==PayEnum::BALANCE_PAY){
|
|
$user=User::where('id',$this->request->userId)->find();
|
|
$res=RetailOrderLogic::payBalance($user,$order);
|
|
if($res==true){
|
|
$res=RetailOrderLogic::paySuccess($order, ['money'=>$order['actual']]);
|
|
if($res){
|
|
}else{
|
|
return $this->fail(RetailOrderLogic::getError());
|
|
}
|
|
}else{
|
|
return $this->fail(RetailOrderLogic::getError());
|
|
}
|
|
}elseif($pay_type==PayEnum::WECHAT_PAY){
|
|
$redirectUrl = $params['redirect'] ?? '/pages/payment/payment';
|
|
$result = PaymentLogic::pay($pay_type,'cashierclass', $order, $this->userInfo['terminal'], $redirectUrl);
|
|
if (false === $result) {
|
|
return $this->fail(PaymentLogic::getError(), $params);
|
|
}
|
|
return $this->success('', $result);
|
|
}
|
|
return $this->data(['order_id'=>$order->id]);
|
|
}else{
|
|
return $this->fail(OrderLogic::getError());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 重新支付
|
|
*/
|
|
public function Repayment(){
|
|
$order_id = (int)$this->request->post('order_id');
|
|
$addressId = (int)$this->request->post('address_id');
|
|
$pay_type = (int)$this->request->post('pay_type');
|
|
$params=$this->request->post();
|
|
$where=[
|
|
'id'=>$order_id,
|
|
'uid'=>$this->userId,
|
|
'paid'=>0,
|
|
];
|
|
$order=Cashierclass::where($where)->find();
|
|
if($pay_type==PayEnum::BALANCE_PAY){
|
|
$user=User::where('id',$this->request->userId)->find();
|
|
$res=RetailOrderLogic::payBalance($user,$order);
|
|
if($res==true){
|
|
$res=RetailOrderLogic::paySuccess($order, ['money'=>$order['actual']]);
|
|
if($res){
|
|
}else{
|
|
return $this->fail(RetailOrderLogic::getError());
|
|
}
|
|
}else{
|
|
return $this->fail(RetailOrderLogic::getError());
|
|
}
|
|
}elseif($pay_type==PayEnum::WECHAT_PAY){
|
|
$redirectUrl = $params['redirect'] ?? '/pages/payment/payment';
|
|
if($addressId>0){
|
|
$address=UserAddress::where(['address_id'=>$addressId,'uid'=>Request()->userId])->find();
|
|
if($address){
|
|
$_order['real_name'] = $address['real_name'];
|
|
$_order['user_phone'] = $address['phone'];
|
|
$_order['user_address'] = $address['detail'];
|
|
$_order['address_id'] = $addressId;
|
|
$order=Cashierclass::where(['id'=>$order_id,'uid'=>Request()->userId])->update($_order);
|
|
}
|
|
}
|
|
$result = PaymentLogic::pay($pay_type,'cashierclass', $order, $this->userInfo['terminal'], $redirectUrl);
|
|
if (false === $result) {
|
|
return $this->fail(PaymentLogic::getError());
|
|
}
|
|
return $this->success('', $result);
|
|
}
|
|
return $this->fail('支付失败');
|
|
|
|
}
|
|
|
|
public function detail(){
|
|
$order_id = (int)$this->request->get('order_id');
|
|
$where=[
|
|
'id'=>$order_id,
|
|
'uid'=>$this->userId,
|
|
];
|
|
$order=CashierclassLogic::detail($where);
|
|
if($order){
|
|
return $this->data($order);
|
|
}else{
|
|
return $this->fail('订单不存在');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取用户常用购买记录
|
|
*/
|
|
public function frequently_purchase(){
|
|
$params=$this->request->get();
|
|
$res=RetailOrderLogic::frequentlyPurchase($params);
|
|
if(RetailOrderLogic::hasError()){
|
|
return $this->fail(RetailOrderLogic::getError());
|
|
}else{
|
|
return $this->data($res);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 取消订单
|
|
*/
|
|
public function cancel_order(){
|
|
$order_id = (int)$this->request->post('order_id');
|
|
$value = (int)$this->request->post('value');
|
|
$where=[
|
|
'id'=>$order_id,
|
|
'uid'=>$this->userId,
|
|
'paid'=>0,
|
|
];
|
|
$order=Cashierclass::where($where)->find();
|
|
if($order){
|
|
$data=['data'=>$value,'delete_time'=>time()];
|
|
Cashierclass::where($where)->update($data);
|
|
return $this->success('取消成功');
|
|
}
|
|
return $this->fail('取消失败');
|
|
}
|
|
|
|
/**
|
|
* 确认收货
|
|
*/
|
|
public function confirm_receipt(){
|
|
$order_id = (int)$this->request->post('order_id');
|
|
$where=[
|
|
'id'=>$order_id,
|
|
'uid'=>$this->userId,
|
|
'paid'=>1,
|
|
'status'=>1,
|
|
];
|
|
$order=Cashierclass::where($where)->find();
|
|
if($order){
|
|
$data=['status'=>2];
|
|
Cashierclass::where($where)->update($data);
|
|
return $this->success('确认成功');
|
|
}
|
|
return $this->fail('确认失败');
|
|
|
|
}
|
|
} |