diff --git a/app/common/repositories/store/order/StoreGroupOrderRepository.php b/app/common/repositories/store/order/StoreGroupOrderRepository.php index 7b15c20d..63ab8158 100644 --- a/app/common/repositories/store/order/StoreGroupOrderRepository.php +++ b/app/common/repositories/store/order/StoreGroupOrderRepository.php @@ -15,12 +15,14 @@ namespace app\common\repositories\store\order; use app\common\dao\store\order\StoreGroupOrderDao; +use app\common\model\store\order\StoreGroupOrder; use app\common\repositories\BaseRepository; use app\common\repositories\store\coupon\StoreCouponRepository; use app\common\repositories\store\coupon\StoreCouponUserRepository; use app\common\repositories\user\UserBillRepository; use app\common\repositories\user\UserRepository; use crmeb\jobs\CancelGroupOrderJob; +use think\db\exception\DataNotFoundException; use think\exception\ValidateException; use think\facade\Db; use think\facade\Queue; @@ -65,6 +67,34 @@ class StoreGroupOrderRepository extends BaseRepository return compact('count', 'list'); } + + public function detailOne($id, $flag = true) + { + + $order = StoreGroupOrder::where('group_order_id', $id) + ->with([ + 'orderList' => function (Relation $query) use ($flag) { + $query->when($flag, function ($query) { + $query->field('order_id,group_order_id,mer_id,order_sn,activity_type,pay_price,order_extend,order_type,is_virtual'); + })->with([ + 'merchant' => function ($query) use ($flag) { + $flag && $query->field('mer_id,mer_name,service_phone')->append(['services_type']); + }, 'orderProduct', 'presellOrder' + ]); + }])->find(); + + if ($order['paid'] == 1) { + throw new DataNotFoundException('订单不存在或已取消'); + } + if (empty($order)) { + throw new DataNotFoundException('订单不存在或已取消'); + } + return $order; + } + + + + /** * @param $uid * @param $id diff --git a/app/common/repositories/store/order/StoreOrderRepository.php b/app/common/repositories/store/order/StoreOrderRepository.php index c2f5a16d..d54687e4 100644 --- a/app/common/repositories/store/order/StoreOrderRepository.php +++ b/app/common/repositories/store/order/StoreOrderRepository.php @@ -12,9 +12,11 @@ namespace app\common\repositories\store\order; use app\common\dao\store\order\StoreOrderDao; +use app\common\dao\system\financial\FinancialDao; use app\common\dao\system\financial\FinancialRecordDao; use app\common\Enum; use app\common\model\store\order\StoreGroupOrder; +use app\common\model\store\order\StoreGroupOrderOther; use app\common\model\store\order\StoreOrder; use app\common\model\store\order\StoreRefundOrder; use app\common\model\store\product\ProductAttrValue; @@ -2592,9 +2594,16 @@ class StoreOrderRepository extends BaseRepository return $data; } + public function beginMerchant($mer_id) + { + $merchant = Merchant::getDB()->where('mer_id',$mer_id)->value('mer_name'); + return compact('merchant'); + + } - public function dealGoodsList($where,$money) + + public function dealGoodsList($where,$money,$merId) { //拆分2种方式 大于该金额的 50 +小于该金额的50条 $greaterWhere = function ($query) use ($money) { @@ -2611,6 +2620,7 @@ class StoreOrderRepository extends BaseRepository $count = count($list); $minMoney = bcsub($money, 600, 2); + $merInfo = Merchant::getDB()->where('mer_id',$merId)->value('mer_name'); if ($count) { $range = $this->getRangeNumber($minMoney); //减少一般的区间 //不存在--虚假的区间 @@ -2641,10 +2651,10 @@ class StoreOrderRepository extends BaseRepository // $count = array_sum(array_column($list, 'num')); //重复拿 $count = count($list);//计算数量的 - return compact('count', 'list'); + return compact('count', 'list','merInfo'); } else { - return compact('count', 'list'); + return compact('count', 'list','merInfo'); } } @@ -2834,6 +2844,167 @@ class StoreOrderRepository extends BaseRepository + public function financialVoucher(StoreGroupOrder $groupOrder, $is_combine = 0, $subOrders = []) + { + $groupOrder->append(['user']); + //修改订单状态 + Db::startTrans(); + try { + $time = date('Y-m-d H:i:s'); + $groupOrder->paid = 1; + $groupOrder->pay_time = $time; + $groupOrder->is_combine = $is_combine; + $orderStatus = []; + $groupOrder->append(['orderList.orderProduct']); + $flag = true; + $finance = []; + $profitsharing = []; + $financialRecordRepository = app()->make(FinancialRecordRepository::class); + $financeSn = $financialRecordRepository->getSn(); + $userMerchantRepository = app()->make(UserMerchantRepository::class); + $storeOrderProfitsharingRepository = app()->make(StoreOrderProfitsharingRepository::class); + $uid = $groupOrder->uid; + $i = 1; + $isVipCoupon = app()->make(StoreGroupOrderRepository::class)->isVipCoupon($groupOrder); + //订单记录 + $storeOrderStatusRepository = app()->make(StoreOrderStatusRepository::class); + $svipDiscount = 0; + $financeDao = new FinancialDao(); + foreach ($groupOrder->orderList as $_k => $order) { + if($groupOrder->order_extend){ + if($order->order_extend){ + $order_extend=$order->order_extend; + }else{ + $order_extend=[]; + } + $order_extend['corporate_voucher']=$groupOrder->order_extend; + $order->order_extend=json_encode($order_extend,true); + } + $order->paid = 1; + $order->pay_time = $time; + $svipDiscount = bcadd($order->svip_discount, $svipDiscount, 2); + if (isset($subOrders[$order->order_sn])) { + $order->transaction_id = $subOrders[$order->order_sn]['transaction_id']; + } + $presell = false; + + // 订单的类型 0 发货 1 自提 + if ($order->order_type == 1 && $order->status != 10) { + $order->verify_code = $this->verifyCode(); + } + $order->save(); + $orderStatus[] = [ + 'order_id' => $order->order_id, + 'order_sn' => $order->order_sn, + 'type' => $storeOrderStatusRepository::TYPE_ORDER, + 'change_message' => '订单支付成功', + 'change_type' => $storeOrderStatusRepository::ORDER_STATUS_PAY_SUCCCESS, + 'uid' => $order->uid, + 'nickname' => $order->user->nickname, + 'user_type' => $storeOrderStatusRepository::U_TYPE_USER, + ]; + + $financeDao->order = $order; + $financeDao->user = $groupOrder->user; + $financialType = $presell ? 'order_presell' : 'order'; + // 平台收入流水账单数据 + $financeDao->platformIn($order->total_price, $financialType); + if ($order->consumption_money > 0) { + // 平台支出优惠金额 + $financeDao->platformOut($order->consumption_money, 'platform_consumption'); + } + + $_payPrice = bcsub($order->pay_price, bcadd($order['extension_one'], $order['extension_two'], 3), 2); + $orderValidAmount = bcsub($order->total_price, bcadd($order['extension_one'], $order['extension_two'], 3), 2); + if ($presell) { + if (isset($order->orderProduct[0]['cart_info']['presell_extension_one']) && $order->orderProduct[0]['cart_info']['presell_extension_one'] > 0) { + $_payPrice = bcadd($_payPrice, $order->orderProduct[0]['cart_info']['presell_extension_one'], 2); + } + if (isset($order->orderProduct[0]['cart_info']['presell_extension_two']) && $order->orderProduct[0]['cart_info']['presell_extension_two'] > 0) { + $_payPrice = bcadd($_payPrice, $order->orderProduct[0]['cart_info']['presell_extension_two'], 2); + } + } + + // 平台支出推广费 + $promoter = $order->merchant->promoter(); + $promoterCommission = bcmul($orderValidAmount, 0.003, 2); + if (!empty($promoter) && $promoterCommission > 0) { + $financeDao->user = $promoter; + $financeDao->platformOut($promoterCommission, 'commission_to_promoter'); + } + + // 平台收入手续费 + $financeDao->user = $groupOrder->user; + $commission_rate = bcdiv((string)$order['commission_rate'],'100',6); + $platformCommission = bcmul($orderValidAmount, (string)$commission_rate, 2); + if ($commission_rate > 0 && $platformCommission > 0) { + $orderValidAmount = bcsub($orderValidAmount, $platformCommission, 2); + if ($promoterCommission > 0 && !empty($promoter)) { + $platformCommission = bcsub($platformCommission, $promoterCommission, 2); + } + $financeDao->platformIn($platformCommission, 'commission_to_platform', $order['mer_id']); + } + + if (!$presell) { + //押金计算 + if ($orderValidAmount > 0) { + /** @var MerchantRepository $merchantRepo */ + $merchantRepo = app()->make(MerchantRepository::class); + $merchantRepo->merId = $order['mer_id']; + $merchantRepo->forceMargin = false; + [$orderValidAmount, $financeDao] = $merchantRepo->deductDeposit($orderValidAmount, $order, $financeDao); + } + // 商户收入金额 + $financeDao->platformOut($orderValidAmount, 'merchant_order', $order['mer_id']); + if (!$is_combine) { + app()->make(MerchantRepository::class)->addLockMoney($order->mer_id, 'order', $order->order_id, $orderValidAmount); + } + + // if (!$is_combine) { + // app()->make(MerchantRepository::class)->addLockMoney($order->mer_id, 'order', $order->order_id, $_payPrice); + // } + //短信 订单通知商户 + $mer_phone=Db::name('merchant')->where('mer_id',$order->mer_id)->value('mer_phone'); + if($mer_phone){ + Queue::push(SendSmsJob::class, ['tempId' => 'ORDER_CREATE', 'phone' => $mer_phone,'orderId'=>$order->order_id,'id'=>0]);//短信通知 + } + + } + $userMerchantRepository->updatePayTime($uid, $order->mer_id, $order->pay_price); + SwooleTaskService::merchant('notice', [ + 'type' => 'new_order', + 'data' => [ + 'title' => '新订单', + 'message' => '您有一个新的订单', + 'id' => $order->order_id + ] + ], $order->mer_id); + + } + + $this->giveIntegral($groupOrder); + $financialRecordRepository->insertAll($finance); + $storeOrderStatusRepository->batchCreateLog($orderStatus); + $groupOrder->save(); + Db::commit(); + + return true; + } catch (\Exception $e) { + Log::error('财务点击支付失败'.$e->getMessage()); + // 回滚事务 + Db::rollback(); + return false; + } + } + + + + + + + + + } diff --git a/app/controller/admin/order/Order.php b/app/controller/admin/order/Order.php index 1897848e..83885bbb 100644 --- a/app/controller/admin/order/Order.php +++ b/app/controller/admin/order/Order.php @@ -13,6 +13,7 @@ namespace app\controller\admin\order; +use app\common\repositories\store\order\StoreGroupOrderRepository; use crmeb\basic\BaseController; use app\common\repositories\store\ExcelRepository; use app\common\repositories\system\merchant\MerchantRepository; @@ -88,8 +89,16 @@ class Order extends BaseController $data = $this->request->params(['img']); if(!$data['img']) return app('json')->fail('请上传凭证'); - $this->repository->dealChangeStatus($data['img'],$id); - return app('json')->success('更新成功'); + $groupOrderRepository = \app()->make(StoreGroupOrderRepository::class); + $groupOrder = $groupOrderRepository->detailOne((int)$id, false); + $groupOrder->order_extend=$data['img']; +// $this->repository->dealChangeStatus($data['img'],$id); + $res=$this->repository->financialVoucher($groupOrder); + if($res){ + return app('json')->success('更新成功'); + }else{ + return app('json')->fail('操作失败'); + } } diff --git a/app/controller/api/Auth.php b/app/controller/api/Auth.php index 59aef1e3..69765f33 100644 --- a/app/controller/api/Auth.php +++ b/app/controller/api/Auth.php @@ -559,8 +559,10 @@ class Auth extends BaseController return $user; } else if ($auth['type'] === 'app_wechat') { $oauth = WechatService::create()->getApplication()->oauth; + $accessToken = $oauth->getAccessToken($data['code']); try { - $wechatInfo = $oauth->user(new AccessToken(['access_token' => $data['code'], 'openid' => $data['openid']]))->getOriginal(); +// $wechatInfo = $oauth->user(new AccessToken(['access_token' => $data['code'], 'openid' => $data['openid']]))->getOriginal(); + $wechatInfo = $oauth->user($accessToken)->getOriginal(); } catch (Exception $e) { throw new ValidateException('授权失败[001]' . $e->getMessage()); } @@ -568,7 +570,8 @@ class Auth extends BaseController if (!$user) throw new ValidateException('授权失败'); return $user; - } else if ($auth['type'] === 'apple') { + } + else if ($auth['type'] === 'apple') { $identityToken = $data['userInfo']['identityToken']; $tks = explode('.', $identityToken); if (count($tks) != 3) { @@ -996,10 +999,17 @@ class Auth extends BaseController $agent = strtolower($this->request->server('HTTP_USER_AGENT')); // 检查是否为iOS设备,包括iPhone和iPad if (strpos($agent, 'iphone') !== false || strpos($agent, 'ipad') !== false) { - $appInfo=[]; + $appInfo = Db::name('AppUpdate')->where('type', $type)->order('id','desc')->find(); } elseif (strpos($agent, 'android') !== false) { // 检查是否为Android设备 $appInfo = Db::name('AppUpdate')->where('type', $type)->order('id','desc')->find(); + if($agent == 'ios'){ + $pattern = '/\.wgt$/i'; + if (preg_match($pattern, basename($appInfo['dow_url']))) { + $appInfo =[]; + } + + } } else { $appInfo=[]; // 如果都不是,则输出其他 diff --git a/app/controller/api/store/order/StoreOrder.php b/app/controller/api/store/order/StoreOrder.php index 16042bbc..a32014bc 100644 --- a/app/controller/api/store/order/StoreOrder.php +++ b/app/controller/api/store/order/StoreOrder.php @@ -315,9 +315,18 @@ class StoreOrder extends BaseController //商户id 金额 $merId = $this->request->param('mer_id'); $money = $this->request->param('money'); - if(empty($money) || empty($merId)){ + + if(empty($merId)){ return app('json')->fail('参数缺失'); } + + if(empty($money)){ + //初始化 + return app('json')->success($this->repository->beginMerchant($merId)); + } + + + $where = [ "a.mer_id" => $merId, "p.is_show" => 1, @@ -325,7 +334,7 @@ class StoreOrder extends BaseController "p.is_gift_bag" => 0 ]; - return app('json')->success($this->repository->dealGoodsList($where,$money)); + return app('json')->success($this->repository->dealGoodsList($where,$money,$merId)); }