WokerTask/app/adminapi/controller/TaskController.php

277 lines
11 KiB
PHP

<?php
namespace app\adminapi\controller;
use app\common\model\task_template\TaskTemplate;
use app\common\model\user\User;
use think\facade\Db;
use app\common\model\task\Task;
class TaskController extends BaseAdminController
{
public function index()
{
$param = get_params();
$param['uid'] = $this->adminId;
[$param['page'], $param['limit']] = $this->getPage();
[$count, $list] = (new Task())->list($param);
return $this->success('success', ['count' => $count, 'lists' => $list]);
}
public function create()
{
$param = get_params();
//markdown数据处理
if (isset($param['table-align'])) {
unset($param['table-align']);
}
if (isset($param['docContent_html_code'])) {
$param['content'] = $param['docContent_html_code'];
$param['md_content'] = $param['docContent_markdown_doc'];
unset($param['docContent_html_code']);
unset($param['docContent_markdown_doc']);
}
if (isset($param['ueditorcontent'])) {
$param['content'] = $param['ueditorcontent'];
$param['md_content'] = '';
}
$param['start_time'] = strtotime(urldecode($param['start_time']));
if (isset($param['end_time'])) {
$param['end_time'] = strtotime(urldecode($param['end_time']));
$a = $param['end_time'];
$b = date('d', $a) - date('d');
$b = $b + 1;//验收时间加1
$date = Strtotime(date("Y-m-d", strtotime("+1 day", $a)));//验收当天时间戳
$c = $b * 1;//验收小时
if ($c > 9) {
$d = (string)round($c / 9, 1);//转换成几天
$times = explode('.', $d);
$date = Strtotime(date("Y-m-d", strtotime("+$times[0] day", $a)));//验收当天时间戳
if (!empty($times[1]) && $times[1] == 9) {
$times = $times[0] + 1;
$date = Strtotime(date("Y-m-d", strtotime("+$times day", $a)));//验收当天时间戳
$check_time2 = $date + 32400;//早上9点
} else {
$check_time2 = ($date + 32400) + (3600 * $times[0]);//准确时间
}
} else {
$check_time2 = ($date + 32400) + (3600 * $c);//准确时间
}
$times3 = Strtotime(date('Y-m-t', time())) + 64800;
if ($check_time2 > $times3) {
return $this->fail('验收时间不能大于本月月底18点 跨月时间:' . date('Y-m-d H:i:s', $check_time2));
}
$param['check_time'] = $check_time2;
$param['end_time'] = $param['end_time'] + 86399;
}
if (isset($param['flow_status'])) {
if ($param['flow_status'] == 6) {
$param['over_time'] = time();
} else {
$param['over_time'] = 0;
}
}
if (!empty($param['id']) && $param['id'] > 0) {
$task = (new Task())->detail($param['id']);
$param['update_time'] = time();
$param['did'] = 0;
$res = Task::where('id', $param['id'])->strict(false)->field(true)->update($param);
if ($res) {
if (isset($param['name']) && $param['name'] == 'end_time') {
$param['real_val'] = $param['end_time'];
}
unset($param['name'], $param['real_val']);
}
return $this->success('发布成功', [], 1, 1);
} else {
$param['create_time'] = time();
$param['admin_id'] = $this->adminId;
$param['type'] = 1;
$param['cate'] = 1;
$param['plan_hours'] = 1;
$param['accept_overtime'] = time() + (86400 * 3);
$param['did'] = 0;
if (isset($param['flow_status']) && $param['assist_check_ids'] == "") {
$param['assist_check_ids'] = $param['admin_id'];
}
if ($param['end_time'] == Strtotime(date('Y-m-d'))) {
$param['end_time'] = $param['end_time'] + 64800;
}
$param['initial_end_time'] = $param['end_time'];
$sid = Task::strict(false)->field(true)->insertGetId($param);
return $this->success('发布成功', [], 1, 1);
}
}
public function view($id)
{
$detail = (new Task())->detail($id);
if (empty($detail)) {
return $this->fail('任务不存在');
}
$role_uid = [$detail['admin_id'], $detail['director_uid']];
$role_edit = 'view';
if (in_array($this->adminId, $role_uid)) {
$role_edit = 'edit';
}
$file_array = Db::name('FileInterfix')
->field('mf.id,mf.topic_id,mf.admin_id,f.name,a.name as admin_name')
->alias('mf')
->join('File f', 'mf.file_id = f.id', 'LEFT')
->join('Admin a', 'mf.admin_id = a.id', 'LEFT')
->order('mf.create_time desc')
->where(array('mf.topic_id' => $id, 'mf.module' => 'task'))
->select()->toArray();
$link_array = Db::name('LinkInterfix')
->field('i.id,i.topic_id,i.admin_id,i.desc,i.url,a.name as admin_name')
->alias('i')
->join('Admin a', 'i.admin_id = a.id', 'LEFT')
->order('i.create_time desc')
->where(array('i.topic_id' => $id, 'i.module' => 'task', 'a.delete_time' => 0))
->select()->toArray();
if ($detail['is_bug'] == 0) {
$detail['is_bug'] = '部门工作';
} elseif ($detail['is_bug'] == 1) {
$detail['is_bug'] = '部门协助';
} elseif ($detail['is_bug'] == 2) {
$detail['is_bug'] = '临时任务';
}
$return['bohui'] = [];
$return['count_bohui'] = [];
$return['detail'] = $detail;
$return['file_array'] = $file_array;
$return['link_array'] = $link_array;
$return['role_edit'] = $role_edit;
$approve_id = Db::name('flow_task')->where('task_id', $id)->value('approve_id');
$return['flow_nodes'] = $this->get_flow_nodes($approve_id);
return $this->success('success', $return);
}
//获取审核流程节点
public function get_flow_nodes($id = 0, $type = 1)
{
$flows = Db::name('FlowStep')->where(['action_id' => $id, 'type' => $type, 'delete_time' => 0])->order('sort asc')->select()->toArray();
foreach ($flows as $key => &$val) {
$user_id_info = Db::name('Admin')->field('id,name,thumb')->where('id', 'in', $val['flow_uids'])->select()->toArray();
foreach ($user_id_info as $k => &$v) {
$v['check_time'] = 0;
$v['content'] = '';
$v['status'] = 0;
$check_array = Db::name('FlowRecord')->where(['check_user_id' => $v['id'], 'step_id' => $val['id']])->order('check_time desc')->select()->toArray();
if (!empty($check_array)) {
$checked = $check_array[0];
$v['check_time'] = date('Y-m-d :H:i', $checked['check_time']);
$v['content'] = $checked['content'];
$v['status'] = $checked['status'];
}
}
$check_list = Db::name('FlowRecord')
->field('f.*,a.name,a.thumb')
->alias('f')
->join('Admin a', 'a.id = f.check_user_id', 'left')
->where(['f.step_id' => $val['id']])->select()->toArray();
foreach ($check_list as $kk => &$vv) {
$vv['check_time_str'] = date('Y-m-d :H:i', $vv['check_time']);
}
$val['user_id_info'] = $user_id_info;
$val['check_list'] = $check_list;
}
return $flows;
}
//驳回($id:审批id)
public function bohui($id)
{
$find = Db::name('flow_task')->where('approve_id', $id)->find();
if ($find) {
$param['create_time'] = time();
$param['admin_id'] = $this->adminId;
$param['id'] = $find['task_id'];
$res = Task::where('id', $param['id'])->strict(false)->field(true)->update(['flow_status' => 2, 'over_time' => 0]);
$comm = $param;
unset($comm['id']);
if ($res) {
$log_data = array(
'module' => 'task',
'task_id' => $param['id'],
'old_content' => 3,
'new_content' => 2,
'field' => 'flow_status',
'action' => 'edit',
'admin_id' => $this->adminId,
'create_time' => time(),
);
Db::name('Log')->strict(false)->field(true)->insert($log_data);
}
return $this->success('驳回成功', [], 1, 1);
} else {
return $this->fail('驳回失败');
}
}
// 任务列表
public function taskList()
{
$param = $this->request->param();
$page = $param['page_no'] ?? 1;
$limit = $param['page_size'] ?? 15;
// [$page, $limit] = $this->getPage();
$list = Task::with(['directorInfo'])
->page($page, $limit)
->order(['id' => 'desc'])
->select();
$count = Task::where('company_id', $param['company_id'])->count();
$data = [
'lists' => $list,
'count' => $count,
'page_no' => $page,
'page_size' => $limit,
];
return $this->success('任务列表', $data);
}
// 添加新版任务
public function addTask()
{
$params = $this->request->param(); // user_id title content
$arr = [
'template_id' => 0,
'scheduling_plan_id' => 0,
'company_id' => $params['company_id'],
'title' => $params['title'],
'money' => 0,
'type' => 0,
'status' => $params['status'],
'content' => $params['content'],
'start_time' => time(),
'end_time' => strtotime($params['end_time']),
'director_uid' => $params['director_uid'], // 指派给负责人
'create_time' => time(),
'update_time' => time(),
];
$task_id = (new Task())->insertGetId($arr);
return $this->success('添加成功', ['task_id' => $task_id]);
}
public function editTask()
{
$params = $this->request->param(); // user_id title content
$task = Task::where('id', $params['id'])->find();
$arr = [
'title' => $params['title'],
'content' => $params['content'],
'status' => $params['status'],
'update_time' => time(),
];
$task->save($arr);
return $this->success('成功');
}
}