Check.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  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\api\controller;
  15. use app\api\BaseController;
  16. use think\facade\Db;
  17. class Check extends BaseController
  18. {
  19. //获取审核流程
  20. public function get_flows($check_name='')
  21. {
  22. $cate_id = Db::name('FlowCate')->where(['name' => $check_name,'status'=>1])->value('id');
  23. $flow = Db::name('Flow')->where(['cate_id' => $cate_id,'status'=>1,'delete_time'=>0])->select()->toArray();
  24. return to_assign(0, '', $flow);
  25. }
  26. //获取审核步骤人员
  27. public function get_flow_users($id=0)
  28. {
  29. $flow = Db::name('Flow')->where(['id' => $id])->find();
  30. $flow_data = unserialize($flow['flow_list']);
  31. if(!empty($flow_data)){
  32. foreach ($flow_data as $key => &$val) {
  33. $val['check_position'] = '';
  34. if($val['check_role'] == 1){
  35. $val['check_uids'] = get_department_leader($this->uid);
  36. }
  37. if($val['check_role'] == 2){
  38. $val['check_uids'] = get_department_leader($this->uid,1);
  39. }
  40. if($val['check_role'] == 3){
  41. $val['check_position'] = Db::name('Position')->where('id',$val['check_position_id'])->value('title');
  42. $check_uids = Db::name('Admin')->where(['position_id'=>$val['check_position_id'],'status'=>1])->column('id');
  43. $val['check_uids'] = implode(',',$check_uids);
  44. }
  45. $val['check_uids_info'] = Db::name('Admin')->field('id,name,thumb')->where('id','in',$val['check_uids'])->select()->toArray();
  46. }
  47. }
  48. else{
  49. $flow_data = [];
  50. }
  51. $data['copy_uids'] = $flow['copy_uids'];
  52. $data['copy_unames'] ='';
  53. if(!empty($flow['copy_uids'])){
  54. $copy_unames = Db::name('Admin')->where('id', 'in', $flow['copy_uids'])->column('name');
  55. $data['copy_unames'] = implode(',', $copy_unames);
  56. }
  57. $data['flow_data'] = $flow_data;
  58. return to_assign(0, '', $data);
  59. }
  60. //提交审批申请
  61. public function submit_check()
  62. {
  63. $param = get_params();
  64. $flow_cate = Db::name('FlowCate')->where(['name' => $param['check_name']])->find();
  65. $flow_list = Db::name('Flow')->where('id',$param['flow_id'])->value('flow_list');
  66. $flow = unserialize($flow_list);
  67. $subject = $flow_cate['title'];
  68. $check_table = $flow_cate['check_table'];
  69. //var_dump($flow);exit;
  70. //删除原来的审核流程和审核记录
  71. Db::name('FlowStep')->where(['action_id'=>$param['action_id'],'flow_id'=>$param['flow_id'],'delete_time'=>0])->update(['delete_time'=>time()]);
  72. Db::name('FlowRecord')->where(['action_id'=>$param['action_id'],'check_table'=>$check_table,'delete_time'=>0])->update(['delete_time'=>time()]);
  73. $recordData=array(
  74. 'action_id' => $param['action_id'],
  75. 'check_table' => $check_table,
  76. 'step_id' => 0,
  77. 'check_uid' => $this->uid,
  78. 'flow_id' => $param['flow_id'],
  79. 'check_time' => time(),
  80. 'check_status' => 0,
  81. 'content' => '提交申请',
  82. 'create_time' => time()
  83. );
  84. if (!isset($param['check_uids'])) {
  85. //非自由审批模式
  86. $step=[];
  87. $sort=0;
  88. foreach ($flow as $key => &$value){
  89. if($value['check_role'] == 1){
  90. $value['check_uids'] = get_department_leader($this->uid);
  91. $value['flow_name'] = '当前部门负责人';
  92. $value['check_position_id']=0;
  93. }
  94. if($value['check_role'] == 2){
  95. $value['check_uids'] = get_department_leader($this->uid,1);
  96. $value['flow_name'] = '上级部门负责人';
  97. $value['check_position_id']=0;
  98. }
  99. if($value['check_role'] == 3){
  100. $check_position = Db::name('Position')->where('id',$value['check_position_id'])->value('title');
  101. $check_uids = Db::name('Admin')->where(['position_id'=>$value['check_position_id'],'status'=>1])->column('id');
  102. $value['check_uids'] = implode(',',$check_uids);
  103. $value['flow_name'] = $check_position;
  104. }
  105. if($value['check_role'] == 4){
  106. $value['flow_name'] = '指定人员';
  107. $value['check_position_id']=0;
  108. }
  109. if($value['check_role'] == 5){
  110. $value['flow_name'] = '指定人员';
  111. $value['check_position_id']=0;
  112. $value['check_types']=1;
  113. }
  114. if(!empty($value['check_uids'])){
  115. $step[]=[
  116. 'action_id' => $param['action_id'],
  117. 'flow_id' => $param['flow_id'],
  118. 'flow_name' => $value['flow_name'],
  119. 'check_position_id' => $value['check_position_id'],
  120. 'check_role' => $value['check_role'],
  121. 'check_types' => $value['check_types'],
  122. 'check_uids' => $value['check_uids'],
  123. 'create_time' => time(),
  124. 'sort'=>$sort
  125. ];
  126. $sort++;
  127. }
  128. }
  129. if(empty($step)){
  130. return to_assign(1,'审批流程设置有问题,无法提交审批申请,请联系HR或者管理员重新设置审批流程');
  131. }
  132. $res = Db::name('FlowStep')->strict(false)->field(true)->insertAll($step);
  133. if($res!=false){
  134. Db::name('FlowRecord')->strict(false)->field(true)->insertGetId($recordData);
  135. Db::name($check_table)->strict(false)->field(true)->update([
  136. 'id'=>$param['action_id'],
  137. 'check_flow_id'=>$param['flow_id'],
  138. 'check_status'=>1,
  139. 'check_step_sort'=>0,
  140. 'check_uids'=>$step[0]['check_uids'],
  141. 'check_copy_uids'=>isset($param['check_copy_uids'])?$param['check_copy_uids']:''
  142. ]);
  143. //发送消息通知
  144. if($flow_cate['template_id']>0){
  145. $msg=[
  146. 'from_uid'=>$this->uid,//发送人
  147. 'to_uids'=>$step[0]['check_uids'],//接收人
  148. 'template_id'=>$flow_cate['template_id'],//消息模板ID
  149. 'template_field'=>'0',//消息模板字段
  150. 'content'=>[ //消息内容
  151. 'create_time'=>date('Y-m-d H:i:s'),
  152. 'action_id'=>$param['action_id'],
  153. 'title' => $subject
  154. ]
  155. ];
  156. event('SendMessage',$msg);
  157. }
  158. return to_assign();
  159. }
  160. else{
  161. return to_assign(1,'操作失败');
  162. }
  163. }
  164. else{
  165. //自由审批模式
  166. $flow_step = array(
  167. 'action_id' => $param['action_id'],
  168. 'flow_id' => $param['flow_id'],
  169. 'flow_name' => '自由审批',
  170. 'check_uids' => $param['check_uids'],
  171. 'create_time' => time()
  172. );
  173. $res = Db::name('FlowStep')->strict(false)->field(true)->insertGetId($flow_step);
  174. if($res!=false){
  175. Db::name('FlowRecord')->strict(false)->field(true)->insertGetId($recordData);
  176. Db::name($check_table)->strict(false)->field(true)->update([
  177. 'id'=>$param['action_id'],
  178. 'check_flow_id'=>$param['flow_id'],
  179. 'check_status'=>1,
  180. 'check_step_sort'=>0,
  181. 'check_uids'=>$param['check_uids'],
  182. 'check_copy_uids'=>isset($param['check_copy_uids'])?$param['check_copy_uids']:''
  183. ]);
  184. //发送消息通知
  185. if($flow_cate['template_id']>0){
  186. $msg=[
  187. 'from_uid'=>$this->uid,//发送人
  188. 'to_uids'=>$param['check_uids'],//接收人
  189. 'template_id'=>$flow_cate['template_id'],//消息模板ID
  190. 'template_field'=>'0',//消息模板字段
  191. 'content'=>[ //消息内容
  192. 'create_time'=>date('Y-m-d H:i:s'),
  193. 'action_id'=>$param['action_id'],
  194. 'title' => $subject
  195. ]
  196. ];
  197. event('SendMessage',$msg);
  198. }
  199. return to_assign();
  200. }
  201. else{
  202. return to_assign(1,'操作失败');
  203. }
  204. }
  205. }
  206. //获取审核流程节点
  207. public function get_flow_nodes($check_name='',$action_id=0,$flow_id=0)
  208. {
  209. $flow_cate = Db::name('FlowCate')->where(['name' => $check_name])->find();
  210. $did = $this->did;
  211. $map = [];
  212. $map[] = ['cate_id','=',$flow_cate['id']];
  213. $map[] = ['status','=',1];
  214. $map[] = ['delete_time','=',0];
  215. $map1=[
  216. ['department_ids','=','']
  217. ];
  218. $map2=[
  219. ['', 'exp', Db::raw("FIND_IN_SET('{$did}',department_ids)")]
  220. ];
  221. $whereOr =[$map1,$map2];
  222. if($action_id==0){
  223. $flow = Db::name('Flow')
  224. ->where($map)
  225. ->where(function ($query) use($whereOr) {
  226. if (!empty($whereOr)){
  227. $query->whereOr($whereOr);
  228. }
  229. })
  230. ->select()->toArray();
  231. foreach ($flow as $k => &$v) {
  232. $v['is_copy'] = $flow_cate['is_copy'];
  233. }
  234. return to_assign(0, '', $flow);
  235. }
  236. $check_table = $flow_cate['check_table'];
  237. $detail = Db::name($check_table)->where('id',$action_id)->field('id,admin_id,check_status,check_flow_id,check_step_sort,check_uids,check_copy_uids')->find();
  238. //创建人
  239. $is_creater=0;
  240. if($detail['admin_id'] == $this->uid){
  241. $is_creater=1;
  242. }
  243. $detail['is_creater'] = $is_creater;
  244. $detail['admin_name'] = Db::name('Admin')->where('id',$detail['admin_id'])->value('name');
  245. //当前审批人
  246. $is_checker=0;
  247. if(in_array($this->uid,explode(',',$detail['check_uids']))){
  248. $is_checker=1;
  249. }
  250. $detail['is_checker'] = $is_checker;
  251. $detail['is_copy'] = $flow_cate['is_copy'];
  252. $detail['is_file'] = $flow_cate['is_file'];
  253. $detail['is_export'] = $flow_cate['is_export'];
  254. $detail['is_back'] = $flow_cate['is_back'];
  255. $detail['is_reversed'] = $flow_cate['is_reversed'];
  256. //审批记录
  257. $check_record = Db::name('FlowRecord')
  258. ->field('f.*,a.name')
  259. ->alias('f')
  260. ->join('Admin a', 'a.id = f.check_uid', 'left')
  261. ->where(['f.action_id' => $action_id,'f.check_table'=>$check_table])->select()->toArray();
  262. foreach ($check_record as $kk => &$vv) {
  263. $vv['check_time_str'] = date('Y-m-d H:i', $vv['check_time']);
  264. $vv['status_str'] = '提交';
  265. if($vv['check_status'] == 1){
  266. $vv['status_str'] = '审核通过';
  267. }
  268. else if($vv['check_status'] == 2){
  269. $vv['status_str'] = '审核拒绝';
  270. }
  271. if($vv['check_status'] == 3){
  272. $vv['status_str'] = '撤销';
  273. }
  274. if($vv['check_status'] == 4){
  275. $vv['status_str'] = '反确认';
  276. }
  277. if(!empty($vv['check_files'])){
  278. $file_array = Db::name('File')->where('id','in',$vv['check_files'])->select()->toArray();
  279. $vv['file_array'] = $file_array;
  280. }
  281. else{
  282. $vv['file_array'] = [];
  283. }
  284. }
  285. $detail['check_record'] = $check_record;
  286. if($detail['check_status']==0 || $detail['check_status']==4){
  287. //$flow = Db::name('Flow')->where(['cate_id' => $flow_cate['id'],'status'=>1,'delete_time'=>0])->select()->toArray();
  288. $flow = Db::name('Flow')
  289. ->where($map)
  290. ->where(function ($query) use($whereOr) {
  291. if (!empty($whereOr)){
  292. $query->whereOr($whereOr);
  293. }
  294. })
  295. ->select()->toArray();
  296. $detail['flow'] = $flow;
  297. }
  298. else{
  299. //当前审批人
  300. $detail['check_unames']='-';
  301. if(!empty($detail['check_uids'])){
  302. $check_unames = Db::name('Admin')->where('id','in',$detail['check_uids'])->column('name');
  303. $detail['check_unames'] = implode(',',$check_unames);
  304. }
  305. //抄送人
  306. $detail['copy_unames']='-';
  307. if(!empty($detail['check_copy_uids'])){
  308. $copy_uids = Db::name('Admin')->where('id','in',$detail['check_copy_uids'])->column('name');
  309. $detail['copy_unames'] = implode(',',$copy_uids);
  310. }
  311. //审批节点步骤
  312. $nodes = Db::name('FlowStep')->where(['action_id'=>$action_id,'flow_id'=>$flow_id,'delete_time'=>0])->order('sort asc')->select()->toArray();
  313. foreach ($nodes as $key => &$val) {
  314. $check_uids_info = Db::name('Admin')->field('id,name,thumb')->where('id','in',$val['check_uids'])->select()->toArray();
  315. foreach ($check_uids_info as $k => &$v) {
  316. $v['check_time'] = 0;
  317. $v['content'] = '';
  318. $v['check_status'] = 0;
  319. $check_array = Db::name('FlowRecord')->where(['check_uid' => $v['id'],'step_id' => $val['id']])->order('check_time desc')->select()->toArray();
  320. if(!empty($check_array)){
  321. $checked = $check_array[0];
  322. $v['check_time'] = date('Y-m-d H:i', $checked['check_time']);
  323. $v['content'] = $checked['content'];
  324. $v['check_status'] = $checked['check_status'];
  325. }
  326. }
  327. $val['check_uids_info'] = $check_uids_info;
  328. if(!empty($val['check_position_id'])){
  329. $val['check_position'] = Db::name('Position')->where('id',$val['check_position_id'])->value('title');
  330. }
  331. else{
  332. $val['check_position'] = '';
  333. }
  334. $check_list = [];
  335. foreach ($check_record as $kkk => $vvv) {
  336. if($vvv['step_id'] == $val['id'])
  337. $check_list[] = $vvv;
  338. }
  339. $val['check_list'] = $check_list;
  340. }
  341. $detail['nodes'] = $nodes;
  342. //当前审核节点
  343. $step = Db::name('FlowStep')->where(['action_id'=>$action_id,'flow_id'=>$flow_id,'sort'=>$detail['check_step_sort'],'delete_time'=>0])->find();
  344. $detail['step'] = $step;
  345. }
  346. return to_assign(0, '', $detail);
  347. }
  348. //流程审核
  349. public function flow_check()
  350. {
  351. $param = get_params();
  352. $param['check_files'] = isset($param['check_files']) ? $param['check_files'] : '';
  353. $flow_cate = Db::name('FlowCate')->where(['name' => $param['check_name']])->find();
  354. $subject = $flow_cate['title'];
  355. $action_id = $param['action_id'];
  356. $check_table = $flow_cate['check_table'];
  357. $param['send_msg'] = 1;
  358. //审核内容详情
  359. $detail = Db::name($check_table)->where(['id' => $action_id])->find();
  360. if (empty($detail)){
  361. return to_assign(1,'审批数据错误');
  362. }
  363. //当前审核节点详情
  364. $step = Db::name('FlowStep')->where(['action_id'=>$action_id,'flow_id'=>$detail['check_flow_id'],'sort'=>$detail['check_step_sort'],'delete_time'=>0])->find();
  365. //审核通过时
  366. if($param['check'] == 1){
  367. $check_uids = explode(",",strval($detail['check_uids']));
  368. if (!in_array($this->uid, $check_uids)){
  369. return to_assign(1,'您没权限审核该审批');
  370. }
  371. //审批通过
  372. if($step['check_role'] == 0){
  373. //自由人审批
  374. if($param['check_node'] == 2){
  375. $next_step = $detail['check_step_sort']+1;
  376. $flow_step = array(
  377. 'action_id' => $action_id,
  378. 'sort' => $next_step,
  379. 'flow_id' => $detail['check_flow_id'],
  380. 'check_uids' => $param['check_uids'],
  381. 'create_time' => time()
  382. );
  383. $fid = Db::name('FlowStep')->strict(false)->field(true)->insertGetId($flow_step);
  384. //下一步审核步骤
  385. $param['check_step_sort'] = $next_step;
  386. $param['check_status'] = 1;
  387. }
  388. else{
  389. //不存在下一步审核,审核结束
  390. $param['check_status'] = 2;
  391. $param['check_uids'] ='';
  392. }
  393. }
  394. else{
  395. //查询当前步骤审批记录数
  396. $check_count = Db::name('FlowRecord')->where(['action_id'=>$action_id,'flow_id'=>$detail['check_flow_id'],'step_id'=>$step['id']])->count();
  397. //当前当前步骤审批应有记录数
  398. $flow_count = explode(',', $step['check_uids']);
  399. $param['check_status'] = 1;
  400. $uids_array = explode(',',$detail['check_uids']);
  401. $new_uids= array_diff($uids_array, [$this->uid]);
  402. $param['check_uids'] = implode(',',$new_uids);
  403. if((($check_count+1) >= count($flow_count) && $step['check_types']==1) || $step['check_types']==2){
  404. //会签
  405. $next_step = Db::name('FlowStep')->where(['action_id'=>$action_id,'flow_id'=>$detail['check_flow_id'],'sort'=>($detail['check_step_sort']+1),'delete_time'=>0])->find();
  406. if($next_step){
  407. //存在下一步审核
  408. if($next_step['check_role'] == 1){
  409. $param['check_uids'] = get_department_leader($detail['admin_id']);
  410. }
  411. else if($next_step['check_role'] == 2){
  412. $param['check_uids'] = get_department_leader($detail['admin_id'],1);
  413. }
  414. else if($next_step['check_role'] == 3){
  415. $uids = Db::name('Admin')->where(['position_id'=>$next_step['check_position_id'],'status'=>1])->column('id');
  416. $param['check_uids'] = implode(',' ,$uids);
  417. }
  418. else{
  419. $param['check_uids'] = $next_step['check_uids'];
  420. }
  421. $param['check_step_sort'] = $detail['check_step_sort']+1;
  422. $param['check_status'] = 1;
  423. }
  424. else{
  425. //不存在下一步审核,审核结束
  426. $param['check_status'] = 2;
  427. $param['check_uids'] ='';
  428. }
  429. }
  430. else{
  431. $param['send_msg'] = 0;
  432. }
  433. }
  434. if($param['check_status'] == 1 && empty($param['check_uids'])){
  435. return to_assign(1,'找不到下一步的审批人,该审批流程设置有问题,请联系HR或者管理员');
  436. }
  437. //添加历史审核人
  438. if(empty($detail['check_history_uids'])){
  439. $param['check_history_uids'] = $this->uid;
  440. }
  441. else{
  442. $param['check_history_uids'] = $detail['check_history_uids'].','.$this->uid;
  443. }
  444. $res = Db::name($check_table)->strict(false)->field('check_step_sort,check_status,check_history_uids,check_uids')->where(['id' => $action_id])->update($param);
  445. if($res!==false){
  446. $checkData=array(
  447. 'action_id' => $action_id,
  448. 'check_table' => $check_table,
  449. 'step_id' => $step['id'],
  450. 'check_uid' => $this->uid,
  451. 'flow_id' => $detail['check_flow_id'],
  452. 'check_time' => time(),
  453. 'check_files' => $param['check_files'],
  454. 'check_status' => $param['check'],
  455. 'content' => $param['content'],
  456. 'create_time' => time()
  457. );
  458. $aid = Db::name('FlowRecord')->strict(false)->field(true)->insertGetId($checkData);
  459. add_log('check', $action_id, $param,$subject);
  460. //发送消息通知
  461. if($param['check_status'] == 1){
  462. if($flow_cate['template_id']>0 && $param['send_msg']==1){
  463. $msg=[
  464. 'from_uid'=>$detail['admin_id'],//发送人
  465. 'to_uids'=>$param['check_uids'],//接收人
  466. 'template_id'=>$flow_cate['template_id'],//消息模板ID
  467. 'template_field'=>'0',//消息模板字段,审批中
  468. 'content'=>[ //消息内容
  469. 'create_time'=>date('Y-m-d H:i:s',$detail['create_time']),
  470. 'action_id'=>$action_id,
  471. 'title' => $subject
  472. ]
  473. ];
  474. event('SendMessage',$msg);
  475. }
  476. }
  477. if($param['check_status'] == 2){
  478. if($flow_cate['template_id']>0){
  479. $msg=[
  480. 'from_uid'=>$this->uid,//发送人
  481. 'to_uids'=>$detail['admin_id'],//接收人
  482. 'template_id'=>$flow_cate['template_id'],//消息模板ID
  483. 'template_field'=>'1',//消息模板字段,审核通过
  484. 'content'=>[ //消息内容
  485. 'create_time'=>date('Y-m-d H:i:s',$detail['create_time']),
  486. 'action_id'=>$action_id,
  487. 'title' => $subject
  488. ]
  489. ];
  490. event('SendMessage',$msg);
  491. if(!empty($detail['check_copy_uids'])){
  492. $msgs=[
  493. 'from_uid'=>$detail['admin_id'],//发送人
  494. 'to_uids'=>$detail['check_copy_uids'],//接收人
  495. 'template_id'=>$flow_cate['template_id'],//消息模板ID
  496. 'template_field'=>'3',//消息模板字段,审核通过抄送人接收
  497. 'content'=>[ //消息内容
  498. 'create_time'=>date('Y-m-d H:i:s',$detail['create_time']),
  499. 'action_id'=>$action_id,
  500. 'title' => $subject
  501. ]
  502. ];
  503. event('SendMessage',$msgs);
  504. }
  505. }
  506. }
  507. return to_assign(0,'操作成功',['check_status'=>$param['check_status']]);
  508. }
  509. else{
  510. return to_assign(1,'操作失败');
  511. }
  512. }
  513. //审批拒绝
  514. else if($param['check'] == 2){
  515. $check_uids = explode(",",strval($detail['check_uids']));
  516. if (!in_array($this->uid, $check_uids)){
  517. return to_assign(1,'您没权限审核该审批');
  518. }
  519. //拒绝审核,数据操作
  520. $param['check_status'] = 3;
  521. //添加历史审核人
  522. if(empty($detail['check_history_uids'])){
  523. $param['check_history_uids'] = $this->uid;
  524. }
  525. else{
  526. $param['check_history_uids'] = $detail['check_history_uids'].','.$this->uid;
  527. }
  528. $param['check_uids'] ='';
  529. if($step['check_role'] == 5){
  530. //获取上一步的审核信息
  531. $prev_step = Db::name('FlowStep')->where(['action_id'=>$action_id,'flow_id'=>$detail['check_flow_id'],'sort'=>($detail['check_step_sort']-1),'delete_time'=>0])->find();
  532. if($prev_step){
  533. //存在上一步审核
  534. $param['check_step_sort'] = $prev_step['sort'];
  535. $param['check_uids'] = $prev_step['check_uids'];
  536. $param['check_status'] = 1;
  537. }
  538. else{
  539. //不存在上一步审核,审核初始化步骤
  540. $param['check_step_sort'] = 0;
  541. $param['check_uids'] = '';
  542. $param['check_status'] = 0;
  543. }
  544. }
  545. $res = Db::name($check_table)->strict(false)->field('check_step_sort,check_status,check_history_uids,check_uids')->where(['id' => $action_id])->update($param);
  546. if($res!==false){
  547. $checkData=array(
  548. 'action_id' => $action_id,
  549. 'check_table' => $check_table,
  550. 'step_id' => $step['id'],
  551. 'check_uid' => $this->uid,
  552. 'flow_id' => $detail['check_flow_id'],
  553. 'check_time' => time(),
  554. 'check_status' => $param['check'],
  555. 'check_files' => $param['check_files'],
  556. 'content' => $param['content'],
  557. 'create_time' => time()
  558. );
  559. $aid = Db::name('FlowRecord')->strict(false)->field(true)->insertGetId($checkData);
  560. add_log('refue', $action_id, $param,$subject);
  561. //发送消息通知
  562. if($flow_cate['template_id']>0){
  563. $msg=[
  564. 'from_uid'=>$this->uid,//发送人
  565. 'to_uids'=>$detail['admin_id'],//接收人
  566. 'template_id'=>$flow_cate['template_id'],//消息模板ID
  567. 'template_field'=>'2',//消息模板字段,审核拒绝
  568. 'content'=>[ //消息内容
  569. 'create_time'=>date('Y-m-d H:i:s',$detail['create_time']),
  570. 'action_id'=>$detail['id'],
  571. 'title' => $subject
  572. ]
  573. ];
  574. event('SendMessage',$msg);
  575. }
  576. return to_assign(0,'操作成功',['check_status'=>$param['check_status']]);
  577. }
  578. else{
  579. return to_assign(1,'操作失败');
  580. }
  581. }
  582. else if($param['check'] == 3){
  583. //审批撤回
  584. if($detail['admin_id'] != $this->uid){
  585. return to_assign(1,'你没权限操作');
  586. }
  587. //撤销审核,数据操作
  588. $param['check_status'] = 4;
  589. $param['check_uids'] ='';
  590. $param['check_step_sort'] =0;
  591. $res = Db::name($check_table)->strict(false)->field('check_step_sort,check_status,check_uids')->where(['id' => $action_id])->update($param);
  592. if($res!==false){
  593. $checkData=array(
  594. 'action_id' => $action_id,
  595. 'check_table' => $check_table,
  596. 'step_id' => $step['id'],
  597. 'check_uid' => $this->uid,
  598. 'flow_id' => $detail['check_flow_id'],
  599. 'check_time' => time(),
  600. 'check_status' => $param['check'],
  601. 'content' => $param['content'],
  602. 'create_time' => time()
  603. );
  604. $aid = Db::name('FlowRecord')->strict(false)->field(true)->insertGetId($checkData);
  605. add_log('back', $action_id, $param,$subject);
  606. return to_assign(0,'操作成功',['check_status'=>$param['check_status']]);
  607. }else{
  608. return to_assign(1,'操作失败');
  609. }
  610. }
  611. else if($param['check'] == 4){
  612. //审批反确认
  613. //反确认审核,数据回到待提交审批
  614. $param['check_status'] = 0;
  615. $param['check_uids'] ='';
  616. $param['check_step_sort'] =0;
  617. $res = Db::name($check_table)->strict(false)->field('check_step_sort,check_status,check_uids')->where(['id' => $action_id])->update($param);
  618. if($res!==false){
  619. $checkData=array(
  620. 'action_id' => $action_id,
  621. 'check_table' => $check_table,
  622. 'step_id' => $step['id'],
  623. 'check_uid' => $this->uid,
  624. 'flow_id' => $detail['check_flow_id'],
  625. 'check_time' => time(),
  626. 'check_status' => 4,
  627. 'content' => $param['content'],
  628. 'create_time' => time()
  629. );
  630. $aid = Db::name('FlowRecord')->strict(false)->field(true)->insertGetId($checkData);
  631. add_log('back', $action_id, $param,$subject);
  632. return to_assign(0,'操作成功',['check_status'=>0]);
  633. }else{
  634. return to_assign(1,'操作失败');
  635. }
  636. }
  637. }
  638. }