| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- <?php
- // +----------------------------------------------------------------------
- // | likeshop100%开源免费商用商城系统
- // +----------------------------------------------------------------------
- // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
- // | 开源版本可自由商用,可去除界面版权logo
- // | 商业版本务必购买商业授权,以免引起法律纠纷
- // | 禁止对系统程序代码以任何目的,任何形式的再发布
- // | gitee下载:https://gitee.com/likeshop_gitee
- // | github下载:https://github.com/likeshop-github
- // | 访问官网:https://www.likeshop.cn
- // | 访问社区:https://home.likeshop.cn
- // | 访问手册:http://doc.likeshop.cn
- // | 微信公众号:likeshop技术社区
- // | likeshop团队 版权所有 拥有最终解释权
- // +----------------------------------------------------------------------
- // | author: likeshopTeam
- // +----------------------------------------------------------------------
- namespace app\openapi\logic\order;
- use app\adminapi\logic\distribution\DistributionLogic;
- use app\common\{enum\OrderLogEnum,
- logic\BaseLogic,
- model\AfterSale,
- model\OrderGoods,
- model\OrderLog,
- model\User,
- model\Order,
- enum\PayEnum,
- model\UserLevel,
- model\UserLabel,
- enum\CouponEnum,
- model\CouponList,
- enum\AccountLogEnum,
- model\UserLabelIndex,
- logic\AccountLogLogic,
- enum\UserTerminalEnum,
- service\ConfigService};
- use think\facade\Config;
- use think\facade\Db;
- use think\Model;
- /**
- * 订单逻辑层
- * Class UserLogic
- * @package app\adminapi\logic\user
- */
- class OrderLogic extends BaseLogic
- {
- /**
- * @notes 用户详情
- * @param $params array
- * @return list array
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- * @author cjhao
- * @date 2021/8/18 15:52
- */
- public function getUserOrderList($params)
- {
- $where=[];
- $order_source = 0;
- if(isset($params['type'])) {
- if (($params['type']) == 1) {
- $order_source =1;
- $where['order_source'] = 1; //平台
- } else if (($params['type']) == 2) {
- $order_source=2;
- $where['order_source'] = 2; //线下
- }
- }
- $user_info = User::where(['mobile'=>$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;
- }
- }
- }
|