store_id = $event ? $event->store_id : $this->store_id; $this->order_id = $event ? $event->order_id : $this->order_id; $this->order_type = $event ? $event->order_type : $this->order_type; try { if ($this->order_type == 6) { $this->scanOrderNotify($event); }else { $this->OrderNotify($event); } $is_print = 1; /** * @var Order $order */ $order = $this->order; // try { // $form = new NewMerchantForm(); // $type = 1; // if ($this->order_type == 6) { // $type = 0; // } // $form->store_id = $order->store_id; // $result = $form->saasGiveIntegral($order->pay_price, $order->user_id, $order->order_no, $type); // debug_log($result, 'orderComplete.log'); // } catch (\Exception $e) { // debug_log($e->getMessage(), 'orderComplete.log'); // } //处理超级卖货系统 try { $result = SuperSales::getNotFinishSales($order->user_id, $order->id, $order->store_id); debug_log(['order_no' => $order->order_no, 'result' => $result], 'superSales.log'); } catch (\Throwable $e) { debug_log($e->getMessage(), 'superSales.log'); } \app\modules\admin\models\TeamBonusForm::afterOrderComplete($order); //处理免单队列 $this->freeQueueOrder($order); //adapay处理 $this->adapay(); // $this->shareShop($order, $event); // 积分抵扣的话减去积分 $this->reduceIntegral($order); // 余额抵扣的话减去余额 $this->reduceBalance($order); // 分红处理 BonusPool::levelShare($order->id); //购买指定商城成为股东 BonusPool::userAuto2ShareHolder($order, 1); BonusPool::userSelfBuyGoods2ShareHolder($order, 1); // BonusPool::userAuto2ShareHolder($order->id); // \queue_push(new \app\jobs\UserBuyGoodsUpdateShareHolderJob(['order_id' => $order->id])); // 股东分红处理(区域分红) $this->agent_profit($order); //是否存在用户升级 $this->LevelOrder($order); //普通商品支付完成后需要上门安装逻辑 // $this->isNeedInstall($order->id); // 发放核销卡 这里不在发放核销卡和优惠券 调整至售后期之后发放 // //发放优惠券 // $this->sendCouponCard($order->id, $order->user_id); //系统设置支付后发放积分 $store_integral_time = Option::get(OptionSetting::STORE_INTEGRAL_TIME, $order['store_id'], 'gift', 0)['value']; if ($store_integral_time == 1){ $this->give_integral($order); } //系统设置支付后发放优惠券 $store_coupon_time = Option::get(OptionSetting::STORE_COUPON_TIME, $order['store_id'], 'gift', 0)['value']; if ($store_coupon_time ==1){ $this->sendCouponCard($order->id, $order->user_id); } //系统设置支付后发放核销卡 $store_card_time = Option::get(OptionSetting::STORE_CARD_TIME, $order['store_id'], 'gift', 0)['value']; if ($store_card_time == 1){ $this->sendVerifyCard($order->id, $order->user_id, $order->order_type,1); } else { if ($order->order_type == 4) {//虚拟产品直接发放 $this->sendVerifyCard($order->id, $order->user_id, $order->order_type); } } // 后台订单提醒 OrderMessage::set($order->id, $order->store_id, $this->order_type, 0); // 余额支付订单储值卡消费记录 if($order->order_type == 0 && ($order->pay_type == 3 || ($order->is_combine_pay == Order::IS_COMBINE_PAY && $order->combine_money > 0) || $order->balance > 0)) { $this->verifyCardPayLog($order); } // 代理订单返佣逻辑 // $this->agencyPrice($order->id); // 处理虚拟商品订单状态 if (($order->order_type == 4 && $order->verify_card_id == 0)) { $order->confirm_time = time(); $order->send_time = time(); $order->trade_status = Order::ORDER_FLOW_CONFIRM; if (!$order->save()) { \Yii::warning($order->errors); } } // 生成点餐号码 if ($order->order_type == 3 && $order->is_offline == 1) { $order->send_time = time(); $order->trade_status = Order::ORDER_FLOW_SEND; } $order->food_code = self::getFoodCode($order->store_id, $order->md_id); if (!$order->save()) { \Yii::warning(['<============= 订单号:' . $order->order_no .'生成点餐号码', $order->errors]); } // //云仓转单 // $is_auth_trans = Store::findOne($order->store_id)->is_auth_trans; // // 开启自动转单 // if ($is_auth_trans) { // queue_push(new CreatedOrderTranJob(['order_id' => $order->id])); $this->MerSetPurchaseOrder($order->id); // } // 同城配送订单下单 $orderNoHead = substr($order->order_no, 0, 2); if (in_array($orderNoHead, ['ML', OrderNo::ORDER_PT]) && $order->is_delivery == 1) { $local_type = Option::get(OptionSetting::STORE_LOCAL_TYPE, $order->store_id, 'store')['value']; $local_type = Option::get(OptionSetting::STORE_LOCAL_TYPE, $order->store_id, 'pay', $local_type)['value']; if($local_type == 'keloop' && !isset($delivery_res) && KeloopForm::isSaasOpen()){ $delivery_res = KeloopForm::order_created($order->store_id, $order->id); \Yii::error('-----------keloop同城配送返回' . Json::encode($delivery_res)); } if($local_type == 'maiyatian' && !isset($delivery_res) && MaiyatianForm::isopen($order->store_id)){ $delivery_res = MaiyatianForm::order_created($order->store_id, $order->id); \Yii::error('-----------Maiyatian同城配送返回' . Json::encode($delivery_res)); } if($local_type == 'aggregate'){ if(!isset($delivery_res) && $order->alipay_trade_no){ $delivery_info = DeliveryInfo::findOne(['store_id' => $order->store_id, 'order_no' => $order->order_no]); $detail_goods = OrderDetail::find()->where(['order_id' => $order->id])->select('goods_name as name, pic, num, total_price as price')->asArray()->all(); $delivery_res = ADelivery::createOrder(0, $order->store_id, $delivery_info->mini_id, $order->user->alipay_open_id, $detail_goods, $order->order_no, $delivery_info->address_id); \Yii::error('-----------同城配送返回' . Json::encode($delivery_res)); }elseif(!isset($delivery_res)){ $detail_goods = OrderDetail::find()->alias('od')->where(['order_id' => $order->id]) ->leftJoin(['g' => Goods::tableName()], 'od.goods_id = g.id') ->select('od.goods_name as name, od.pic, od.num, od.total_price as price, g.weight')->asArray()->all(); $deliveryInfo = DeliveryInfo::findOne(['order_no' => $order->order_no]); if ($deliveryInfo && intval($deliveryInfo->wechat_delivery_type) === 1) { $goods_list = []; foreach ($detail_goods as $goods_index => $goods_item) { $goods_list[$goods_index]['weight'] = $goods_item['weight']; $goods_list[$goods_index]['price'] = sprintf('%.2f', ($goods_item['price'] / $goods_item['num'])); $goods_list[$goods_index]['name'] = $goods_item['name']; $goods_list[$goods_index]['pic'] = $goods_item['pic']; $goods_list[$goods_index]['num'] = $goods_item['num']; } $user = User::findOne($order->user_id); $address = json_decode($order->address_data, true); $form = new WechatNewDelivery(); $result = $form->addOrder([ 'address' => array_merge($address, [ 'name' => $order->name, 'mobile' => $order->mobile, ]), 'goods_list' => $goods_list, 'store_id' => $this->order->store_id, 'md_id' => $order->md_id ?: 0, 'order_no' => $order->order_no, 'store_user' => ArrayHelper::toArray($user), 'order_seq' => $deliveryInfo->serial_num, 'order_detail_path' => '/order/order-detail/order-detail?id=' . $order->id, ]); debug_log($result, 'delivery_.log'); } else { $delivery_res = Delivery::addOrder($detail_goods, $order->order_no); \Yii::error('-----------同城配送返回' . Json::encode($delivery_res)); } } } if($local_type == 'self'){ } } (new PospalForm(['store_id' => $order->store_id]))->orderNotify($order); // 订单打印 if ((int)$order->md_id === -1 || (int)$order->md_id === 0 || !isset($order->md_id)) { $order->md_id = 0; } $printer_order = new PrintOrder($order->store_id, $order->id, 'pay', 0, $order->md_id, 0, $order->mch_id); $printer_order->print_order(); ShareGroupPurchaseParentLog::addOrder($order->user_id, $order->id, $this->is_auto_repeat); //拆单(区分供应商商品和非供应商商品) $this->checkOrder($order->id); // 如果是团购活动订单 检测本活动是否满足条件 if ($order->md_group_activities_id > 0) { $this->handleGroupActivities($order); } // 下单记录 foreach($order->goods as $goods){ BuyGoodsLog::set($goods['id'], $order->user->nickname, $order->user->avatar_url); } } catch (\Exception $e) { \Yii::error('line->>>' . $e->getLine()); \Yii::error($e->getMessage()); \Yii::error('订单支付完成后操作异常'); } } private function handleGroupActivities($order) { $mdGroupActivitiesModel = MdGroupActivities::find()->where(['id'=>$order->md_group_activities_id,'store_id'=>$order->store_id,'is_delete'=>0])->one(); if (!$mdGroupActivitiesModel) { return true; } if($mdGroupActivitiesModel->rules == 0){ $order->md_group_activities_status = 1; $order->save(); return true; } $orderIds = []; // 满人 也就是满多少订单 if($mdGroupActivitiesModel->type == 1){ // 已支付 团购后动为完成的订单 $orderListQuery = Order::find()->where(['store_id'=>$order->store_id,'md_group_activities_id'=>$order->md_group_activities_id,'md_group_activities_status'=>0])->andWhere(['!=','trade_status',1])->andWhere(['is_pay' => 1]); if($orderListQuery->count() >= $mdGroupActivitiesModel->rules){ $orderIds = $orderListQuery->select('id')->column(); } } // 满商品的件数量 if($mdGroupActivitiesModel->type == 2){ $orderDetailQuery = OrderDetail::find()->alias('od')->leftJoin(['o'=>Order::tableName()],'od.order_id=o.id')->where(['o.store_id'=>$order->store_id,'o.md_group_activities_id'=>$order->md_group_activities_id,'o.md_group_activities_status'=>0])->andWhere(['!=','o.trade_status',1])->andWhere(['o.is_pay' => 1]); if($orderDetailQuery->sum('od.num') >= $mdGroupActivitiesModel->rules){ $orderIds = $orderDetailQuery->select('o.id')->column(); // 去重复 $orderIds = array_unique($orderIds); } } if(count($orderIds) > 0){ Order::updateAll(['md_group_activities_status' => 1],['id' => $orderIds]); } return true; } //adapay处理 public function adapay() { try{ if(isset($this->notify_res['user_huifu_id']) && $this->order->user_id){ $user = User::findOne($this->order->user_id); $user->adapay_user_huifu_id = $this->notify_res['user_huifu_id']; $user->save(); } } catch (\Exception $ex) { \Yii::error($ex); debug_log([__METHOD__, __LINE__, $ex->getMessage()], __CLASS__ . '.log'); } } //拆单(区分供应商商品(仓库配送和其他云仓商品)和非供应商商品) public function checkOrder($order_id) { //获取订单 $order = Order::findOne($order_id); if (!$order) { return false; } //获取下单商品 $orderDetail = OrderDetail::find()->where(['order_id' => $order->id, 'is_delete' => 0])->asArray()->all(); if (!$orderDetail) { return false; } //根据云仓商品组成新的订单详情数组 $new_order_detail_arr = []; foreach ($orderDetail as $order_detail_item) { $is_cloud_goods = 0; $goods = Goods::findOne($order_detail_item['goods_id']); if (!$goods) { continue; } if ($goods->cloud_goods_id > 0 && !intval($goods->is_wholesale)) { $is_cloud_goods = 1; //仓库自配 if (intval($goods->is_front_delivery)) { $is_cloud_goods = 2; } } $new_order_detail_arr[$is_cloud_goods][] = $order_detail_item; } if (count($new_order_detail_arr) > 1) { //只计算订单表pay_price价格 先不计算total_price价格 因为包含会员价 复原容易出问题 foreach ($new_order_detail_arr as $new_order_detail_index => $new_order_detail_item) { $goods_total_price = array_sum(array_column($new_order_detail_item, 'total_price')); if ($new_order_detail_index) { $old_order = ArrayHelper::toArray($order); unset($old_order['id']); $new_order = new Order(); $new_order->attributes = $old_order; $new_order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_MALL); $new_order->total_price = $new_order->pay_price = $goods_total_price; $new_order->transaction_id = $old_order['transaction_id']; $new_order->alipay_trade_no = $old_order['alipay_trade_no']; $new_order->first_price = 0; $new_order->second_price = 0; $new_order->third_price = 0; $new_order->holder_first_price = 0; $new_order->holder_second_price = 0; $new_order->holder_third_price = 0; $new_order->old_holder_first_price = 0; $new_order->old_holder_second_price = 0; $new_order->old_holder_third_price = 0; $new_order->share_order_profit = 0; $new_order->limit_price = 0; $new_order->coupon_sub_price = 0; $new_order->user_coupon_id = 0; $new_order->user_coupon_ids = ''; $new_order->integral = 0; $new_order->give_integral = 0; $new_order->get_verify_id = 0; $new_order->buy_level_id = 0; $new_order->level_order_id = 0; $new_order->level_diff_price = 0; $new_order->get_coupon_id = 0; $new_order->save(); foreach ($new_order_detail_item as $new_order_detail) { $new_order_detail_model = OrderDetail::findOne($new_order_detail['id']); $new_order_detail_model->attributes = $new_order_detail; $new_order_detail_model->order_id = $new_order->id; $new_order_detail_model->save(); array_push($order_detail_id_arr, $new_order_detail['id']); } array_push($order_id_arr, $new_order->id); } else { $order->total_price = $order->pay_price = bcadd($goods_total_price, $order->express_price, 2);; $order->save(); // foreach ($new_order_detail_item as $new_order_detail) { // array_push($order_detail_id_arr, $new_order_detail['id']); // } } } } } //认养订单支付完成之后,相关的操作 public function adoptOrderCostNotify(OrderEvent $event = null) { $order = $this->order = AdoptCostOrder::findOne(['id' => $this->order_id]); $user = User::findOne($order->user_id); $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $order->order_id])->goods_id); NoticeSend::OrderPay($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $goods->name,2); NoticeSend::PlaceOrder($order->order_no, $order->md_id, $order->store_id, $order); } //购买会员卡订单 public function LevelOrder($order) { if ($order->level_order_id) { $levelOrder = LevelOrder::findOne($order->level_order_id); if (!$levelOrder) { return; } if ($levelOrder->is_pay == 1) { return; } $levelOrder->is_pay = 1; $levelOrder->pay_time = time(); $levelOrder->pay_type = 3; if ($levelOrder->save()) { //会员升级 $user = User::findOne($levelOrder->user_id); $user->level = $levelOrder->after_level; $user->save(); try { if ($levelOrder->is_use_platform_mch == 1) { $store = Store::findOne($levelOrder->store_id); $profit = $levelOrder->pay_price * $store->transfer_profit / 100; $price = $levelOrder->pay_price - $profit; Store::addMoney($store, $price, '用户购买会员等级', $levelOrder->id, $levelOrder->user_id); } } catch (\Exception $e) { // Todo } } } } //自动转单 public function MerSetPurchaseOrder($order_id) { try { $order = Order::findOne($order_id); $order_detail = OrderDetail::find()->where(['order_id' => $order_id])->select('goods_id')->asArray()->all(); if (!empty($order) && !empty($order_detail)) { $form = new \app\modules\admin\models\MerchantForm(); $form->store_id = $order->store_id; $form->address = $order->address; $form->province_id = $order->province_id; $form->city_id = $order->city_id; $form->district_id = $order->district_id; $form->order_id = $order_id; $form->tel = $order->mobile; $form->name = $order->name; debug_log('自动转单000----'. 3); $result = $form->mchSetPurchaseOrder(); debug_log('自动转单000----'. json_encode($result)); } } catch (\Exception $e) { debug_log('自动转单----'. json_encode($e->getFile() . $e->getMessage() . $e->getLine())); } } // private function agencyPrice($order_id){ // try { // $order = Order::findOne($order_id); // $option = Option::get('agency_price_config', 0, 'saas', [])['value']; // debug_log('agency_price_config' . $option); // if ($option) { // $option = json_decode($option, true); // } // $province_percent = $option['province_percent'] ?? 0; // $city_percent = $option['city_percent'] ?? 0; // $district_percent = $option['district_percent'] ?? 0; // //获取代理商ID // $store = Store::findOne($order->store_id); // $admin_list = Admin::find()->where(['province_id' => $store->province_id, 'is_delete' => 0])->andWhere(['>', 'area_level', 0])->asArray()->all(); // $user = User::findOne($order->user_id); // $saasUser = SaasUser::findOne(['mobile' => $user->binding]); // $saas_user_name = '-'; // if ($saasUser) { // $saas_user_name = $saasUser->name; // } // foreach ($admin_list as $item) { // $ag_rebate = 0; // $rate = 0; // $desc = ''; // //省 // if ((int)$item['area_level'] === 3) { // $ag_rebate = $order->ag_rebate * ($province_percent / 100); // $ag_rebate = sprintf("%.2f", $ag_rebate); // $rate = $province_percent; // $desc = '用户' . $saas_user_name . '下单,订单' . $order->order_no . ',发放 ' . $ag_rebate . '元省代佣金'; // } // //市 // if ((int)$item['area_level'] === 2 && (int)$item['city_id'] === (int)$store->city_id) { // $ag_rebate = $order->ag_rebate * ($city_percent / 100); // $ag_rebate = sprintf("%.2f", $ag_rebate); // $rate = $city_percent; // $desc = '用户' . $saas_user_name . '下单,订单' . $order->order_no . ',发放 ' . $ag_rebate . '元市代佣金'; // } // //区 // if ((int)$item['area_level'] === 1 && (int)$item['city_id'] === (int)$store->city_id && (int)$item['district_id'] === (int)$store->district_id) { // $ag_rebate = $order->ag_rebate * ($district_percent / 100); // $ag_rebate = sprintf("%.2f", $ag_rebate); // $rate = $district_percent; // $desc = '用户' . $saas_user_name . '下单,订单' . $order->order_no . ',发放 ' . $ag_rebate . '元区代佣金'; // } // if (!$ag_rebate) { // continue; // } // //给用户增加佣金 // $SaasUser = SaasUser::findOne($item['saas_user_id']); // $SaasUser->share_profit = ($SaasUser->share_profit * 1) + ($ag_rebate * 1); // $res = $SaasUser->save(); // //增加记录 // if ($res) { // $form = new StoreShareMoney(); // $form->user_id = $SaasUser->id; // $form->store_id = $store->id; // $form->profit = $rate; // $form->total_price = $order->total_price; // $form->desc = $desc; // $form->order_id = $order_id; // $form->created_at = time(); // $form->type = 1; // $form->status = 0; // $form->commission = $ag_rebate; // $form->is_send = 1; // $res = $form->save(); // if (!$res) { // debug_log($form->errors); // } // } // } // } catch (\Exception $e) { // \Yii::error($e->getMessage()); // } // } /** * @param $order Order */ private function agent_profit($order) { // 判断是否开启奖金池 // $setting = [ // 'is_open_area' => Option::get('is_open_area', $order->store_id, 'bonus_pool', 0)['value'], // ]; // if (!$setting['is_open_area']) { // \Yii::warning('---------------- 未开启代理分红 -------------------'); // return; // } $is_multi_agent = Option::get('is_multi_agent', $order->store_id, 'bonus_pool_area_agent', 0)['value']; if($is_multi_agent){ $multi_agent_type1 = Option::get('multi_agent_type1', $order->store_id, 'bonus_pool_area_agent', 0)['value']; $multi_agent_type2 = Option::get('multi_agent_type2', $order->store_id, 'bonus_pool_area_agent', 0)['value']; $multi_agent_type3 = Option::get('multi_agent_type3', $order->store_id, 'bonus_pool_area_agent', 0)['value']; $multi_agent_type4 = Option::get('multi_agent_type4', $order->store_id, 'bonus_pool_area_agent', 0)['value']; } $profit = $order->profit; $goods = OrderDetail::find()->alias('od') ->leftJoin(Goods::tableName() . ' g', "g.id=od.goods_id and g.is_delete=0") ->where(['od.order_id' => $order->id]) ->select('g.dl_p_rate,g.dl_p_rate_type,g.dl_c_rate,g.dl_c_rate_type,g.dl_d_rate,g.dl_d_rate_type,g.dl_t_rate,g.dl_t_rate_type') ->asArray()->all(); // 省代 $province_share_holder_query = ShareHolder::find()->where(['is_delete' => 0, 'status' => 1, 'store_id' => $order->store_id, 'agent_type' => 1, 'province_id' => $order->province_id, 'agent_rate_status' => 1]); $province_share_holder = $province_share_holder_query->orderBy('agent_time ASC')->one(); if (!$province_share_holder) { \Yii::error('-------------- 订单号:' . $order->order_no . ' 未发现省代理----------------'); } else { $money = 0; $open = true; foreach ($goods as $v) { if ($v['dl_p_rate'] > 0) { $open = false; if ($v['dl_p_rate_type'] > 0) { $money += round($v['dl_p_rate'], 2); } else { $money += round($profit * $v['dl_p_rate'] / 100, 2); } } } if ($open) { if($is_multi_agent){ $money += round($profit * $multi_agent_type1 / 100, 2); }else{ $money += round($profit * $province_share_holder->agent_rate / 100, 2); } } $province_share_holder_list = [$province_share_holder]; if($is_multi_agent){ $province_share_holder_list = $province_share_holder_query->all(); $count = count($province_share_holder_list); $money = round($money / $count, 2); } if ($money > 0) { foreach($province_share_holder_list as $province_share_holder){ $detail = new ShareDetail(); $detail->store_id = $order->store_id; $detail->type_id = $order->id; $detail->type = 3; $detail->user_id = $province_share_holder->user_id; $detail->desc = '订单号:'.$order->order_no.'代理分红'; $detail->is_send = 0; $detail->money = $money; // $detail->money = round($order->profit * $province_share_holder->agent_rate / 100, 2); $detail->save(); } } } // 市代 $city_share_holder_query = ShareHolder::find()->where(['is_delete' => 0, 'status' => 1, 'store_id' => $order->store_id, 'agent_type' => 2, 'city_id' => $order->city_id, 'agent_rate_status' => 1]); $city_share_holder = $city_share_holder_query->orderBy('agent_time ASC')->one(); if (!$city_share_holder) { \Yii::error('-------------- 订单号:' . $order->order_no . ' 未发现市代理----------------'); } else { $money = 0; $open = true; foreach ($goods as $v) { if ($v['dl_c_rate'] > 0) { $open = false; if ($v['dl_c_rate_type'] > 0) { $money += round($v['dl_c_rate'], 2); } else { $money += round($profit * $v['dl_c_rate'] / 100, 2); } } } if ($open) { if($is_multi_agent){ $money += round($profit * $multi_agent_type2 / 100, 2); }else{ $money = round($profit * $city_share_holder->agent_rate / 100, 2); } } $city_share_holder_list = [$city_share_holder]; if($is_multi_agent){ $city_share_holder_list = $city_share_holder_query->all(); $count = count($city_share_holder_list); $money = round($money / $count, 2); } if ($money > 0) { foreach($city_share_holder_list as $city_share_holder){ $detail = new ShareDetail(); $detail->store_id = $order->store_id; $detail->type_id = $order->id; $detail->type = 3; $detail->user_id = $city_share_holder->user_id; $detail->desc = '订单号:'.$order->order_no.'代理分红'; $detail->is_send = 0; $detail->money = $money; // $detail->money = round($order->profit * $city_share_holder->agent_rate / 100, 2); $detail->save(); } } } // 区代 $district_share_holder_query = ShareHolder::find()->where(['is_delete' => 0, 'status' => 1, 'store_id' => $order->store_id, 'agent_type' => 3, 'district_id' => $order->district_id, 'agent_rate_status' => 1]); $district_share_holder = $district_share_holder_query->orderBy('agent_time ASC')->one(); if (!$district_share_holder) { \Yii::error('-------------- 订单号:' . $order->order_no . ' 未发现区域代理----------------'); } else { $money = 0; $open = true; foreach ($goods as $v) { if ($v['dl_d_rate'] > 0) { $open = false; if ($v['dl_d_rate_type'] > 0) { $money += round($v['dl_d_rate'], 2); } else { $money += round($profit * $v['dl_d_rate'] / 100, 2); } } } if ($open) { if($is_multi_agent){ $money += round($profit * $multi_agent_type3 / 100, 2); }else{ $money = round($profit * $district_share_holder->agent_rate / 100, 2); } } $district_share_holder_list = [$district_share_holder]; if($is_multi_agent){ $district_share_holder_list = $district_share_holder_query->all(); $count = count($district_share_holder_list); $money = round($money / $count, 2); } if ($money > 0) { foreach($district_share_holder_list as $district_share_holder){ $detail = new ShareDetail(); $detail->store_id = $order->store_id; $detail->type_id = $order->id; $detail->type = 3; $detail->user_id = $district_share_holder->user_id; $detail->desc = '订单号:'.$order->order_no.'代理分红'; $detail->is_send = 0; $detail->money = $money; // $detail->money = round($order->profit * $district_share_holder->agent_rate / 100, 2); $detail->save(); } } } // 镇代 $town_share_holder_query = ShareHolder::find()->where(['is_delete' => 0, 'status' => 1, 'store_id' => $order->store_id, 'agent_type' => 4, 'town_id' => $order->town_id, 'agent_rate_status' => 1]); $town_share_holder = $town_share_holder_query->orderBy('agent_time ASC')->one(); if (!$town_share_holder) { \Yii::error('-------------- 订单号:' . $order->order_no . ' 未发现镇代理----------------'); } else { $money = 0; $open = true; foreach ($goods as $v) { if ($v['dl_t_rate'] > 0) { $open = false; if ($v['dl_t_rate_type'] > 0) { $money += round($v['dl_t_rate'], 2); } else { $money += round($profit * $v['dl_t_rate'] / 100, 2); } } } if ($open) { if($is_multi_agent){ $money += round($profit * $multi_agent_type4 / 100, 2); }else{ $money = round($profit * $town_share_holder->agent_rate / 100, 2); } } $town_share_holder_list = [$town_share_holder]; if($is_multi_agent){ $town_share_holder_list = $town_share_holder_query->all(); $count = count($town_share_holder_list); $money = round($money / $count, 2); } foreach($town_share_holder_list as $town_share_holder){ $detail = new ShareDetail(); $detail->store_id = $order->store_id; $detail->type_id = $order->id; $detail->type = 3; $detail->user_id = $town_share_holder->user_id; $detail->desc = '订单号:'.$order->order_no.'代理分红'; $detail->is_send = 0; $detail->money = $money; // $detail->money = round($order->profit * $district_share_holder->agent_rate / 100, 2); $detail->save(); } } } private function reduceIntegral($order) { $integral = Json::decode($order->integral_price); // 减去当前用户账户积分 if ($integral > 0) { $user = User::findOne($order->user_id); $before = $user->integral; $user->integral -= $integral; if ($user->save()) { $log = new AccountLog(); $log->store_id = $order->store_id; $log->user_id = $user->id; $log->type = AccountLog::TYPE_INTEGRAL; $log->log_type = AccountLog::LOG_TYPE_EXPEND; $log->amount = $integral; $log->desc = "订单积分抵扣支付,订单号为:{$order->order_no}。"; $log->before = $before; $log->after = $user->integral; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_PLATFORM_ORDER; $log->save(); } } } private function reduceBalance($order) { $balance = Json::decode($order->balance); // 减去当前用户账户余额 if ($balance > 0) { $user = User::findOne($order->user_id); $before = $user->money; $user->money -= $balance; if ($user->save()) { $log = new AccountLog(); $log->store_id = $order->store_id; $log->user_id = $user->id; $log->type = AccountLog::TYPE_GOODS_BALANCE; $log->log_type = AccountLog::LOG_TYPE_EXPEND; $log->amount = $balance; $log->desc = "订单余额抵扣支付,订单号为:{$order->order_no}。"; $log->before = $before; $log->after = $user->money; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_PLATFORM_ORDER; $log->save(); } } } /** * 发放优惠券 */ public function sendCouponCard($order_id, $user_id) { $goods_id = OrderDetail::find()->select('goods_id, num')->where(['order_id' => $order_id,'is_delete' => 0])->asArray()->all(); $coupon_arr = []; foreach ($goods_id as $k => $v) { $coupon_card_info = Goods::find()->select('id, coupon_card_id, send_coupon_card_num')->where(['id' => $v['goods_id'], 'is_delete' => 0])->asArray()->one(); if (empty($coupon_card_info)) { continue; } $coupon_card_id = $coupon_card_info['coupon_card_id']; $coupon_card_id_arr = explode(',', $coupon_card_id); $send_coupon_card_num = intval($coupon_card_info['send_coupon_card_num']); $coupon_list = Coupon::find()->where(['id' => $coupon_card_id_arr, 'is_delete' => 0])->select('total_count, id')->asArray()->all(); foreach ($coupon_list as $item) { for ($i = 0; $i < $send_coupon_card_num; $i++) { $coupon_send_count = UserCoupon::find()->where([ 'coupon_id' => $item['id'], 'type' => [ UserCoupon::TYPE_STORE, UserCoupon::TYPE_AUTO, UserCoupon::TYPE_GET ] ])->select('id')->count(); if (intval($item['total_count']) === -1 || $item['total_count'] > $coupon_send_count) { debug_log([ 'user_id' => $user_id, 'id' => $item['id'] ] ,'coupon.log'); $use_coupon = coupon::userAddCoupon($user_id, $item['id']); if ($use_coupon) { array_push($coupon_arr, intval($use_coupon)); } } } } } $order = Order::findOne($order_id); $order->get_coupon_id = implode(',', $coupon_arr); $order->save(); } /** * 发放核销卡 */ private function sendVerifyCard($order_id, $user_id, $order_type, $card_time = 0) { try { if (($order_type != 4 && $card_time) || $order_type == 4){ $goods_id = OrderDetail::find()->select('goods_id, num')->where(['order_id' => $order_id,'is_delete' => 0])->asArray()->all(); foreach ($goods_id as $k => $v) { $verify_card_info = Goods::find()->select('id, verify_card_id, send_verify_card_num, product_type') ->where(['id' => $v['goods_id'], 'is_delete' => 0])->asArray()->one(); if (empty($verify_card_info)) { continue; } $num = intval($verify_card_info['send_verify_card_num'] ?? 0) * intval($v['num']); if (in_array($verify_card_info['product_type'], [3, 4])) { $num = 1; } $this->startSendVerifyCard($verify_card_info['verify_card_id'], $verify_card_info['id'], $user_id, $order_type, $order_id, $num); } } } catch (\Exception $e) { debug_log(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], 'order_complete.log'); } } /** * 核销卡发放 */ private function startSendVerifyCard($verify_card_id, $goods_id, $user_id, $order_type, $order_id, $num){ if (!empty($verify_card_id)){ $order = Order::findOne($order_id); $used_verify_card_id = ''; if($order->verify_card_id){ $used_verify_sale_id = $order->verify_card_id; $verify_sale = VerifyCardSale::findOne($used_verify_sale_id); $used_verify_card_id = $verify_sale['verify_card_id']; } $verify_card_id_arr = explode(',', $verify_card_id); $res = Tools::getVerifyList($verify_card_id_arr); \Yii::error($res); $ids = ''; foreach($res as $value){ if($value['id'] == $used_verify_card_id){ \Yii::error('================== 卡券发放结果:订单消费的卡券不再赠送,卡券id为:' . $value['id']); continue; } for ($i = 0; $i < $num; $i++) { $verify_form = new VerifyCardSale(); $verify_form->store_id = $order->store_id; $verify_form->user_id = $user_id; $verify_form->verify_card_id = $value['id']; //查询核销卡使用总次数 $left_info = VerifyCard::find()->select('total_num, expire_day')->where([ 'id' => $value['id'], 'is_delete' => 0 ])->asArray()->one(); if ($value['type'] == 1) { $verify_form->left_num = $left_info['total_num']; } else { $verify_form->left_num = 1; } $account = VerifyCardAccount::find()->where(['store_id' => $value['store_id'], 'card_id' => $value['id'], 'status' => 0])->limit(1)->one(); if (!$account) { \Yii::error('================== 卡券发放结果:未找到数据,卡券id为:' . $value['id']); continue; } $verify_form->account_id = $account->id; $verify_form->sale_time = time(); if ($value['date_type'] == 1) { $verify_form->end_time = time() + $left_info['expire_day'] * (3600*24); } else { $verify_form->end_time = $value['end_time']; } $verify_form->goods_id = $goods_id; $verify_form->order_type = $order_type; if ($verify_form->save()) { $ids .= $verify_form->id . ','; if ($value['type'] == 1) { //核销卡核销数量增加 $verify_card_form = VerifyCard::findOne([ 'id' => $value['id'], 'is_delete' => 0 ]); $verify_card_form->use_num += 1; if (!$verify_card_form->save()) { continue; } } else { $card = VerifyCard::findOne(['id' => $value['id'], 'is_delete' => 0]); $account = VerifyCardAccount::findOne($verify_form->account_id); $card->send_times += 1; $card->save(); } $account->status = 1; if (!$account->save()) { continue; } } else { \Yii::warning($verify_form->errors); } } } $order->get_verify_id = $ids; $order->save(); } } /** * 积分发放 */ public function give_integral($id) { $order_id = $id; if(isset($order_id->id)){ $give = $order_id; }else{ $give = Order::findOne($order_id); } if ($give['give_integral'] != 0) { return; } $integral = OrderDetail::find() ->andWhere(['order_id' => $give['id'], 'is_delete' => 0]) ->select([ 'sum(integral)', ])->scalar(); if (!$integral) { return; } $giveUser = User::findOne(['id' => $give['user_id']]); $before = $giveUser->integral; if ($giveUser) { $giveUser->integral += $integral; $giveUser->total_integral += $integral; $giveUser->save(); } $give->give_integral = 1; $give->save(); $log = new AccountLog(); $log->store_id = $give->store_id; $log->user_id = $giveUser->id; $log->type = AccountLog::TYPE_INTEGRAL; $log->log_type = AccountLog::LOG_TYPE_INCOME; $log->amount = $integral; $log->desc = '订单'.$give->order_no.'赠送积分'; $log->before = $before; $log->after = $giveUser->integral; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $give->id; $log->order_type = AccountLog::TYPE_PLATFORM_ORDER; $log->save(); } // 自提点分销 public function shareShop($order) { return false; if ($order->is_offline == 1) { $shop = Shop::findOne($order->shop_id); if ($shop) { $user = User::findOne($order->user_id); $info = addslashes("会员 ".$user->nickname." 下单,获得奖励"); $orderDetail = OrderDetail::find()->select(['goods_id','total_price','num'])->where(['order_id' => $order->id])->all(); $shop_bili = Option::get(OptionSetting::SHOP_RATIO, $order->store_id)['value']; $shop_bili_type = Option::get(OptionSetting::SHOP_RATIO_TYPE, $order->store_id)['value']; $money = 0; foreach ($orderDetail as $v){ $goods_money = $v['total_price']; if($shop_bili_type == 2){ $money += $v['num']*$shop_bili; }else{ $money += $goods_money*$shop_bili * 0.01; } } if ($money > 0.01) { $share_form = new ShopShare(); $share_form->store_id = $order->store_id; $share_form->order_id = $order->id; $share_form->shop_id = $shop->id; $share_form->amount = $money; $share_form->user_id = $order->user_id; $share_form->the_desc = $info; $share_form->created_at = time(); $share_form->save(); } } } } // 商城 private function OrderNotify($event) { $order = $this->order = Order::findOne(['id' => $this->order_id]); $user = User::findOne($order->user_id); // 如果是余额抵扣订单,两条日志,分别是线上支付和余额支付 $pay_price = $order->pay_price; if ($order->is_combine_pay == Order::IS_COMBINE_PAY && $order->combine_money > 0) { $money = $user->money; $user->money = $user->money - $order->combine_money; if ($user->money < 0) { throw new \Exception('余额不足'); } if ($user->save()) { $log = new AccountLog(); $log->store_id = $order->store_id; $log->user_id = $user->id; $log->type = AccountLog::TYPE_BALANCE; $log->log_type = AccountLog::LOG_TYPE_EXPEND; $log->amount = $order->combine_money; $log->desc = "商城订单余额支付,订单号为:{$order->order_no}。"; $log->before = $money; $log->after = $user->money; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_PLATFORM_ORDER; $log->save(); $pay_price = $order->pay_price - $order->combine_money; } } if ($pay_price > 0 && !in_array($order->pay_type,[3,7])) { $log = new AccountLog(); $log->store_id = $order->store_id; $log->user_id = $user->id; $log->type = $order->pay_type == 1 ? AccountLog::TYPE_WECHAT : AccountLog::TYPE_ALIPAY; $log->log_type = AccountLog::LOG_TYPE_EXPEND; $log->amount = $pay_price; $log->desc = "订单线上支付,订单号为:{$order->order_no}。"; $log->before = 0; $log->after = 0; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_PLATFORM_ORDER; $log->save(); } // 首次付款,绑定上下级 if ($user->parent_id == 0 && $user->parent_user_id > 0) { $form = new BindForm(); $form->user_id = $order->user_id; $form->store_id = $order->store_id; $form->parent_id = $user->parent_user_id; $form->old_parent_id = $user->parent_user_id; $form->condition = 2; $bindForm = $form->save(); if ($bindForm['code'] == 0) { $form = new ShareMoneyForm(); $form->order = $this->order; $form->order_type = $event->order_type; $form->store_id = $order->store_id; $form->setData(); } } // 预约商品库存操作 BookOrderNum::bookNumReduce($order); // 消费满指定金额自动成为分销商 $this->autoBecomeShare($order->user_id, $order->store_id, 'STORE'); // 购买指定或任意商品自动成为分销商 $this->autoBuyGood($order->user_id, $order->store_id, $order->id); if ($this->order->pay_type != 2) { // 支付成功赠送优惠券 $this->paySendCoupon($order->store_id, $order->user_id); // 支付成功赠送卡券 $this->paySendCard($order->store_id, $order->user_id, $order->id); } // 记录购买记录 $this->setBuyData($order); // 消息通知 $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $this->order_id])->goods_id); $saas_user = SaasUser::findOne(['mobile' => $user->binding, 'is_delete' => 0]); MochatForm::sendMsg(1, $order->store_id, MochatForm::MSG_TYPE_PAY_ORDER, $saas_user->id, ['goods_id' => $goods->id]); $mch_name = ''; if($order['mch_id']){ $mch = Mch::findOne($order['mch_id']); $mch && $mch_name = '[' . $mch['name'] . ']'; } if ($order->order_type == Order::ORDER_TYPE_Adopt) { NoticeSend::OrderPay($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $goods->name, 1); } else { NoticeSend::OrderPay($order->user_id, $order->mobile, $order->order_no, $order->pay_price, $mch_name . $goods->name); } NoticeSend::PlaceOrder($order->order_no, $order->md_id, $order->store_id, $order); NoticeSend::MchOrder($order->order_no, $order->store_id, $order); /* begin 2025/07/11 11:06:57 如果订单是上门服务订单的话,通知符合条件的服务人员进行抢单 WPing丶 */ if ($order->order_type == Order::ORDER_TYPE_WORKER) { NoticeSend::ServiceNewOrder($order->order_no, $order->store_id, $order); } /* end */ return true; } // 当面付订单 private function scanOrderNotify($event) { $order = $this->order = \app\plugins\scanCodePay\models\Order::findOne(['id' => $this->order_id]); $user = User::findOne($order->user_id); // 如果是余额抵扣订单,两条日志,分别是线上支付和余额支付 $pay_price = $order->pay_price; if ($order->is_combine_pay == Order::IS_COMBINE_PAY && $order->combine_money > 0) { $money = $user->money; $user->money = $user->money - $order->combine_money; if ($user->save()) { $log = new AccountLog(); $log->store_id = $order->store_id; $log->user_id = $user->id; $log->type = AccountLog::TYPE_BALANCE; $log->log_type = AccountLog::LOG_TYPE_EXPEND; $log->amount = $order->combine_money; $log->desc = "当面付余额支付,订单号为:{$order->order_no}。"; $log->before = $money; $log->after = $user->money; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_SCAN_CODE_PAY; $log->save(); $pay_price = $order->pay_price - $order->combine_money; } } $log = new AccountLog(); $log->store_id = $order->store_id; $log->user_id = $user->id; $log->type = $order->pay_type == 1 ? AccountLog::TYPE_WECHAT : AccountLog::TYPE_ALIPAY; $log->log_type = AccountLog::LOG_TYPE_EXPEND; $log->amount = $pay_price; $log->desc = "当面付在线支付,订单号为:{$order->order_no}。"; $log->before = 0; $log->after = 0; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_SCAN_CODE_PAY; $log->save(); // 首次付款,绑定上下级 if ($user->parent_id == 0) { $form = new Bind(); $form->user_id = $order->user_id; $form->store_id = $order->store_id; $form->parent_id = $user->parent_user_id; //$form->old_parent_id = $user->parent_user_id; $form->condition = 2; $bindForm = $form->save(); if ($bindForm['code'] == 0) { $form = new ShareMoneyForm(); $form->order = $this->order; $form->order_type = $event->order_type; $form->setData(); } } // 消费满指定金额自动成为分销商 $this->autoBecomeShare($order->user_id, $order->store_id, 'STORE'); // 购买指定或任意商品自动成为分销商 $this->autoBuyGood($order->user_id, $order->store_id, $order->id); if (in_array($this->order->pay_type, [1, 3])) { // 支付成功赠送优惠券 $this->paySendCoupon($order->store_id, $order->user_id); // 支付成功赠送卡券 $this->paySendCard($order->store_id, $order->user_id, $order->id); } // 记录购买记录 $this->setBuyData($order); // 消息通知 // $goods = Goods::findOne(OrderDetail::findOne(['order_id' => $this->order_id])->goods_id); NoticeSend::OrderPay($order->user_id, $order->mobile, $order->order_no, $order->pay_price, '当面付'); NoticeSend::PlaceOrder($order->order_no, $order->mch_id, $order->store_id, $order); return true; } // 支付宝当面付 private function alipayScanOrderNotify($event) { $order = $this->order = \app\plugins\scanCodePay\models\Order::findOne(['id' => $this->order_id]); $user = User::findOne($order->user_id); $log = new AccountLog(); $log->store_id = $this->store_id; $log->user_id = $user->id; $log->type = AccountLog::TYPE_ALIPAY; $log->log_type = AccountLog::LOG_TYPE_EXPEND; $log->amount = $order->pay_price; $log->desc = "当面付支付宝支付,订单号为:{$order->order_no}。"; $log->before = 0; $log->after = 0; $log->operator = ''; $log->operator_id = 0; $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL; $log->created_at = time(); $log->order_id = $order->id; $log->order_type = AccountLog::TYPE_SCAN_CODE_PAY; $log->save(); // 记录购买记录 $this->setBuyData($order); return true; } /** * 支付成功送优惠券 */ private function paySendCoupon($store_id, $user_id) { $form = new CouponPaySend(); $form->store_id = $store_id; $form->user_id = $user_id; $form->save(); } /** * 消费满指定金额自动成为分销商 * @param $user_id integer 用户id */ private function autoBecomeShare($user_id, $store_id, $type = null) { $setting = Option::get('share_basic_setting', $store_id); $setting = $setting ? Json::decode($setting['value']) : []; if (intval($setting['share_condition']['value']) !== 2) { return; } $auto_share_val = floatval($setting['auto_share_val']['value']); if ($auto_share_val == 0) { return; } $share = Share::findOne(['user_id' => $user_id, 'is_delete' => 0, 'store_id' => $store_id]); if ($share && $share->status == 1) { return; } $consumption_sum = Order::find()->where(['user_id' => $user_id, 'is_delete' => 0, 'is_pay' => 1])->sum('pay_price'); $consumption_sum = floatval(($consumption_sum ? $consumption_sum : 0)); if ($consumption_sum < $auto_share_val) { return; } if (!$share || $share->status == 2) { $share = new Share(); $share->user_id = $user_id; $share->mobile = ''; $share->name = ''; $share->is_delete = 0; $share->store_id = $store_id; } $share->status = 1; $share->created_at = time(); $share->save(); $user = User::findOne($user_id); $user->time = time(); $user->is_distributor = 1; $user->save(); } /** * 购买指定商品成为分销商 */ public function autoBuyGood($user_id, $store_id, $order_id, $type = 0) { $setting = Option::get('share_basic_setting', $store_id); $setting = $setting ? Json::decode($setting['value']) : []; //如果开启无需审核才能开始走下面逻辑 if (intval($setting['share_condition']['value']) !== 2) { return; } // 购买商城成分销商关闭状态不执行 if ($setting['share_goods_status']['value'] == 0) { return; } $share = Share::findOne(['user_id' => $user_id, 'is_delete' => 0, 'store_id' => $store_id]); if ($share && $share->status == 1) { return; } $goodIds = OrderDetail::find()->where(['order_id' => $order_id])->select('goods_id')->all(); $sign = false; // 购买任意商品 if ($setting['share_goods_status']['value'] == 1) { $sign = true; } // 购买指定商品自动成为分销商 if ($setting['share_goods_status']['value'] == 2) { foreach ($goodIds as $item) { $goods_ids = \explode(',', $setting['share_goods_id']['value']); if (in_array($item->goods_id, $goods_ids)) { $sign = true; break; } } } if ($sign) { if (!$share || $share->status == 2) { $share = new Share(); $share->user_id = $user_id; $share->mobile = ''; $share->name = ''; $share->is_delete = 0; $share->store_id = $store_id; } $share->status = 1; $share->created_at = time(); $share->save(); $user = User::findOne($user_id); $user->time = time(); $user->is_distributor = 1; $user->save(); } } /** * 支付成功送卡券 */ private function paySendCard($store_id, $user_id, $order_id) { $form = new CardSend(); $form->store_id = $store_id; $form->user_id = $user_id; $form->order_id = $order_id; $form->save(); } // 售后订单申请成功,相关操作 public function refund(OrderEvent $event = null) { $this->store_id = $event ? $event->store_id : $this->store_id; $this->order_id = $event ? $event->order_id : $this->order_id; $this->order_type = $event ? $event->order_type : $this->order_type; $this->order_refund_no = $event ? $event->order_refund_no : $this->order_refund_no; $this->form_id = $event ? $event->form_id : $this->form_id; try { $order = Order::findOne(['id' => $this->order_id]); NoticeSend::MchCancel($order->order_no, $order->mch_id); } catch (\Exception $e) { } } public function setBuyData($order) { $key = "buy_data"; // 用户 $user = User::findOne($order->user_id); $goods = OrderDetail::findOne(['order_id' => $order->id]); $data = (object)null; $data->type = 0; $data->store_id = $order->store_id; $data->order_no = $order->order_no; $data->user = $user->nickname; $data->goods = $goods->goods_id; $data->address = $goods->goods_name; $data->avatar_url = $user->avatar_url; $data->time = time(); $new = json_encode($data); $cache = cache(); $cache->set($key, $new, 300); } /** * 获取点餐号码 */ public static function getFoodCode($store_id, $md_id = 0) { $start_time = strtotime(date('Y-m-d 00:00:00')); $end_time = strtotime(date('Y-m-d 23:59:59')); $result = Order::find()->where(['store_id' => $store_id, 'md_id' => $md_id]) ->andWhere([ 'and', [ '>=', 'created_at', $start_time ], [ '<=', 'created_at', $end_time ] ])->max('food_code'); return str_pad((string)(intval($result) + 1), 4, "0", STR_PAD_LEFT); } public function freeQueueOrder($order) { try { $order_detail_all = OrderDetail::find()->select('goods_id, total_price, goods_name, num')->where(['order_id' => $order->id])->asArray()->all(); foreach ($order_detail_all as $order_detail) { $free_queue_goods = FreeQueueGoods::find()->select('activity_id')->where(['goods_id' => $order_detail['goods_id'], 'is_delete' => 0])->one(); if (!$free_queue_goods) { continue; } $free_queue = FreeQueue::find()->where(['is_delete' => 0, 'status' => 1, 'id' => $free_queue_goods->activity_id])->one(); if (!$free_queue) { continue; } if (time() < $free_queue->start_time || time() > $free_queue->end_time) { continue; } if (($free_queue->cashback_type ? ($free_queue->cashback_money <= 0) : ($free_queue->cashback_bili <= 0)) || $free_queue->single_bili <= 0) { continue; } $order_detail_total_price = $order_detail['total_price']; $cashback_money = $free_queue->cashback_money; $money_queue = QueueLog::find() ->where(['user_id' => $order->user_id, 'queue_id' => $free_queue->id]) ->andWhere('`status` != 2') ->andWhere(['>', 'order_detail_total_price_item', 0]) ->orderBy('`id` ASC')->all(); $order_detail_total_price_sum = array_sum(array_column($money_queue, 'order_detail_total_price_item')); $order_detail_total_price += $order_detail_total_price_sum; while(1){ if($free_queue->cashback_type && $order_detail_total_price < $cashback_money){ if($queue_log){ $queue_log->order_detail_total_price_item = round($order_detail_total_price, 2); $queue_log->save(); } break; } $order_detail_total_price -= $cashback_money; $from_queue_list = []; if($free_queue->cashback_type){ foreach ($money_queue as $mqi => $mqv) { if($mqv->order_detail_total_price_item <= 0){ continue; } $oneMoney = 0; $getMoney += $mqv->order_detail_total_price_item; $mqvMoney = $mqv->order_detail_total_price_item; if($getMoney >= $free_queue->cashback_money){ $oneMoney = 1; $mqv->order_detail_total_price_item = $getMoney - $free_queue->cashback_money; $mqvMoney = $mqvMoney - $mqv->order_detail_total_price_item; }else{ $mqv->order_detail_total_price_item = 0; } $mqvMoney > 0 && $from_queue_list[] = ['from_queue_log_id' => $mqv->id, 'order_id' => $mqv->order_id, 'money' => $mqvMoney]; if(!$mqv->save()){ throw new \Exception('扣减金额错误' . $mqv->id . array_shift($mqv->getFirstErrors())); } if($oneMoney){ break; } } } $goods = Goods::findOne($order_detail['goods_id']); $queue_log = new QueueLog(); $queue_log->store_id = $order->store_id; $queue_log->user_id = $order->user_id; $queue_log->order_id =$order->id;//订单id $queue_log->goods_id = $order_detail['goods_id'];//商品id $queue_log->created_at = time(); $queue_log->returned_money = 0;//已返金额 $queue_log->total_money = $free_queue->cashback_type ? round($free_queue->cashback_money * $free_queue->cashback_money_bili / 100, 2) : round(($order_detail['total_price'] * $free_queue->cashback_bili / 100),2);//总金额 $queue_log->rate = ($goods && $goods->queue_rate > 0) ? $goods->queue_rate : $free_queue->single_bili;//单次返现比例 $queue_log->is_pay = 1; $queue_log->cashback_bili = $free_queue->cashback_bili;//返现比例 $queue_log->cashback_time = $free_queue->cashback_time; $queue_log->cashback_type = $free_queue->cashback_type; $queue_log->cashback_money = $free_queue->cashback_money; $queue_log->cashback_money_bili = $free_queue->cashback_money_bili; $queue_log->queue_id = $free_queue->id;//活动id $queue_log->goods_name = $order_detail['goods_name'];//商品名称 $queue_log->goods_price = round(($order_detail['total_price'] / $order_detail['num']), 2); $queue_log->num = $order_detail['num']; $queue_log->self_bili = $free_queue->self_bili; $queue_log->share_bili = $free_queue->share_bili; $queue_log->order_money_pool = $order_detail['total_price']; if($free_queue->cashback_type){ $queue_log->order_money_pool = $cashback_money; $queue_log->order_detail_total_price_list = json_encode($from_queue_list); } $queue_log->save(); if(!$free_queue->cashback_type){ break; } } } } catch (\Throwable $e) { debug_log($e->getMessage(), 'free_queue.log'); } } /* begin 2024/11/19 09:42:11 id1026 保存储值卡消费记录 WPing丶 */ public function verifyCardPayLog($order) { //查出当前用户名下所有的核销卡 $card_list = VerifyCardLog::find()->alias('vcl') ->leftJoin(['vcs' => VerifyCardSale::tableName()], 'vcl.sale_id=vcs.id') ->leftJoin(['vc' => VerifyCard::tableName()], 'vcs.verify_card_id=vc.id') ->where([ 'vcl.store_id' => $order->store_id, 'vc.type' => 3, 'vcl.user_id' => $order->user_id, 'vcl.type' => VerifyCardLog::WRITE_TYPE_EXCHANGE, 'vcl.is_complete' => 0, ]) ->select('vc.total_price as price, vcl.*') ->orderBy(['vcl.use_time' => SORT_ASC]) ->asArray() ->all(); if($card_list) { $order_balance = 0;//上张储值卡扣完后订单剩余未扣的钱 foreach($card_list as $card) { $card_balance = bcsub($card['price'],$card['use_price'],2);//卡内余额 $order_price = $order_balance > 0 ? $order_balance : ($order->combine_money > 0 ? $order->combine_money : ($order->balance > 0 ? $order->balance : $order->pay_price)); if($order_price <= $card_balance) { //储值卡内余额足以支付这笔订单 $log = VerifyCardLog::findOne($card['id']); $log->use_price += $order_price; if($log->use_order_ids) { $use_order_ids = explode(',', $log->use_order_ids); $use_order_ids[] = $order->id; $log->use_order_ids = implode(',', $use_order_ids); } else { $log->use_order_ids = $order->id; } if($order_price == $card_balance) {//如果储值卡内余额刚好够支付当前订单 $log->is_complete = 1; } if (!$log->save()) { debug_log('储值卡消费记录保存失败', 'VerifyCard.log'); debug_log($log->errors, 'VerifyCard.log'); } break; } else { //储值卡内余额不足支付这笔订单 $log = VerifyCardLog::findOne($card['id']); $log->use_price += $card_balance; if($log->use_order_ids) { $use_order_ids = explode(',', $log->use_order_ids); $use_order_ids[] = $order->id; $log->use_order_ids = implode(',', $use_order_ids); } else { $log->use_order_ids = $order->id; } $log->is_complete = 1; $order_balance = bcsub($order_price, $card_balance, 2); if (!$log->save()) { debug_log('储值卡消费记录保存失败', 'VerifyCard.log'); debug_log($log->errors, 'VerifyCard.log'); } } } } } /* end */ }