$name(); return $res; } public function agentOrderH5() { $orders = AgentOrder::whereDoesntHave("user.officialWechat")->paid()->get(); foreach ($orders as $order) { $user = User::whereHas("officialWechat")->where("mobile", $order->mobile)->first(); if (empty($user)) { // Log::info("渣酒订单:{$order->id} 姓名:{$order->name} 手机号:{$order->mobile} 没有找到H5用户"); } else { Log::info("渣酒订单:{$order->id} 姓名:{$order->name} 手机号:{$order->mobile} 用户id:{$order->user_id} 转 {$user->id}"); AgentOrder::where('id', $order->id)->update(["user_id" => $user->id]); } } } public function activityH5() { $orders = ActivityOrder::whereDoesntHave("user.officialWechat")->paid()->get(); foreach ($orders as $order) { $user = User::whereHas("officialWechat")->where("mobile", $order->mobile)->first(); if (empty($user)) { // Log::info("活动订单:{$order->id} 姓名:{$order->name} 手机号:{$order->mobile} 没有找到H5用户"); } else { Log::info("活动订单:{$order->id} 姓名:{$order->name} 手机号:{$order->mobile} 用户id:{$order->user_id} 转 {$user->id}"); ActivityOrder::where('id', $order->id)->update(["user_id" => $user->id]); } } } /** * 导入批发商订单 */ public function testAgentOrder() { $orders = DB::connection("no_prefix_mysql")->table('oa_agent_goods_order as go') ->leftJoin('oa_agent_user as au', 'au.id', '=', 'go.user_id') ->where('go.pay_status', 'PAID') ->get(); foreach ($orders as $order) { DB::beginTransaction(); //用户 $user_id = Wechat::where('openid', $order->openid)->value('user_id'); if (!$user_id) { $user_id = User::where("mobile", $order->mobile)->value('id'); } if (empty($user_id)) { $user = User::create(['name' => $order->name, 'mobile' => $order->mobile]); Wechat::create(['user_id' => $user->id, 'type' => 'official', 'openid' => $order->openid]); $user_id = $user->id; } $shop = Shop::find(1); $sku_arr = $shop->shopAgent->sku; $sku = collect($sku_arr)->where('sku_id', 1)->first(); $shop_info = ["id" => $shop->id, 'title' => $shop->title, 'pic' => $shop->icon, 'sku' => $sku]; //订单 $agent_order = AgentOrder::updateOrCreate(['trade_no' => $order->trade_no], [ 'user_id' => $user_id, 'name' => $order->name, 'mobile' => $order->mobile, 'origin_price' => $order->origin_price, 'price' => $order->price, 'is_online' => 1, 'pay_type' => 'wechat', 'pay_status' => 'PAID', 'shop_id' => 1, 'sku_id' => 1, 'shop_info' => $shop_info, 'num' => $order->num, 'created_at' => date("Y-m-d H:i:s", $order->created_at), 'updated_at' => date("Y-m-d H:i:s", $order->updated_at) ]); //酒码 $codes = DB::connection("no_prefix_mysql")->table('oa_agent_code')->where('trade_no', $order->trade_no)->get(); foreach ($codes as $code) { LottoCode::updateOrCreate(['code' => $code->code], ['user_id' => $user_id, 'order_id' => $agent_order->id]); } //批发商 AgentUser::changeLevel($user_id, AgentUser::AgentLevelBeing, "同步oa渣酒订单"); DB::commit(); } return $this->success('ok'); } public function importActivityOrders() { $file = storage_path("orders.xlsx"); Excel::import(new ActivityOrdersImport(), $file); return $this->success('ok'); } public function syncLottoCode() { AgentOrder::paid()->where('shop_id', 3)->chunk(100, function ($orders) { foreach ($orders as $order) { //抽奖码 $order->lottoCode()->update(['user_id' => $order->user_id]); $num = $order->num; //已存在的抽奖码 $count = $order->lottoCode()->count(); if ($num - $count <= 0) continue; for ($index = 0; $index < ($num - $count); $index++) { $code = time() . CommonService::random(6, 1) . strtoupper(CommonService::random(1)); //生成抽奖码 $order->lottoCode()->create(['user_id' => $order->user_id, 'code' => $code]); } } }); } public function syncActivityAgentUser() { $orders = ActivityOrder::whereDoesntHave("agentUser", function ($sql) { $sql->where("level", '>', 0); })->where('is_pay', 1)->whereIn('activity_id', [17, 18])->get(); foreach ($orders as $order) { AgentUser::changeLevel($order->user_id, 2, "同步购买活动门票"); } } public function syncShopAgentUser() { $orders = AgentOrder::whereDoesntHave("agentUser", function ($sql) { $sql->where("level", 1); })->where('pay_status', "PAID")->where('shop_id', 3)->get(); foreach ($orders as $order) { AgentUser::changeLevel($order->user_id, 2, "同步购买渣酒"); } } public function syncAgentStaff() { $collaborators = Collaborator::where('type', Collaborator::TYPE_FULL_TIME)->where('status', 1)->get(); foreach ($collaborators as $collaborator) { $agent_user = AgentUser::where("user_id", $collaborator->user_id)->first(); if (empty($agent_user) || $agent_user->level == 0) { AgentUser::changeLevel($collaborator->user_id, AgentUser::AgentStaff, "同步全职合作商为员工"); } } } public function syncAgentUser() { $logs = AgentUserLog::where("before_level", ">", 0)->where("desc", "同步全职合作商为员工")->get(); foreach ($logs as $log) { AgentUser::where('user_id', $log->user_id)->update(['level' => $log->before_level]); } } public function syncFoodShop() { $foods = Food::whereHas("shop")->get(); foreach ($foods as $food) { $sku = [ ["sku_id" => 1, "name" => $food->name, 'stock' => $food->stock, 'price' => $food->price, 'agent_price' => $food->price, 'ready_agent_price' => $food->price, 'staff_price' => $food->price, "ship_num" => 0, "ship_price" => 0, "ship_each_price" => 0, "ship_max_price" => 0], ]; Shop::where('id', $food->shop_id)->update(['sku' => $sku]); } } public function syncLotteryQrcode() { $lotteries = Lottery::whereNull("new_qrcode")->get(); foreach ($lotteries as $lottery) { $new_path = config('app.url') . '/award/#/newLuckyDraw?id=' . $lottery->id; $new_qrcode = CommonService::makeQrcode($new_path); $lottery->update(['new_path' => $new_path, 'new_qrcode' => $new_qrcode]); } } /** * 渣酒抽奖码到指定抽奖池 */ public function syncWineLottoMember() { $shop_id = ((config('app.env') == "production") ? AgentShop::WINEID : AgentShop::ALPHA_WINEID); AgentOrder::with("lottoCodes")->whereIn("pay_status", [AgentOrder::PAIDSTATUS, AgentOrder::SENDSTATUS, AgentOrder::SIGNEDSTATUS])->where("shop_id", $shop_id)->chunk(100, function ($agent_orders) { foreach ($agent_orders as $agent_order) { $lottery_id = (config('app.env') == "production") ? AgentShop::LOTTERYID : AgentShop::ALPHA_LOTTERYID; $lottoCodes = $agent_order->lottoCodes; foreach ($lottoCodes as $lottoCode) { LotteryMember::updateOrCreate(['user_id' => $agent_order->user_id, 'code' => $lottoCode->code], ['lottery_id' => $lottery_id, 'name' => $agent_order->name, 'mobile' => $agent_order->mobile]); } } }); } /** * 手环抽奖码到指定抽奖池 */ public function syncBandLottoMember() { $shop_id = ((config('app.env') == "production") ? AgentShop::BANDID : AgentShop::ALPHA_BANDID); AgentOrder::with("lottoCodes")->whereIn("pay_status", [AgentOrder::PAIDSTATUS, AgentOrder::SENDSTATUS, AgentOrder::SIGNEDSTATUS])->where("shop_id", $shop_id)->chunk(100, function ($agent_orders) { foreach ($agent_orders as $agent_order) { $lottery_id = (config('app.env') == "production") ? AgentShop::BAND_LOTTERY_ID : AgentShop::ALPHA_BAND_LOTTERY_ID; $lottoCodes = $agent_order->lottoCodes; foreach ($lottoCodes as $lottoCode) { LotteryMember::updateOrCreate(['user_id' => $agent_order->user_id, 'code' => $lottoCode->code], ['lottery_id' => $lottery_id, 'name' => $agent_order->name, 'mobile' => $agent_order->mobile]); } } }); } public function syncActivityLottoMember() { $activity_id = ((config('app.env') == "production") ? Activity::ACTIVITY_ID : Activity::ALPHA_ACTIVITY_ID); $activity = Activity::find($activity_id); ActivityOrder::paid()->residue()->chunk(100, function ($orders) use ($activity) { foreach ($orders as $order) { $activity->lottery->members()->updateOrCreate(['user_id' => $order->user_id, 'lottery_id' => $activity->lottery->id], ['name' => $order->user->name, 'mobile' => $order->user->mobile]); } }); } /** * 同步含余额用户进入到小会抽奖池 */ public function syncRegularActivityLottoMember() { $activity_id = ((config('app.env') == "production") ? RegularActivity::ACTIVITY_ID : RegularActivity::ALPHA_ACTIVITY_ID); $activity = RegularActivity::find($activity_id); ActivityOrder::paid()->residue()->chunk(100, function ($orders) use ($activity) { foreach ($orders as $order) { $activity->lottery->members()->updateOrCreate(['user_id' => $order->user_id, 'lottery_id' => $activity->lottery->id], ['name' => $order->user->name, 'mobile' => $order->user->mobile]); } }); } public function exportActivityResidueMembers() { $user_ids = ActivityOrder::paid()->residue()->distinct()->pluck("user_id"); $data = []; foreach ($user_ids as $user_id) { $user = User::find($user_id); $level = AgentUser::where("user_id", $user_id)->value("level"); $level_name = AgentUser::agentName($level); $amount = ActivityOrder::owner($user_id)->paid()->residue()->sum("residue_amount"); $data[] = ['name' => $user->name, 'mobile' => $user->mobile, 'level' => $level_name, 'amount' => $amount]; } return Excel::download(new TestResidueUsersExport($data), 'members.xlsx'); } public function testBandOrder() { $orders = AgentOrder::where('shop_id', 89)->where("pay_status", "UNPAID")->get(); foreach ($orders as $order) { $client = new Client(); $url = config('app.url') . "/api/h5/agent/order/{$order->trade_no}/callback"; $response = $client->get($url); } } public function testWineOrder() { $orders = AgentOrder::where('shop_id', 3)->where("pay_status", "UNPAID")->get(); foreach ($orders as $order) { $client = new Client(); $url = config('app.url') . "/api/h5/agent/order/{$order->trade_no}/callback"; $response = $client->get($url); } } public function sycnAgentOrderName() { $orders = AgentOrder::where('shop_id', 89)->where("pay_status", "PAID")->where('name', "【预定】友福同享智能健康手环(自提)")->get(); foreach ($orders as $order) { Log::info("订单id {$order->id}"); $user = $order->user; $order->update(['name' => $user->name, 'mobile' => $user->mobile]); LotteryMember::where('id', 30)->where("user_id", $order->user_id)->update(['name' => $user->name, 'mobile' => $user->mobile]); } } public function syncLotteryMemberName() { $members = LotteryMember::where('lottery_id', 30)->whereNull('name')->get(); foreach ($members as $member) { $member->update(['name' => $member->user_id, 'mobile' => $member->user_id]); } } public function syncAgentLevelReadyToBeing() { $agent_users = AgentUser::where("level", 2)->get(); foreach ($agent_users as $agent_user) { AgentUser::changeLevel($agent_user->user_id, AgentUser::AgentLevelBeing, "取消准批发商,转为批发商"); } } public function refreshApiJwtToken() { $user = User::find(6); $token = UserService::refreshApiJwtToken($user); dd($token); } /** * 第二次大会签到用户列表 */ public function exportActivityMembers() { $members = ActivityMember::with("agentUser")->where("activity_id", 18)->withCount([ 'orders as amount' => function ($sql) { $sql->paid()->select(DB::raw("sum(residue_amount) as amount")); } ])->get(); return Excel::download(new TestActivityMembersExport($members), "users.xlsx"); } /** * 第二次大会非vip用户签到扣除余额 */ // public function decrementAmountActivityMembers() // { // DB::beginTransaction(); // $members = ActivityMember::where('activity_id', 18)->where('status', 1)->whereHas('agentUser', function ($sql) { // $sql->where('level', "<>", AgentUser::AgentVIP); // })->withCount(['orders as amount'=>function($sql) { // $sql->paid()->select(DB::raw("sum(residue_amount) as amount")); // }])->get(); // foreach ($members as $member) { // Log::info("用户id {$member->user_id} 余额:{$member->amount}"); // if($member->amount > Activity::SIGN_FEE) { // $orders = ActivityOrder::owner($member->user_id)->paid()->residue()->get(); // //剩余需要退金额 // $remain = Activity::SIGN_FEE; // foreach ($orders as $order) { // if ($remain == 0) break; // if ($order->residue_amount >= $remain) { // $order_amount = $remain; // }else { // $order_amount = $order->residue_amount; // } // ActivityIntroduceLog::create(['order_id'=>$order->id, 'amount'=>$order_amount, 'introduce_order_id'=>$order->id, 'type'=>ActivityIntroduceLog::SIGNINTYPE]); // $log = ActivityOrderLog::addActivityOrderLog($order->user_id,$order->id,-$order_amount, "友福同享批发商大会【第二期】", null, null, ActivityOrderLog::SIGNIN_TYPE); // $order->decrement('residue_amount', $order_amount); // $remain -= $order_amount; // } // } // } // DB::commit(); // } public function syncMpUserLevel() { AgentUser::chunk(100, function ($agent_users) { foreach ($agent_users as $agent_user) { AgentUser::changeLevel($agent_user->user_id, $agent_user->level, "小程序用户同步批发商身份", true); } }); } public function testBandDateTime() { $suffix = SplitModel::getMonthSuffix(); $band_ids = BandSleep::suffix($suffix)->groupBy("band_id")->pluck('band_id'); foreach ($band_ids as $band_id) { $sleep = BandSleep::suffix($suffix)->where("band_id", $band_id)->orderByDesc('date')->first(); $date_time = BandDataTime::owner($sleep->user_id)->band($sleep->band_id)->first(); if ($date_time) { BandDataTime::owner($sleep->user_id)->band($sleep->band_id)->update(["sleep_time" => strtotime($sleep->date)]); } else { BandDataTime::create(['user_id' => $sleep->user_id, 'band_id' => $sleep->band_id, "sleep_time" => strtotime($sleep->date)]); } } } public function testDeleteSleepData() { set_time_limit(0); DB::table("band_sleeps_202405")->orderBy("id")->chunk(100, function ($sleeps) { foreach ($sleeps as $sleep) { $obj = DB::table("band_sleeps_202405_1") ->where('user_id', $sleep->user_id) ->where('band_id', $sleep->band_id) ->where("date", $sleep->date)->first(); if (empty($obj)) { DB::table("band_sleeps_202405_1")->insert((array) $sleep); } } }); } public function testActivityOrder() { $orders = ActivityOrder::withCount("signActivities")->withCount("signRegularActivities") ->withCount("bandOrders")->withCount("wineOrders") ->withCount("winLotteries") ->with("signActivities")->with("agentUser") ->withCount([ 'orderLogs as sign_amount' => function ($sql) { $sql->where("type", ActivityOrderLog::SIGNIN_TYPE)->select(DB::raw("sum(amount) as sign_amount")); } ]) ->withCount([ 'orderLogs as refund_amount' => function ($sql) { $sql->whereIn("type", [ActivityOrderLog::REFUND_TYPE, ActivityOrderLog::NOREFUND_TYPE])->select(DB::raw("sum(amount) as refund_amount")); } ]) ->with("signRegularActivities")->with("recommendUser")->where(['amount' => 2200])->where("is_pay", ">", 0)->get(); return Excel::download(new TestOrderUsersExport($orders), 'orders.xlsx'); } public function testActivityOrder2() { ActivityOrder::where("is_pay", 1)->where('amount', 2200)->withCount([ 'refunds as refund_amount' => function ($sql) { $sql->where("status", 1)->select(DB::raw("sum(amount) as refund_amount")); } ])->chunk(100, function ($orders) { foreach ($orders as $order) { if ($order->refund_amount == 2200) { DB::beginTransaction(); $log = ActivityOrderLog::where("order_id", $order->id)->where("type", "REFUND")->first(); if (empty($log)) { ActivityOrderLog::create([ "user_id" => $order->user_id, "order_id" => $order->id, "amount" => -2200, "remark" => "直接退款", "type" => "REFUND", ]); } ActivityOrder::where('id', $order->id)->update(["is_pay" => 2]); DB::commit(); } } }); } public function testActivityOrder3() { $orders = ActivityOrder::withCount("signActivities")->with("signActivities")->with("agentUser")->where(["is_pay" => 1, 'amount' => 2200])->get(); foreach ($orders as $order) { if ($order->agentUser && $order->agentUser->level == AgentUser::AgentVIP) { continue; } //非 vip 根据签到次数扣费 $log_count = $order->orderLogs()->where("type", ActivityOrderLog::SIGNIN_TYPE)->count(); $num = $order->sign_activities_count - $log_count; if ($num > 0) { DB::beginTransaction(); for ($i = 0; $i < $num; $i++) { ActivityOrderLog::create([ "user_id" => $order->user_id, "order_id" => $order->id, "amount" => -200, "remark" => "活动签到", "type" => ActivityOrderLog::SIGNIN_TYPE, ]); ActivityOrder::where("id", $order->id)->decrement("residue_amount", 200); } DB::commit(); } } } public function checkUserLottoCode() { $result = S2ShopOrder::whereIn("sku_id", [3, 86])->whereIn('status', [2, 6])->groupBy("user_id")->selectRaw("user_id, sum(num) as count")->get(); $arr = []; foreach ($result as $res) { // 抽奖码数量 $code_count = LottoCode::where('user_id', $res->user_id)->count(); // 原有商品数 $shop_count = $res->count; $order_ids = S2ShopOrder::whereIn("sku_id", [3, 86])->whereIn('status', [2, 6])->where('user_id', $res->user_id)->pluck('id')->toArray(); // 几个订单退款 $refund_order_count = S2ShopExpress::whereIn('order_id', $order_ids)->where('ship', 3)->where("status", 6)->groupBy("order_id")->count(); // 用户信息 $user = User::find($res->user_id); $arr[] = ["user" => $user, 'code_count' => $code_count, 'shop_count' => $shop_count, 'refund_order_count' => $refund_order_count]; } return Excel::download(new TestLottoCodeList($arr), 'code.xlsx'); } // 八月抽奖名单 public function AugMemberExport() { return Excel::download(new TestAugMemberExport(), "member.xlsx"); } // 八月抽奖池 public function addAugWinLotteryMember() {// VIP 和 批发商有酒订单 $lottery_id = 52; //VIP有酒订单 $orders = S2ShopOrder::where("sku_id", 3)->whereIn("status", [2, 6])->with("user")->whereHas("agentUser", function ($sql) { $sql->where("level", AgentUser::AgentVIP)->orWhere("level", AgentUser::AgentLevelBeing); })->whereHas("lottoCode")->get(); foreach ($orders as $order) { $codes = $order->lottoCodes; foreach ($codes as $code) { LotteryMember::firstOrCreate([ "user_id" => $order->user_id, "lottery_id" => $lottery_id, "name" => $order->user->name, "mobile" => $order->user->mobile, "code" => $code->code, "index" => 1 ]); } } } // 八月抽奖池 public function addAugBandLotteryMember() {// VIP 和 批发商有手环订单 $lottery_id = 53; //VIP有酒订单 $orders = S2ShopOrder::where("sku_id", 86)->whereIn("status", [2, 6])->with("user")->whereHas("agentUser", function ($sql) { $sql->where("level", AgentUser::AgentVIP)->orWhere("level", AgentUser::AgentLevelBeing); })->whereHas("lottoCode")->get(); foreach ($orders as $order) { $codes = $order->lottoCodes; foreach ($codes as $code) { LotteryMember::firstOrCreate([ "user_id" => $order->user_id, "lottery_id" => $lottery_id, "name" => $order->user->name, "mobile" => $order->user->mobile, "code" => $code->code, "index" => 2 ]); } } } public function syncDmaServiceUserRole() { $serviceUsers = ServiceUser::with("user")->whereHas("user")->get(); foreach ($serviceUsers as $serviceUser) { Log::info($serviceUser->user_id); $role_ids = ServiceRoleUser::where("user_id", $serviceUser->user_id)->where("s_user_id", $serviceUser->id)->pluck("role_id")->toArray(); if (count($role_ids) > 0) { foreach ($role_ids as $role_id) { $userRole = DmaServiceUserRole::where("user_id", $serviceUser->user_id)->where("role", $role_id)->first(); if (empty($userRole)) { Log::info($serviceUser->user_id . "----" . $serviceUser->user->mobile); DmaServiceUserRole::create([ "user_id" => $serviceUser->user_id, "name" => $serviceUser->user->name, "mobile" => $serviceUser->user->mobile, "avatar" => $serviceUser->user->avatar, "role" => $role_id, "status" => 1, "audit_at" => date("Y-m-d H:i:s") ]); } } } } return $this->success("ok"); } public function syncGroupMessageImid() { GroupMessage::whereNull("im_msg_id")->orWhereNull("msg_timestamp")->chunk(100, function ($messages) { foreach ($messages as $message) { $im_msg_id = $message->im_msg_id; if (empty($message->im_msg_id)) { $im_msg_id = uniqid("uftux_"); } $msg_timestamp = $message->msg_timestamp; if (empty($message->msg_timestamp)) { $msg_timestamp = strtotime($message->created_at) * 1000; } GroupMessage::where("id", $message->id)->update(["im_msg_id" => $im_msg_id, "msg_timestamp" => $msg_timestamp]); } }); } public function syncGroupLastMsg() { Group::where("last_msg_id", 0)->chunk(100, function ($groups) { foreach ($groups as $group) { $last_msg_id = GroupMessage::where('group_id', $group->id)->orderBy("msg_timestamp", "desc")->value("id"); if ($last_msg_id) { Group::where("id", $group->id)->update(['last_msg_id' => $last_msg_id]); } } }); } // public function updateAddress() { // $redis = Redis::client(); // $address = $redis->get('china_address'); // $addresses = json_decode($address); // foreach ($addresses as $address) { // // China::where("id", $address->id)->update(["pid"=>0]); // China::create([ // "id"=>$address->id, // "name"=>$address->name, // "pid"=>$address->pid, // ]); // foreach($address->city as $city) { // // China::where("id", $city->id)->update(["pid"=>$city->pid]); // China::create([ // "id"=>$city->id, // "name"=>$city->name, // "pid"=>$city->pid, // ]); // foreach($city->county as $country) { // // China::where("id", $country->id)->update(["pid"=>$country->pid]); // China::create([ // "id"=>$country->id, // "name"=>$country->name, // "pid"=>$country->pid, // ]); // } // } // } // } public function importShopOrder() { $file = storage_path("shop_order.xlsx"); Excel::import(new ShopOrderImport(), $file); return $this->success("ok"); } public function importCustomerVisit() { $file = storage_path("visit.xlsx"); Excel::import(new CustomerVisitImport(), $file); return $this->success("ok"); } public function statOrder() { $exclusiveUserIds = [6, 7, 71, 755, 10676, 8815, 4099, 9013, 12012, 3504, 3740]; $start_time = request()->input("start_time"); if (empty($start_time)) { $start_time = "2025-01-01"; } $end_time = request()->input("end_time"); if (empty($end_time)) { $end_time = date("Y-m-d H:i:s"); } $total_count = Order::whereNotIn("user_id", $exclusiveUserIds)->where("pay_status", "PAID")->where("price", "<>", 0.01)->where("price", "<>", 5800)->where("created_at", ">=", $start_time)->where("created_at", '<=', $end_time)->count(); $finished_count = Order::whereNotIn("user_id", $exclusiveUserIds)->where("pay_status", "PAID")->where("service_status", "FINISHED")->where("price", "<>", 0.01)->where("price", "<>", 5800)->where("created_at", ">=", $start_time)->where("created_at", '<=', $end_time)->count(); $offline_count = Order::whereNotIn("user_id", $exclusiveUserIds)->whereHas("offline_order")->where("pay_status", "PAID")->where("price", "<>", 0.01)->where("price", "<>", 5800)->where("created_at", ">=", $start_time)->where("created_at", '<=', $end_time)->count(); $online_count = $total_count - $offline_count; $after_report_count = MedicalReport::whereNotIn("user_id", $exclusiveUserIds)->where("type", 1)->where("created_at", ">=", $start_time)->where("created_at", '<=', $end_time)->count(); return $this->success("ok", compact("total_count", "finished_count", "offline_count", "online_count", "after_report_count")); } public function addGroupUserRole($tid, $user_id) { if (empty($user_id)) { $user_id = request()->input("user_id"); } if (empty($tid)) { $tid = request()->input("tid"); } $group = Group::where("im_chat_id", $tid)->first(); $order_role_ids = ServiceRoleOrder::where("order_id", $group->order_id)->where("user_id", $user_id)->pluck("role_id")->toArray(); $service_user = ServiceUser::where("user_id", $user_id)->first(); $groupUser = GroupUser::where("group_id", $group->id)->where("user_id", $user_id)->first(); $map = []; $map['role'] = $order_role_ids; $map["comment"] = $groupUser->comment ?: ""; $options = ['custom' => json_encode($map, JSON_UNESCAPED_UNICODE), 'nick' => $service_user->name]; $owner_accid = make_wangyiyun_accid($group->owner_id); $user_accid = make_wangyiyun_accid($service_user->user_id); $imTeam = new Team(config('chat.im.app_id'), config('chat.im.app_secret')); $imTeam->updateTeamNick($group->im_chat_id, $owner_accid, $user_accid, $options); return $this->success('ok'); } public function checkGroupRole() { $groups = Group::with("groupRoleUsers")->whereNotNull("order_id")->whereNotNull("im_chat_id")->orderByDesc("id")->get(); foreach ($groups as $group) { Log::info($group->im_chat_id); $imTeam = new Team(config('chat.im.app_id'), config('chat.im.app_secret')); $res = $imTeam->queryDetail($group->im_chat_id); $members = $res["tinfo"]["members"]; foreach ($group->groupRoleUsers as $groupUser) { Log::info($groupUser->user_id); $member = collect($members)->where("accid", make_wangyiyun_accid($groupUser->user_id))->first(); if ($member && isset($member["custom"]) && strpos($member["custom"], "role")) continue; $this->addGroupUserRole($group->im_chat_id, $groupUser->user_id); } } return $this->success("ok"); } public function getGroupInfo() { $imTeam = new Team(config('chat.im.app_id'), config('chat.im.app_secret')); $res = $imTeam->queryDetail(request()->tid); return $this->success("ok", $res); } public function getYunxinUserInfo() { $imUser = new ImUser(config('chat.im.app_id'), config('chat.im.app_secret')); $res = $imUser->getUserInfos([make_wangyiyun_accid(request()->user_id)]); return $this->success("ok", $res); } public function deleteRepeatStep() { $logs = DB::table("daily_step")->whereNull("deleted_at")->groupBy(["user_id", "date"])->having("count", ">", 1)->selectRaw("user_id, date, count(*) as count")->get(); foreach ($logs as $log) { $step = DailyStep::where("user_id", $log->user_id)->where("date", $log->date)->orderBy("id", "asc")->first(); $step->delete(); } } public function syncMobileName() { $index = 0; User::whereNotNull("name")->where("name", "<>", "")->whereNotNull("mobile")->where("mobile", "<>", "")->whereIn("source", [2, 3, 5]) ->chunk(100, function ($users) use (&$index) { foreach ($users as $user) { $index++; $mobileArr = [$user->mobile]; if (aesEncryptCBC($user->mobile)) { $mobileArr[] = aesEncryptCBC($user->mobile); } if (aesDecryptCBC($user->mobile)) { $mobileArr[] = aesDecryptCBC($user->mobile); } $customer = User::whereIn("mobile", $mobileArr)->whereIn("source", [1, 4])->first(); if (empty($customer)) continue; if ($customer->name == $user->name) continue; Log::info($user->id); Log::info($customer->id); // 修改im昵称 $imService = new ImService(); $customer->name = $user->name; $imService->updateImUser($customer->id, $customer); // 修改昵称 User::where("id", $customer->id)->update(["name" => $user->name]); } }); Log::info($index); } public function updateFatLogData() { $id = request()->id; $log = NewFatLog::where("id", $id)->first(); if (empty($log)) return; $data = json_decode($log->data, true); $fatService = new FatService(); $oldData = json_decode($log->old_data, true); $user = $log->user; $BRM_level = []; foreach ($oldData as $item) { //计算基础代谢标准 if ($item['e_name'] == "BMR") { $standard = $fatService->calculateBmrStandard($oldData, $user); if ($item["score"] >= $standard) { $desc_key = "BMR.1002"; } else { $desc_key = "BMR.1003"; } $level = HealthLevel::where('desc_key', $desc_key)->select('name', 'e_name', 'color', 'desc', 'desc_key')->first(); $level["desc"] = str_replace("xxx", $standard, $level['desc']); $BRM_level = $level->toArray(); } } if (empty($BRM_level)) return; foreach ($data as &$item) { if ($item['e_name'] != "BMR") continue; $item["level"] = $BRM_level; $item["fat_state"] = $BRM_level["name"]; } dd($data); } // 同步主教练、副教练、客服到专属教练 public function syncRole15() { $role_id = 15; $user_ids = DmaServiceUserRole::whereIn("role", [1, 2, 3])->groupBy("user_id")->pluck("user_id"); foreach ($user_ids as $user_id) { $user = User::find($user_id); if (empty($user)) continue; $serviceUser = ServiceUser::where("user_id", $user_id)->first(); if (empty($serviceUser)) continue; $role = DmaServiceUserRole::where("user_id", $user_id)->where("role", 15)->first(); if (empty($role)) { DmaServiceUserRole::create([ "user_id" => $user_id, "name" => $user->name, "mobile" => aesDecryptCBC($user->mobile) ? aesDecryptCBC($user->mobile) : $user->mobile, "avatar" => $user->avatar, "role" => $role_id, "status" => 1, "audit_at" => date("Y-m-d H:i:s") ]); } $roleUser = ServiceRoleUser::where("role_id", $role_id)->where("user_id", $user_id)->first(); if (empty($roleUser)) { ServiceRoleUser::create([ "role_id" => $role_id, "user_id" => $user_id, "s_user_id" => $serviceUser->id, ]); } } } }