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

399 lines
16 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Exports\DragonUserExport;
use App\Exports\TalkExport;
use App\Http\Controllers\Controller;
use App\Http\Response\ResponseJson;
use App\Jobs\SendEasySms;
use App\Models\DmaProcess;
use App\Models\DmaProcessLog;
use App\Models\DmaServiceUserRole;
use App\Models\DragonConfig;
use App\Models\DragonUser;
use App\Models\Group;
use App\Models\Order;
use App\Models\Talk;
use App\Models\TalkComment;
use App\Models\TalkStar;
use App\Services\OfflineOrderService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Log;
use Maatwebsite\Excel\Facades\Excel;
class OtherController extends Controller
{
use ResponseJson;
public function createTalk(Request $request)
{
try {
$title = $request->input('title');
if (empty($title))
return $this->failure('标题不为空');
$images = $request->input('images');
$images = json_encode($images);
$model = Talk::create(['title' => $title, 'images' => $images]);
$content = "欢迎参加头脑风暴[{$title}](" . config('app.url') . "/work/#/h5/discussDetail?id={$model->id})点击名称可以进入讨论详情";
$send_data = [
'msgtype' => 'markdown',
'markdown' => [
'content' => $content,
]
];
//正式群
$url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=905fe4d1-a681-4133-b847-0be2d290477c";
//测试群
if (!(config('app.env') == 'production')) {
$url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=fe963d6e-2a67-487a-b0ac-3dbdc62f6f8c";
}
// $url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=fe963d6e-2a67-487a-b0ac-3dbdc62f6f8c";
//本地群
// $url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ec3c5836-42cf-4a7d-98c4-4e5c544d0612";
$response = Http::post($url, $send_data);
$status = $response->status(); // 获取响应状态码
if ($status != 200) {
return $this->failure('发送失败');
}
return $this->success('ok');
} catch (\Exception $e) {
return $this->failure('createTalk file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function getTalkList(Request $request)
{
try {
$keyword = $request->input('keyword');
$is_export = $request->input('is_export');
$type = $request->input('type');
$status = $request->input('status');
$query = Talk::query();
$query->when($keyword, function ($query) use ($keyword) {
$query->where('title', 'like', "%{$keyword}%");
});
$query->when(strlen($type) > 0, function ($query) use ($type) {
$query->where('type', $type);
});
$query->when(strlen($status), function ($query) use ($status) {
$query->where('status', $status);
});
$query->orderByDesc('id');
if ($is_export) {
$list = $query->get();
if ($list->isEmpty()) {
return $this->failure('暂无数据');
}
return Excel::download(new TalkExport($list), 'talk.xlsx');
} else {
$list = $query->paginate();
}
foreach ($list as $item) {
$item->star = TalkStar::where('talk_id', $item->id)
->count();
$item->comment = TalkComment::where('talk_id', $item->id)
->count();
}
return $this->success('ok', $list);
} catch (\Exception $e) {
return $this->failure('getTalkList file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function getTalkDetail($id)
{
try {
$detail = Talk::find($id);
$detail->star = TalkStar::where('talk_id', $detail->id)
->count();
$detail->comment = TalkComment::where('talk_id', $detail->id)
->count();
return $this->success('ok', $detail);
} catch (\Exception $e) {
return $this->failure('getTalkDetail file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function getTalkComment(Request $request, $id)
{
try {
$keyword = $request->input('keyword');
$comment = TalkComment::with(['user', 'serviceUser'])->where('talk_id', $id)
->where('content', 'like', '%' . $keyword . '%')
->where('type', TalkComment::TYPE_COMMENT)
->whereNull('comment_id')->orderByDesc('id')->paginate();
foreach ($comment as $item) {
$item->reply = TalkComment::with('user')->where('talk_id', $id)
->where('type', TalkComment::TYPE_REPLY)
->where('comment_id', $item->id)
->orderByDesc('id')
->get();
$item->star = TalkStar::where('comment_id', $item->id)->count();
if (isset($item->serviceUser)) {
$item->user->name = $item->serviceUser->name;
$item->user->mobile = $item->serviceUser->mobile;
}
}
return $this->success('ok', $comment);
} catch (\Exception $e) {
return $this->failure('getTalkComment file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function updateTalk(Request $request, $id)
{
try {
$detail = Talk::findorFail($id);
if ($request->has('status')) {
$detail->status = $request->input('status');
}
if ($request->has('title')) {
$detail->title = $request->input('title');
}
if ($request->has('images')) {
$detail->images = $request->input('images');
}
$detail->save();
return $this->success('ok');
} catch (\Exception $e) {
return $this->failure('updateTalk file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function deleteTalk($id)
{
try {
Talk::where('id', $id)->delete();
return $this->success('ok');
} catch (\Exception $e) {
return $this->failure('deleteTalk file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function getStarList(Request $request, $id)
{
try {
$comment_id = $request->input('comment_id');
$query = TalkStar::query()->with(['user']);
$query->where('talk_id', $id);
$query->when($comment_id, function ($query) use ($comment_id) {
$query->where('comment_id', $comment_id);
});
$list = $query->orderByDesc('id')->paginate();
foreach ($list as $item) {
$item->content = '';
if (empty($item->comment_id)) {
continue;
}
$item->content = TalkComment::where('id', $item->comment_id)->value('content');
}
return $this->success('ok', $list);
} catch (\Exception $e) {
return $this->failure('getStarList file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function createDragonConfig(Request $request)
{
try {
$title = $request->input('title');
$status = $request->input('status', DragonConfig::STATUS_OPEN);
$config = $request->input('config');
$open_rank = $request->input('open_rank', DragonConfig::OPEN_RANK_OFF);
if (empty($title))
return $this->failure('标题不为空');
$model = DragonConfig::create(['title' => $title, 'status' => $status, 'config' => $config, 'open_rank' => $open_rank]);
$domain = config('app.url');
$content = "欢迎参加接龙[{$title}]({$domain}/api/oa/work/auth?target_path=inviteMerchant&id={$model->id})点击名称可以进入";
$send_data = [
'msgtype' => 'markdown',
'markdown' => [
'content' => $content,
]
];
//本地群
$url = config("wechat.work.robot.local_url");
//测试群
if ((config('app.env') == 'production')) {
$url = config("wechat.work.robot.online_url");
}
if (strpos($title, "测试") !== false) {
$url = config("wechat.work.robot.test_url");
}
$response = Http::post($url, $send_data);
$res = $response->status(); // 获取响应状态码
if ($res != 200) {
return $this->failure('发送失败');
}
return $this->success('ok');
} catch (\Exception $e) {
return $this->failure('createDragonConfig file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function getDragonConfigList(Request $request)
{
try {
$keyword = $request->get('keyword');
$is_export = $request->get('is_export');
$query = DragonConfig::query();
$query->when($keyword, function ($sql) use ($keyword) {
$sql->where('title', 'like', '%' . $keyword . '%');
});
$query->orderByDesc('id');
if ($is_export) {
$list = $query->get();
}
$list = $query->paginate();
return $this->success('ok', $list);
} catch (\Exception $e) {
return $this->failure('getDragonList file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function updateDragonConfig(Request $request, $id)
{
try {
$detail = DragonConfig::find($id);
$data = $request->only(['title', 'status', 'open_rank', 'config']);
if (empty($data['title']))
return $this->failure('标题不为空');
$detail->update($data);
return $this->success('ok', $detail);
} catch (\Exception $e) {
return $this->failure('updateDragonConfig file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function deleteDragonConfig($id)
{
try {
DragonConfig::where('id', $id)->delete();
return $this->success('ok');
} catch (\Exception $e) {
return $this->failure('deleteDragonConfig file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function getDragonUser(Request $request, $id)
{
try {
$keyword = $request->get('keyword');
$is_export = $request->get('is_export');
$query = DragonUser::query();
$query->where('dragon_id', $id);
$query->when($keyword, function ($sql) use ($keyword) {
$sql->where('name', 'like', '%' . $keyword . '%')->orWhere('invite_name', 'like', '%' . $keyword . '%');
});
$query->orderByDesc('id');
if ($is_export) {
$list = $query->get();
return Excel::download(new DragonUserExport($list), 'dragon_user.xlsx');
}
$list = $query->paginate();
return $this->success('ok', $list);
} catch (\Exception $e) {
return $this->failure('getDragonUser file:' . $e->getFile() . '|line:' . $e->getLine() . '|message:' . $e->getMessage());
}
}
public function checkDmaQuestion(Request $request, $id)
{
$status = $request->input("status");
$remark = $request->input("remark");
$question = DB::table("dma_question")->where("id", $id)->first();
$user = DB::table("users")->where("id", $question->user_id)->first();
//查看用户订单是否存在,存在则绑定群id
$order = Order::getPayOrder($user->id);
$order_id = $order->id ?? null;
if ($status == 1) {
//创建虚拟订单
$data = [];
$data['name'] = $user->name;
$data['price'] = Order::ORDER_PRICE;
$data['mobile'] = $user->mobile;
$OfflineOrderService = new OfflineOrderService();
if (!$order) {
$offline_order = $OfflineOrderService->createOfflineOrder($data, $user->id);
//创建群聊
$group = new Group();
$group->autoCreateChat($offline_order->order_id);
$order_id = $offline_order->order_id ?? null;
}
}
DB::table("dma_question")->where("id", $id)->update(["status" => $status, "order_id" => $order_id ?? null, "remark" => $remark]);
return $this->success('ok');
}
public function checkBeforeDmaQuestion(Request $request, $id)
{
$status = $request->input("status");
$remark = $request->input("remark");
$question = DB::table("before_dma_question")->where("id", $id)->first();
$user = DB::table("users")->where("id", $question->user_id)->first();
//查看用户订单是否存在,存在则绑定群id
$order = Order::getPayOrder($user->id);
$order_id = $order->id ?? null;
if ($status == 1) {
//创建虚拟订单
$data = [];
$data['name'] = $user->name;
$data['price'] = Order::ORDER_PRICE;
$data['mobile'] = $user->mobile;
$OfflineOrderService = new OfflineOrderService();
if (!$order) {
$offline_order = $OfflineOrderService->createOfflineOrder($data, $user->id);
$order_id = $offline_order->order_id ?? null;
}
DmaProcessLog::addUserProcessLog($question->user_id ?? 0, $order_id, 1, "check_dma_question", "系统已同意[" . $user->name . "]的方案前调查表单", auth()->user()->id ?? 0, 4);
} elseif ($status == 2) {
$order_id = "";
DmaProcessLog::addUserProcessLog($question->user_id ?? 0, $order_id, 1, "check_dma_question", "系统已拒绝[" . $user->name . "]的方案前调查表单", auth()->user()->id ?? 0, 4);
}
DmaProcessLog::addUserProcessLog($question->user_id ?? 0, $order_id, 1, "send_check_dma_question_to_user", "系统已发送[审核结果]给" . $user->name, auth()->user()->id ?? 0, 5);
DmaProcessLog::addUserProcessLog($question->user_id ?? 0, $order_id, 1, "send_check_dma_question_to_admin", "系统已发送[审核结果]给行政", auth()->user()->id ?? 0, 5);
DB::table("before_dma_question")->where("id", $id)->update(["status" => $status, "order_id" => $order_id, "remark" => $remark, "operate_user_id" => auth()->user()->id, "operate_user_name" => auth()->user()->name]);
if ($status == 1) {
Log::info("通知行政");
$data = [
'message' => "用户" . $user->name . "的方案前健康评估表已审核通过,请跟进后续服务【友福同享】",
];
// 短信通知行政
$roles = DmaServiceUserRole::with("user")->where("status", 1)->where("role", 8)->get();
foreach ($roles as $role) {
if ($role->user && $role->user->mobile) {
Log::info("通知行政 " . $role->user->mobile);
SendEasySms::dispatch($role->user->mobile, $data, $role->user->area_code)->onQueue('send.code.sms');
}
}
}
return $this->success('ok');
}
}