Process.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. namespace app\admin\controller;
  3. use app\BaseController;
  4. use think\App;
  5. use think\facade\Db;
  6. use think\facade\Validate;
  7. use app\admin\model\Process as ProcessModel;
  8. use app\admin\model\ActionProcess as APModel;
  9. //流程单
  10. class Process extends Base
  11. {
  12. public function __construct(App $app)
  13. {
  14. parent::__construct($app);
  15. }
  16. /**
  17. * @return \think\response\Json|void
  18. * @throws \think\db\exception\DataNotFoundException
  19. * @throws \think\db\exception\DbException
  20. * @throws \think\db\exception\ModelNotFoundException
  21. */
  22. public function list()
  23. {
  24. $page = isset($this->post['page']) && $this->post['page'] != "" ? intval($this->post['page']) : 1;
  25. $size = isset($this->post['size']) && $this->post['size'] != "" ? intval($this->post['size']) : 10;
  26. $count = Db::name("process")->where('is_del', 0)->count();
  27. $total = ceil($count / $size);
  28. $page = $page > $total ? $total : $page;
  29. $list = Db::name("process")->where('is_del', 0)->page($page, $size)->select();
  30. return app_show(0, "获取成功", ["list" => $list, "count" => $count]);
  31. }
  32. /**
  33. * @return \think\response\Json|void
  34. * @throws \think\db\exception\DataNotFoundException
  35. * @throws \think\db\exception\DbException
  36. * @throws \think\db\exception\ModelNotFoundException
  37. */
  38. public function info()
  39. {
  40. $id = isset($this->post['id']) && $this->post['id'] != "" ? intval($this->post['id']) : "";
  41. if ($id == "") {
  42. return error_show(1004, "参数id 不能为空");
  43. }
  44. $info = Db::name("process")->where(['id' => $id, "is_del" => 0])->find();
  45. if (empty($info)) {
  46. return error_show(1004, "流程信息未找到");
  47. }
  48. $list = Db::name("action_process")->where(["pid" => $id, "is_del" => 0])->order("weight,id")->select();
  49. $info['item'] = empty($list) ? [] : $list;
  50. return app_show(0, "获取成功", $info);
  51. }
  52. /**
  53. * @return \think\response\Json|void
  54. * @throws \think\db\exception\DataNotFoundException
  55. * @throws \think\db\exception\DbException
  56. * @throws \think\db\exception\ModelNotFoundException
  57. */
  58. public function process()
  59. {
  60. $process_type = isset($this->post['type']) && $this->post['type'] != "" ? $this->post['type'] : "";
  61. if ($process_type == "") {
  62. return error_show(1004, "参数type 不能为空");
  63. }
  64. $orderCode = isset($this->post['orderCode']) && $this->post['orderCode'] != "" ? $this->post['orderCode'] : "";
  65. if ($orderCode == "") {
  66. return error_show(1004, "参数orderCode不能为空");
  67. }
  68. $list = Db::name("action_process")
  69. ->where(['order_type' => $process_type, "is_del" => 0, "status" => 1])
  70. ->order("weight desc,id desc")
  71. ->column('*', 'order_process');
  72. //根据所有的状态,查询对应的操作
  73. $order_process_s = array_column($list, 'order_process');
  74. $rs = Db::name("process_order")
  75. ->where(["order_type" => $process_type])
  76. ->whereIn('action_process', $order_process_s)
  77. ->field('id,action_uid,action_name,addtime,action_process,order_type');
  78. if (is_numeric($orderCode)) $rs->where('order_id', $orderCode);
  79. else $rs->where('order_code', $orderCode);
  80. $node = $rs
  81. ->select()
  82. ->toArray();
  83. foreach ($node as &$value) {
  84. $value['order_process'] = isset($list[$value['action_process']]['order_process']) ? $list[$value['action_process']]['order_process'] : 0;
  85. $value['order_name'] = isset($list[$value['action_process']]['order_name']) ? $list[$value['action_process']]['order_name'] : '';
  86. $value['pid'] = isset($list[$value['action_process']]['pid']) ? $list[$value['action_process']]['pid'] : '';
  87. $value['status_name'] = isset($list[$value['action_process']]['status_name']) ? $list[$value['action_process']]['status_name'] : '';
  88. $value['roleid'] = isset($list[$value['action_process']]['roleid']) ? $list[$value['action_process']]['roleid'] : '';
  89. $value['status'] = isset($list[$value['action_process']]['status']) ? $list[$value['action_process']]['status'] : '';
  90. $value['weight'] = isset($list[$value['action_process']]['weight']) ? $list[$value['action_process']]['weight'] : '';
  91. $value['is_del'] = isset($list[$value['action_process']]['is_del']) ? $list[$value['action_process']]['is_del'] : '';
  92. // $value = isset($list[$value['action_process']])?array_merge($list[$value['action_process']],$value):$value;
  93. // $node = Db::name("process_order")
  94. // ->where([
  95. // "order_type"=>$value['order_type'],
  96. // "action_process"=>$value['order_process'],
  97. // "order_code"=>$orderCode])
  98. // ->find();
  99. // $value['action_uid']= isset($node[$value['order_process']]['action_uid']) ? $node[$value['order_process']]['action_uid']:'';
  100. // $value['action_name']= isset($node[$value['order_process']]['action_name']) ? $node[$value['order_process']]['action_name']:'';
  101. // $value['addtime']= isset($node[$value['order_process']]['addtime']) ? $node[$value['order_process']]['addtime']:'';
  102. // $data[]=$value;
  103. }
  104. return app_show(0, "获取成功", $node);
  105. }
  106. //获取流程列表
  107. public function getList()
  108. {
  109. $param = $this->request->filter('trim')->only(['status' => '', 'process_name' => '', 'creater' => '', 'addtime_start' => '', 'addtime_end' => '', 'page' => 1, 'size' => 15], 'post');
  110. $where = [['is_del', '=', ProcessModel::$is_del_normal]];
  111. if ($param['status'] != '') $where[] = ['status', '=', $param['status']];
  112. if ($param['process_name'] != '') $where[] = ['process_name', 'like', '%' . $param['process_name'] . '%'];
  113. if ($param['creater'] != '') $where[] = ['creater', 'like', '%' . $param['creater'] . '%'];
  114. if ($param['addtime_start'] != '' && $param['addtime_end'] != '') $where[] = ['addtime', 'between', [$param['addtime_start'], $param['addtime_end'] . ' 23:59:59']];
  115. $count = Db::name('process')
  116. ->where($where)
  117. ->count('id');
  118. $list = ProcessModel::field('id,process_name,process_type,status,creater,addtime')
  119. ->where($where)
  120. ->order(['weight'=>'desc','id'=>'desc'])
  121. ->page($param['page'], $param['size'])
  122. ->select()
  123. ->toArray();
  124. return app_show(0, '获取成功', ['count' => $count, 'list' => $list]);
  125. }
  126. //增加流程
  127. public function add()
  128. {
  129. $param = $this->request->filter('trim')->only(['token', 'process_name', 'process_type', 'remark' => ''], 'post');
  130. $val = Validate::rule([
  131. 'token' => 'require',
  132. 'process_name|流程名称' => 'require|max:255',
  133. 'process_type|流程值' => 'require|max:255|checkProcessType:',
  134. ]);
  135. $val->extend('checkProcessType', function ($val) {
  136. return ProcessModel::where(['process_type' => $val, 'is_del' => ProcessModel::$is_del_normal])->field('id')->findOrEmpty()->isEmpty() ? true : '该流程值已存在';
  137. });
  138. if (!$val->check($param)) return error_show(1005, $val->getError());
  139. $user = GetUserInfo($param['token']);
  140. $uid = isset($user['data']['id']) ? $user['data']['id'] : 0;
  141. $uname = isset($user['data']['nickname']) ? $user['data']['nickname'] : '';
  142. $date = date('Y-m-d H:i:s');
  143. return ProcessModel::create(array_merge($param, [
  144. 'is_del' => ProcessModel::$is_del_normal,
  145. 'status' => ProcessModel::$status_disable,
  146. 'createrid' => $uid,
  147. 'creater' => $uname,
  148. 'addtime' => $date,
  149. 'updaterid' => $uid,
  150. 'updater' => $uname,
  151. 'updatetime' => $date,
  152. ]))->save() ? app_show(0, '新增流程成功') : error_show(1005, '新增流程失败');
  153. }
  154. //读取
  155. public function read()
  156. {
  157. $id = $this->request->filter('trim')->post('id/d', 0);
  158. $res = ProcessModel::field('id,process_name,process_type')
  159. ->where(['id' => $id, 'is_del' => ProcessModel::$is_del_normal])
  160. ->findOrEmpty()
  161. ->toArray();
  162. return app_show(0, '获取详情成功', $res);
  163. }
  164. //修改流程
  165. public function update()
  166. {
  167. $param = $this->request->filter('trim')->only(['token', 'id', 'process_name', 'process_type', 'status', 'is_del', 'remark'], 'post');
  168. $val = Validate::rule([
  169. 'token' => 'require',
  170. 'id|ID' => 'require|number|gt:0',
  171. 'process_name|流程名称' => 'max:255',
  172. 'process_type|流程值' => 'max:255|checkProcessType:',
  173. 'status|状态' => 'number|in:' . ProcessModel::$status_normal . ',' . ProcessModel::$status_disable,
  174. 'is_del|是否删除' => 'number|eq:' . ProcessModel::$is_deleted,
  175. ]);
  176. $val->extend('checkProcessType', function ($val, $rule, $data) {
  177. return ProcessModel::where(['process_type' => $val, 'is_del' => ProcessModel::$is_del_normal])->where('id', '<>', $data['id'])->field('id')->findOrEmpty()->isEmpty() ? true : '该流程值已存在';
  178. });
  179. if (!$val->check($param)) return error_show(1005, $val->getError());
  180. if (isset($param['status']) && $param['status'] == ProcessModel::$status_normal) {
  181. //启用流程时候,校验该流程下有没有开始节点和结束节点
  182. $ap_info = APModel::where([
  183. 'process_id' => $param['id'],
  184. 'is_del' => APModel::$is_del_normal,
  185. 'status' => APModel::$status_normal
  186. ])->whereIn('action_type', [
  187. APModel::$action_type_start,
  188. APModel::$action_type_end
  189. ])->column('id', 'action_type');
  190. if (count($ap_info) != 2) return error_show(1005, '该流程下缺少开始节点和结束节点');
  191. }
  192. $user = GetUserInfo($param['token']);
  193. $uid = isset($user['data']['id']) ? $user['data']['id'] : 0;
  194. $uname = isset($user['data']['nickname']) ? $user['data']['nickname'] : '';
  195. $date = date('Y-m-d H:i:s');
  196. return ProcessModel::where(['id' => $param['id'], 'is_del' => ProcessModel::$is_del_normal])->strict(false)->save(array_merge($param, [
  197. 'updaterid' => $uid,
  198. 'updater' => $uname,
  199. 'updatetime' => $date,
  200. ])) ? app_show(0, '修改流程成功') : error_show(1005, '修改流程失败');
  201. }
  202. }