2024-04-10 10:26:18 +08:00

218 lines
7.3 KiB
PHP

<?php
namespace app\api\controller;
use app\api\ApiBaseController;
use app\api\middleware\Auth;
use app\project\model\ProjectTask as TaskList;
use app\project\validate\TaskCheck;
use Firebase\JWT\JWT;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
class User extends ApiBaseController
{
protected $middleware = [
Auth::class => ['except' => ['index','login'] ]
];
/**
* 移动端登录
* @return void
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function login()
{
$param = get_params();
if (empty($param['username']) || empty($param['password'])) {
$this->apiError('参数错误');
}
// 校验用户名密码
$user = Db::name('Admin')->where(['username' => $param['username']])->find();
if (empty($user)) {
$this->apiError('帐号或密码错误');
}
$param['pwd'] = set_password($param['password'], $user['salt']);
if ($param['pwd'] !== $user['pwd']) {
$this->apiError('帐号或密码错误');
}
if ($user['status'] == -1) {
$this->apiError('该用户禁止登录,请于平台联系');
}
$data = [
'last_login_time' => time(),
'last_login_ip' => request()->ip(),
'login_num' => $user['login_num'] + 1,
];
$res = Db::name('Admin')->where(['id' => $user['id']])->update($data);
if ($res) {
$token = self::getToken($user['id']);
$this->apiSuccess('登录成功', ['token' => $token,'uid'=>$user['id']]);
}
}
/**
* 用户信息
* @return void
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function userInfo()
{
$uid = JWT_UID;
$data = Db::name('admin') ->alias('a')
->join('Department d', 'a.did = d.id')
->where(['a.id' => $uid])
->field('a.id,a.did,a.name,a.email,a.mobile,a.sex,a.nickname,a.thumb,a.desc,d.title as department')
->find();
$this->apiOk($data);
}
public function info()
{
$uid = JWT_UID;
$data = Db::name('admin') ->alias('a')
->join('Department d', 'a.did = d.id')
->where(['a.id' => $uid])
->field('a.id,a.did,a.name,a.email,a.mobile,a.sex,a.nickname,a.thumb,a.desc,d.title as department')
->find();
$this->apiOk($data);
}
//添加任务
public function add()
{
$param = get_params();
if (request()->isPost()) {
if (isset($param['end_time'])) {
$param['end_time'] = strtotime(urldecode($param['end_time']));
}
if (!empty($param['id']) && $param['id'] > 0) {
$task = (new TaskList())->detail($param['id']);
try {
validate(TaskCheck::class)->scene('edit')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
$this->apiError( $e->getError());
}
if (isset($param['flow_status'])) {
if ($param['flow_status'] == 3) {
$param['over_time'] = time();
$param['done_ratio'] = 100;
if($task['before_task']>0){
$flow_status = Db::name('ProjectTask')->where(['id' => $task['before_task']])->value('flow_status');
if($flow_status !=3){
$this->apiError('前置任务未完成,不能设置已完成');
}
}
} else {
$param['over_time'] = 0;
$param['done_ratio'] = 0;
}
}
if(isset($param['before_task'])){
$after_task_array = admin_after_task_son($param['id']);
//包括自己在内
$after_task_array[] = $param['id'];
if (in_array($param['before_task'], $after_task_array)) {
$this->apiError('前置任务不能是该任务本身或其后置任务');
}
}
$param['update_time'] = time();
$res = TaskList::where('id', $param['id'])->strict(false)->save($param);
if ($res) {
add_log('edit', $param['id'], $param);
add_project_log(JWT_UID,'task',$param, $task);
}
$this->apiOk();
} else {
try {
validate(TaskCheck::class)->scene('add')->check($param);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
$this->apiError( $e->getError());
}
$param['create_time'] = time();
$param['admin_id'] = JWT_UID;
$sid = TaskList::strict(false)->field(true)->insertGetId($param);
if ($sid) {
add_log('add', $sid, $param);
$log_data = array(
'module' => 'task',
'task_id' => $sid,
'new_content' => $param['title'],
'field' => 'new',
'action' => 'add',
'admin_id' => JWT_UID,
'create_time' => time(),
);
Db::name('ProjectLog')->strict(false)->field(true)->insert($log_data);
//发消息
//$users = $param['director_uid'];
//sendMessage($users, 21, ['title' => $param['title'],'from_uid' => $this->uid, 'create_time'=>date('Y-m-d H:i:s',time()), 'action_id' => $sid]);
}
$this->apiOk();
}
}
}
//任务列表
public function list()
{
$param = get_params();
$param['uid'] = JWT_UID;
$list = (new TaskList())->list($param);
$data = $list;
if (is_object($data)) {
$data = $data->toArray();
}
if (!empty($data['total'])) {
$res['count'] = $data['total'];
} else {
$res['count'] = 0;
}
$res['data'] = $data['data'];
$this->apiOk($res);
}
//详情--->流程?
public function detail()
{
$param = get_params();
$where = array();
$where['a.tid'] = $param['tid'];
$where['a.delete_time'] = 0;
$list = Db::name('Schedule')
->field('a.*,u.name')
->alias('a')
->join('Admin u', 'u.id = a.admin_id')
->order('a.create_time desc')
->where($where)
->select()->toArray();
foreach ($list as $k => $v) {
$list[$k]['start_time'] = empty($v['start_time']) ? '' : date('Y-m-d H:i', $v['start_time']);
$list[$k]['end_time'] = empty($v['end_time']) ? '' : date('H:i', $v['end_time']);
}
$this->apiOk($list);
}
}