Api.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. <?php
  2. /**
  3. +-----------------------------------------------------------------------------------------------
  4. * GouGuOPEN [ 左手研发,右手开源,未来可期!]
  5. +-----------------------------------------------------------------------------------------------
  6. * @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
  7. +-----------------------------------------------------------------------------------------------
  8. * @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
  9. +-----------------------------------------------------------------------------------------------
  10. * @Author 勾股工作室 <hdm58@qq.com>
  11. +-----------------------------------------------------------------------------------------------
  12. */
  13. declare (strict_types = 1);
  14. namespace app\project\controller;
  15. use app\api\BaseController;
  16. use app\project\model\Project as ProjectModel;
  17. use app\project\model\ProjectTask;
  18. use app\oa\model\Schedule;
  19. use think\facade\Db;
  20. use think\facade\View;
  21. class Api extends BaseController
  22. {
  23. /**
  24. * 构造函数
  25. */
  26. protected $model;
  27. public function __construct()
  28. {
  29. parent::__construct(); // 调用父类构造函数
  30. $this->model = new ProjectModel();
  31. }
  32. //获取项目列表
  33. public function get_project()
  34. {
  35. $param = get_params();
  36. $uid = $this->uid;
  37. $auth = isAuth($uid,'project_admin','conf_1');
  38. $where = array();
  39. $whereOr = array();
  40. $where[] = ['delete_time', '=', 0];
  41. if($auth == 0){
  42. $whereOr[] = ['director_uid', '=', $uid];
  43. $project_ids = Db::name('ProjectUser')->where(['uid' => $uid, 'delete_time' => 0])->column('project_id');
  44. $whereOr[] = ['id', 'in', $project_ids];
  45. $dids_a = get_leader_departments($uid);
  46. $dids_b = get_role_departments($uid);
  47. $dids = array_merge($dids_a, $dids_b);
  48. if(!empty($dids)){
  49. $whereOr[] = ['did','in',$dids];
  50. }
  51. }
  52. if (!empty($param['keywords'])) {
  53. $where[] = ['name|content', 'like', '%' . $param['keywords'] . '%'];
  54. }
  55. $list = $this->model->datalist($param,$where,$whereOr);
  56. return table_assign(0, '', $list);
  57. }
  58. //获取任务列表
  59. public function get_task()
  60. {
  61. $param = get_params();
  62. $uid = $this->uid;
  63. $where = [];
  64. $whereOr = [];
  65. $where[] = ['delete_time', '=', 0];
  66. if (!empty($param['status'])) {
  67. $where[] = ['status', '=', $param['status']];
  68. }
  69. if (!empty($param['priority'])) {
  70. $where[] = ['priority', '=', $param['priority']];
  71. }
  72. if (!empty($param['work_id'])) {
  73. $where[] = ['work_id', '=', $param['work_id']];
  74. }
  75. if (!empty($param['director_uid'])) {
  76. $where[] = ['director_uid', 'in', $param['director_uid']];
  77. }
  78. if (!empty($param['keywords'])) {
  79. $where[] = ['title|content', 'like', '%' . $param['keywords'] . '%'];
  80. }
  81. if(!empty($param['project_id'])){
  82. $where[] = ['project_id', '=', $param['project_id']];
  83. }
  84. else{
  85. $auth = isAuth($uid,'project_admin','conf_1');
  86. if($auth == 0){
  87. $whereOr[] = ['admin_id', '=', $uid];
  88. $whereOr[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',assist_admin_ids)")];
  89. $dids_a = get_leader_departments($uid);
  90. $dids_b = get_role_departments($uid);
  91. $dids = array_merge($dids_a, $dids_b);
  92. if(!empty($dids)){
  93. $whereOr[] = ['did','in',$dids];
  94. }
  95. if (empty($param['director_uid'])) {
  96. $whereOr[] = ['director_uid', '=', $uid];
  97. }
  98. }
  99. }
  100. $model = new ProjectTask();
  101. $list = $model->datalist($param,$where,$whereOr);
  102. return table_assign(0, '', $list);
  103. }
  104. //获取项目概况数据
  105. public function get_chart_data()
  106. {
  107. $param = get_params();
  108. $tasks = Db::name('ProjectTask')->field('id,plan_hours,end_time,status,over_time')->order('end_time asc')->where([['project_id', '=', $param['project_id']],['end_time','>',0],['delete_time', '=', 0]])->select()->toArray();
  109. $task_count = count($tasks);
  110. $task_count_ok = Db::name('ProjectTask')->where([['project_id', '=', $param['project_id']], ['delete_time', '=', 0],['status', '>', 2]])->count();
  111. $task_delay = 0;
  112. if ($task_count > 0) {
  113. foreach ($tasks as $k => $v) {
  114. if (($v['status'] < 3) && ($v['end_time'] < time() - 86400)) {
  115. $task_delay++;
  116. }
  117. if (($v['status'] == 3) && ($v['end_time'] < $v['over_time'] - 86400)) {
  118. $task_delay++;
  119. }
  120. }
  121. }
  122. $task_pie = [
  123. 'count' => $task_count,
  124. 'count_ok' => $task_count_ok,
  125. 'delay' => $task_delay,
  126. 'ok_lv' => $task_count == 0 ? 100 : round($task_count_ok * 100 / $task_count, 2),
  127. 'delay_lv' => $task_count == 0 ? 100 : round($task_delay * 100 / $task_count, 2),
  128. ];
  129. $date_tasks = [];
  130. if ($tasks) {
  131. $date_tasks = plan_count($tasks);
  132. }
  133. $tasks_ok = Db::name('ProjectTask')->field('id,over_time as end_time')->order('over_time asc')->where([['over_time', '>', 0], ['delete_time', '=', 0], ['project_id', '=', $param['project_id']]])->select()->toArray();
  134. $date_tasks_ok = [];
  135. if ($tasks_ok) {
  136. $date_tasks_ok = plan_count($tasks_ok);
  137. }
  138. $tids = Db::name('ProjectTask')->where(['delete_time' => 0, 'project_id' => $param['project_id']])->column('id');
  139. $schedules = Db::name('Schedule')->where([['tid', 'in', $tids], ['delete_time', '=', 0]])->select()->toArray();
  140. $date_schedules = [];
  141. if ($schedules) {
  142. $date_schedules = hour_count($schedules);
  143. }
  144. $res['task_pie'] = $task_pie;
  145. $res['date_tasks'] = $date_tasks;
  146. $res['date_tasks_ok'] = $date_tasks_ok;
  147. $res['date_schedules'] = $date_schedules;
  148. to_assign(0, '', $res);
  149. }
  150. //添加附件
  151. public function add_file()
  152. {
  153. $param = get_params();
  154. $param['create_time'] = time();
  155. $param['admin_id'] = $this->uid;
  156. $fid = Db::name('ProjectFile')->strict(false)->field(true)->insertGetId($param);
  157. if ($fid) {
  158. return to_assign(0, '上传成功', $fid);
  159. }
  160. }
  161. //删除
  162. public function delete_file()
  163. {
  164. if (request()->isDelete()) {
  165. $id = get_params("id");
  166. $detail = Db::name('ProjectFile')->where('id', $id)->find();
  167. if (Db::name('ProjectFile')->where('id', $id)->delete() !== false) {
  168. $file_name = Db::name('File')->where('id', $detail['file_id'])->value('name');
  169. return to_assign(0, "删除成功");
  170. } else {
  171. return to_assign(0, "删除失败");
  172. }
  173. } else {
  174. return to_assign(1, "错误的请求");
  175. }
  176. }
  177. //工作记录列表
  178. public function schedule()
  179. {
  180. $param = get_params();
  181. $task_ids = Db::name('ProjectTask')->where(['delete_time' => 0, 'project_id' => $param['tid']])->column('id');
  182. $where = array();
  183. if (!empty($param['keywords'])) {
  184. $where[] = ['a.title', 'like', '%' . $param['keywords'] . '%'];
  185. }
  186. if (!empty($param['uid'])) {
  187. $where[] = ['a.admin_id', '=', $param['uid']];
  188. }
  189. if (!empty($task_ids)) {
  190. $where[] = ['a.tid', 'in', $task_ids];
  191. }
  192. $where[] = ['a.delete_time', '=', 0];
  193. $rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
  194. $list = Schedule::where($where)
  195. ->field('a.*,u.name,d.title as department,t.title as task,p.name as project,w.title as work_cate')
  196. ->alias('a')
  197. ->join('Admin u', 'a.admin_id = u.id', 'LEFT')
  198. ->join('Department d', 'u.did = d.id', 'LEFT')
  199. ->join('ProjectTask t', 'a.tid = t.id', 'LEFT')
  200. ->join('WorkCate w', 'w.id = t.cate', 'LEFT')
  201. ->join('Project p', 't.project_id = p.id', 'LEFT')
  202. ->order('a.end_time desc')
  203. ->paginate(['list_rows'=> $rows])
  204. ->each(function ($item, $key) {
  205. $item->start_time_a = empty($item->start_time) ? '' : date('Y-m-d', $item->start_time);
  206. $item->start_time_b = empty($item->start_time) ? '' : date('H:i', $item->start_time);
  207. $item->end_time_a = empty($item->end_time) ? '' : date('Y-m-d', $item->end_time);
  208. $item->end_time_b = empty($item->end_time) ? '' : date('H:i', $item->end_time);
  209. $item->start_time = empty($item->start_time) ? '' : date('Y-m-d H:i', $item->start_time);
  210. $item->end_time = empty($item->end_time) ? '' : date('H:i', $item->end_time);
  211. });
  212. return table_assign(0, '', $list);
  213. }
  214. //查看工作记录详情
  215. public function schedule_detail($id)
  216. {
  217. $id = get_params('id');
  218. $schedule = Schedule::where(['id' => $id])->find();
  219. if (!empty($schedule)) {
  220. $schedule['start_time_1'] = date('H:i', $schedule['start_time']);
  221. $schedule['end_time_1'] = date('H:i', $schedule['end_time']);
  222. $schedule['start_time'] = date('Y-m-d', $schedule['start_time']);
  223. $schedule['end_time'] = date('Y-m-d', $schedule['end_time']);
  224. $schedule['user'] = Db::name('Admin')->where(['id' => $schedule['admin_id']])->value('name');
  225. $schedule['department'] = Db::name('Department')->where(['id' => $schedule['did']])->value('title');
  226. }
  227. if (request()->isAjax()) {
  228. return to_assign(0, "", $schedule);
  229. } else {
  230. return $schedule;
  231. }
  232. }
  233. //任务的工作记录列表
  234. public function task_schedule()
  235. {
  236. $param = get_params();
  237. $where = array();
  238. $where['a.tid'] = $param['tid'];
  239. $where['a.delete_time'] = 0;
  240. $list = Db::name('Schedule')
  241. ->field('a.*,u.name')
  242. ->alias('a')
  243. ->join('Admin u', 'u.id = a.admin_id')
  244. ->order('a.create_time desc')
  245. ->where($where)
  246. ->select()->toArray();
  247. foreach ($list as $k => $v) {
  248. $list[$k]['start_time'] = empty($v['start_time']) ? '' : date('Y-m-d H:i', $v['start_time']);
  249. $list[$k]['end_time'] = empty($v['end_time']) ? '' : date('H:i', $v['end_time']);
  250. }
  251. return to_assign(0, '', $list);
  252. }
  253. public function project_user()
  254. {
  255. $param = get_params();
  256. $project = Db::name('Project')->where(['id' => $param['tid']])->find();
  257. $users = Db::name('ProjectUser')
  258. ->field('pu.*,a.name,a.mobile,p.title as position,d.title as department')
  259. ->alias('pu')
  260. ->join('Admin a', 'pu.uid = a.id', 'LEFT')
  261. ->join('Department d', 'a.did = d.id', 'LEFT')
  262. ->join('Position p', 'a.position_id = p.id', 'LEFT')
  263. ->order('pu.id asc')
  264. ->where(['pu.project_id' => $param['tid']])
  265. ->select()->toArray();
  266. if(!empty($users)){
  267. foreach ($users as $k => &$v) {
  268. $v['role'] = 0; //普通项目成员
  269. if ($v['uid'] == $project['admin_id']) {
  270. $v['role'] = 1; //项目创建人
  271. }
  272. if ($v['uid'] == $project['director_uid']) {
  273. $v['role'] = 2; //项目负责人
  274. }
  275. $v['create_time'] = date('Y-m-d', (int) $v['create_time']);
  276. if($v['delete_time'] > 0){
  277. $v['delete_time'] = date('Y-m-d', (int) $v['delete_time']);
  278. }
  279. else{
  280. $v['delete_time'] = '-';
  281. }
  282. $tids = Db::name('ProjectTask')->where([['project_id','=',$param['tid']],['delete_time','=',0]])->column('id');
  283. $schedule_map = [];
  284. $schedule_map[] = ['tid','in',$tids];
  285. $schedule_map[] = ['delete_time','=',0];
  286. $schedule_map[] = ['admin_id','=',$v['uid']];
  287. $v['schedules'] = Db::name('Schedule')->where($schedule_map)->count();
  288. $v['labor_times'] = Db::name('Schedule')->where($schedule_map)->sum('labor_time');
  289. $task_map = [];
  290. $task_map[] = ['project_id','=',$param['tid']];
  291. $task_map[] = ['delete_time', '=', 0];
  292. $task_map1 = [
  293. ['admin_id', '=', $v['uid']],
  294. ];
  295. $task_map2 = [
  296. ['director_uid', '=', $v['uid']],
  297. ];
  298. $task_map3 = [
  299. ['', 'exp', Db::raw("FIND_IN_SET('{$v['uid']}',assist_admin_ids)")],
  300. ];
  301. //任务总数
  302. $v['tasks_total'] = Db::name('ProjectTask')
  303. ->where(function ($query) use ($task_map1, $task_map2, $task_map3) {
  304. $query->where($task_map1)->whereor($task_map2)->whereor($task_map3);
  305. })
  306. ->where($task_map)->count();
  307. //已完成任务
  308. $task_map[] = ['status', '>', 2]; //已完成
  309. $v['tasks_finish'] = Db::name('ProjectTask')->where(function ($query) use ($task_map1, $task_map2, $task_map3) {
  310. $query->where($task_map1)->whereor($task_map2)->whereor($task_map3);
  311. })
  312. ->where($task_map)->count();
  313. //未完成任务
  314. $v['tasks_unfinish'] = $v['tasks_total'] - $v['tasks_finish'];
  315. $v['tasks_pensent'] = "100%";
  316. if ($v['tasks_total'] > 0) {
  317. $v['tasks_pensent'] = round($v['tasks_finish'] / $v['tasks_total'] * 100, 2) . "%";
  318. }
  319. }
  320. }
  321. to_assign(0, '', $users);
  322. }
  323. //新增项目成员
  324. public function add_user()
  325. {
  326. $param = get_params();
  327. if (request()->isPost()) {
  328. if($param['uid'] == 0){
  329. to_assign(1, '已取消');
  330. }
  331. $has = Db::name('ProjectUser')->where(['uid' => $param['uid'],'project_id'=>$param['project_id']])->find();
  332. if(!empty($has)){
  333. to_assign(1, '该员工已经是项目成员');
  334. }
  335. $project = Db::name('Project')->where(['id' => $param['project_id']])->find();
  336. if($this->uid == 1 || $this->uid == $project['admin_id'] || $this->uid == $project['director_uid']){
  337. $param['admin_id'] = $this->uid;
  338. $param['create_time'] = time();
  339. $res = Db::name('ProjectUser')->strict(false)->field(true)->insert($param);
  340. if ($res) {
  341. to_assign();
  342. }
  343. }else{
  344. to_assign(1, '只有项目创建者和负责人才有权限新增项目成员');
  345. }
  346. }
  347. }
  348. //移除项目成员
  349. public function remove_user()
  350. {
  351. $param = get_params();
  352. if (request()->isDelete()) {
  353. $detail = Db::name('ProjectUser')->where(['id' => $param['id']])->find();
  354. $project = Db::name('Project')->where(['id' => $detail['project_id']])->find();
  355. if($this->uid == $project['admin_id'] || $this->uid == $project['director_uid']){
  356. if($detail['uid'] == $project['admin_id']){
  357. to_assign(1, '该项目成员是项目的创建者,不能移除');
  358. }
  359. if($detail['uid'] == $project['director_uid']){
  360. to_assign(1, '该项目成员是项目的负责人,需要去除负责人权限才能移除');
  361. }
  362. $param['delete_time'] = time();
  363. if (Db::name('ProjectUser')->update($param) !== false) {
  364. return to_assign(0, "移除成功");
  365. } else {
  366. return to_assign(1, "移除失败");
  367. }
  368. }else{
  369. to_assign(1, '只有项目创建者和负责人才有权限移除项目成员');
  370. }
  371. }else{
  372. return to_assign(1, "错误的请求");
  373. }
  374. }
  375. //恢复项目成员
  376. public function recover_user()
  377. {
  378. $param = get_params();
  379. if (request()->isPost()) {
  380. $detail = Db::name('ProjectUser')->where(['id' => $param['id']])->find();
  381. $project = Db::name('Project')->where(['id' => $detail['project_id']])->find();
  382. if($this->uid == $project['admin_id'] || $this->uid == $project['director_uid']){
  383. $param['delete_time'] = 0;
  384. if (Db::name('ProjectUser')->update($param) !== false) {
  385. return to_assign(0, "恢复成功");
  386. } else {
  387. return to_assign(1, "恢复失败");
  388. }
  389. }else{
  390. to_assign(1, '只有项目创建者和负责人才有权限恢复项目成员');
  391. }
  392. }else{
  393. return to_assign(1, "错误的请求");
  394. }
  395. }
  396. //关闭项目
  397. public function close()
  398. {
  399. if (request()->isPost()) {
  400. $id = get_params("id");
  401. $project = Db::name('Project')->where('id', $id)->find();
  402. if($project['status'] == 3){
  403. return to_assign(1, "已完成的项目当不能关闭");
  404. }
  405. $auth = isAuth($this->uid,'project_admin','conf_1');
  406. if($project['admin_id'] == $this->uid || $project['director_uid'] == $this->uid || $auth==1){
  407. if (Db::name('Project')->where('id', $id)->update(['status'=>4]) !== false) {
  408. add_log('close', $id, [],'项目');
  409. return to_assign(0, "操作成功");
  410. } else {
  411. return to_assign(1, "操作失败");
  412. }
  413. }
  414. else{
  415. return to_assign(1, "只有项目管理员、项目创建人、项目负责人才有权限关闭");
  416. }
  417. } else {
  418. return to_assign(1, "错误的请求");
  419. }
  420. }
  421. //开启项目
  422. public function open()
  423. {
  424. if (request()->isPost()) {
  425. $id = get_params("id");
  426. $project = Db::name('Project')->where('id', $id)->find();
  427. if($project['status'] == 3){
  428. return to_assign(1, "已完成的项目当不能开启");
  429. }
  430. $auth = isAuth($this->uid,'project_admin','conf_1');
  431. if($project['admin_id'] == $this->uid || $project['director_uid'] == $this->uid || $auth==1){
  432. if (Db::name('Project')->where('id', $id)->update(['status'=>2]) !== false) {
  433. add_log('open', $id, [],'项目');
  434. return to_assign(0, "操作成功");
  435. } else {
  436. return to_assign(1, "操作失败");
  437. }
  438. }
  439. else{
  440. return to_assign(1, "只有项目管理员、项目创建人、项目负责人才有权限开启");
  441. }
  442. } else {
  443. return to_assign(1, "错误的请求");
  444. }
  445. }
  446. //删除已有的项目步骤
  447. public function step_del()
  448. {
  449. if (request()->isDelete()) {
  450. $id = get_params("id");
  451. $step = Db::name('ProjectStep')->where('id', $id)->find();
  452. if($step['is_current'] == 1){
  453. return to_assign(1, "项目当前所在步骤不能删除");
  454. }
  455. $project = Db::name('Project')->where('id', $step['project_id'])->find();
  456. $auth = isAuth($this->uid,'project_admin','conf_1');
  457. if($project['admin_id'] == $this->uid || $project['director_uid'] == $this->uid || $auth==1){
  458. if (Db::name('ProjectStep')->where('id', $id)->update(['delete_time'=>time()]) !== false) {
  459. return to_assign(0, "删除成功");
  460. } else {
  461. return to_assign(1, "删除失败");
  462. }
  463. }
  464. else{
  465. return to_assign(1, "只有项目管理员、项目创建人、项目负责人才有权限删除");
  466. }
  467. } else {
  468. return to_assign(1, "错误的请求");
  469. }
  470. }
  471. //审核
  472. public function step_check()
  473. {
  474. $param = get_params();
  475. $detail = Db::name('Project')->where(['id' => $param['id']])->find();
  476. if($detail['status'] > 3){
  477. return to_assign(1, "不支持该操作:项目已关闭");
  478. }
  479. //当前审核节点详情
  480. $step = Db::name('ProjectStep')->where(['project_id'=>$detail['id'],'is_current' => 1,'delete_time'=>0])->find();
  481. if (!empty($step) && $this->uid != $step['director_uid']){
  482. return to_assign(1,'您没权限操作');
  483. }
  484. //审核通过
  485. if($param['check'] == 1){
  486. $next_step = Db::name('ProjectStep')->where([['project_id','=',$detail['id']],['sort','>',$step['sort']],['delete_time','=',0]])->order('sort', 'asc')->find();
  487. if(!empty($next_step)){
  488. Db::name('ProjectStep')->where('id', $step['id'])->strict(false)->field(true)->update(['is_current'=>0]);
  489. Db::name('ProjectStep')->where('id', $next_step['id'])->strict(false)->field(true)->update(['is_current'=>1]);
  490. $param['status'] = 2;
  491. }
  492. else{
  493. //不存在下一步审核,审核结束
  494. $param['status'] = 3;
  495. Db::name('ProjectStep')->where('id', $step['id'])->strict(false)->field(true)->update(['is_current'=>0]);
  496. }
  497. //审核通过数据操作
  498. Db::name('Project')->strict(false)->field('status')->update($param);
  499. $checkData=array(
  500. 'project_id' => $detail['id'],
  501. 'step_id' => $step['id'],
  502. 'check_uid' => $this->uid,
  503. 'check_time' => time(),
  504. 'status' => $param['check'],
  505. 'content' => $param['content'],
  506. 'create_time' => time()
  507. );
  508. Db::name('ProjectStepRecord')->strict(false)->field(true)->insertGetId($checkData);
  509. add_log('check', $param['id'], $param,'项目阶段');
  510. return to_assign();
  511. }
  512. //回退审核
  513. else if($param['check'] == 2){
  514. //获取上一步的审核信息
  515. $prev_step = Db::name('ProjectStep')->where([['project_id','=',$detail['id']],['sort','<',$step['sort']],['delete_time','=',0]])->order('sort', 'desc')->find();
  516. if(!empty($prev_step)){
  517. //存在上一步审核
  518. Db::name('ProjectStep')->where('id', $step['id'])->strict(false)->field(true)->update(['is_current'=>0]);
  519. Db::name('ProjectStep')->where('id', $prev_step['id'])->strict(false)->field(true)->update(['is_current'=>1]);
  520. $checkData=array(
  521. 'project_id' => $detail['id'],
  522. 'step_id' => $step['id'],
  523. 'check_uid' => $this->uid,
  524. 'check_time' => time(),
  525. 'status' => $param['check'],
  526. 'content' => $param['content'],
  527. 'create_time' => time()
  528. );
  529. Db::name('ProjectStepRecord')->strict(false)->field(true)->insertGetId($checkData);
  530. add_log('refue', $param['id'], $param,'项目阶段');
  531. return to_assign();
  532. }
  533. else{
  534. return to_assign(1,'已经是第一个阶段了');
  535. }
  536. }
  537. //回退审核
  538. else if($param['check'] == 3){
  539. $auth = isAuth($this->uid,'project_admin','conf_1');
  540. if($detail['admin_id'] == $this->uid || $detail['director_uid'] == $this->uid || $auth==1){
  541. //获取最后一步的审核信息
  542. $prev_step = Db::name('ProjectStep')->where([['project_id','=',$detail['id']],['delete_time','=',0]])->order('sort', 'desc')->find();
  543. if(!empty($prev_step)){
  544. //最后一步审核
  545. Db::name('ProjectStep')->where('id', $prev_step['id'])->strict(false)->field(true)->update(['is_current'=>1]);
  546. Db::name('Project')->where('id', $detail['id'])->strict(false)->field(true)->update(['status'=>2]);
  547. $checkData=array(
  548. 'project_id' => $detail['id'],
  549. 'step_id' => $prev_step['id'],
  550. 'check_uid' => $this->uid,
  551. 'check_time' => time(),
  552. 'status' => $param['check'],
  553. 'content' => $param['content'],
  554. 'create_time' => time()
  555. );
  556. Db::name('ProjectStepRecord')->strict(false)->field(true)->insertGetId($checkData);
  557. add_log('refue', $param['id'], $param,'项目阶段');
  558. return to_assign();
  559. }
  560. else{
  561. return to_assign(1,'项目阶段不存在');
  562. }
  563. }
  564. else{
  565. return to_assign(1, "只有项目管理员、项目创建人、项目负责人才有权限操作");
  566. }
  567. }
  568. }
  569. //获取项目类别
  570. public function get_project_cate()
  571. {
  572. $list = get_base_data('project_cate');
  573. return to_assign(0, '', $list);
  574. }
  575. public function get_project_step()
  576. {
  577. $param = get_params();
  578. $where = array();
  579. if (!empty($param['keywords'])) {
  580. $where[] = ['title', 'like', '%' . $param['keywords'] . '%'];
  581. }
  582. $where[] = ['status', '=', 1];
  583. $where[] = ['delete_time', '=', 0];
  584. $rows = empty($param['limit']) ? get_config('app.page_size') : $param['limit'];
  585. $list = Db::name('Step')->where($where)->order('id desc')->paginate(['list_rows'=> $rows]);
  586. return table_assign(0, '', $list);
  587. }
  588. public function project_edit()
  589. {
  590. $param = get_params();
  591. $this->model->apiedit($param);
  592. }
  593. }