2025-07-02 17:36:30 +08:00

337 lines
13 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
/**
* @copyright Copyright (c) 2023-2025 美天智能科技
* @author 李志强
* @link http://www.meteteme.com
*/
declare(strict_types=1);
namespace app\workorder\controller;
use app\base\BaseController;
use app\model\WorkOrder as WorkOrderList;
use app\model\WorkOrderMessage;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class Index extends BaseController
{
public function index()
{
if (request()->isAjax()) {
$param = get_params();
$rows = empty($param['limit']) ? get_md_contentconfig('app.page_size') : $param['limit'];
$list = WorkOrderList::withoutField('')
->where('delete_time', null)
->order(['status' => 'asc', 'id' => 'desc'])
->paginate($rows, false, ['query' => $param])
->each(function ($item, $key) {
$wo = WorkOrderList::where(['id' => $item->id])->find();
$projectName = Db::name('Project')->where('id', $wo['project_id'])->value('name_short');
$item->project_id = $projectName ?: '-';
$item->problemtype = $wo['problemtype'];
$item->uid = $wo['uid'];
$item->username = $wo['username'];
if (!empty($wo['contact'])) {
$item->contact = $wo['contact'];
} else {
$item->contact = Db::name('Admin')->where('id', $wo['creater'])->value('mobile') ?: '-';
}
$item->content = $wo['content'];
$item->remark = $wo['remark'];
$item->status = $wo['status'];
$solveName = Db::name('Admin')->where('id', $wo['solve'])->value('name');
$item->solve = $solveName ?: '-';
$adminName = Db::name('Admin')->where('id', $wo['creater'])->value('name');
$item->creater = $adminName ?: '-';
$item->sub_time = $wo['sub_time'];
$item->create_time = $wo['create_time'];
$item->update_time = $wo['update_time'];
$item->delete_time = $wo['delete_time'];
})
->filter(function ($item) {
return $item->delete_time === null;
});
return table_assign(0, '', $list->toArray());
} else {
return view();
}
}
//添加
public function add()
{
$param = get_params(); // 获取请求参数
$uid = $this->uid; // 当前用户 ID
if (request()->isPost()) {
// 添加逻辑
$param['creater'] = $uid; // 设置上传用户
$param['create_time'] = date('Y-m-d H:i:s'); // 创建时间
//如果没有sub_time就用当前创建时间
if (empty($param['sub_time'])) {
$param['sub_time'] = $param['create_time'];
}
// 插入数据并获取自增 ID
$sid = WorkOrderList::strict(false)->field(true)->insertGetId($param);
if ($sid) {
// 添加日志
add_log('add', $sid, $param);
$log_data = [
'module' => 'workorder',
'download_id' => $sid,
'new_content' => $param['content'],
'field' => 'new',
'action' => 'add',
'admin_id' => $uid,
'create_time' => time(),
];
Db::name('Log')->strict(false)->field(true)->insert($log_data);
return to_assign(0, '添加成功', ['redirect' => 'javascript:history.back()']);
} else {
return to_assign(1, '添加失败');
}
} else {
// 非 POST 请求,返回视图
return view();
}
}
//编辑
public function edit()
{
if (request()->isPost()) {
$param = get_params();
$id = isset($param['id']) ? $param['id'] : 0;
$data = [
'solve' => $param['solve'],
'status' => $param['status'],
'update_time' => date('Y-m-d H:i:s'),
];
$res = WorkOrderList::where('id', $id)->update($data);
if ($res) {
return to_assign(2, '更新成功!');
} else {
return to_assign(1, '更新失败');
}
} else {
$param = get_params();
$id = !empty($param['id']) ? intval($param['id']) : 0;
$workorder = WorkOrderList::where('id', $id)
->field('id, project_id, problemtype, uid, username, contact, email, content, remark, status, solve, creater, sub_time, create_time')
->find();
if ($workorder) {
// 批量获取相关ID
$projectId = $workorder['project_id'];
$createrId = $workorder['creater'];
// $solveId = $workorder['solve'];
// 查询相关名称和联系方式
$projectName = $projectId ? Db::name('Project')->where('id', $projectId)->value('name_short') : '-';
$adminName = $createrId ? Db::name('Admin')->where('id', $createrId)->value('name') : '-';
// $solveName = $solveId ? Db::name('Admin')->where('id', $solveId)->value('name') : '-';
// 联系方式优先用工单自带,否则查创建人
$contact = !empty($workorder['contact']) ? $workorder['contact'] : (
$createrId ? (Db::name('Admin')->where('id', $createrId)->value('mobile') ?: '-') : '-'
);
$email = !empty($workorder['email']) ? $workorder['email'] : (
$createrId ? (Db::name('Admin')->where('id', $createrId)->value('email') ?: '-') : '-'
);
$uid = !empty($workorder['uid']) ? $workorder['uid'] : (
$createrId ? (Db::name('Admin')->where('id', $createrId)->value('id') ?: '-') : '-'
);
// 赋值
$workorder['project_id'] = $projectName ?: '-';
$workorder['creater'] = $adminName ?: '-';
// $workorder['solve'] = $solveName ?: '-';
$workorder['contact'] = $contact;
$workorder['email'] = $email ?: '-';
$workorder['uid'] = $uid ?: '-';
View::assign('detail', $workorder);
} else {
View::assign('message', '没有详细数据');
}
return view();
// return json($workorder);
}
}
//查看
public function view()
{
$param = get_params();
$id = isset($param['id']) ? $param['id'] : 0;
if (empty($id)) {
return to_assign(1, '参数错误缺少ID');
}
$view = WorkOrderList::where('id', $id)->find();
if ($view) {
$projectName = Db::name('Project')->where('id', $view['project_id'])->value('name_short');
$view['project_id'] = $projectName ?: '-';
if (!empty($view['contact'])) {
$view->contact = $view['contact'];
} else {
$view->contact = Db::name('Admin')->where('id', $view['creater'])->value('mobile') ?: '-';
}
if (!empty($view['uid'])) {
$view->uid = $view['uid'];
} else {
$view->uid = Db::name('Admin')->where('id', $view['creater'])->value('id') ?: '-';
}
if (!empty($view['email'])) {
$view->email = $view['email'];
} else {
$view->email = Db::name('Admin')->where('id', $view['creater'])->value('email') ?: '-';
}
if (!empty($view['project_order_id'])) {
$view->project_order_id = $view['project_order_id'];
} else {
$projectOrderId = Db::name('WorkOrder')->where('id', $id ?: $view['id'])->value('project_order_id');
$view->project_order_id = $projectOrderId ?: $view['id'];
}
$adminName = Db::name('Admin')->where('id', $view['creater'])->value('name');
$view->creater = $adminName ?: '-';
$solveName = Db::name('Admin')->where('id', $view['solve'])->value('name');
$view->solve = $solveName ?: '-';
View::assign('view', $view);
return view();
} else {
return to_assign(1, '信息不存在');
}
}
//删除
public function delete()
{
$request = request();
if ($request->isDelete() || $request->isAjax()) {
$id = get_params("id");
$detail = WorkOrderList::where('id', $id)->find();
if (WorkOrderList::where('id', $id)->update(['delete_time' => date('Y-m-d H:i:s')]) !== false) {
$log_data = array(
'module' => 'WorkOrderList',
'field' => 'delete',
'action' => 'delete',
'admin_id' => $this->uid,
'old_content' => '',
'new_content' => $detail['name'],
'create_time' => time(),
);
Db::name('Log')->strict(false)->field(true)->insert($log_data);
return to_assign(0, "删除成功");
} else {
return to_assign(0, "删除失败");
}
} else {
return to_assign(1, "错误的请求");
}
}
//批量删除
public function batch_delete()
{
$request = request();
if ($request->isDelete() || $request->isAjax()) {
$ids = get_params("ids");
foreach ($ids as $id) {
$detail = WorkOrderList::where('id', $id)->find();
if (WorkOrderList::where('id', $id)->update(['delete_time' => date('Y-m-d H:i:s')]) !== false) {
$log_data = array(
'module' => 'WorkOrderList',
'field' => 'delete',
'action' => 'delete',
'admin_id' => $this->uid,
'old_content' => '',
'new_content' => $detail['name'],
'create_time' => time(),
);
Db::name('Log')->strict(false)->field(true)->insert($log_data);
}
}
return to_assign(0, "批量删除成功");
} else {
return to_assign(1, "错误的请求");
}
}
//获取用户信息列表
public function usermessagelist()
{
$order_id = input('order_id/d', 0);
if (!$order_id)
return to_assign(1, '缺少工单ID');
$messages = WorkOrderMessage::where('order_id', $order_id)
->whereNull('delete_time')
->order('create_time', 'asc')
->select();
return to_assign(0, 'success', $messages);
}
//回复用户信息
public function messageadd()
{
if (!request()->isPost()) {
return to_assign(1, '错误的请求方式');
}
$param = get_params();
if (empty($param['order_id']) || !isset($param['content']) || $param['content'] === '') {
return to_assign(1, '缺少必要参数');
}
$order_id = intval($param['order_id']);
$maxMsgId = WorkOrderMessage::where('order_id', $order_id)->max('msg_id');
$msg_id = $maxMsgId ? intval($maxMsgId) + 1 : 1;
$data = [
'order_id' => $order_id,
'msg_id' => $msg_id,
'msgby' => 0,
'content' => strval($param['content']),
'create_time' => date('Y-m-d H:i:s'),
];
try {
$res = Db::name('work_order_message')->insert($data);
} catch (\Exception $e) {
return to_assign(1, '数据库操作异常: ' . $e->getMessage());
}
if ($res) {
return to_assign(0, '回复成功');
} else {
return to_assign(1, '回复失败', $data);
}
}
//删除回复信息
public function messagedel()
{
if (!request()->isPost()) {
return to_assign(1, '错误的请求方式');
}
$param = get_params();
if (empty($param['order_id']) || empty($param['msg_id'])) {
return to_assign(1, '缺少必要参数');
}
$order_id = intval($param['order_id']);
$msg_id = intval($param['msg_id']);
// 直接用Db操作避免模型save的各种隐式问题
$res = Db::name('work_order_message')
->where(['order_id' => $order_id, 'msg_id' => $msg_id])
->update(['delete_time' => date('Y-m-d H:i:s')]);
// 只要没报错就返回删除成功
return to_assign(0, '删除成功');
}
}