| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- <?php
- // +----------------------------------------------------------------------
- // | Description: 审批流程
- // +----------------------------------------------------------------------
- // | Author: Michael_xu | gengxiaoxu@5kcrm.com
- // +----------------------------------------------------------------------
-
- namespace app\admin\controller;
-
- use think\Hook;
- use think\Request;
- use think\Db;
-
- class ExamineFlow extends ApiCommon
- {
- /**
- * 用于判断权限
- * @permission 无限制
- * @allow 登录用户可访问
- * @other 其他根据系统设置
- **/
- public function _initialize()
- {
- $action = [
- 'permission'=>[],
- 'allow'=>['index','save','update','read','delete','enables','steplist','userlist','recordlist']
- ];
- Hook::listen('check_auth',$action);
- $request = Request::instance();
- $a = strtolower($request->action());
- if (!in_array($a, $action['permission'])) {
- parent::_initialize();
- }
- //权限判断
- $unAction = ['steplist','userlist','recordlist'];
- if (!in_array($a, $unAction) && !checkPerByAction('admin', 'examine_flow', 'index')) {
- header('Content-Type:application/json; charset=utf-8');
- exit(json_encode(['code'=>102,'error'=>'无权操作']));
- }
- }
-
- /**
- * 审批流程列表
- * @author Michael_xu
- * @return
- */
- public function index()
- {
- $examineFlowModel = model('ExamineFlow');
- $param = $this->param;
- //过滤审批类型中关联的审批流
- $param['types'] = ['neq','oa_examine'];
- $data = $examineFlowModel->getDataList($param);
- return resultArray(['data' => $data]);
- }
-
- /**
- * 添加审批流程
- *
- * @return \think\response\Json
- * @throws \think\Exception
- * @throws \think\exception\PDOException
- */
- public function save()
- {
- if (empty($this->param['types'])) return resultArray(['error' => '请选择关联对象!']);
-
- $examineFlowModel = model('ExamineFlow');
- $examineStepModel = model('ExamineStep');
- $param = $this->param;
- $userInfo = $this->userInfo;
- $param['update_user_id'] = $userInfo['id'];
-
- # 验证名称是否重复
- $repeatWhere['name'] = $param['name'];
- $repeatWhere['is_deleted'] = 0;
- $repeatWhere['types'] = ['neq', 'oa_examine'];
- if (db('admin_examine_flow')->where($repeatWhere)->value('flow_id')) return resultArray(['error' => '审批流名称重复!']);
-
- //处理
- $param['user_ids'] = arrayToString($param['user_ids']);
- $param['structure_ids'] = arrayToString($param['structure_ids']);
- $res = $examineFlowModel->createData($param);
- $param['config'] = $param['config'] ? 1 : 0;
- SystemActionLog($userInfo['id'], 'admin_examine','approval', $res['flow_id'], 'save', $param['name'], '', '','添加了审批流:'.$param['name']);
- if ($res) {
- $config = $param['config'];
- if ((int)$config == 1) {
- //固定审批流
- $resStep = $examineStepModel->createStepData($param['step'], $res['flow_id']);
- if ($resStep) {
- return resultArray(['data' => '添加成功']);
- } else {
- db('admin_examine_flow')->where(['flow_id' => $res['flow_id']])->delete();
- return resultArray(['error' => $examineStepModel->getError()]);
- }
- }
-
- return resultArray(['data' => '添加成功']);
- } else {
- return resultArray(['error' => $examineFlowModel->getError()]);
- }
- }
-
- /**
- * 编辑审批流程
- *
- * @return \think\response\Json
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- * @throws \think\exception\PDOException
- */
- public function update()
- {
- if (empty($this->param['types'])) return resultArray(['error' => '请选择关联对象!']);
-
- $examineFlowModel = model('ExamineFlow');
- $examineStepModel = model('ExamineStep');
- $param = $this->param;
- $userInfo = $this->userInfo;
- $param['update_user_id'] = $userInfo['id'];
- $param['create_time'] = time();
- $param['update_time'] = time();
- $flowId = $param['flow_id'];
- unset($param['flow_id']);
-
- # 验证名称是否重复
- $repeatWhere['name'] = $param['name'];
- $repeatWhere['is_deleted'] = 0;
- $repeatWhere['types'] = ['neq', 'oa_examine'];
- $repeatWhere['flow_id'] = ['neq', $flowId];
- if (db('admin_examine_flow')->where($repeatWhere)->value('flow_id')) return resultArray(['error' => '审批流名称重复!']);
-
- //处理
- $param['user_ids'] = arrayToString($param['user_ids']);
- $param['structure_ids'] = arrayToString($param['structure_ids']);
- $res = $examineFlowModel->createData($param);
- $param['config'] = $param['config'] ? 1 : 0;
- if ($res) {
- //将当前审批流标记为已删除,重新创建审批流(目的:保留审批流程记录)
- $upData = [];
- $upData['is_deleted'] = 1;
- $upData['delete_time'] = time();
- $upData['delete_user_id'] = $userInfo['id'];
- $upData['status'] = 0;
- db('admin_examine_flow')->where(['flow_id' => $flowId])->update($upData);
- # 添加系统操作日志
- SystemActionLog($userInfo['id'], 'admin_examine','approval', $flowId, 'update', $param['name'], '', '','编辑了审批流:'.$param['name']);
- $config = $param['config'];
- if ((int)$config == 1) {
- //固定审批流
- $resStep = $examineStepModel->createStepData($param['step'], $res['flow_id']);
- if ($resStep) {
- return resultArray(['data' => '添加成功']);
- } else {
- db('admin_examine_flow')->where(['flow_id' => $res['flow_id']])->delete();
- return resultArray(['error' => $examineStepModel->getError()]);
- }
- }
- return resultArray(['data' => '添加成功']);
- } else {
- return resultArray(['error' => $examineFlowModel->getError()]);
- }
-
-
- // $newData = db('admin_examine_flow')->where(['flow_id' => $param['flow_id']])->find();
- // $newData['user_ids'] = arrayToString($param['user_ids']);
- // $param['structure_ids'] = arrayToString($param['structure_ids']);
- // $param['update_user_id'] = $userInfo['id'];
- // $param['create_time'] = time();
- // $param['update_time'] = time();
- // $param['status'] = 1;
- // $resUpdate = $examineFlowModel->updateDataById($param, $param['flow_id']);
- //
- // if ($resUpdate) {
- // if ($param['config'] == 1) {
- // $resStep = $examineStepModel->createStepData($param['step'], $resUpdate['flow_id']);
- // if (!$resStep) {
- // return resultArray(['error' => $examineStepModel->getError()]);
- // }
- // }
- //
- // $upData = [];
- // $upData['is_deleted'] = 1;
- // $upData['delete_time'] = time();
- // $upData['delete_user_id'] = $userInfo['id'];
- // $upData['status'] = 0;
- // $resFlow = db('admin_examine_flow')->where(['flow_id' => $param['flow_id']])->update($upData);
- // if (!$resFlow) {
- // return resultArray(['error' => '编辑失败1']);
- // }
- // return resultArray(['data' => '编辑成功']);
- // } else {
- // return resultArray(['error' => '编辑失败2']);
- // }
- }
-
- /**
- * 审批流程详情
- * @author Michael_xu
- * @param
- * @return
- */
- public function read()
- {
- $examineFlowModel = model('ExamineFlow');
- $param = $this->param;
- $res = $examineFlowModel->getDataById($param['id']);
- if (!$res) {
- return resultArray(['error' => $examineFlowModel->getError()]);
- }
- return resultArray(['data' => $res]);
- }
-
- /**
- * 删除审批流程(逻辑删)
- * @author Michael_xu
- * @param
- * @return
- */
- public function delete()
- {
- $examineFlowModel = model('ExamineFlow');
- $param = $this->param;
- $userInfo = $this->userInfo;
- $data = $examineFlowModel->signDelById($param['flow_id']);
- if (!$data) {
- return resultArray(['error' => $examineFlowModel->getError()]);
- }
- # 系统操作日志
- $newData = db('admin_examine_flow')->where(['flow_id' => $param['flow_id']])->find();
- SystemActionLog($userInfo['id'], 'admin_examine','approval', $param['flow_id'], 'update', $newData['name'], '', '','删除了审批流:'.$newData['name']);
- return resultArray(['data' => '删除成功']);
- }
-
- /**
- * 审批流程状态
- * @author Michael_xu
- * @param ids array
- * @param status 1启用,0禁用
- * @return
- */
- public function enables()
- {
- $examineFlowModel = model('ExamineFlow');
- $param = $this->param;
- $userInfo=$this->userInfo;
- $id = [$param['flow_id']];
- $data = $examineFlowModel->enableDatas($id, $param['status']);
- # 系统操作日志
- if (!$data) {
- return resultArray(['error' => $examineFlowModel->getError()]);
- }
- if($param['status']==0){
- $content='禁用了:';
- }else{
- $content='启用了:';
- }
- $dataInfo=db('admin_examine_flow')->where('flow_id',$param['flow_id'])->find();
- SystemActionLog($userInfo['id'], 'admin_examine','approval', $param['flow_id'], 'update', $dataInfo['name'], '', '',$content.$dataInfo['name']);
- return resultArray(['data' => '操作成功']);
- }
-
- /**
- * 完整审批步骤(固定审批流)
- * @author Michael_xu
- * @param flow_id 审批流ID
- * @param user_id 审批对象创建人ID
- * @return
- */
- public function stepList()
- {
- $param = $this->param;
- $userInfo = $this->userInfo;
- $data= $this->checkFlow($param,$userInfo);
- return resultArray(['data' => $data]);
- }
-
- /**
- * 固定审批流审批流程人员数据
- * @param $param
- * @param $userInfo
- *
- * @author alvin guogaobo
- * @version 1.0 版本号
- * @since 2021/3/15 0015 13:37
- */
- public function checkFlow($param,$userInfo)
- {
- $examineStepModel = model('ExamineStep');
- $examineFlowModel = model('ExamineFlow');
- $check_user_id = $userInfo['id'];
- $flow_id = $param['flow_id'];
- $types = $param['types'];
- $types_id = $param['types_id'];
- $typesArr = ['crm_contract', 'crm_receivables', 'crm_invoice', 'oa_examine', 'jxc_purchase', 'jxc_retreat', 'jxc_sale', 'jxc_salereturn', 'jxc_payment', 'jxc_collection', 'jxc_allocation', 'jxc_inventory'];
- if (!$types || !in_array($types, $typesArr)) {
- return resultArray(['error' => '参数错误']);
- }
- if ($flow_id) {
- $examineFlowData = $examineFlowModel->getDataById($param['flow_id']);
- if (!$examineFlowData) {
- return resultArray(['error' => '参数错误']);
- }
- $typesInfo = $examineStepModel->getDataByTypes($types, $types_id);
- $user_id = $typesInfo['dataInfo']['owner_user_id'];
- if ($types == 'oa_examine') {
- $user_id = $typesInfo['dataInfo']['create_user_id'];
- }
- if (!$user_id) {
- return resultArray(['error' => '参数错误']);
- }
- } else {
- $user_id = $check_user_id;
- // 获取符合条件的审批流
- $examineFlowData = $examineFlowModel->getFlowByTypes($user_id, $types, $types_id);
- if (!$examineFlowData) {
- # 合同、回款、发票模块审批流停用
- if (in_array($types, ['crm_contract', 'crm_receivables', 'crm_invoice'])) {
- return resultArray(['data' => ['examineStatus' => false]]);
- }
-
- return resultArray(['error' => '无可用审批流,请联系管理员']);
- }
- $flow_id = $examineFlowData['flow_id'];
- }
- if ($types == 'oa_examine') {
- $category_id = db('oa_examine')->where(['examine_id' => $types_id])->value('category_id');
- }
- $list=[];
- //自选还是流程(1固定,0自选)
- if ($examineFlowData['config'] == 1) {
- //获取审批流程
- $stepInfo = $examineStepModel->getStepList($flow_id, $user_id, $types, $types_id, $check_user_id, $param['action'], $category_id);
- $stepList = $stepInfo['steplist'];
- $list=$stepInfo['steplist'][0]['user_id_info'];
- // foreach ($stepInfo['steplist'] as $k=>$v){
- // $data['user_id_info'][]=$v['user_id_info'];
- // }
- } else {
- $stepInfo = $examineStepModel->getPerStepList($types, $types_id, $user_id, $check_user_id, $param['action']);
- $stepList = $stepInfo['steplist'];
- $list=$stepInfo['steplist'][0]['user_id_info'];
- // foreach ($stepInfo['steplist'] as $k=>$v){
- // $data['user_id_info'][]=$stepInfo['steplist']['user_id_info'];
- // }
- }
- $data = [];
- $data['config'] = (int) $examineFlowData['config']; //1固定,0自选
- $data['stepList'] = $stepList ? : [];
- $data['examine_user'] = $list ? : [];
- $data['is_check'] = $stepInfo['is_check'] ? : 0;
- $data['is_recheck'] = $stepInfo['is_recheck'] ? : 0;
- $data['examineStatus'] = true;
- return $data;
- }
- /**
- * 自选审批人列表(授权审批类型)
- * @author Michael_xu
- * @param types 类型
- * @return
- */
- public function userList()
- {
- $param = $this->param;
- $userInfo = $this->userInfo;
- $types = $param['types'];
- $examineStepModel = model('ExamineStep');
- $userModel = model('User');
- // $examine_user_ids = $examineStepModel->getUserByPer($types);
- //暂定返回全部
- $examine_user_ids = getSubUserId(true, 1);
- $where = [];
- $where['user.id'] = array('in',$examine_user_ids);
- $where['status'] = ['gt',0];
- $where['pageType'] = 'all';
- $userList = $userModel->getDataList($where);
- return resultArray(['data' => $userList['list']]);
- }
-
- /**
- * 审批记录
- * @author Michael_xu
- * @param types 类型
- * @return
- */
- public function recordList()
- {
- $examineRecordModel = model('ExamineRecord');
- $data = $examineRecordModel->getDataList($this->param);
- return resultArray(['data' => $data]);
- }
- }
|