Files
oms/back/application/api/controller_74GYL3/Work.php
2026-03-10 18:45:36 +08:00

402 lines
16 KiB
PHP

<?php
namespace app\api\controller;
use app\api\controller\User;
use think\Config;
use think\Controller;
use think\Db;
use think\Log;
use think\Model;
use think\Request;
use think\cache\driver\Memcache;
header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE");
header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
class Work extends Common
{
//获取资产类型列表
public function GetWorkInfoByLoginId()
{
$param = request()->post();
$user_id = $param['user_id'];
$user = new User();
$project_work = $this->GetProjectList($user_id);
for ($i = 0; $i < count($project_work); $i++) {
$involve_manager = $project_work[$i]['involve_manager'];
$info = $user->GetUserInfoByLoginId($involve_manager);
if ($info && isset($info['name'])) {
$project_work[$i]['issue_creator_name'] = $info['name'];
}
}
return $this->sendSuccess($project_work);
}
//获取外部客户类型列表
public function GetWorkInfoByLoginProject()
{
$param = request()->post();
$user = new User();
$user_id = $param['user_id'];
$user_info = db('system_user')->where('id', $user_id)->find();
if ($user_info) {
$user_project = explode(',', $user_info['user_project']);
$project_info = db('project_info')->alias('p')
->join('project_state s', 's.id =p.project_state', 'left')
->whereIn('project_id', $user_project)
->where('p.project_state', '<', 10) // 未关闭的项目
->field('p.*, s.desp as project_state_name,1 as project_types')
->select();
foreach ($project_info as &$info) {
$involve_manager = $info['involve_manager'];
$userInfo = $user->GetUserInfoByLoginId($involve_manager);
if ($userInfo && isset($userInfo['name'])) {
$info['issue_creator_name'] = $userInfo['name'];
}
$info['issue_count'] = $this->GetProjectIssueCount($user_id, $info['project_id']);
$info['task_count'] = $this->GetProjectTaskCount($user_id, $info['project_id']);
}
unset($info);
return $this->sendSuccess($project_info);
}
}
//获取业主客户类型列表
public function GetWorkInfoByLoginProjectCustomer()
{
$param = request()->post();
$user = new User();
$user_id = $param['user_id'];
$user_info = db('system_user')->where('id', $user_id)->find();
if ($user_info) {
$user_project = explode(',', $user_info['user_project']);
$project_info = db('project_info')->alias('p')
->join('project_state s', 's.id =p.project_state', 'left')
->whereIn('project_id', $user_project)
->where('p.project_state', '<', 10) // 未关闭的项目
->field('p.*, s.desp as project_state_name,1 as project_types')
->select();
foreach ($project_info as &$info) {
$involve_manager = $info['involve_manager'];
$userInfo = $user->GetUserInfoByLoginId($involve_manager);
if ($userInfo && isset($userInfo['name'])) {
$info['issue_creator_name'] = $userInfo['name'];
}
$info['issue_count'] = $this->GetProjectIssueCountCustomer($user_id, $info['project_id']);
$info['task_count'] = $this->GetProjectTaskCountCustomer($user_id, $info['project_id']);
}
unset($info);
return $this->sendSuccess($project_info);
}
}
public function GetProjectIssueCountCustomer($user_id, $project_id)
{
$count = db('project_issues')->alias('s')
->join('project_info i', 'i.project_id =s.project_id', 'left')
->join('project_issue_state t', 't.id =s.issue_state', 'left')
->where('s.project_id', $project_id)
->where('s.issue_state', '<', 10)
->field('s.*, i.project_name, i.project_number, t.desp as issue_state_name')
->count();
return $count;
}
public function GetProjectTaskCountCustomer($user_id, $project_id)
{
$count = db('work_task_info')->alias('s')
->join('work_story_info x', 'x.story_id =s.story_id', 'left')
->join('project_info i', 'i.project_id =x.work_id', 'left')
->join('work_task_state t', 't.id =s.task_state', 'left')
->where('x.work_id', $project_id)
->count();
return $count;
}
//获取参与的客户项目列表
public function GetProjectList($user_id)
{
$ret = db('project_info')->alias('p')
->join('project_state s', 's.id =p.project_state', 'left')
->where('p.project_state', '<', 10) //未关闭的项目
->where(function ($query) use ($user_id) {
$query->where('p.involve_manager', $user_id)
->whereor('p.involve_members', 'like', $user_id . ',%')
->whereor('p.involve_members', 'like', '%,' . $user_id . ',%')
->whereor('p.involve_members', 'like', $user_id . '')
->whereor('p.involve_members', 'like', '%,' . $user_id);
})
->field('p.*, s.desp as project_state_name,1 as project_types')
->select();
//统计每个项目与登录用户有关的任务数
for ($i = 0; $i < count($ret); $i++) {
$ret[$i]['issue_count'] = $this->GetProjectIssueCount($user_id, $ret[$i]['project_id']);
$ret[$i]['task_count'] = $this->GetProjectTaskCount($user_id, $ret[$i]['project_id']);
}
return $ret;
}
public function GetProjectIssueList()
{
$param = request()->post();
$user = new User();
$user_id = $param['user_id'];// = 60;
$project_id = $param['project_id']; // = 122;
$issue_state = $param['issue_state']; // = 0;
$where = [];
if ($issue_state == 1) {
$where['s.issue_state'] = array('<', 10); //未关闭
} else if ($issue_state == 2) {
$where['s.issue_state'] = array('>', 10);//已关闭
}
//负责处理的问题
$ret = db('project_issues')->alias('s')
->join('project_info i', 'i.project_id =s.project_id', 'left')
->join('project_issue_state t', 't.id =s.issue_state', 'left')
->where('s.project_id', $project_id)
->where(function ($query) use ($user_id) {
$query->where('s.issue_processor', $user_id)
->whereor('s.issue_creator', $user_id)
->whereor('i.involve_manager', $user_id);
})
->where($where)
->field('s.*, i.project_name, i.project_number, t.desp as issue_state_name, i.involve_manager,1 as project_types')
->select();
for ($i = 0; $i < count($ret); $i++) {
$info = $user->GetUserInfoByLoginId($ret[$i]['issue_processor']);
if ($info != "")
{
$ret[$i]['issue_processor_name'] = $info['name'];
}
else
{
$ret[$i]['issue_processor_name'] = '-';
}
$info = $user->GetUserInfoByLoginId($ret[$i]['issue_creator']);
$ret[$i]['issue_creator_name'] = $info['name'];
}
return $this->sendSuccess($ret);
}
public function GetProjectIssueCount($user_id, $project_id)
{
$count = db('project_issues')->alias('s')
->join('project_info i', 'i.project_id =s.project_id', 'left')
->join('project_issue_state t', 't.id =s.issue_state', 'left')
->where('s.project_id', $project_id)
->where(function ($query) use ($user_id) {
$query->where('s.issue_processor', $user_id)
->whereor('s.issue_creator', $user_id)
->whereor('i.involve_manager', $user_id);
})
->where('s.issue_state', '<', 10)
->field('s.*, i.project_name, i.project_number, t.desp as issue_state_name')
->count();
return $count;
}
public function GetProjectTaskList()
{
$param = request()->post();
$user = new User();
$user_id = $param['user_id'];
$project_id = $param['project_id'];
$where = [];
if($param['task_state'] != ''){
$where['s.task_state'] = $param['task_state'];
}
$ret = db('work_task_info')->alias('s')
->join('work_story_info y', 'y.story_id =s.story_id', 'left')
->join('system_user u', 'u.id =s.task_processor', 'left')
->join('work_task_state p', 'p.id =s.task_state', 'left')
->where('y.work_id', $project_id)
->where($where)
->where(function ($query) use ($user_id) {
$query->where('s.task_processor', $user_id)
->whereor('y.story_manager', $user_id);
})
->field('s.*, p.desp as task_state_desp, y.story_id,2 as project_types')
->select();
$user = new User();
for ($i=0; $i<count($ret); $i++)
{
//根据登录账号获取用户姓名
$user_info = $user->GetUserInfoByLoginId($ret[$i]['task_processor']);
$ret[$i]['task_processor_name'] = $user_info['name'];
}
return $this->sendSuccess($ret);
}
public function GetProjectTaskCount($user_id, $project_id)
{
$count = db('work_task_info')->alias('s')
->join('work_story_info x', 'x.story_id =s.story_id', 'left')
->join('project_info i', 'i.project_id =x.work_id', 'left')
->join('work_task_state t', 't.id =s.task_state', 'left')
->where('x.work_id', $project_id)
->where('s.task_state', '<', 4)
->where(function ($query) use ($user_id) {
$query->where('s.task_processor', $user_id)
->whereor('x.story_manager', $user_id);
})
->count();
return $count;
}
public function GetProjectDevelopProcessor()
{
$param = request()->post();
if (!$param) {
return [];
}
$member_ids = [];
$array = [];
if ($param['project_types'] === 1) {
$project_info = db('project_info')->where('project_id', $param['project_id'])->find();
if ($project_info && !empty($project_info['involve_members'])) {
$member_ids = explode(',', $project_info['involve_members']);
}
} elseif ($param['project_types'] === 2) {
$develop_info = db('develop_project')->where('project_id', $param['project_id'])
->field('project_members')->find();
if ($develop_info && !empty($develop_info['project_members'])) {
$member_ids = explode(',', $develop_info['project_members']);
}
}
for ($i = 0; $i < count($member_ids); $i++){
$ret = db('system_user')->alias('su')
->join('hr_staff hs', 'su.user_id = hs.staff_id')
->whereIn('su.id', $member_ids[$i])
->field('su.id, hs.staff_name')
->find();
$array[] = $ret;
}
return $this->sendSuccess($array);
}
public function UpdateProDeveProcessor()
{
$param = request()->post();
if($param){
if($param['project_types']===1){
$ret= db('project_issues')
->where('issue_id',$param['issue_id'])
->update(['issue_processor'=>$param['processor'] ,'issue_state' => 2]);
if($ret){
return $this->sendSuccess('分配成功');
}else{
return $this->sendError('分配失败');
}
}else if($param['project_types']===2){
$ret = db('develop_issues')
->where('issue_id',$param['issue_id'])
->update(['issue_processor'=>$param['processor'],'issue_state' => 2]);
if($ret){
return $this->sendSuccess('分配成功');
}else{
return $this->sendError('分配失败');
}
}
}
}
public function GetOperationTaskList()
{
$param = request()->post();
$user = new User();
$user_id = $param['user_id'];
$story_id = $param['story_id'];
$where = [];
if($param['task_state'] != ''){
$where['s.task_state'] = $param['task_state'];
}
$ret = db('work_task_info')->alias('s')
->join('work_story_info y', 'y.story_id =s.story_id', 'left')
->join('system_user u', 'u.id =s.task_processor', 'left')
->join('work_task_state p', 'p.id =s.task_state', 'left')
->where('y.story_type', 2)
->where('y.story_id', $story_id)
->where($where)
->where(function ($query) use ($user_id) {
$query->where('s.task_processor', $user_id)
->whereor('y.story_manager', $user_id);
})
->field('s.*, p.desp as task_state_desp, y.story_id,2 as project_types')
->select();
$user = new User();
for ($i=0; $i<count($ret); $i++)
{
//根据登录账号获取用户姓名
$user_info = $user->GetUserInfoByLoginId($ret[$i]['task_processor']);
$ret[$i]['task_processor_name'] = $user_info['name'];
}
return $this->sendSuccess($ret);
}
public function GetOperationStoryList()
{
$param = request()->post();
$user = new User();
$user_id = $param['user_id'];
$where = [];
if(isset($param['story_state']) && $param['story_state'] != ''){
$where['s.story_state'] = $param['story_state'];
}
$ret = db('work_story_info')->alias('y')
->join('work_story_state p', 'p.id =y.story_state', 'left')
->where('y.story_type', 2)
->where('y.story_state', '<', 4) //未完成的Story
->where($where)
->where(function ($query) use ($user_id) {
$query->where('y.story_manager', $user_id)
->whereor('y.story_member', 'like', $user_id . ',%')
->whereor('y.story_member', 'like', '%,' . $user_id . ',%')
->whereor('y.story_member', $user_id)
->whereor('y.story_member', 'like', '%,' . $user_id);
})
->field('y.*, p.desp as story_state_desp')
->select();
$user = new User();
for ($i=0; $i<count($ret); $i++)
{
//根据登录账号获取Story管理员用户姓名
$user_info = $user->GetUserInfoByLoginId($ret[$i]['story_manager']);
$ret[$i]['story_manager_name'] = $user_info['name'];
$ret[$i]['story_tasks'] = 0;
}
//dump($ret);
return $this->sendSuccess($ret);
}
/*public function GetTaskTypeList()
{
$ret = db('project_task_state')->select();
return $this->sendSuccess($ret);
}
*/
}