ufutx.dma/app/Http/Controllers/TestController.php
2026-03-04 14:42:40 +08:00

919 lines
38 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers;
use App\Models\China;
use App\Models\DailyStep;
use App\Models\GroupUser;
use App\Models\HealthLevel;
use App\Models\MedicalReport;
use App\Models\NewFatLog;
use App\Models\OfflineOrder;
use App\Models\Order;
use App\Models\ServiceRoleOrder;
use App\Models\UserInfo;
use App\Models\Version;
use App\Services\FatService;
use cccdl\yunxin_sdk\Im\Team;
use Illuminate\Support\Facades\Redis;
use App\Services\ImService;
use App\Exports\TestActivityMembersExport;
use App\Exports\TestLottoCodeList;
use App\Exports\TestOrderUsersExport;
use App\Exports\TestResidueUsersExport;
use App\Facades\CommonService;
use App\Facades\UserService;
use App\Facades\WechatService;
use App\Imports\ActivityOrdersImport;
use App\Models\Activity;
use App\Models\ActivityIntroduceLog;
use App\Models\ActivityMember;
use App\Models\ActivityOrder;
use App\Models\ActivityOrderLog;
use App\Models\AgentOrder;
use App\Models\AgentShop;
use App\Models\AgentUser;
use App\Models\AgentUserLog;
use App\Models\BandDataTime;
use App\Models\BandSleep;
use App\Models\Collaborator;
use App\Models\DmaServiceUserRole;
use App\Models\Food;
use App\Models\Group;
use App\Models\GroupMessage;
use App\Models\Lottery;
use App\Models\LotteryMember;
use App\Models\LottoCode;
use App\Models\Partner;
use App\Models\RegularActivity;
use App\Models\S2ShopExpress;
use App\Models\S2ShopOrder;
use App\Models\ServiceRoleUser;
use App\Models\ServiceUser;
use App\Models\Shop;
use App\Models\SplitModel;
use App\Models\User;
use App\Models\WangYiYun;
use App\Models\Wechat;
use cccdl\yunxin_sdk\Im\User as ImUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Facades\Excel;
use GuzzleHttp\Client;
use App\Exports\TestAugMemberExport;
use App\Imports\ShopOrderImport;
use App\Imports\CustomerVisitImport;
use PhpParser\Node\Stmt\GroupUse;
class TestController extends Controller
{
public function testTransfer(Request $request, $name)
{
$res = $this->$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,
]);
}
}
}
}