From 4309604dcf19f5aeda3f68922917cabf1a7207cb Mon Sep 17 00:00:00 2001 From: jianglong Date: Wed, 10 May 2023 18:26:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/Order.php | 61 ++++ app/api/controller/Pay.php | 26 +- app/api/logic/OrderLogic.php | 249 ++++++++++++- app/api/logic/PayLogic.php | 384 +++++++++++++++------ app/api/logic/UserLogic.php | 5 +- app/api/validate/OrderResourceValidate.php | 41 +++ app/api/validate/OrderUserValidate.php | 41 +++ app/common/enum/NoticeEnum.php | 12 + app/common/logic/PayNotifyLogic.php | 249 +++++++++---- app/common/model/AccountLog.php | 9 +- app/common/model/order/Order.php | 8 +- app/common/model/order/OrderResource.php | 9 + app/common/model/order/OrderUser.php | 9 + app/common/server/WeChatPayServer.php | 22 +- .../cache/51/6acd4f8c5fec7d25182d1c0728d355.php | 4 - .../cache/9f/d2f37875d1da637002182ec566f162.php | 2 +- .../session/sess_3632be6a5ab6055cd5719e554b79bbac | 1 - 17 files changed, 951 insertions(+), 181 deletions(-) create mode 100644 app/api/validate/OrderResourceValidate.php create mode 100644 app/api/validate/OrderUserValidate.php create mode 100644 app/common/model/order/OrderResource.php create mode 100644 app/common/model/order/OrderUser.php delete mode 100644 runtime/cache/51/6acd4f8c5fec7d25182d1c0728d355.php delete mode 100644 runtime/session/sess_3632be6a5ab6055cd5719e554b79bbac diff --git a/app/api/controller/Order.php b/app/api/controller/Order.php index 7545207..c58b54c 100644 --- a/app/api/controller/Order.php +++ b/app/api/controller/Order.php @@ -4,6 +4,8 @@ namespace app\api\controller; use app\api\logic\OrderInvoiceLogic; use app\api\logic\OrderLogic; +use app\api\validate\OrderResourceValidate; +use app\api\validate\OrderUserValidate; use app\api\validate\OrderValidate; use app\common\basics\Api; use app\common\server\JsonServer; @@ -23,6 +25,7 @@ class Order extends Api $post = $this->request->post(); $post['user_id'] = $this->user_id; $post['client'] = $this->client; + (new OrderValidate())->goCheck('add', $post); $order = OrderLogic::add($post); if (false === $order) { @@ -32,6 +35,64 @@ class Order extends Api } /** + * @notes 下单-开通会员卡 + * @return \think\response\Json + * @throws \think\Exception + * @author suny + * @date 2021/7/13 6:11 下午 + */ + public function submitUserOrder() + { + $post = $this->request->post(); + $post['user_id'] = $this->user_id; + $post['client'] = $this->client; + (new OrderUserValidate())->goCheck('add', $post); + $order = OrderLogic::addUserOrder($post); + if (false === $order) { + return JsonServer::error(OrderLogic::getError()); + } + return JsonServer::success('下单成功!', $order); + } + /** + * @notes 下单-开通免费会员卡 + * @return \think\response\Json + * @throws \think\Exception + * @author suny + * @date 2021/7/13 6:11 下午 + */ + public function submitFreeUserOrder() + { + $post = $this->request->post(); + $post['user_id'] = $this->user_id; + $post['client'] = $this->client; + (new OrderUserValidate())->goCheck('add', $post); + $order = OrderLogic::addFreeUserOrder($post); + if (false === $order) { + return JsonServer::error(OrderLogic::getError()); + } + return JsonServer::success('开通成功!', $order); + } + /** + * @notes 下单-购买资料 + * @return \think\response\Json + * @throws \think\Exception + * @author suny + * @date 2021/7/13 6:11 下午 + */ + public function submitResourceOrder() + { + $post = $this->request->post(); + $post['user_id'] = $this->user_id; + $post['client'] = $this->client; + (new OrderResourceValidate())->goCheck('add', $post); + $order = OrderLogic::addResourceOrder($post); + if (false === $order) { + return JsonServer::error(OrderLogic::getError()); + } + return JsonServer::success('下单成功!', $order); + } + + /** * @notes 结算页数据 * @return \think\response\Json * @author suny diff --git a/app/api/controller/Pay.php b/app/api/controller/Pay.php index 4b788e0..bd66d65 100644 --- a/app/api/controller/Pay.php +++ b/app/api/controller/Pay.php @@ -7,9 +7,11 @@ use app\common\basics\Api; use app\common\enum\OrderEnum; use app\common\enum\PayEnum; use app\common\model\Client_; +use app\common\model\order\OrderResource; use app\common\model\order\OrderTrade; use app\common\model\order\Order; use app\common\model\order\OrderLog; +use app\common\model\order\OrderUser; use app\common\server\AliPayServer; use app\common\server\JsonServer; use app\common\model\Test; @@ -48,9 +50,26 @@ class Pay extends Api $pay_way = $order['pay_way']; } if ($post['from'] == 'trade') { - $order = Order::where('trade_id', $post['order_id'])->findOrEmpty(); - // 更新支付方式 - Order::where('trade_id', $post['order_id'])->update(['pay_way' => $post['pay_way']]); + $trader_order = OrderTrade::where('id', $post['order_id'])->findOrEmpty(); + //普通订单 + if($trader_order['type'] == 0){ + $order = Order::where('trade_id', $post['order_id'])->findOrEmpty(); + // 更新支付方式 + Order::where('trade_id', $post['order_id'])->update(['pay_way' => $post['pay_way']]); + } + //会员订单 + if($trader_order['type'] == 1){ + $order = OrderUser::where('trade_id', $post['order_id'])->findOrEmpty(); + // 更新支付方式 + OrderUser::where('trade_id', $post['order_id'])->update(['pay_way' => $post['pay_way']]); + } + //资料订单 + if($trader_order['type'] == 2){ + $order = OrderResource::where('trade_id', $post['order_id'])->findOrEmpty(); + // 更新支付方式 + OrderResource::where('trade_id', $post['order_id'])->update(['pay_way' => $post['pay_way']]); + } + $pay_way = $post['pay_way']; } if ($post['from'] == 'recharge') { @@ -94,6 +113,7 @@ class Pay extends Api + /** * @notes 小程序回调 * @throws \EasyWeChat\Kernel\Exceptions\Exception diff --git a/app/api/logic/OrderLogic.php b/app/api/logic/OrderLogic.php index 257ef87..47e3342 100644 --- a/app/api/logic/OrderLogic.php +++ b/app/api/logic/OrderLogic.php @@ -16,6 +16,7 @@ use app\common\enum\TeamEnum; use app\common\logic\OrderLogLogic; use app\common\logic\OrderRefundLogic; use app\common\model\Cart; +use app\common\model\content\Resource; use app\common\model\Freight; use app\common\model\goods\Goods; use app\common\model\Delivery; @@ -25,7 +26,9 @@ use app\common\model\order\Order; use app\common\model\order\OrderGoods; use app\common\model\order\OrderLog; use app\common\model\order\OrderRefund; +use app\common\model\order\OrderResource; use app\common\model\order\OrderTrade; +use app\common\model\order\OrderUser; use app\common\model\Pay; use app\common\model\RechargeOrder; use app\common\model\shop\Shop; @@ -35,6 +38,7 @@ use app\common\model\team\TeamFound; use app\common\model\team\TeamJoin; use app\common\model\user\User; use app\common\model\user\UserLevel; +use app\common\model\user\UserShip; use app\common\server\UrlServer; use app\common\model\seckill\SeckillGoods; use app\common\model\bargain\BargainLaunch; @@ -781,6 +785,238 @@ class OrderLogic extends Logic } /** + * @param $post + * @return array + * 添加免费试用会员开卡 + */ + public static function addFreeUserOrder($post) + { + + $OrderTrade = new OrderTrade(); + $order_amount = 0; + $total_amount = 0; + //计算商品总价格 + $user = User::where('id', $post['user_id'])->find(); + + $userShip = UserShip::where(['id'=>$post['org_id'],'del'=>0])->findOrEmpty()->toArray(); + if(!$userShip) { + return false; + } + $trade_order_data = []; + $trade_order_data['t_sn'] = createSn('order_trade', 't_sn'); + + // 拿shop_id,连接成字符串存入order_trade表shop_id中 + $shop_id = ''; + $shop_id = 0; + $trade_order_data['shop_id'] = $shop_id; + $trade_order_data['user_id'] = $post['user_id']; + $trade_order_data['goods_price'] = $userShip['pre_price']; + $trade_order_data['order_amount'] = $userShip['pre_price']; + $trade_order_data['total_amount'] = $userShip['pre_price']; + $trade_order_data['discount_amount'] = 0; + $trade_order_data['type'] = 1; + $trade_order_data['create_time'] = time(); + $order_trade_create = $OrderTrade->create($trade_order_data); + if (false === $order_trade_create) { + return false; + } + + //创建子订单 + + $Order = new OrderUser(); + $order_data = []; + $order_data['trade_id'] = $order_trade_create->id; + $order_data['user_id'] = $post['user_id']; + $order_data['order_sn'] = createSn('order_trade', 't_sn'); + $order_data['order_type'] = 0; + $order_data['org_id'] = $post['org_id']; + $order_data['order_source'] = $post['client']; + $order_data['order_status'] = 3; + $order_data['pay_status'] = 1; + $order_data['pay_way'] = 0; + $order_data['pay_money'] = 0; + $order_data['money'] = $userShip['price']; + $order_data['vip_day'] = $userShip['vip_day']; + $order_data['transaction_id'] = ''; + $order_data['pay_time'] = time(); + $order_data['is_free'] = 1; + $order_data['is_permanent'] = 0; + $over_time = $userShip['type'] == "forever"?0:($user['exp_time']>0 && $user['exp_time']>time()?$user['exp_time']+$userShip['vip_day']*3600*24:time()+$userShip['vip_day']*3600*24); + $order_data['overdue_time'] = $over_time; + $order_data['create_time'] = time(); + $order_create = $Order->create($order_data); + + + //修改用户当前会员到期时间 + $exp_time = $userShip['type'] == "forever"?0:($user['exp_time']>0 && $user['exp_time']>time()?$user['exp_time']+$userShip['vip_day']*3600*24:time()+$userShip['vip_day']*3600*24); + $user->ship_id = $userShip['id']; + $user->exp_time = $exp_time; + $user->ship_free = 1; + $user->save(); + + if (false === $order_create) { + return false; + } + return ['trade_id' => $order_trade_create->id, 'order_id' => $order_create->id, 'type' => 'trade']; + + } + + /** + * @param $post + * @return array + * 添加会员开卡的订单 + */ + public static function addUserOrder($post) + { + + $OrderTrade = new OrderTrade(); + $order_amount = 0; + $total_amount = 0; + //计算商品总价格 + $user = User::where('id', $post['user_id'])->find(); + + $userShip = UserShip::where(['id'=>$post['org_id'],'del'=>0])->findOrEmpty()->toArray(); + if(!$userShip) { + return false; + } + + // 记录访问足迹 + event('Footprint', [ + 'type' => FootprintEnum::PLACE_ORDER, + 'user_id' => $post['user_id'], + 'total_money' => $total_amount + ]); + $trade_order_data = []; + $trade_order_data['t_sn'] = createSn('order_trade', 't_sn'); + + // 拿shop_id,连接成字符串存入order_trade表shop_id中 + $shop_id = ''; + + $shop_id = 0; + $trade_order_data['shop_id'] = $shop_id; + $trade_order_data['user_id'] = $post['user_id']; + $trade_order_data['goods_price'] = $userShip['pre_price']; + $trade_order_data['order_amount'] = $userShip['pre_price']; + $trade_order_data['total_amount'] = $userShip['pre_price']; + $trade_order_data['discount_amount'] = 0; + $trade_order_data['type'] = 1; + $trade_order_data['create_time'] = time(); + $order_trade_create = $OrderTrade->create($trade_order_data); + if (false === $order_trade_create) { + return false; + } + + //创建子订单 + + $Order = new OrderUser(); + + $order_data = []; + $order_data['trade_id'] = $order_trade_create->id; + $order_data['user_id'] = $post['user_id']; + $order_data['order_sn'] = createSn('order_trade', 't_sn'); + $order_data['order_type'] = 1; + $order_data['org_id'] = $post['org_id']; + $order_data['order_source'] = $post['client']; + $order_data['order_status'] = OrderEnum::ORDER_STATUS_NO_PAID; + $order_data['pay_status'] = OrderEnum::PAY_STATUS_NO_PAID; + $order_data['pay_way'] = 0; + + $order_data['pay_money'] = $userShip['pre_price']; + $order_data['money'] = $userShip['price']; + $order_data['vip_day'] = $userShip['vip_day']; + $order_data['transaction_id'] = ''; + $order_data['pay_time'] = 0; + $order_data['is_free'] = $userShip['type']=='free'?1:0; + $order_data['is_permanent'] = $userShip['type']=='forever'?1:0; + $over_time = $userShip['type'] == "forever"?0:($user['exp_time']>0 && $user['exp_time']>time()?$user['exp_time']+$userShip['vip_day']*3600*24:time()+$userShip['vip_day']*3600*24); + $order_data['overdue_time'] = $over_time; + $order_data['create_time'] = time(); + + $order_create = $Order->create($order_data); + + if (false === $order_create) { + return false; + } + return ['trade_id' => $order_trade_create->id, 'order_id' => $order_create->id, 'type' => 'trade']; + + } + + + /** + * @param $post + * @return array + * 添加购买资料的订单 + */ + public static function addResourceOrder($post) + { + + $OrderTrade = new OrderTrade(); + $order_amount = 0; + $total_amount = 0; + //计算商品总价格 + $user = User::where('id', $post['user_id'])->find(); + + $resource = Resource::where(['id'=>$post['org_id'],'del'=>0])->findOrEmpty()->toArray(); + if(!$resource) { + return false; + } + + // 记录访问足迹 + event('Footprint', [ + 'type' => FootprintEnum::PLACE_ORDER, + 'user_id' => $post['user_id'], + 'total_money' => $resource['price'] + ]); + $trade_order_data = []; + $trade_order_data['t_sn'] = createSn('order_trade', 't_sn'); + + // 拿shop_id,连接成字符串存入order_trade表shop_id中 + $shop_id = ''; + + $shop_id = 0; + $trade_order_data['shop_id'] = $shop_id; + $trade_order_data['user_id'] = $post['user_id']; + $trade_order_data['goods_price'] = $resource['price']; + $trade_order_data['order_amount'] = $resource['price']; + $trade_order_data['total_amount'] = $resource['price']; + $trade_order_data['discount_amount'] = 0; + $trade_order_data['type'] = 2; + $trade_order_data['create_time'] = time(); + $order_trade_create = $OrderTrade->create($trade_order_data); + if (false === $order_trade_create) { + return false; + } + + //创建子订单 + + $Order = new OrderResource(); + + $order_data = []; + $order_data['trade_id'] = $order_trade_create->id; + $order_data['user_id'] = $post['user_id']; + $order_data['order_sn'] = createSn('order_trade', 't_sn'); + $order_data['org_id'] = $post['org_id']; + $order_data['order_source'] = $post['client']; + $order_data['order_status'] = OrderEnum::ORDER_STATUS_NO_PAID; + $order_data['pay_status'] = OrderEnum::PAY_STATUS_NO_PAID; + $order_data['pay_way'] =0; + $order_data['pay_money'] = $resource['price']; + $order_data['money'] = $resource['price']; + $order_data['transaction_id'] = ''; + $order_data['pay_time'] = 0; + $order_data['create_time'] = time(); + + $order_create = $Order->create($order_data); + + if (false === $order_create) { + return false; + } + + return ['trade_id' => $order_trade_create->id, 'order_id' => $order_create->id, 'type' => 'trade']; + + } + + /** * @notes 添加父订单 * @param $post * @param $address @@ -858,6 +1094,7 @@ class OrderLogic extends Logic $trade_order_data['total_amount'] = $total_amount; $trade_order_data['discount_amount'] = $discount_amount; $trade_order_data['create_time'] = time(); + $trade_order_data['type'] = 0; $order_trade_create = $OrderTrade->create($trade_order_data); if (false === $order_trade_create) { return false; @@ -1259,6 +1496,7 @@ class OrderLogic extends Logic } } } + $data = [ 'list' => $lists, 'page' => $page, @@ -1266,6 +1504,7 @@ class OrderLogic extends Logic 'count' => $count, 'more' => is_more($count, $page, $size) ]; + return $data; } @@ -1632,9 +1871,17 @@ class OrderLogic extends Logic { switch ($from) { case 'trade' : //如果是父订单类型下单,$id为父订单id + $trader_order = OrderTrade::where('id', $id)->findOrEmpty(); + $table = "order"; + if($trader_order['type'] == 1){ + $table = "order_user"; + }elseif($trader_order['type'] == 2){ + $table = "order_resource"; + } + $result = OrderTrade::alias('ot') ->where(['ot.id' => $id,'o.pay_status' => 1]) - ->join('order o','o.trade_id = ot.id') + ->join($table.' o','o.trade_id = ot.id') ->field(['ot.id', 'ot.t_sn as order_sn', 'o.pay_time', 'o.pay_way', 'ot.total_amount']) ->findOrEmpty() ->toArray(); diff --git a/app/api/logic/PayLogic.php b/app/api/logic/PayLogic.php index 113f590..c27227c 100644 --- a/app/api/logic/PayLogic.php +++ b/app/api/logic/PayLogic.php @@ -13,6 +13,7 @@ use app\common\logic\IntegralLogic; use app\common\logic\OrderLogLogic; use app\common\logic\PayNotifyLogic; use app\common\model\Client_; +use app\common\model\content\Resource; use app\common\model\distribution\DistributionGoods; use app\common\model\distribution\DistributionLevel; use app\common\model\distribution\DistributionOrderGoods; @@ -21,11 +22,15 @@ use app\common\model\AccountLog; use app\common\logic\AccountLogLogic; use app\common\model\integral\IntegralOrder; use app\common\model\order\OrderGoods; +use app\common\model\order\OrderResource; use app\common\model\order\OrderTrade; use app\common\model\order\Order; +use app\common\model\order\OrderUser; use app\common\model\RechargeOrder; use app\common\model\shop\Shop; use app\common\model\user\User; +use app\common\model\user\UserResource; +use app\common\model\user\UserShip; use app\common\server\JsonServer; use app\common\server\WeChatPayServer; use app\common\server\ConfigServer; @@ -49,16 +54,37 @@ class PayLogic extends Logic * @author suny * @date 2021/7/13 6:24 下午 */ - public static function checkPayStatus($trade_id) + public static function checkPayStatus($type,$trade_id) { - +// $trader_order = OrderTrade::find($trade_id);; $where = [ 'trade_id' => $trade_id, 'pay_status' => PayEnum::ISPAID, 'del' => 0 ]; + switch ($type) { + case 1: + $check = OrderUser::where($where)->find(); + break; + case 2: + $check = OrderResource::where($where)->find(); + break; + default: + $check = Order::where($where)->find(); + break; + } + +// //普通订单 +// if($type == 0){ +// $check = Order::where($where)->find(); +// } //会员订单 +// elseif($type == 1){ +// $check = OrderUser::where($where)->find(); +// }//资料订单 +// elseif($type == 2){ +// $check = OrderResource::where($where)->find(); +// } - $check = Order::where($where)->find(); if ($check) { return true; } @@ -80,11 +106,12 @@ class PayLogic extends Logic */ public static function balancePay($order_id, $form) { - + $order_type = 0; switch ($form) { case "trade": $order = OrderTrade::find($order_id); - if (self::checkPayStatus($order_id)) { + $order_type = $order['type']; + if (self::checkPayStatus($order['type'],$order_id)) { $order['pay_status'] = PayEnum::ISPAID; } break; @@ -131,32 +158,115 @@ class PayLogic extends Logic } } + //记录余额 - $acountLogResult = AccountLogLogic::AccountRecord($order['user_id'], $order['order_amount'], 2, AccountLog::balance_pay_order); + $acountLogResult = AccountLogLogic::AccountRecord($order['user_id'], $order['order_amount'], 2, $order_type==1?AccountLog::balance_pay_user:($order_type==2?AccountLog::balance_pay_resource:AccountLog::balance_pay_order)); if ($acountLogResult === false) { Db::rollback(); return JsonServer::error('账户明细记录添加失败'); } if ($form == "trade") { - $order_id = Order::where('trade_id', $order_id)->column('id'); + + if($order_type==0){ + $order_id = Order::where('trade_id', $order_id)->column('id'); + $orderStatusChange = self::changOrderStatus($order_id); + }elseif($order_type==1){ + $order_user = OrderUser::where('trade_id', $order_id)->field("id")->find(); + $order_id = $order_user['id']; + $orderStatusChange = self::changUserOrderStatus($order_id); + }elseif($order_type==2){ + $order_user = OrderResource::where('trade_id', $order_id)->find(); + $order_id = $order_user['id']; + $orderStatusChange = self::changResourceOrderStatus($order_id); + } + } - $orderStatusChange = self::changOrderStatus($order_id); + if ($orderStatusChange == false) { Db::rollback(); return JsonServer::error('子订单状态改变失败'); } - // 生成分销订单 - self::distributionOrderGoods($order_id); - // 更新分销会员等级 - DistributionLevelLogic::updateDistributionLevel($order['user_id']); + if($order_type == 0 ){ + // 生成分销订单 + self::distributionOrderGoods($order_id); + // 更新分销会员等级 + DistributionLevelLogic::updateDistributionLevel($order['user_id']); + + if($form == "trade"){ + $orders = Order::where([['id','in',$order_id]])->select(); + foreach ($orders as $item) { + // 增加商品销量 + $order_goods = OrderGoods::where('order_id', $item['id'])->select()->toArray(); + foreach ($order_goods as $order_good) { + Goods::where('id', $order_good['goods_id']) + ->inc('sales_actual', $order_good['goods_num']) + ->update(); + } + + //修改用户消费累计额度 + $user = User::find($item['user_id']); + $user->total_order_amount = ['inc', $item['order_amount']]; + $user->save(); + + //赠送成长值 + $growth_ratio = ConfigServer::get('transaction', 'money_to_growth', 0); + if ($growth_ratio > 0) { + $able_get_growth = floor($item['total_amount'] / $growth_ratio); + $user->where('id', $item['user_id']) + ->inc('user_growth', $able_get_growth) + ->update(); + AccountLogLogic::AccountRecord($item['user_id'], $able_get_growth, 1, AccountLog::order_give_growth, '', $item['id'], $item['order_sn']); + } + - if($form == "trade"){ - $orders = Order::where([['id','in',$order_id]])->select(); - foreach ($orders as $item) { + //赠送积分 + $open_award = ConfigServer::get('order_award', 'open_award', 0); + if ($open_award == 1) { + $award_event = ConfigServer::get('order_award', 'award_event', 0); + $award_ratio = ConfigServer::get('order_award', 'award_ratio', 0); + if ($award_ratio > 0) { + $award_integral = floor($item['order_amount'] * ($award_ratio / 100)); + } + } + Order::update(['award_integral_status' => $award_event ?? 0,'award_integral' => $award_integral ?? 0],['id'=>$item['id']]); + + //通知用户 + event('Notice', [ + 'scene' => NoticeEnum::ORDER_PAY_NOTICE, + 'mobile' => $user['mobile'], + 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + ]); + + //通知商家 + if (!empty($item['shop']['mobile'])) { + event('Notice', [ + 'scene' => NoticeEnum::USER_PAID_NOTICE_SHOP, + 'mobile' => $item['shop']['mobile'], + 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + ]); + } + // 打印小票 + event('Printer', [ + 'order_id' => $item['id'], + ]); + + OrderLogLogic::record( + OrderLogEnum::TYPE_USER, + OrderLogEnum::USER_PAID_ORDER, + $item['id'], + $item['user_id'], + OrderLogEnum::getLogDesc(OrderLogEnum::USER_PAID_ORDER) + ); + } + + // 虚拟商品更新订单信息 + GoodsVirtualLogic::afterPayVirtualDelivery($order_id); + + } else{ // 增加商品销量 - $order_goods = OrderGoods::where('order_id', $item['id'])->select()->toArray(); + $order_goods = OrderGoods::where('order_id', $order['id'])->select(); foreach ($order_goods as $order_good) { Goods::where('id', $order_good['goods_id']) ->inc('sales_actual', $order_good['goods_num']) @@ -164,18 +274,18 @@ class PayLogic extends Logic } //修改用户消费累计额度 - $user = User::find($item['user_id']); - $user->total_order_amount = ['inc', $item['order_amount']]; + $user = User::find($order['user_id']); + $user->total_order_amount = ['inc', $order['order_amount']]; $user->save(); //赠送成长值 $growth_ratio = ConfigServer::get('transaction', 'money_to_growth', 0); if ($growth_ratio > 0) { - $able_get_growth = floor($item['total_amount'] / $growth_ratio); - $user->where('id', $item['user_id']) + $able_get_growth = floor($order['total_amount'] / $growth_ratio); + $user->where('id', $order['user_id']) ->inc('user_growth', $able_get_growth) ->update(); - AccountLogLogic::AccountRecord($item['user_id'], $able_get_growth, 1, AccountLog::order_give_growth, '', $item['id'], $item['order_sn']); + AccountLogLogic::AccountRecord($order['user_id'], $able_get_growth, 1, AccountLog::order_give_growth, '', $order['id'], $order['order_sn']); } @@ -185,112 +295,50 @@ class PayLogic extends Logic $award_event = ConfigServer::get('order_award', 'award_event', 0); $award_ratio = ConfigServer::get('order_award', 'award_ratio', 0); if ($award_ratio > 0) { - $award_integral = floor($item['order_amount'] * ($award_ratio / 100)); + $award_integral = floor($order['order_amount'] * ($award_ratio / 100)); } } - Order::update(['award_integral_status' => $award_event ?? 0,'award_integral' => $award_integral ?? 0],['id'=>$item['id']]); + Order::update(['award_integral_status' => $award_event ?? 0,'award_integral' => $award_integral ?? 0],['id'=>$order['id']]); + + // 虚拟商品更新订单信息 + GoodsVirtualLogic::afterPayVirtualDelivery($order['id']); //通知用户 event('Notice', [ 'scene' => NoticeEnum::ORDER_PAY_NOTICE, 'mobile' => $user['mobile'], - 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + 'params' => ['order_id' => $order['id'], 'user_id' => $order['user_id']] ]); //通知商家 - if (!empty($item['shop']['mobile'])) { + if (!empty($order['shop']['mobile'])) { event('Notice', [ 'scene' => NoticeEnum::USER_PAID_NOTICE_SHOP, - 'mobile' => $item['shop']['mobile'], - 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + 'mobile' => $order['shop']['mobile'], + 'params' => ['order_id' => $order['id'], 'user_id' => $order['user_id']] ]); } + // 打印小票 event('Printer', [ - 'order_id' => $item['id'], + 'order_id' => $order['id'], ]); OrderLogLogic::record( OrderLogEnum::TYPE_USER, OrderLogEnum::USER_PAID_ORDER, - $item['id'], - $item['user_id'], + $order['id'], + $order['user_id'], OrderLogEnum::getLogDesc(OrderLogEnum::USER_PAID_ORDER) ); } - - // 虚拟商品更新订单信息 - GoodsVirtualLogic::afterPayVirtualDelivery($order_id); - - } else{ - // 增加商品销量 - $order_goods = OrderGoods::where('order_id', $order['id'])->select(); - foreach ($order_goods as $order_good) { - Goods::where('id', $order_good['goods_id']) - ->inc('sales_actual', $order_good['goods_num']) - ->update(); - } - - //修改用户消费累计额度 - $user = User::find($order['user_id']); - $user->total_order_amount = ['inc', $order['order_amount']]; - $user->save(); - - //赠送成长值 - $growth_ratio = ConfigServer::get('transaction', 'money_to_growth', 0); - if ($growth_ratio > 0) { - $able_get_growth = floor($order['total_amount'] / $growth_ratio); - $user->where('id', $order['user_id']) - ->inc('user_growth', $able_get_growth) - ->update(); - AccountLogLogic::AccountRecord($order['user_id'], $able_get_growth, 1, AccountLog::order_give_growth, '', $order['id'], $order['order_sn']); - } - - - //赠送积分 - $open_award = ConfigServer::get('order_award', 'open_award', 0); - if ($open_award == 1) { - $award_event = ConfigServer::get('order_award', 'award_event', 0); - $award_ratio = ConfigServer::get('order_award', 'award_ratio', 0); - if ($award_ratio > 0) { - $award_integral = floor($order['order_amount'] * ($award_ratio / 100)); - } - } - Order::update(['award_integral_status' => $award_event ?? 0,'award_integral' => $award_integral ?? 0],['id'=>$order['id']]); - - // 虚拟商品更新订单信息 - GoodsVirtualLogic::afterPayVirtualDelivery($order['id']); - - //通知用户 - event('Notice', [ - 'scene' => NoticeEnum::ORDER_PAY_NOTICE, - 'mobile' => $user['mobile'], - 'params' => ['order_id' => $order['id'], 'user_id' => $order['user_id']] - ]); - - //通知商家 - if (!empty($order['shop']['mobile'])) { - event('Notice', [ - 'scene' => NoticeEnum::USER_PAID_NOTICE_SHOP, - 'mobile' => $order['shop']['mobile'], - 'params' => ['order_id' => $order['id'], 'user_id' => $order['user_id']] - ]); - } - - // 打印小票 - event('Printer', [ - 'order_id' => $order['id'], - ]); - - OrderLogLogic::record( - OrderLogEnum::TYPE_USER, - OrderLogEnum::USER_PAID_ORDER, - $order['id'], - $order['user_id'], - OrderLogEnum::getLogDesc(OrderLogEnum::USER_PAID_ORDER) - ); + }elseif($order_type == 1){ + self::conplateUserOrder($order_id); + }elseif($order_type == 2){ + self::conplateResourceOrder($order_id); } + Db::commit(); return JsonServer::success('支付成功', [], 20001); } catch (\Exception $e) { @@ -299,6 +347,91 @@ class PayLogic extends Logic } } + public static function conplateUserOrder($order_id){ + //用户会员卡支付完成后更新相关信息 + $item = OrderUser::where('id',$order_id)->find(); + $userShip = UserShip::where('id', $item['org_id'])->find(); + UserShip::where('id', $item['org_id'])->inc('sales_num', 1)->update(); + + //修改用户消费累计额度 + $user = User::find($item['user_id']); + $user->total_order_amount = ['inc', $item['order_amount']]; + + //修改用户当前会员到期时间 + $exp_time = $userShip['type'] == "forever"?0:($user['exp_time']>0 && $user['exp_time']>time()?$user['exp_time']+$userShip['vip_day']*3600*24:time()+$userShip['vip_day']*3600*24); +// $exp_time = $user['exp_time']>0 && $user['exp_time']>time()?$user['exp_time']+$userShip['vip_day']*3600*24:time()+$userShip['vip_day']*3600*24; + $user->ship_id = $userShip['id']; + $user->exp_time = $exp_time; + if($userShip['type'] == "free"){ + $user->ship_free = 1; + } + $user->save(); + + //通知用户 + event('Notice', [ + 'scene' => NoticeEnum::ORDER_USER_NOTICE, + 'mobile' => $user['mobile'], + 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + ]); + + // 打印小票 + event('Printer', [ + 'order_id' => $item['id'], + ]); + + OrderLogLogic::record( + OrderLogEnum::TYPE_USER, + OrderLogEnum::USER_PAID_ORDER, + $item['id'], + $item['user_id'], + "会员卡购买成功" + ); + + } + + public static function conplateResourceOrder($order_id){ + //用户会员卡支付完成后更新相关信息 + $item = OrderResource::where('id',$order_id)->find(); + + $resource = Resource::where('id', $item['org_id'])->find(); + Resource::where('id', $item['org_id'])->inc('sales_num', 1)->update(); + + //修改用户消费累计额度 + $user = User::find($item['user_id']); + $user->total_order_amount = ['inc', $item['order_amount']]; + $user->save(); + + //授权下载 + $userResource = []; + $userResource['user_id'] = $item['user_id']; + $userResource['resource_id'] = $item['org_id']; + $userResource['type'] = 1; + $userResource['create_time'] = time(); + $userResourceModel = new UserResource(); + $userResourceModel->insert($userResource); + + //通知用户 + event('Notice', [ + 'scene' => NoticeEnum::ORDER_RESOURCE_NOTICE, + 'mobile' => $user['mobile'], + 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + ]); + + // 打印小票 + event('Printer', [ + 'order_id' => $item['id'], + ]); + + OrderLogLogic::record( + OrderLogEnum::TYPE_USER, + OrderLogEnum::USER_PAID_ORDER, + $item['id'], + $item['user_id'], + "资料购买成功" + ); + + } + /** * @notes 微信支付 * @param $order_id @@ -319,7 +452,7 @@ class PayLogic extends Logic switch ($form) { case "trade": $order = OrderTrade::find($order_id); - if (self::checkPayStatus($order_id)) { + if (self::checkPayStatus($order['type'],$order_id)) { $order['pay_status'] = PayEnum::ISPAID; } break; @@ -405,6 +538,53 @@ class PayLogic extends Logic } /** + * order表状态改变 + */ + public static function changUserOrderStatus($order_id) + { + $where = ['id', '=', $order_id]; + if (is_array($order_id)) { + $where = ['id', 'in', $order_id]; + } + + $orders = OrderUser::where([ $where ]) + ->update([ + 'pay_status' => PayEnum::ISPAID, + 'order_status' => 3, + 'pay_way' => OrderEnum::PAY_WAY_BALANCE, + 'pay_time' => time() + ]); + + if ($orders) { + return true; + } + return false; + } + + /** + * order表状态改变 + */ + public static function changResourceOrderStatus($order_id) + { + $where = ['id', '=', $order_id]; + if (is_array($order_id)) { + $where = ['id', 'in', $order_id]; + } + + $orders = OrderResource::where([ $where ]) + ->update([ + 'pay_status' => PayEnum::ISPAID, + 'order_status' => 3, + 'pay_way' => OrderEnum::PAY_WAY_BALANCE, + 'pay_time' => time() + ]); + + if ($orders) { + return true; + } + return false; + } + /** * @notes 分销逻辑 * @param $order_id * @param $user_id diff --git a/app/api/logic/UserLogic.php b/app/api/logic/UserLogic.php index 1d5fd82..3cc23e1 100644 --- a/app/api/logic/UserLogic.php +++ b/app/api/logic/UserLogic.php @@ -593,6 +593,7 @@ class UserLogic extends Logic ->field('*') ->findOrEmpty(); $ship_free = $userInfo['ship_free']; + if(!$ship_free){ $info = UserShip::where(['del' => 0]) ->field('*') @@ -600,7 +601,7 @@ class UserLogic extends Logic ->order('sort asc') ->toArray(); }else{ - $info = UserShip::where(['del' => 0,'type'=>['<>','free']]) + $info = UserShip::where('del' , 0)->where('type','<>','free') ->field('*') ->select() ->order('sort asc') @@ -644,7 +645,7 @@ class UserLogic extends Logic if(!$shipId){ $time = ['time'=>date('Y-m-d',strtotime("+".$day." day"))]; }else{ - $time = ['time'=>date('Y-m-d',intval($time)+intval($day)*3600*24)]; + $time = ['time'=>date('Y-m-d',intval($exTime)+intval($day)*3600*24)]; } } diff --git a/app/api/validate/OrderResourceValidate.php b/app/api/validate/OrderResourceValidate.php new file mode 100644 index 0000000..a93e950 --- /dev/null +++ b/app/api/validate/OrderResourceValidate.php @@ -0,0 +1,41 @@ + 'require', + ]; + + protected $message = [ + 'org_id' => '请选择资料' + ]; + + + protected $scene = [ + 'add' => ['id'], + 'detail' => ['id'], + ]; + + + /** + * @notes 参数验证 + * @param $value + * @param $arr + * @param $data + * @return bool|string + * @author suny + * @date 2021/7/13 6:29 下午 + */ + public function checkParam($value, $arr, $data) + { + if (!isset($data['org_id'])) { + return '请选择资料'; + } + return true; + } + +} diff --git a/app/api/validate/OrderUserValidate.php b/app/api/validate/OrderUserValidate.php new file mode 100644 index 0000000..b8e1520 --- /dev/null +++ b/app/api/validate/OrderUserValidate.php @@ -0,0 +1,41 @@ + 'require', + ]; + + protected $message = [ + 'org_id' => '请选择会员卡' + ]; + + + protected $scene = [ + 'add' => ['id'], + 'detail' => ['id'], + ]; + + + /** + * @notes 参数验证 + * @param $value + * @param $arr + * @param $data + * @return bool|string + * @author suny + * @date 2021/7/13 6:29 下午 + */ + public function checkParam($value, $arr, $data) + { + if (!isset($data['org_id'])) { + return '参数有误'; + } + return true; + } + +} diff --git a/app/common/enum/NoticeEnum.php b/app/common/enum/NoticeEnum.php index c948fe8..cc8622b 100644 --- a/app/common/enum/NoticeEnum.php +++ b/app/common/enum/NoticeEnum.php @@ -49,6 +49,7 @@ class NoticeEnum const GET_BACK_PAY_CODE_NOTICE = 112; //找回支付密码 //通知会员-订单相关 const ORDER_PAY_NOTICE = 103; //成功下单通知 + const ORDER_DELIVERY_NOTICE = 104; //订单发货通知 const AFTER_SALE_NOTICE = 105; //售后退款申请状态通知 //通知会员-佣金相关 @@ -59,6 +60,11 @@ class NoticeEnum const SHOP_APPLY_ERROR_NOTICE = 108; //商家入驻申请失败通知 const SHOP_APPLY_SUCCESS_NOTICE = 109; //商家入驻申请成功通知 const SHOP_APPLY_CHECK_CODE = 114; //商家入驻手机短信验证通知 + + const ORDER_USER_NOTICE = 115; //成功购买会员卡通知 + + const ORDER_RESOURCE_NOTICE = 116; //成功购买资料通知 + //************************************************************************************************************** @@ -101,6 +107,8 @@ class NoticeEnum self::BIND_MOBILE_NOTICE, self::GET_BACK_PAY_CODE_NOTICE, self::SHOP_APPLY_CHECK_CODE, + self::ORDER_USER_NOTICE, + self::ORDER_RESOURCE_NOTICE, ]; //通知游客(还不存在当前系统的人) @@ -131,6 +139,8 @@ class NoticeEnum //场景值-短信场景 const SMS_SCENE = [ 'DDZFTZ' => self::ORDER_PAY_NOTICE, //订单支付通知 + 'DDHYTZ' => self::ORDER_USER_NOTICE, //会员卡订单通知 + 'DDZLTZ' => self::ORDER_RESOURCE_NOTICE, //资料订单支付通知 'DDFHTZ' => self::ORDER_DELIVERY_NOTICE, //订单发货通知 'ZCYZ' => self::REGISTER_NOTICE, //注册验证 'ZHMM' => self::GET_BACK_MOBILE_NOTICE, //找回密码 @@ -168,6 +178,8 @@ class NoticeEnum self::GET_BACK_PAY_CODE_NOTICE => '找回支付密码短信验证码通知', //会员-订单相关通知 self::ORDER_PAY_NOTICE => '成功下单通知', + self::ORDER_USER_NOTICE => '成功购买会员卡通知', + self::ORDER_RESOURCE_NOTICE => '成功购买资料通知', self::ORDER_DELIVERY_NOTICE => '订单发货通知', self::AFTER_SALE_NOTICE => '售后退款申请状态通知', //会员-佣金相关通知 diff --git a/app/common/logic/PayNotifyLogic.php b/app/common/logic/PayNotifyLogic.php index 5bbab40..c618084 100644 --- a/app/common/logic/PayNotifyLogic.php +++ b/app/common/logic/PayNotifyLogic.php @@ -25,12 +25,17 @@ use app\common\enum\IntegralGoodsEnum; use app\common\enum\IntegralOrderEnum; use app\common\enum\NoticeEnum; use app\common\model\{AccountLog, + content\Resource, goods\Goods, integral\IntegralGoods, integral\IntegralOrder, order\OrderGoods, + order\OrderResource, + order\OrderUser, RechargeOrder, - shop\Shop}; + shop\Shop, + user\UserResource, + user\UserShip}; use app\common\enum\OrderEnum; use app\common\enum\OrderLogEnum; use app\common\enum\PayEnum; @@ -118,98 +123,220 @@ class PayNotifyLogic { //根据父订单号查找父订单 $trade = OrderTrade::where(['t_sn' => $order_sn])->find(); - //根据父订单id查找子订单 - $orders = Order::with(['order_goods', 'shop']) - ->where('trade_id', $trade['id']) - ->select()->toArray(); - //修改用户消费累计额度 - $user = User::find($trade['user_id']); - $user->total_order_amount = ['inc', $trade['order_amount']]; - $user->save(); + if($trade['type'] == 0){ + //根据父订单id查找子订单 + $orders = Order::with(['order_goods', 'shop']) + ->where('trade_id', $trade['id']) + ->select()->toArray(); + //修改用户消费累计额度 + $user = User::find($trade['user_id']); + $user->total_order_amount = ['inc', $trade['order_amount']]; + $user->save(); + + //赠送成长值 + $growth_ratio = ConfigServer::get('transaction', 'money_to_growth', 0); + if ($growth_ratio > 0) { + $able_get_growth = floor($trade['total_amount'] / $growth_ratio); + $user->where('id', $trade['user_id']) + ->inc('user_growth', $able_get_growth) + ->update(); + AccountLogLogic::AccountRecord($trade['user_id'], $able_get_growth, 1, AccountLog::order_give_growth, '', $trade['id'], $order_sn); + } - //赠送成长值 - $growth_ratio = ConfigServer::get('transaction', 'money_to_growth', 0); - if ($growth_ratio > 0) { - $able_get_growth = floor($trade['total_amount'] / $growth_ratio); - $user->where('id', $trade['user_id']) - ->inc('user_growth', $able_get_growth) - ->update(); - AccountLogLogic::AccountRecord($trade['user_id'], $able_get_growth, 1, AccountLog::order_give_growth, '', $trade['id'], $order_sn); - } + // 生成分销订单 + PayLogic::distributionOrderGoods(array_column($orders, 'id')); + // 更新分销会员等级 + DistributionLevelLogic::updateDistributionLevel($trade['user_id']); + + foreach ($orders as $item) { + + //赠送积分 + $open_award = ConfigServer::get('order_award', 'open_award', 0); + if ($open_award == 1) { + $award_event = ConfigServer::get('order_award', 'award_event', 0); + $award_ratio = ConfigServer::get('order_award', 'award_ratio', 0); + if ($award_ratio > 0) { + $award_integral = floor($item['order_amount'] * ($award_ratio / 100)); + } + } - // 生成分销订单 - PayLogic::distributionOrderGoods(array_column($orders, 'id')); - // 更新分销会员等级 - DistributionLevelLogic::updateDistributionLevel($trade['user_id']); + //更新订单状态 + $data = [ + 'pay_status' => PayEnum::ISPAID, + 'pay_time' => time(), + 'order_status' => Order::STATUS_WAIT_DELIVERY, + 'award_integral_status' => $award_event ?? 0, + 'award_integral' => $award_integral ?? 0 + ]; + + //如果返回了第三方流水号 + if (isset($extra['transaction_id'])) { + $data['transaction_id'] = $extra['transaction_id']; + } + Order::update($data, ['id' => $item['id']]); - foreach ($orders as $item) { + // 增加一条订单日志 + $order_log_add_data = self::getOrderLogData($item['id'], $item['user_id'], $item['shop_id']); + $order_log_datas_insert[] = $order_log_add_data; + OrderLog::insertAll($order_log_datas_insert); + +// if ($item['order_type'] == order::NORMAL_ORDER){ +// DistributionServer::commission($item['id']); +// } + //通知用户 + event('Notice', [ + 'scene' => NoticeEnum::ORDER_PAY_NOTICE, + 'mobile' => $user['mobile'], + 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + ]); - //赠送积分 - $open_award = ConfigServer::get('order_award', 'open_award', 0); - if ($open_award == 1) { - $award_event = ConfigServer::get('order_award', 'award_event', 0); - $award_ratio = ConfigServer::get('order_award', 'award_ratio', 0); - if ($award_ratio > 0) { - $award_integral = floor($item['order_amount'] * ($award_ratio / 100)); + //通知商家 + if (!empty($item['shop']['mobile'])) { + event('Notice', [ + 'scene' => NoticeEnum::USER_PAID_NOTICE_SHOP, + 'mobile' => $item['shop']['mobile'], + 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + ]); } + + event('Printer', [ + 'order_id' => $item['id'], + ]); + } + //如果返回了第三方流水号 + if (isset($extra['transaction_id'])) { + $trade->transaction_id = $extra['transaction_id']; + $trade->save(); } + $order_ids = array_column($orders, 'id'); + + // 虚拟商品更新订单信息 + GoodsVirtualLogic::afterPayVirtualDelivery($order_ids); + + // 更新商品销量 + self::updateGoodsSales($order_ids); + }elseif ($trade['type'] == 2){ + + //如果返回了第三方流水号 + if (isset($extra['transaction_id'])) { + $trade->transaction_id = $extra['transaction_id']; + $trade->save(); + } + + //用户会员卡支付完成后更新相关信息 + $item = OrderResource::where('id',$trade['id'])->find(); + $resource = Resource::where('id', $item['org_id'])->find(); + Resource::where('id', $item['org_id'])->inc('sales_num', 1)->update(); + //更新订单状态 $data = [ 'pay_status' => PayEnum::ISPAID, 'pay_time' => time(), - 'order_status' => Order::STATUS_WAIT_DELIVERY, - 'award_integral_status' => $award_event ?? 0, - 'award_integral' => $award_integral ?? 0 + 'order_status' => 3, ]; //如果返回了第三方流水号 if (isset($extra['transaction_id'])) { $data['transaction_id'] = $extra['transaction_id']; } - Order::update($data, ['id' => $item['id']]); + OrderResource::update($data, ['id' => $item['id']]); + + //修改用户消费累计额度 + $user = User::find($item['user_id']); + $user->total_order_amount = ['inc', $item['order_amount']]; + $user->save(); + + //授权下载 + $userResource = []; + $userResource['user_id'] = $item['user_id']; + $userResource['resource_id'] = $item['org_id']; + $userResource['type'] = 1; + $userResource['create_time'] = time(); + $userResourceModel = new UserResource(); + $userResourceModel->insert($userResource); - // 增加一条订单日志 - $order_log_add_data = self::getOrderLogData($item['id'], $item['user_id'], $item['shop_id']); - $order_log_datas_insert[] = $order_log_add_data; - OrderLog::insertAll($order_log_datas_insert); - -// if ($item['order_type'] == order::NORMAL_ORDER){ -// DistributionServer::commission($item['id']); -// } //通知用户 event('Notice', [ - 'scene' => NoticeEnum::ORDER_PAY_NOTICE, + 'scene' => NoticeEnum::ORDER_RESOURCE_NOTICE, 'mobile' => $user['mobile'], 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] ]); - //通知商家 - if (!empty($item['shop']['mobile'])) { - event('Notice', [ - 'scene' => NoticeEnum::USER_PAID_NOTICE_SHOP, - 'mobile' => $item['shop']['mobile'], - 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] - ]); + // 打印小票 + event('Printer', [ + 'order_id' => $item['id'], + ]); + + OrderLogLogic::record( + OrderLogEnum::TYPE_USER, + OrderLogEnum::USER_PAID_ORDER, + $item['id'], + $item['user_id'], + "资料购买成功" + ); + }elseif ($trade['type'] == 1){ + + //如果返回了第三方流水号 + if (isset($extra['transaction_id'])) { + $trade->transaction_id = $extra['transaction_id']; + $trade->save(); } + //用户会员卡支付完成后更新相关信息 + $item = OrderUser::where('id',$trade['id'])->find(); + $userShip = UserShip::where('id', $item['org_id'])->find(); + UserShip::where('id', $item['org_id'])->inc('sales_num', 1)->update(); + + //更新订单状态 + $data = [ + 'pay_status' => PayEnum::ISPAID, + 'pay_time' => time(), + 'order_status' => 3, + ]; + + //如果返回了第三方流水号 + if (isset($extra['transaction_id'])) { + $data['transaction_id'] = $extra['transaction_id']; + } + OrderUser::update($data, ['id' => $item['id']]); + + + //修改用户消费累计额度 + $user = User::find($item['user_id']); + $user->total_order_amount = ['inc', $item['order_amount']]; + + //修改用户当前会员到期时间 + $exp_time = $userShip['type']=="forever"?0:($user['exp_time']>0 && $user['exp_time']>time()?$user['exp_time']+$userShip['vip_day']*3600*24:time()+$userShip['vip_day']*3600*24); + $user->ship_id = $userShip['id']; + $user->exp_time = $exp_time; + if($userShip['type'] == "free"){ + $user->ship_free = 1; + } + $user->save(); + + //通知用户 + event('Notice', [ + 'scene' => NoticeEnum::ORDER_USER_NOTICE, + 'mobile' => $user['mobile'], + 'params' => ['order_id' => $item['id'], 'user_id' => $item['user_id']] + ]); + + // 打印小票 event('Printer', [ 'order_id' => $item['id'], ]); - } - //如果返回了第三方流水号 - if (isset($extra['transaction_id'])) { - $trade->transaction_id = $extra['transaction_id']; - $trade->save(); - } - $order_ids = array_column($orders, 'id'); + OrderLogLogic::record( + OrderLogEnum::TYPE_USER, + OrderLogEnum::USER_PAID_ORDER, + $item['id'], + $item['user_id'], + "会员卡购买成功" + ); - // 虚拟商品更新订单信息 - GoodsVirtualLogic::afterPayVirtualDelivery($order_ids); + } - // 更新商品销量 - self::updateGoodsSales($order_ids); } /** diff --git a/app/common/model/AccountLog.php b/app/common/model/AccountLog.php index de72179..2fe7848 100644 --- a/app/common/model/AccountLog.php +++ b/app/common/model/AccountLog.php @@ -24,6 +24,9 @@ class AccountLog extends Models const integral_order_dec_balance = 109; const integral_order_inc_balance = 110; + const balance_pay_user = 111; + const balance_pay_resource = 112; + const admin_add_integral = 200; const admin_reduce_integral = 201; const sign_in_integral = 202; @@ -53,9 +56,11 @@ class AccountLog extends Models const admin_inc_earnings = 403; //后台增加佣金 const admin_reduce_earnings = 404; //后台减少佣金 + + const money_change = [ //余额变动类型 self::admin_add_money,self::admin_reduce_money,self::recharge_money,self::balance_pay_order,self::cancel_order_refund,self::after_sale_refund - , self::withdraw_to_balance,self::user_transfer_inc_balance, self::user_transfer_dec_balance, self::integral_order_dec_balance, self::integral_order_inc_balance + , self::withdraw_to_balance,self::user_transfer_inc_balance, self::user_transfer_dec_balance, self::integral_order_dec_balance, self::integral_order_inc_balance,self::balance_pay_user,self::balance_pay_resource ]; const integral_change = [ //积分变动类型 self::admin_add_integral,self::admin_reduce_integral,self::sign_in_integral,self::recharge_give_integral,self::order_award_integral,self::invite_add_integral @@ -95,6 +100,8 @@ class AccountLog extends Models self::sign_give_growth => '每日签到赠送成长值', self::recharge_give_growth => '充值赠送成长值', self::balance_pay_order => '下单扣减余额', + self::balance_pay_user => '购买会员卡扣减余额', + self::balance_pay_resource => '购买资料减余额', self::cancel_order_refund => '取消订单退回余额', self::after_sale_refund => '售后退回余额', self::withdraw_to_balance => '佣金提现', diff --git a/app/common/model/order/Order.php b/app/common/model/order/Order.php index 29fb884..c193dfe 100644 --- a/app/common/model/order/Order.php +++ b/app/common/model/order/Order.php @@ -310,7 +310,10 @@ class Order extends Models } //多长时间内允许客户自动取消 $cancel_limit = ConfigServer::get('transaction', 'paid_order_cancel_time', 0); - $limit_time = $data['create_time'] + $cancel_limit * 60; + if($cancel_limit == "" ){ + $cancel_limit = 0; + } + $limit_time = $data['create_time'] + intval($cancel_limit) * 60; if ($limit_time < time()) { return $btn; } @@ -533,6 +536,9 @@ class Order extends Models } if ($data['order_status'] == 0 && $data['pay_status'] == 0) { $order_cancel_time = ConfigServer::get('transaction', 'unpaid_order_cancel_time', 30); + if(!is_numeric($order_cancel_time)){ + $order_cancel_time = 30; + } $end_time = $data['create_time'] + $order_cancel_time * 60; } return $end_time; diff --git a/app/common/model/order/OrderResource.php b/app/common/model/order/OrderResource.php new file mode 100644 index 0000000..a7fb574 --- /dev/null +++ b/app/common/model/order/OrderResource.php @@ -0,0 +1,9 @@ + 'JSAPI', - 'body' => '商品总订单', + 'body' => $order['type']==1?'购买会员卡':($order['type']==2?"购买资料":'商品总订单'), 'total_fee' => $order['order_amount'] * 100, // 单位:分 'notify_url' => $notify_url, 'openid' => $auth['openid'] ?? '', @@ -345,9 +347,21 @@ class WeChatPayServer switch ($attach) { case 'trade': $order_trade = OrderTrade::where('t_sn', $message['out_trade_no'])->find(); - $order = Order::where('trade_id', $order_trade['id'])->find(); - if (!$order || $order['pay_status'] >= PayEnum::ISPAID) { - return true; + if($order_trade['type']==0){ + $order = Order::where('trade_id', $order_trade['id'])->find(); + if (!$order || $order['pay_status'] >= PayEnum::ISPAID) { + return true; + } + }elseif ($order_trade['type']==1){ + $order = OrderUser::where('trade_id', $order_trade['id'])->find(); + if (!$order || $order['pay_status'] >= PayEnum::ISPAID) { + return true; + } + }elseif ($order_trade['type']==2){ + $order = OrderResource::where('trade_id', $order_trade['id'])->find(); + if (!$order || $order['pay_status'] >= PayEnum::ISPAID) { + return true; + } } PayNotifyLogic::handle('trade', $message['out_trade_no'], $extra); break; diff --git a/runtime/cache/51/6acd4f8c5fec7d25182d1c0728d355.php b/runtime/cache/51/6acd4f8c5fec7d25182d1c0728d355.php deleted file mode 100644 index 933a80e..0000000 --- a/runtime/cache/51/6acd4f8c5fec7d25182d1c0728d355.php +++ /dev/null @@ -1,4 +0,0 @@ - -7 \ No newline at end of file diff --git a/runtime/cache/9f/d2f37875d1da637002182ec566f162.php b/runtime/cache/9f/d2f37875d1da637002182ec566f162.php index 8d697c4..8d3bb62 100644 --- a/runtime/cache/9f/d2f37875d1da637002182ec566f162.php +++ b/runtime/cache/9f/d2f37875d1da637002182ec566f162.php @@ -1,4 +1,4 @@ -a:3:{i:0;s:75:"D:\waibao\ahbcqz\server\runtime\cache\1e\9273b3315671b45227b5827559a179.php";i:1;s:75:"D:\waibao\ahbcqz\server\runtime\cache\a1\55016152d5af019afbbfd20daf7335.php";i:2;s:75:"D:\waibao\ahbcqz\server\runtime\cache\c0\cf484f10720659d936916d74e6362a.php";} \ No newline at end of file +a:5:{i:0;s:75:"D:\waibao\ahbcqz\server\runtime\cache\1e\9273b3315671b45227b5827559a179.php";i:1;s:75:"D:\waibao\ahbcqz\server\runtime\cache\a1\55016152d5af019afbbfd20daf7335.php";i:2;s:75:"D:\waibao\ahbcqz\server\runtime\cache\c0\cf484f10720659d936916d74e6362a.php";i:3;s:75:"E:\waibao\ahbcqz\server\runtime\cache\35\4c90d26061baaa2f7a972849339da3.php";i:4;s:75:"E:\waibao\ahbcqz\server\runtime\cache\64\80bd487ac5e230fd1fb2d74457b697.php";} \ No newline at end of file diff --git a/runtime/session/sess_3632be6a5ab6055cd5719e554b79bbac b/runtime/session/sess_3632be6a5ab6055cd5719e554b79bbac deleted file mode 100644 index 2151f3a..0000000 --- a/runtime/session/sess_3632be6a5ab6055cd5719e554b79bbac +++ /dev/null @@ -1 +0,0 @@ -a:1:{s:10:"admin_info";a:4:{s:2:"id";i:1;s:7:"account";s:5:"admin";s:4:"name";s:5:"admin";s:7:"role_id";i:0;}} \ No newline at end of file