This commit is contained in:
2025-03-26 16:42:50 +08:00
parent 56461a4d0a
commit 6093ce91fa
7 changed files with 59 additions and 371 deletions

View File

@ -366,241 +366,19 @@ class Ticket extends Controller
$instance_data = $this->_vali([
'staff_id.require'=>'请指定维修人员!',
]);
$staff = InspectionStaff::query()->where('id', '=', $instance_data['staff_id'])->findOrEmpty();
if ($staff->isEmpty()) {
$this->error('未找到维修人员信息');
}
$view = $ticket->views()->save([
'staff_id'=>$instance_data['staff_id'],
'status'=>0,
'create_id'=>$adminInfo['id'],
]);
$this->success('创建成功!', $view);
} else {
$this->vo = $ticket;
$this->staffs = $staffs;
$this->fetch();
}
}
public function repair_process_create()
{
$data = $this->_vali([
'ticket_id.require'=>'请指定工单ID!',
]);
$process = ApprovalProcess::where('type', '=', 'WXSH')->order('id', 'asc')->findOrEmpty();
if ($process->isEmpty()) {
$this->error('未找到可用的审核流程');
}
$adminInfo = $this->request->session('user');
$ticket = TicketTicket::query()->with(['user', 'type'])->append(['imgs_arr', 'type_name'])->where('id', '=', $data['ticket_id'])->findOrEmpty();
if ($ticket->isEmpty()) {
$this->error('未找到工单信息');
}
if ($this->request->isPost()) {
$instance_data = $this->_vali([
'title.default'=>'核验工单审核',
'content.default'=>'',
]);
ApprovalInstance::mk()->startTrans();
try {
$instance = ApprovalInstance::create([
'process_id' => $process->id,
'oid' => $ticket->id,
'title' => $instance_data['title'],
'content' => $instance_data['content'],
$staff->messages()->save([
'status'=>0,
'current_step' => 0,
'create_time' => date('Y-m-d H:i:s'),
'create_by' => $adminInfo['id'],
'create_name' => $adminInfo['username'],
]);
foreach ($process->steps as $index => $step) {
$approver_id = $step['approver_id'] ?? 0;
if ($index == 0) {
if ($step['approver_type'] == 3) {
$approve_data = $this->_vali([
'approver_id.require' => '请指定审核人!',
]);
$approver_id = $approve_data['approver_id'];
}
}
ApprovalStep::create([
'instance_id' => $instance->id,
'step_number' => $index,
'approver_type' => $step['approver_type'],
'approver_id' => $approver_id,
'status' => 0,
]);
}
$ticket->repair_pid = $instance->id;
$ticket->save();
ApprovalInstance::mk()->commit();
} catch (HttpResponseException $e) {
ApprovalInstance::mk()->rollback();
throw $e;
} catch (\Exception $e) {
ApprovalInstance::mk()->rollback();
$this->error("创建失败");
}
$this->success('创建成功!');
} else {
$this->vo = $ticket;
$this->process = $process;
$this->step_index = -1;
$this->current_step = $process->steps[0];
$this->users = SystemUser::query()->field('id,username,nickname')->select();
$this->fetch();
}
}
public function repair_ticket_create()
{
$data = $this->_vali([
'ticket_id.require'=>'请指定工单ID!',
]);
$ticket = TicketTicket::query()->with(['repair_process'])->append(['imgs_arr', 'type_name'])->where('id', '=', $data['ticket_id'])->findOrEmpty();
$staffs = InspectionStaff::query()->field('id,name,phone')->select();
if ($ticket->isEmpty()) {
$this->error('未找到工单信息');
}
if ($this->request->isPost()) {
$adminInfo = $this->request->session('user');
$instance_data = $this->_vali([
'staff_id.require'=>'请指定维修人员!',
'kj_user_id.default'=>'0',
]);
$ticket->kj_user_id = $instance_data['kj_user_id'];
$repair = $ticket->repairs()->save([
'gc_content'=>$ticket->gc_content,
'zf_content'=>$ticket->zf_content,
'ys_content'=>$ticket->ys_content,
'work_days'=>$ticket->work_days,
'staff_id'=>$instance_data['staff_id'],
'status'=>0,
'create_id'=>$adminInfo['id'],
]);
$this->success('创建成功!', $repair);
} else {
$this->vo = $ticket;
$this->staffs = $staffs;
$this->fetch();
}
}
public function repair_ticket_modify()
{
$data = $this->_vali([
'ticket_id.require'=>'请指定工单ID!',
]);
$repair = TicketRepair::query()->where('id', '=', $data['ticket_id'])->findOrEmpty();
if ($repair->isEmpty()) {
$this->error('未找到工单信息');
}
if ($repair->ticket === null) {
$this->error('未找到主工单信息');
}
if ($repair->status === 1) {
$this->error('该工单已维修完成,无法操作!');
}
$adminInfo = $this->request->session('user');
if ($repair->ticket->kj_user_id != $adminInfo['id']) {
$this->error('您不是该工单的控价人员,无法操作!');
}
if ($this->request->isPost()) {
} else {
$this->vo = $repair;
$this->fetch();
}
}
public function verify_process_create()
{
$data = $this->_vali([
'ticket_id.require'=>'请指定工单ID!',
]);
$process = ApprovalProcess::where('type', '=', 'YSSH')->order('id', 'asc')->findOrEmpty();
if ($process->isEmpty()) {
$this->error('未找到可用的审核流程');
}
$adminInfo = $this->request->session('user');
$ticket = TicketTicket::query()->with(['user', 'type'])->append(['imgs_arr', 'type_name'])->where('id', '=', $data['ticket_id'])->findOrEmpty();
if ($ticket->isEmpty()) {
$this->error('未找到工单信息');
}
if ($this->request->isPost()) {
$instance_data = $this->_vali([
'title.default'=>'核验工单审核',
'content.default'=>'',
]);
ApprovalInstance::mk()->startTrans();
try {
$instance = ApprovalInstance::create([
'process_id' => $process->id,
'oid' => $ticket->id,
'title' => $instance_data['title'],
'content' => $instance_data['content'],
'status' => 0,
'current_step' => 0,
'create_time' => date('Y-m-d H:i:s'),
'create_by' => $adminInfo['id'],
'create_name' => $adminInfo['username'],
]);
foreach ($process->steps as $index => $step) {
$approver_id = $step['approver_id'] ?? 0;
if ($index == 0) {
if ($step['approver_type'] == 3) {
$approve_data = $this->_vali([
'approver_id.require' => '请指定审核人!',
]);
$approver_id = $approve_data['approver_id'];
}
}
ApprovalStep::create([
'instance_id' => $instance->id,
'step_number' => $index,
'approver_type' => $step['approver_type'],
'approver_id' => $approver_id,
'status' => 0,
]);
}
$ticket->verify_pid = $instance->id;
$ticket->save();
ApprovalInstance::mk()->commit();
} catch (HttpResponseException $e) {
ApprovalInstance::mk()->rollback();
throw $e;
} catch (\Exception $e) {
ApprovalInstance::mk()->rollback();
$this->error("创建失败");
}
$this->success('创建成功!');
} else {
$this->vo = $ticket;
$this->process = $process;
$this->step_index = -1;
$this->current_step = $process->steps[0];
$this->users = SystemUser::query()->field('id,username,nickname')->select();
$this->fetch();
}
}
public function verify_ticket_create()
{
$data = $this->_vali([
'ticket_id.require'=>'请指定工单ID!',
]);
$ticket = TicketTicket::query()->with(['repair_process'])->append(['imgs_arr', 'type_name'])->where('id', '=', $data['ticket_id'])->findOrEmpty();
$staffs = InspectionStaff::query()->field('id,name,phone')->select();
if ($ticket->isEmpty()) {
$this->error('未找到工单信息');
}
if ($this->request->isPost()) {
$adminInfo = $this->request->session('user');
$instance_data = $this->_vali([
'staff_id.require'=>'请指定维修人员!',
]);
$view = $ticket->verifys()->save([
'staff_id'=>$instance_data['staff_id'],
'status'=>0,
'create_id'=>$adminInfo['id'],
'title'=>'您有新的核验工单需要处理',
'content'=>'您有新的核验工单需要处理,请及时处理。',
]);
$this->success('创建成功!', $view);
} else {
@ -610,8 +388,6 @@ class Ticket extends Controller
}
}
public function my() {
$this->title = '待我审核';
$this->type_list = TicketType::getList();

View File

@ -6,6 +6,7 @@ use plugin\inspection\model\InspectionStaff;
use plugin\ticket\model\ApprovalInstance;
use plugin\ticket\model\ApprovalProcess;
use plugin\ticket\model\ApprovalStep;
use plugin\ticket\model\TicketRepair;
use plugin\ticket\model\TicketReply;
use plugin\ticket\model\TicketTicket;
use plugin\ticket\model\TicketTicketInter;
@ -251,16 +252,56 @@ class TicketInter extends Controller
$adminInfo = $this->request->session('user');
$instance_data = $this->_vali([
'staff_id.require'=>'请指定维修人员!',
'kj_user_id.default'=>'0',
]);
$staff = InspectionStaff::query()->where('id', '=', $instance_data['staff_id'])->findOrEmpty();
if ($staff->isEmpty()) {
$this->error('未找到维修人员信息');
}
$view = $ticket->repairs()->save([
'staff_id'=>$instance_data['staff_id'],
'status'=>0,
'create_id'=>$adminInfo['id'],
]);
$staff->messages()->save([
'status'=>0,
'title'=>'您有新的维修工单需要处理',
'content'=>'您有新的维修工单需要处理,请及时处理。',
]);
$ticket->kj_user_id = $instance_data['kj_user_id'];
$this->success('创建成功!', $view);
} else {
$this->vo = $ticket;
$this->staffs = $staffs;
$this->users = SystemUser::query()->field('id,username,nickname')->select();
$this->fetch();
}
}
public function repair_ticket_modify()
{
$data = $this->_vali([
'ticket_id.require'=>'请指定工单ID!',
]);
$repair = TicketRepair::query()->where('id', '=', $data['ticket_id'])->findOrEmpty();
if ($repair->isEmpty()) {
$this->error('未找到工单信息');
}
if ($repair->ticket === null) {
$this->error('未找到主工单信息');
}
if ($repair->status === 1) {
$this->error('该工单已维修完成,无法操作!');
}
$adminInfo = $this->request->session('user');
if ($repair->ticket->kj_user_id != $adminInfo['id']) {
$this->error('您不是该工单的控价人员,无法操作!');
}
if ($this->request->isPost()) {
} else {
$this->vo = $repair;
$this->fetch();
}
}

View File

@ -1,51 +0,0 @@
<div class="layui-collapse">
<div class="layui-colla-item">
<div class="layui-colla-title">审核流程</div>
<div class="layui-colla-content">
<div class="layui-timeline">
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">提交审核</h3>
</div>
</div>
{foreach $process.steps as $index=>$step}
{include file="common/step_p" /}
{/foreach}
</div>
</div>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header">创建审核单</div>
<div class="layui-card-body">
<form class="layui-form" data-table-id="formDemo" action="{:url()}" data-auto="true" method="post">
<input type="hidden" name="ticket_id" value="{$vo.id}">
<div class="layui-form-item">
<label class="layui-form-label">审核说明</label>
<div class="layui-input-block">
<textarea name="content" placeholder="请输入审核说明" class="layui-textarea"></textarea>
</div>
</div>
{if $current_step.approver_type == 3}
<div class="layui-form-item">
<label class="layui-form-label">请指定下一步审核人</label>
<div class="layui-input-block">
<select name="approver_id" lay-verify="required" lay-search>
<option value="">请选择审核人</option>
{foreach $users as $user}
<option value="{$user.id}">{$user.username}</option>
{/foreach}
</select>
</div>
</div>
{/if}
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" type='submit'>立即提交</button>
<button class="layui-btn layui-btn-primary" type="reset">重置</button>
</div>
</div>
</form>
</div>
</div>

View File

@ -1,19 +0,0 @@
<form class="layui-form layui-card" action="{:sysuri()}" data-auto="true" method="post" autocomplete="off" style="min-height: 300px">
<input class="layui-input layui-hide" type='hidden' value="{:input('get.ticket_id')}" name='ticket_id'>
<input class="layui-input layui-hide" type='hidden' value='{:systoken("view_ticket_create")}' name='_token_'>
<div class="layui-form-item">
<label class="layui-form-label">选择维修人员</label>
<div class="layui-input-block">
<select name="staff_id">
<option value="">请选择维修负责人员</option>
{foreach $staffs as $item}
<option value="{$item.id}">{$item.name} {$item.phone}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-form-item text-center">
<button class="layui-btn layui-btn-normal" type='submit'>创建维修工单</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消</button>
</div>
</form>

View File

@ -1,51 +0,0 @@
<div class="layui-collapse">
<div class="layui-colla-item">
<div class="layui-colla-title">审核流程</div>
<div class="layui-colla-content">
<div class="layui-timeline">
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">提交审核</h3>
</div>
</div>
{foreach $process.steps as $index=>$step}
{include file="common/step_p" /}
{/foreach}
</div>
</div>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header">创建审核单</div>
<div class="layui-card-body">
<form class="layui-form" data-table-id="formDemo" action="{:url()}" data-auto="true" method="post">
<input type="hidden" name="ticket_id" value="{$vo.id}">
<div class="layui-form-item">
<label class="layui-form-label">审核说明</label>
<div class="layui-input-block">
<textarea name="content" placeholder="请输入审核说明" class="layui-textarea"></textarea>
</div>
</div>
{if $current_step.approver_type == 3}
<div class="layui-form-item">
<label class="layui-form-label">请指定下一步审核人</label>
<div class="layui-input-block">
<select name="approver_id" lay-verify="required" lay-search>
<option value="">请选择审核人</option>
{foreach $users as $user}
<option value="{$user.id}">{$user.username}</option>
{/foreach}
</select>
</div>
</div>
{/if}
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" type='submit'>立即提交</button>
<button class="layui-btn layui-btn-primary" type="reset">重置</button>
</div>
</div>
</form>
</div>
</div>

View File

@ -1,19 +0,0 @@
<form class="layui-form layui-card" action="{:sysuri()}" data-auto="true" method="post" autocomplete="off" style="min-height: 300px">
<input class="layui-input layui-hide" type='hidden' value="{:input('get.ticket_id')}" name='ticket_id'>
<input class="layui-input layui-hide" type='hidden' value='{:systoken("view_ticket_create")}' name='_token_'>
<div class="layui-form-item">
<label class="layui-form-label">选择维修人员</label>
<div class="layui-input-block">
<select name="staff_id">
<option value="">请选择维修负责人员</option>
{foreach $staffs as $item}
<option value="{$item.id}">{$item.name} {$item.phone}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-form-item text-center">
<button class="layui-btn layui-btn-normal" type='submit'>创建验收工单</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消</button>
</div>
</form>

View File

@ -12,6 +12,17 @@
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">选择控价人员</label>
<div class="layui-input-block">
<select name="kj_user_id">
<option value="">请选择控价人员</option>
{foreach $users as $item}
<option value="{$item.id}">{$item.nickname} {$item.phone}</option>
{/foreach}
</select>
</div>
</div>
<div class="layui-form-item text-center">
<button class="layui-btn layui-btn-normal" type='submit'>创建维修工单</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消</button>