ufutx.dma/app/Http/Controllers/TestController.php

919 lines
38 KiB
PHP
Raw Normal View History

2026-03-04 14:42:40 +08:00
<?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,
]);
}
}
}
}