| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- <?php
- // +----------------------------------------------------------------------
- // | Description: 审批类型
- // +----------------------------------------------------------------------
- // | Author: Michael_xu | gengxiaoxu@5kcrm.com
- // +----------------------------------------------------------------------
- namespace app\oa\model;
-
- use app\admin\controller\ApiCommon;
- use think\Db;
- use app\admin\model\Common;
- use think\Request;
- use think\Validate;
-
- class ExamineCategory extends Common
- {
- /**
- * 为了数据库的整洁,同时又不影响Model和Controller的名称
- * 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀
- */
- protected $name = 'oa_examine_category';
- protected $createTime = 'create_time';
- protected $updateTime = 'update_time';
- protected $autoWriteTimestamp = true;
-
- /**
- * [getDataList 审批类型list]
- * @param [string] $map [查询条件]
- * @param [number] $page [当前页数]
- * @param [number] $limit [每页数量]
- * @return [array] [description]
- * @author Michael_xu
- */
- public function getDataList($request)
- {
- $userModel = new \app\admin\model\User();
- $structureModel = new \app\admin\model\Structure();
- $examineFlowModel = new \app\admin\model\ExamineFlow();
- $examineStepModel = new \app\admin\model\ExamineStep();
- $request = $this->fmtRequest($request);
- $map = $request['map'] ?: [];
- if (isset($map['search'])) {
- //普通筛选
- $map['title'] = ['like', '%' . $map['search'] . '%'];
- unset($map['search']);
- }
- $map['is_deleted'] = 0;
-
- $list = $this
- ->where($map)
- ->page($request['page'], $request['limit'])
- ->order('status desc , update_time asc')
- ->select();
- foreach ($list as $k => $v) {
- $flowInfo = [];
- $flowInfo = $examineFlowModel->getDataById($v['flow_id']);
- $list[$k]['config'] = !empty($flowInfo['config']) ? 1 : 0;
- $stepList = [];
- $stepList = $examineStepModel->getDataList($v['flow_id']);
- $list[$k]['stepList'] = $stepList ?: [];
- $list[$k]['user_ids_info'] = $userModel->getListByStr($v['user_ids']);
- $list[$k]['update_time'] = date('Y-m-d H:i:s',$v['update_time']);
- }
- $dataCount = $this->where($map)->count('category_id');
- $data = [];
- $data['list'] = $list;
- $data['dataCount'] = $dataCount ?: 0;
- return $data;
- }
-
- /**
- * 创建审批类型信息
- * @param
- * @return
- * @author Michael_xu
- */
- public function createData($param)
- {
- $fieldModel = new \app\admin\model\Field();
- //验证
- $validate = validate($this->name);
- if (!$validate->check($param)) {
- $this->error = $validate->getError();
- return false;
- }
- $param['is_sys'] = 0;
- $param['user_ids'] = $param['user_ids'] ? arrayToString($param['user_ids']) : ''; //处理user_id
- $param['structure_ids'] = $param['structure_ids'] ? arrayToString($param['structure_ids']) : ''; //处理structure_id
-
- $examineStep = $param['step']; //审批步骤
- $config = $param['config'] ? 1 : 0; //审批流程类型 1固定审批0授权审批
- if ($this->data($param)->allowField(true)->save()) {
- //添加基础自定义字段
- $fieldData = [];
- $fieldData[0]['types'] = 'oa_examine';
- $fieldData[0]['types_id'] = $this->category_id;
- $fieldData[0]['field'] = 'content';
- $fieldData[0]['name'] = '审批事由';
- $fieldData[0]['form_type'] = 'textarea';
- $fieldData[0]['is_null'] = '1';
- $fieldData[0]['order_id'] = '1';
- $fieldData[0]['operating'] = '1';
- $fieldData[0]['create_time'] = time();
- $fieldData[0]['update_time'] = time();
-
- $fieldData[1]['types'] = 'oa_examine';
- $fieldData[1]['types_id'] = $this->category_id;
- $fieldData[1]['field'] = 'remark';
- $fieldData[1]['name'] = '备注';
- $fieldData[1]['form_type'] = 'textarea';
- $fieldData[1]['is_null'] = '0';
- $fieldData[1]['order_id'] = '1';
- $fieldData[1]['operating'] = '1';
- $fieldData[1]['create_time'] = time();
- $fieldData[1]['update_time'] = time();
- if (!$fieldModel->createData('oa_examine', $fieldData)) {
- db('oa_examine_category')->where(['category_id' => $this->category_id])->delete();
- $this->error = '程序出错,请重试';
- return false;
- }
-
- $data = [];
- $data['category_id'] = $this->category_id;
- //创建审批流
- if (is_array($examineStep) && $examineStep) {
- $examineFlowModel = new \app\admin\model\ExamineFlow();
- $examineStepModel = new \app\admin\model\ExamineStep();
- $examineFlow = [];
- $examineFlow['name'] = $param['title'] . '流程';
- $examineFlow['config'] = $config;
- $examineFlow['types'] = 'oa_examine';
- $examineFlow['types_id'] = $this->category_id;
- $examineFlow['user_ids'] = arrayToString($param['user_ids']);
- $examineFlow['structure_ids'] = arrayToString($param['structure_ids']);
- $examineFlow['update_user_id'] = $param['create_user_id'];
- $examineFlow['status'] = 1;
- $res = $examineFlowModel->createData($examineFlow);
-
- if ($res) {
- if ((int)$config == 1) {
- $resUpdate = db('oa_examine_category')->where(['category_id' => $this->category_id])->update(['flow_id' => $res['flow_id']]);
- //固定审批流
- $resStep = $examineStepModel->createStepData($examineStep, $res['flow_id']);
- if ($resStep) {
- return $data;
- } else {
- db('admin_examine_flow')->where(['flow_id' => $res['flow_id']])->delete();
- $this->error = $examineStepModel->getError();
- return false;
- }
- } else {
- return $data;
- }
- } else {
- $this->error = $examineFlowModel->getError();
- return false;
- }
- } else {
- $this->error = '请添加审批步骤';
- return false;
- }
- } else {
- $this->error = '添加失败';
- return false;
- }
- }
-
- /**
- * 编辑审批类型信息
- * @param
- * @return
- * @author Michael_xu
- */
- public function updateDataById($param, $category_id = '')
- {
- $category_id = intval($category_id);
- unset($param['id']);
- //过滤不能修改的字段
- $unUpdateField = ['create_user_id', 'is_deleted', 'delete_user_id', 'delete_time', 'is_sys'];
- foreach ($unUpdateField as $v) {
- unset($param[$v]);
- }
-
- //验证
- $validate = validate($this->name);
- if (!$validate->check($param)) {
- $this->error = $validate->getError();
- return false;
- }
- $param['user_ids'] = is_array($param['user_ids']) ? arrayToString($param['user_ids']) : $param['user_ids']; //处理user_id
- $param['structure_ids'] = is_array($param['structure_ids']) ? arrayToString($param['structure_ids']) : $param['structure_ids']; //处理structure_id
-
- $examineStep = $param['step']; //审批步骤
- $config = $param['config'] ? 1 : 0; //审批流程类型 1固定审批0授权审批
- unset($param['update_time']);
- unset($param['step']);
- unset($param['config']);
- unset($param['name']);
- unset($param['types']);
- unset($param['types_id']);
- unset($param['update_user_id']);
- if (db('oa_examine_category')->where(['category_id' => $category_id])->update($param)) {
- $data = [];
- $data['category_id'] = $category_id;
- return $data;
- } else {
- $this->error = '编辑失败';
- return false;
- }
- }
-
- /**
- * 审批类型数据
- * @param $id 审批ID
- * @return
- */
- public function getDataById($id = '')
- {
- $map['category_id'] = $id;
- $dataInfo = db('oa_examine_category')->where($map)->find();
- return $dataInfo ?: [];
- }
-
- /**
- * 逻辑删除,将数据标记为删除状态
- * @author Michael_xu
- */
- public function signDelById($id, $user_id)
- {
- if (!$id) {
- $this->error = '删除失败';
- return false;
- }
- $info = $this->get($id);
- if ($info['is_sys'] == 1) {
- $this->error = '系统类型,不能删除';
- return false;
- }
- //是否被使用
- $resCategory = db('oa_examine')->where(['category_id' => $info['category_id']])->find();
- if ($resCategory) {
- $this->error = '已有审批,不能删除';
- return false;
- }
- $this->startTrans();
- try {
- $data['is_deleted'] = 1;
- $data['delete_time'] = time();
- $data['delete_user_id'] = $user_id;
- $this->allowField(true)->save($data, ['category_id' => $id]);
- # 系统操作记录
- SystemActionLog($user_id,'oa_examine', 'approval', $id, 'delete',$info['title'] , '', '','删除了:'.$info['title']);
- $this->commit();
- return true;
- } catch (\Exception $e) {
- $this->error = '删除失败';
- $this->rollback();
- return false;
- }
- }
- }
|