$params['mobile']])->findOrEmpty(); if($user_info->isEmpty()){ return []; } $user_id = $user_info['id']; $where['user_id'] = $user_id; $pageNo = 1; if(isset($params['pageNo']) && !empty($params['pageNo'])){ $pageNo = $params['pageNo']??1; //页码 } if(isset($params['orderSn']) && !empty($params['orderSn'])){ if($order_source == 1){ $where['sn']=$params['orderSn']; }else if($order_source == 2){ $where['transaction_id'] = $params['orderSn']; }else{ $where['sn|transaction_id'] = $params['orderSn']; } } $pageSize = 10; //每页数量 $index = (int)($pageNo-1)*$pageSize; $order_list = Order::field('id,sn,user_id,order_type,order_status,pay_status,pay_way,pay_time,address,delivery_type, goods_price,order_amount,discount_amount,member_amount,integral_amount,total_amount,total_num,express_status,confirm_take_time, create_time,order_source,order_goods') ->with('user') ->where($where)->order('id desc')->limit($index,$pageSize)->select()->toArray(); foreach($order_list as &$v){ if($v['order_source'] == 1){ $gwhere['order_id'] = $v['id']; $order_goods = OrderGoods::field('id,goods_name,goods_snap,goods_num,goods_price,total_price,total_pay_price')->where($gwhere)->select()->toArray(); $order_goods_list =$order_goods; $v['order_goods'] = $order_goods_list; } } $data['order_count'] = Order::where($where)->count(); $data['order_list'] = $order_list; $data['page_index'] = $pageNo; $data['page_num'] = $pageSize; return $data; } /* * * 线下订单推送 * */ public function orderPush($params){ outFileLog($params,'orderPush','$params'); $userInfo = User::where(['mobile'=>$params['mobile']])->findOrEmpty(); if($userInfo->isEmpty()){ outFileLog($params,'orderPush','$params'); self::setError('会员数据查询为空'); return false; } $order_info = Order::where(['sn'=> $params['orderSn']])->findOrEmpty(); if(!$order_info->isEmpty()){ outFileLog($params,'orderPush','$params'); self::setError('该订单号已存在'); return false; } // if($params['pay_way'] == 1) { // if ($params['order_amount'] > $userInfo['user_money']) { // outFileLog($params, 'orderPush', '金额不足'); // self::setError('线上会员金额不足以抵扣'); // return false; // } // } $goods_price = 0; if(isset($params['goods_price']) && !empty($params['goods_price'])){ $goods_price = $params['goods_price']; } $order_amount = 0; if(isset($params['order_amount']) && !empty($params['order_amount'])){ $order_amount = $params['order_amount']; } $discount_amount = 0; // if(isset($params['discount_amount']) && !empty($params['discount_amount'])){ // $discount_amount = $params['discount_amount']; // } $member_amount = 0; if(isset($params['member_amount']) && !empty($params['member_amount'])){ $member_amount = $params['member_amount']; } $integral_amount = 0; // if(isset($params['integral_amount']) && !empty($params['integral_amount'])){ // $integral_amount = $params['integral_amount']; // } $total_amount = 0; if(isset($params['total_amount']) && !empty($params['total_amount'])){ $total_amount = $params['total_amount']; } $total_num = 0; if(isset($params['total_num']) && !empty($params['total_num'])){ $total_num = $params['total_num']; } $create_time = time(); if(isset($params['create_time']) && !empty($params['create_time'])){ $create_time = $params['create_time']; } $user_id = $userInfo['id']; $saveData['sn'] = $params['orderSn']; $saveData['transaction_id'] = $params['orderSn']; $saveData['user_id'] = $user_id; $saveData['order_type'] = 1; // $saveData['pay_way'] =$params['pay_way']; $saveData['order_terminal'] = 7; $saveData['order_status'] = 0; $saveData['pay_status'] = 0; // $saveData['pay_time'] = $params['create_time']; $saveData['delivery_type'] = 2; $saveData['goods_price'] = $goods_price; $saveData['order_amount'] = $order_amount; $saveData['discount_amount'] = $discount_amount; $saveData['member_amount'] = $member_amount; $saveData['integral_amount'] = $integral_amount; $saveData['total_amount'] = $total_amount; $saveData['total_num'] = $total_num; $saveData['express_status'] = 1; // $saveData['express_time'] =$params['create_time']; // $saveData['confirm_take_time'] = $params['create_time']; $saveData['create_time'] = $create_time; $saveData['order_source'] = 2; $saveData['order_goods'] = $params['order_goods']; $ret = Order::create($saveData); if($ret) { // if ($params['pay_way'] == 1) { // //减少金额 // $userInfo->user_money = $userInfo->user_money - $order_amount; // $userInfo->save(); // // //记录用户金额变动记录 // //记录日志 // AccountLogLogic::add($userInfo->id, AccountLogEnum::BNW_DEC_ORDER, AccountLogEnum::DEC, $order_amount, $params['orderSn'], '线下收银台销售扣减用户金额'); // } (new OrderLog())->record([ 'type' => OrderLogEnum::TYPE_SYSTEM, 'channel' => OrderLogEnum::USER_ADD_ORDER, 'order_id' => $ret['id'], 'content'=>'收银台推送订单', ]); } return true; } /* * * 订单结算 * */ public function orderPay($params) { outFileLog($params, 'orderPay', '$params'); $userInfo = User::where(['mobile' => $params['mobile']])->findOrEmpty(); if ($userInfo->isEmpty()) { outFileLog($params, 'orderPay', '$params'); self::setError('会员数据查询为空'); return false; } $order_info = Order::where(['sn' => $params['orderSn']])->findOrEmpty(); if ($order_info->isEmpty()) { outFileLog($params, 'orderPay', '订单号查询失败:'); self::setError('订单号查询订单信息失败'); return false; } if($order_info['order_status'] == 3){ outFileLog($params, 'orderPay', '订单已支付完成'); self::setError('订单已支付完成'); return false; } $pay_money = round($order_info['offline_pay_money'] + $order_info['offline_pay_user_money'] + $params['pay_money'],2) ; if($pay_money>$order_info['order_amount']){ outFileLog($params, 'orderPay', '金额超了应付金额'); outFileLog($pay_money, 'orderPay', '金额超了应付金额-$pay_money'); outFileLog($order_info['order_amount'], 'orderPay', '金额超了应付金额-order_amount'); self::setError('订单支付金额错误,总支付金额大于应付金额'); return false; } if ($params['pay_way'] == 1) { if ($params['pay_money'] > $userInfo['user_money']) { outFileLog($params, 'orderPay', '会员卡金额不足'); self::setError('线上会员金额不足以支付'); return false; } } $create_time = time(); if(isset($params['create_time']) && !empty($params['create_time'])){ $create_time = $params['create_time']; } if ($params['pay_way'] == 1) { $order_info->offline_pay_user_money = $params['pay_money']; $order_info->pay_way = 1; $order_info->pay_time = $create_time; $order_info->save(); //减少金额 $userInfo->user_money = $userInfo->user_money - $params['pay_money']; $userInfo->save(); //记录用户金额变动记录 //记录日志 AccountLogLogic::add($userInfo->id, AccountLogEnum::BNW_DEC_ORDER, AccountLogEnum::DEC, $params['pay_money'], $params['orderSn'], '线下收银台销售扣减用户金额'); $content = '收银台会员卡支付金额'.$params['pay_money']; }else{ if(empty($order_info['pay_way'])){ $order_info->pay_way = 5; $order_info->pay_time = $create_time; } $order_info->offline_pay_money = $order_info->offline_pay_money + $params['pay_money']; $order_info->save(); $content = '收银台现金或移动支付金额'.$params['pay_money']; } (new OrderLog())->record([ 'type' => OrderLogEnum::TYPE_SYSTEM, 'channel' => OrderLogEnum::USER_PAID_ORDER, 'order_id' => $order_info['id'], 'content'=>$content, ]); if($params['is_pay_end'] == 1){ $order_info->order_status = 3; $order_info->save(); } return true; } /* * 新增会员信息 * */ public function orderRefundMoney(array $params):bool{ try { $mobile = $params['mobile']; $where['mobile'] = $mobile; $user_info = User::where($where)->findOrEmpty(); if($user_info->isEmpty()){ outFileLog($params,'orderRefundMoney','会员信息有无'); self::setError('传入的会员信息有误,不存在,请同步'); return false; } $refund_money = $params['refund_money']; if(isset($params['orderSn']) && !empty($params['orderSn'])) { $order_info = Order::where(['sn' => $params['orderSn']])->findOrEmpty(); if ($order_info->isEmpty()) { outFileLog($params, 'orderRefundMoney', '传入订单信息有误'); self::setError('传入订单信息有误'); return false; } if($order_info['order_amount']<$refund_money || $order_info['order_amount']< round($refund_money+$order_info['offline_refund_money'],2)){ outFileLog($params, 'orderRefundMoney', '传入退款金额有误'); self::setError('传入退款金额有误或总退款金额超出支付金额'); return false; } $afersaleInfo = AfterSale::where(['order_id'=>$order_info['id']])->findOrEmpty(); if(!$afersaleInfo->isEmpty()){ outFileLog($params, 'orderRefundMoney', '已申请售后'); self::setError('该订单号已经售后'); return false; } //插入售后表 $afterSale = AfterSale::create([ 'sn' => generate_sn((new AfterSale()), 'sn'), 'user_id' => $order_info['user_id'], 'order_id' => $order_info['id'], 'order_goods_id' => 0, 'refund_reason' => '线下收银退款-'.$params['remark'], 'refund_remark' => '收银台系统发起退款', 'refund_type' => 2, 'refund_method' => 1, 'refund_total_amount' =>$refund_money, 'refund_way' => 1, 'refund_status' => 3, 'status' => 2, 'sub_status' => 21, ]); if ($params['is_return_user_money'] == 0) { $order_info->offline_refund_money = $order_info->offline_refund_money + $refund_money; $order_info->save(); return true; } else { $order_info->offline_refund_money = $order_info->offline_refund_money +$refund_money; $order_info->save(); $user_info->user_money = $user_info->user_money + $refund_money; $user_info->save(); //记录用户金额变动记录 //记录日志 AccountLogLogic::add($user_info->id, AccountLogEnum::BNW_INC_CANCEL_ORDER, AccountLogEnum::INC, $refund_money, $params['orderSn'], '线下收银台退款增加用户金额'); return true; } } outFileLog($params,'orderRefundMoney','传入的订单编号有误'); self::setError('传入的订单编号有误'); return false; }catch(\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } }