request->only(['pid' => '', 'name' => '', 'nickname' => '', 'companyNo' => ''], 'post', 'trim'); $condition = [['is_del', '=', 0]]; $depart = [['a.is_del', '=', 0]]; if ($post['pid'] !== '') $condition[] = ["pid", "=", $post['pid']]; if ($post['name'] != "") $condition[] = ["name", "like", "%{$post['name']}%"]; if ($post['pid'] === '' && $post['name'] == '' && $post['nickname'] == '') $condition[] = ["pid", "=", 0]; if ($post['nickname'] != '') { $is = Db::name("account") ->alias('a') ->leftJoin('account_company b', 'b.account_id=a.id') ->leftJoin('user c', 'c.account_id=a.id') ->where('a.is_del', 0) ->whereLike('c.nickname', '%' . $post['nickname'] . '%') ->column('b.itemid'); if (empty($is)) return json_show(1004, "未找到数据"); $condition[] = ["id", "in", $is]; } $pidlist = Db::name("company_item") ->where($condition) ->column("pid"); if (!empty($pidlist)) $depart[] = [["b.itemid", "in", $pidlist]]; else { if ($post['pid'] === "") $depart[] = ['b.itemid', '=', 0]; else $depart[] = ['b.itemid', '=', $post['pid']]; } $item = Db::name("account") ->alias('a') ->field('a.id account_id,c.nickname,b.itemid,a.is_del,a.status,b.position') ->leftJoin('account_company b', 'b.account_id=a.id') ->leftJoin('user c', 'c.account_id=a.id') ->where($depart) ->select() ->toArray(); $list = Db::name("company_item") ->where($condition) ->select() ->toArray(); return json_show(0, '获取成功', ["depart" => $list, "item" => $item]); } //添加 public function add() { $param = $this->request->only([ 'companyNo', 'name', 'pid', 'level' => 1, 'weight' => 1, ], 'post', 'trim'); $val = Validate::rule([ 'companyNo|所属企业' => 'require|max:255', 'name|部门名称' => 'require|max:255', 'pid|父级id' => 'require|number|gt:0', 'level|部门层级' => 'number|gt:0', 'weight|排序权重' => 'number|gt:0', ]); if ($val->check($param) == false) return json_show(1004, $val->getError()); Db::startTrans(); try { $tmp = Db::name('company_item') ->field('id') ->where(["is_del" => 0, "name" => $param['name'], 'companyNo' => $param['companyNo']]) ->findOrEmpty(); if (!empty($tmp)) throw new Exception('部门名称已存在'); $spid = ['depart_link' => '']; if ($param['pid'] != 0) { $spid = Db::name('company_item') ->field('depart_link') ->where(['id' => $param['pid'], 'is_del' => 0]) ->find(); if (empty($spid)) throw new Exception('父级数据不能为空'); } $id = Db::name('company_item') ->insertGetId([ "name" => $param['name'], "pid" => $param['pid'], "level" => $param['level'], "weight" => $param['weight'], "is_del" => 0, 'companyNo' => $param['companyNo'], "addtime" => date("Y-m-d H:i:s"), "updatetime" => date("Y-m-d H:i:s"), ]); $depart_link = $spid['depart_link'] . "{$id}-"; $level = explode('-', $depart_link); $level = array_filter($level); $level = count($level); Db::name('company_item') ->where('id', $id) ->update([ 'depart_link' => $depart_link, 'level' => $level ]); Db::commit(); return json_show(0, '添加成功'); } catch (Exception $e) { Db::rollback(); return json_show(1002, '添加失败,' . $e->getMessage()); } } //编辑 public function update() { $param = $this->request->only(['id', 'companyNo', 'name', 'pid', 'level' => 1, 'weight' => 1,], 'post', 'trim'); $val = Validate::rule([ 'id' => 'require|number|gt:0', 'companyNo|所属企业' => 'require|max:255', 'name|部门名称' => 'require|max:255', 'pid|父级id' => 'require|number|gt:0', 'level|部门层级' => 'number|gt:0', 'weight|排序权重' => 'number|gt:0', ]); if ($val->check($param) == false) return json_show(1004, $val->getError()); Db::startTrans(); try { $tmp = Db::name("company_item") ->field('id') ->where(['id' => $param['id'], 'is_del' => 0]) ->findOrEmpty(); if (empty($tmp)) throw new Exception('部门信息不存在'); $tmp = Db::name('company_item') ->field('id') ->where(["is_del" => 0, "name" => $param['name'], 'companyNo' => $param['companyNo']]) ->where('id', '<>', $param['id']) ->findOrEmpty(); if (!empty($tmp)) throw new Exception('部门名称已存在'); $spid = ['depart_link' => '']; if ($param['pid'] != 0) { $spid = Db::name('company_item') ->field('depart_link') ->where(['id' => $param['pid'], 'is_del' => 0]) ->find(); if (empty($spid)) throw new Exception('父级数据不能为空'); } Db::name('company_item') ->where(['id' => $param['id'], 'is_del' => 0]) ->update([ "name" => $param['name'], "pid" => $param['pid'], "level" => $param['level'], "weight" => $param['weight'], 'companyNo' => $param['companyNo'], "updatetime" => date("Y-m-d H:i:s"), ]); $depart_link = $spid['depart_link'] . "{$param['id']}-"; $level = explode('-', $depart_link); $level = array_filter($level); $level = count($level); Db::name('company_item') ->where('id', $param['id']) ->update([ 'depart_link' => $depart_link, 'level' => $level ]); Db::commit(); return json_show(0, '信息更新成功'); } catch (Exception $e) { Db::rollback(); return json_show(1002, '信息更新失败,' . $e->getMessage()); } } //查询,层级列表 public function query() { $param = $this->request->filter('trim')->only(['companyNo'=>''],'post'); $where=[['pid','=',0],['is_del','=',0]]; if($param['companyNo'] != '') $where[]=['companyNo','=',$param['companyNo']]; //所有已经存在的公司 $companyNo = Db::name('company_item') ->field('companyNo') ->where($where) ->group('companyNo') ->buildSql(); $company = Db::name('headquarters') ->field('id,code,name,type') ->where('is_del', 0) ->where('code IN ' . $companyNo) ->select() ->toArray(); foreach ($company as &$value) { $value['child'] = Db::name('company_item') ->where(['pid' => 0, 'is_del' => 0, 'companyNo' => $value['code']]) ->order("weight desc") ->select() ->toArray(); foreach ($value['child'] as &$item) { $item = crea($item); } } return json_show(0, '获取成功', $company); } //删除 public function delete() { $id = $this->request->filter('trim')->post('id/d', 0); $rs = Db::name("company_item") ->where(['id' => $id, 'is_del' => 0]) ->update(['is_del' => 1, 'updatetime' => date('Y-m-d H:i:s')]); return $rs ? json_show(0, '删除成功') : json_show(1003, '删除失败'); } //启禁用 public function status() { $id = $this->request->filter('trim')->post('id/d', 0); $rs = Db::name("company_item") ->field('id,status') ->where(['id' => $id, 'is_del' => 0]) ->findOrEmpty(); if (empty($rs)) return json_show(1005, '未找到部门'); $status = $rs['status'] == 1 ? 0 : 1; $rs = Db::name("company_item") ->where(['id' => $id, 'is_del' => 0]) ->update(['status' => $status, 'updatetime' => date('Y-m-d H:i:s')]); return $rs ? json_show(0, '更新成功') : json_show(1003, '更新失败'); } //改变职位 public function userp() { $post = $this->request->only(['account_id', 'itemid', 'position'], 'post', 'trim'); $val = Validate::rule([ 'account_id|账户id' => 'require|number|gt:0', 'itemid|部门id' => 'require|number|gt:0', 'position|职位' => 'require|number|in:1,2', ]); if ($val->check($post) == false) return json_show(1005, $val->getError()); $rs = Db::name('account_item') ->where(['account_id' => $post['account_id'], 'itemid' => $post['itemid']]) ->update(['position' => $post['position'], 'updatetime' => date('Y-m-d H:i:s')]); return $rs ? json_show(0, '修改成功') : json_show(1005, '修改失败'); } }