智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

390 lines
12 KiB

<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\api\controller\apiController;
use app\dict\member\MemberLoginTypeDict;
use app\model\reimbursement\Reimbursement;
use app\Request;
use app\service\api\apiService\PersonnelService;
use app\service\api\apiService\ServiceService;
use app\service\api\captcha\CaptchaService;
use app\service\api\login\ConfigService;
use app\service\api\login\LoginService;
use core\base\BaseApiService;
use Exception;
use think\Response;
/**
* 员工端相关接口
* Class Personnel
* @package app\api\controller\apiController
*/
class Personnel extends BaseApiService
{
//员工详情
public function info(Request $request){
//获取员工信息
$where = [
'id'=>$this->member_id,
];
$res = (new PersonnelService())->info($where);
if(!$res['code']){
return fail($res['msg']);
}
return success($res['data']);
}
//员工修改
public function edit(Request $request){
$params = $request->all();
// 构建基础数据,使用isset检查避免undefined key错误
$data = [];
// 基础信息字段
$baseFields = ['head_img', 'name', 'gender', 'birthday', 'phone', 'email', 'wx', 'address', 'native_place', 'education', 'profile', 'emergency_contact_phone', 'id_card_front', 'id_card_back'];
foreach ($baseFields as $field) {
if (isset($params[$field])) {
$data[$field] = $params[$field];
}
}
// 详细信息
if (isset($params['info']) && is_array($params['info'])) {
$data['info'] = $params['info'];
}
//获取员工信息
$where = [
'id'=>$this->member_id,
];
$res = (new PersonnelService())->edit($where,$data);
if(!$res['code']){
return fail($res['msg'] ?? '操作失败');
}
return success([]);
}
//人力资源-人员表
public function getPersonnelAll(Request $request){
//获取员工信息
$where = [
'account_type' => $request->param('account_type', ''),//账号类型|teacher=老师,market=销售
'personnel_id' => $request->param('personnel_id', ''),//员工id
'campus' => $request->param('campus', ''),//校区id
];
$field = 'id,name';
$res = (new PersonnelService())->getAll($where,$field);
// if(!$res){
// return fail('账户信息有误');
// }
return success($res);
}
//获取销售部门员工列表(根据校区筛选)
public function getSalesPersonnelByCampus(Request $request){
//获取销售部门员工信息
$campus = $request->param('campus', '');//校区id
$res = (new PersonnelService())->getSalesPersonnelByCampus($campus);
if(!$res['code']){
return fail($res['msg']);
}
return success($res['data']);
}
//验证新旧密码是否正确
public function checkOldPwd(Request $request){
//获取员工信息
$old_password = $request->param('old_password','');
if(empty($old_password)){
return fail('请输入旧密码');
}
$res = (new PersonnelService())->checkOldPwd($old_password);
if(!$res['code']){
return fail('旧密码不正确');
}
return success($res['data']);
}
//员工端-修改登录密码
public function edidPassword(Request $request){
$new_password = $request->param('new_password','');//新密码
$key_value = $request->param('key_value','');//修改密码的key_value
$phone = $request->param('phone','');//登录账号
if(empty($new_password) || empty($key_value)){
return fail('缺少参数');
}
$res = (new PersonnelService())->edidPassword($phone,$new_password,$key_value);
if(!$res['code']){
return fail($res['msg']);
}
return success($res['data']);
}
public function reimbursement_list(){
return success((new PersonnelService())->reimbursement_list());
}
public function reimbursement_info(Request $request){
$data = [
'id' => $request->param('id', ''),
];
return success((new PersonnelService())->reimbursement_info($data));
}
public function reimbursement_add(Request $request){
$data = [
'id' => $request->param('id', ''),
'amount' => $request->param('amount', ''),
'description' => $request->param('description', ''),
'receipt_url' => $request->param('receipt_url', ''),
];
return success((new PersonnelService())->reimbursement_add($data));
}
/**
* 添加新员工信息
* @param Request $request
* @return mixed
*/
public function add(Request $request)
{
$params = $request->all();
// 验证必填字段
if (empty($params['name'])) {
return fail('员工姓名不能为空');
}
if (!isset($params['gender']) || $params['gender'] === '') {
return fail('请选择性别');
}
if (empty($params['phone'])) {
return fail('手机号码不能为空');
}
if (empty($params['account_type'])) {
return fail('请选择职位类型');
}
// 验证手机号格式
if (!preg_match('/^1[3-9]\d{9}$/', $params['phone'])) {
return fail('请输入正确的手机号码');
}
// 验证邮箱格式(如果提供了邮箱)
if (!empty($params['email']) && !filter_var($params['email'], FILTER_VALIDATE_EMAIL)) {
return fail('请输入正确的邮箱地址');
}
try {
// 获取申请人ID
$res = (new PersonnelService())->addPersonnel($params);
if (!$res['code']) {
return fail($res['msg']);
}
// 检查是否使用审批流程
if (isset($params['use_approval']) && $params['use_approval'] && isset($params['approval_config_id']) && $params['approval_config_id'] > 0) {
// 使用审批流程
$approvalService = new \app\service\school_approval\SchoolApprovalProcessService();
$applicantId = $res['data']['personnel_id'];
$processId = $approvalService->createPersonnelApproval(
$params,
$applicantId,
$params['approval_config_id']
);
return success([
'type' => 'approval',
'process_id' => $processId,
'message' => '审批申请已提交,等待审批'
]);
}
// 直接添加人员
return success([
'type' => 'direct',
'data' => $res['data'],
'message' => '员工信息添加成功'
]);
} catch (\Exception $e) {
return fail('添加员工信息失败:' . $e->getMessage());
}
}
/**
* 获取审批配置列表
* @param Request $request
* @return mixed
*/
public function getApprovalConfigs(Request $request)
{
try {
$params = $request->all();
$businessType = $params['business_type'] ?? 'personnel_add';
$approvalService = new \app\service\school_approval\SchoolApprovalConfigService();
$configs = $approvalService->getActiveConfigs($businessType);
return success($configs);
} catch (\Exception $e) {
return fail('获取审批配置失败:' . $e->getMessage());
}
}
/**
* 获取我的服务记录列表
* @param Request $request
* @return \think\Response
*/
public function myServiceLogs(Request $request)
{
try {
$params = $request->all();
$res = (new ServiceService())->getMyServiceLogs($params);
return success($res);
} catch (\Exception $e) {
return fail('获取服务记录失败:' . $e->getMessage());
}
}
/**
* 获取服务记录详情
* @param Request $request
* @return \think\Response
*/
public function serviceLogDetail(Request $request)
{
try {
$params = $request->all();
$id = $params['id'] ?? 0;
if (empty($id)) {
return fail('服务记录ID不能为空');
}
$res = (new ServiceService())->getServiceLogDetail($id);
if (empty($res)) {
return fail('服务记录不存在');
}
return success($res);
} catch (\Exception $e) {
return fail('获取服务记录详情失败:' . $e->getMessage());
}
}
/**
* 更新服务结果
* @param Request $request
* @return \think\Response
*/
public function updateServiceRemark(Request $request)
{
try {
$params = $request->all();
$id = $params['id'] ?? 0;
$serviceRemark = $params['service_remark'] ?? '';
if (empty($id)) {
return fail('服务记录ID不能为空');
}
if (empty($serviceRemark)) {
return fail('服务结果内容不能为空');
}
$res = (new ServiceService())->updateServiceRemark($id, $serviceRemark);
if (!$res['code']) {
return fail($res['msg']);
}
return success([], '更新成功');
} catch (\Exception $e) {
return fail('更新服务结果失败:' . $e->getMessage());
}
}
/**
* 获取教练数据列表
* @param Request $request
* @return \think\Response
*/
public function getCoachList(Request $request)
{
try {
$res = (new PersonnelService())->getCoachList();
if (!$res['code']) {
return fail($res['msg']);
}
return success($res['data']);
} catch (\Exception $e) {
return fail('获取教练列表失败:' . $e->getMessage());
}
}
/**
* 获取教练列表(用于添加课程安排)
* @param Request $request
* @return \think\Response
*/
public function getCoachListForSchedule(Request $request)
{
try {
$data = $this->request->params([
["campus_id", 0], // 校区ID筛选
["keyword", ""], // 教练姓名关键词搜索
["status", 1] // 状态筛选,默认获取有效教练
]);
$res = (new PersonnelService())->getCoachListForSchedule($data);
if (!$res['code']) {
return fail($res['msg']);
}
return success('获取成功', $res['data']);
} catch (\Exception $e) {
return fail('获取教练列表失败:' . $e->getMessage());
}
}
/**
* 获取职位类型列表
* @param Request $request
* @return mixed
*/
public function getRoleTypes(Request $request)
{
try {
$res = (new PersonnelService())->getRoleTypes();
if (!$res['code']) {
return fail($res['msg']);
}
return success($res['data']);
} catch (\Exception $e) {
return fail('获取职位类型失败:' . $e->getMessage());
}
}
}