Browse Source

修改 bug

master
王泽彦 8 months ago
parent
commit
87fdad841d
  1. 10
      admin/src/app/views/personnel/personnel.vue
  2. 2
      niucloud/app/adminapi/controller/personnel/Personnel.php
  3. 35
      niucloud/app/api/controller/apiController/Personnel.php
  4. 28
      niucloud/app/api/middleware/ApiLog.php
  5. 13
      niucloud/app/model/personnel/Personnel.php
  6. 65
      niucloud/app/service/api/apiService/PersonnelService.php
  7. 94
      niucloud/app/service/school_approval/SchoolApprovalProcessService.php
  8. 6
      uniapp/pages-coach/coach/my/update_pass.vue
  9. 6
      uniapp/pages-market/my/update_pass.vue
  10. 6
      uniapp/pages/coach/my/update_pass.vue
  11. 6
      uniapp/pages/market/my/update_pass.vue

10
admin/src/app/views/personnel/personnel.vue

@ -96,9 +96,15 @@
</el-form-item> </el-form-item>
<el-form-item :label="t('createTime')" prop="create_time"> <el-form-item :label="t('createTime')" prop="create_time">
<el-input <el-date-picker
v-model="personnelTable.searchParam.create_time" v-model="personnelTable.searchParam.create_time"
type="datetimerange"
:placeholder="t('createTimePlaceholder')" :placeholder="t('createTimePlaceholder')"
start-placeholder="开始时间"
end-placeholder="结束时间"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
class="w-[280px]"
/> />
</el-form-item> </el-form-item>
@ -335,7 +341,7 @@ let personnelTable = reactive({
education: '', education: '',
employee_number: '', employee_number: '',
status: '', status: '',
create_time: '', create_time: [],
}, },
}) })

2
niucloud/app/adminapi/controller/personnel/Personnel.php

@ -35,7 +35,7 @@ class Personnel extends BaseAdminController
["education",""], ["education",""],
["employee_number",""], ["employee_number",""],
["status",""], ["status",""],
["create_time",""] ["create_time",[]]
]); ]);
return success((new PersonnelService())->getPage($data)); return success((new PersonnelService())->getPage($data));
} }

35
niucloud/app/api/controller/apiController/Personnel.php

@ -187,20 +187,17 @@ class Personnel extends BaseApiService
} }
try { 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) { 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(); $approvalService = new \app\service\school_approval\SchoolApprovalProcessService();
// 获取申请人ID - 如果未登录则使用管理员ID $applicantId = $res['data']['personnel_id'];
// 如果没有登录用户,查找系统管理员或HR作为申请人
$adminPersonnel = \think\facade\Db::table('school_personnel')
->where('account_type', 'admin')
->whereOr('account_type', 'teacher')
->where('status', 1)
->order('id', 'asc')
->find();
$applicantId = $adminPersonnel ? $adminPersonnel['id'] : 1;
$processId = $approvalService->createPersonnelApproval( $processId = $approvalService->createPersonnelApproval(
$params, $params,
@ -212,18 +209,14 @@ class Personnel extends BaseApiService
'process_id' => $processId, 'process_id' => $processId,
'message' => '审批申请已提交,等待审批' 'message' => '审批申请已提交,等待审批'
]); ]);
} else {
// 直接添加人员
$res = (new PersonnelService())->addPersonnel($params);
if (!$res['code']) {
return fail($res['msg']);
}
return success([
'type' => 'direct',
'data' => $res['data'],
'message' => '员工信息添加成功'
]);
} }
// 直接添加人员
return success([
'type' => 'direct',
'data' => $res['data'],
'message' => '员工信息添加成功'
]);
} catch (\Exception $e) { } catch (\Exception $e) {
return fail('添加员工信息失败:' . $e->getMessage()); return fail('添加员工信息失败:' . $e->getMessage());
} }

28
niucloud/app/api/middleware/ApiLog.php

@ -13,6 +13,7 @@ namespace app\api\middleware;
use app\Request; use app\Request;
use app\service\admin\user\UserLogService;
use Closure; use Closure;
/** /**
@ -25,20 +26,19 @@ class ApiLog
public function handle(Request $request, Closure $next) public function handle(Request $request, Closure $next)
{ {
//写入日志 //写入日志
// if($request->method() != 'GET') if ($request->method() != 'GET') {
// { $data = [
// $data = [ 'uid' => $request->memberId(),
// 'uid' => $request->adminid(), 'username' => $request->username(),
// 'username' => $request->username(), 'url' => $request->url(),
// 'url' => $request->url(), 'params' => $request->param(),
// 'params' => $request->param(), 'ip' => $request->ip(),
// 'ip' => $request->ip(), 'type' => $request->method()
// 'type' => $request->method()
// ];
// ]; (new UserLogService())->add($data);
// (new UserLogService())->add($data); }
// }
//
return $next($request); return $next($request);
} }
} }

13
niucloud/app/model/personnel/Personnel.php

@ -87,7 +87,7 @@ class Personnel extends BaseModel
public function searchPhoneAttr($query, $value, $data) public function searchPhoneAttr($query, $value, $data)
{ {
if ($value) { if ($value) {
$query->where("phone", $value); $query->where("phone", "like", "%".$value."%");
} }
} }
@ -99,7 +99,7 @@ class Personnel extends BaseModel
public function searchAddressAttr($query, $value, $data) public function searchAddressAttr($query, $value, $data)
{ {
if ($value) { if ($value) {
$query->where("address", $value); $query->where("address", "like", "%".$value."%");
} }
} }
@ -146,8 +146,13 @@ class Personnel extends BaseModel
*/ */
public function searchCreateTimeAttr($query, $value, $data) public function searchCreateTimeAttr($query, $value, $data)
{ {
if ($value) { if ($value && is_array($value) && count($value) == 2) {
$query->where("create_time", $value); // 日期范围查询
$query->where("create_time", ">=", $value[0])
->where("create_time", "<=", $value[1]);
} elseif ($value) {
// 单个日期查询(按天)
$query->whereTime("create_time", "=", $value);
} }
} }

65
niucloud/app/service/api/apiService/PersonnelService.php

@ -233,55 +233,6 @@ class PersonnelService extends BaseApiService
} }
$model = $this->model; $model = $this->model;
//存在员工id的时候
// if ((!empty($where['personnel_id']) || isset($where['personnel_id'])) && $where['personnel_id'] !== '') {
// //查询这个员工的校区id
// $campus_id = CampusPersonRole::where('person_id', $where['personnel_id'])
// ->distinct(true)
// ->column('campus_id');
// if ($campus_id[0]) {
//
// $person_id_arr = CampusPersonRole::whereIn('campus_id', $campus_id)
// ->where(['dept_id' => 3])
// ->distinct(true)
// ->column('person_id');
// if ($person_id_arr) {
// //根据校区id获取校区下的全部员工
// $model = $model->whereIn('id', $person_id_arr);
// }
// }else{
// $person_id_arr = CampusPersonRole::whereIn('campus_id', $campus_id)
// ->where(['dept_id' => 3])
// ->distinct(true)
// ->column('person_id');
// if ($person_id_arr) {
// //根据校区id获取校区下的全部员工
// $model = $model->whereIn('id', $person_id_arr);
// }
// }
// }
//
// if (empty($where['account_type'])) {
// $model = $model->where('account_type', $where['account_type']);
// }
//
// if (!empty($where['campus'])) {
//// $model = $model->where('campus', $where['campus']);
//
// $person_id_arr = CampusPersonRole::whereIn('campus_id', $where['campus'])
// ->distinct(true)
// ->where(['dept_id' => 3])
// ->column('person_id');
//
// if ($person_id_arr) {
// //根据校区id获取校区下的全部员工
// $model = $model->whereIn('id', $person_id_arr);
// }
//
// }
$res = $model->field($field) $res = $model->field($field)
->select() ->select()
->toArray();//员工信息 ->toArray();//员工信息
@ -470,18 +421,16 @@ class PersonnelService extends BaseApiService
'msg' => '添加失败', 'msg' => '添加失败',
'data' => [] 'data' => []
]; ];
// 检查手机号是否已存在
$existingPersonnel = $this->model->where('phone', $data['phone'])->find();
if ($existingPersonnel) {
$res['msg'] = '该手机号已存在,请更换';
return $res;
}
try { try {
// 开启事务 // 开启事务
$this->model->startTrans(); $this->model->startTrans();
// 检查手机号是否已存在
$existingPersonnel = $this->model->where('phone', $data['phone'])->find();
if ($existingPersonnel) {
$res['msg'] = '该手机号已存在,请更换';
return $res;
}
// 准备基本员工信息数据 // 准备基本员工信息数据
$personnelData = [ $personnelData = [
'name' => $data['name'], 'name' => $data['name'],
@ -520,7 +469,7 @@ class PersonnelService extends BaseApiService
$detailData = [ $detailData = [
'person_id' => $personnelId, 'person_id' => $personnelId,
'name' => $data['name'], 'name' => $data['name'],
'ethnicity' => $data['ethnicity'] ?? '', // 'ethnicity' => $data['ethnicity'] ?? '',
'age' => $data['age'] ?? null, 'age' => $data['age'] ?? null,
'politics' => $data['politics'] ?? '', 'politics' => $data['politics'] ?? '',
'university' => $data['university'] ?? '', 'university' => $data['university'] ?? '',

94
niucloud/app/service/school_approval/SchoolApprovalProcessService.php

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace app\service\school_approval; namespace app\service\school_approval;
use app\model\personnel\Personnel; use app\model\personnel\Personnel;
use app\model\personnel\PersonnelInfo;
use app\model\school_approval\SchoolApprovalConfig; use app\model\school_approval\SchoolApprovalConfig;
use app\model\school_approval\SchoolApprovalConfigNode; use app\model\school_approval\SchoolApprovalConfigNode;
use app\model\school_approval\SchoolApprovalParticipants; use app\model\school_approval\SchoolApprovalParticipants;
@ -33,8 +34,8 @@ class SchoolApprovalProcessService
$list = (new SchoolApprovalProcess()) $list = (new SchoolApprovalProcess())
->alias("a") ->alias("a")
->join(['school_personnel' => 'b'],'a.applicant_id = b.id','left') ->join(['school_personnel' => 'b'], 'a.applicant_id = b.id', 'left')
->join(['school_personnel' => 'c'],'a.current_approver_id = c.id','left') ->join(['school_personnel' => 'c'], 'a.current_approver_id = c.id', 'left')
->where($where) ->where($where)
->field($field) ->field($field)
->order($order) ->order($order)
@ -59,8 +60,8 @@ class SchoolApprovalProcessService
{ {
$info = (new SchoolApprovalProcess()) $info = (new SchoolApprovalProcess())
->alias("a") ->alias("a")
->join(['school_personnel' => 'b'],'a.applicant_id = b.id','left') ->join(['school_personnel' => 'b'], 'a.applicant_id = b.id', 'left')
->join(['school_personnel' => 'c'],'a.current_approver_id = c.id','left') ->join(['school_personnel' => 'c'], 'a.current_approver_id = c.id', 'left')
->with(['participants']) ->with(['participants'])
->where(['a.id' => $id]) ->where(['a.id' => $id])
->field('a.*,b.name as applicant_name,c.name as current_approver_name') ->field('a.*,b.name as applicant_name,c.name as current_approver_name')
@ -96,15 +97,15 @@ class SchoolApprovalProcessService
// 创建审批流程 // 创建审批流程
$process = [ $process = [
'process_name' => $data['process_name'], 'process_name' => $data['process_name'],
'applicant_id' => $data['applicant_id'], 'applicant_id' => $data['applicant_id'],
'application_time' => date("Y-m-d H:i:s"), 'application_time' => date("Y-m-d H:i:s"),
'current_approver_id' => 0, // 初始时为0,后面会更新 'current_approver_id' => 0, // 初始时为0,后面会更新
'approval_status' => SchoolApprovalProcess::STATUS_PENDING, 'approval_status' => SchoolApprovalProcess::STATUS_PENDING,
'remarks' => $data['remarks'] ?? '', 'remarks' => $data['remarks'] ?? '',
'business_type' => $data['business_type'] ?? '', 'business_type' => $data['business_type'] ?? '',
'business_id' => $data['business_id'] ?? 0, 'business_id' => $data['business_id'] ?? 0,
'business_data' => isset($data['business_data']) ? json_encode($data['business_data']) : '' 'business_data' => isset($data['business_data']) ? json_encode($data['business_data']) : ''
]; ];
$process_id = (new SchoolApprovalProcess())->insertGetId($process); $process_id = (new SchoolApprovalProcess())->insertGetId($process);
@ -113,17 +114,17 @@ class SchoolApprovalProcessService
$participants = []; $participants = [];
foreach ($config_info['nodes'] as $sequence => $node) { foreach ($config_info['nodes'] as $sequence => $node) {
$approver_ids = explode(',', $node['approver_ids']); $approver_ids = explode(',', $node['approver_ids']);
// 动态获取审批人 // 动态获取审批人
$actual_approvers = $this->getDynamicApprovers($node['approver_type'], $approver_ids); $actual_approvers = $this->getDynamicApprovers($node['approver_type'], $approver_ids);
foreach ($actual_approvers as $approver_id) { foreach ($actual_approvers as $approver_id) {
$participants[] = [ $participants[] = [
'process_id' => $process_id, 'process_id' => $process_id,
'participant_id' => $approver_id, 'participant_id' => $approver_id,
'sequence' => $node['sequence'], 'sequence' => $node['sequence'],
'status' => SchoolApprovalParticipants::STATUS_PENDING, 'status' => SchoolApprovalParticipants::STATUS_PENDING,
'sign_type' => $node['sign_type'] 'sign_type' => $node['sign_type']
]; ];
} }
} }
@ -236,7 +237,7 @@ class SchoolApprovalProcessService
(new SchoolApprovalProcess())->where(['id' => $process_id]) (new SchoolApprovalProcess())->where(['id' => $process_id])
->update([ ->update([
'approval_status' => SchoolApprovalProcess::STATUS_REJECTED, 'approval_status' => SchoolApprovalProcess::STATUS_REJECTED,
'approval_time' => time(), 'approval_time' => date('Y-m-d H:i:s'),
'remarks' => $remarks 'remarks' => $remarks
]); ]);
@ -271,7 +272,7 @@ class SchoolApprovalProcessService
(new SchoolApprovalProcess())->where(['id' => $process_id]) (new SchoolApprovalProcess())->where(['id' => $process_id])
->update([ ->update([
'approval_status' => SchoolApprovalProcess::STATUS_APPROVED, 'approval_status' => SchoolApprovalProcess::STATUS_APPROVED,
'approval_time' => time() 'approval_time' => date('Y-m-d H:i:s')
]); ]);
// 处理业务逻辑 // 处理业务逻辑
@ -327,7 +328,7 @@ class SchoolApprovalProcessService
(new SchoolApprovalProcess())->where(['id' => $process_id]) (new SchoolApprovalProcess())->where(['id' => $process_id])
->update([ ->update([
'approval_status' => SchoolApprovalProcess::STATUS_REJECTED, 'approval_status' => SchoolApprovalProcess::STATUS_REJECTED,
'approval_time' => time(), 'approval_time' => date('Y-m-d H:i:s'),
'remarks' => '申请人撤销' 'remarks' => '申请人撤销'
]); ]);
@ -391,18 +392,39 @@ class SchoolApprovalProcessService
try { try {
// 调用API人员服务创建正式人员记录(避免info字段问题) // 调用API人员服务创建正式人员记录(避免info字段问题)
$personnelService = new \app\service\api\apiService\PersonnelService(); $personnelService = new \app\service\api\apiService\PersonnelService();
// 准备人员数据 // 准备人员数据
$createData = $personnelData; $createData = $personnelData;
$createData['status'] = 2; // 设置为已审核状态 $createData['status'] = 2; // 设置为已审核状态
// 创建人员记录 $insert_status = (new Personnel())->where(['phone' => $createData['phone']])->order('id', 'desc')->find();
$result = $personnelService->addPersonnel($createData); if ($insert_status) {
if (!$result['code']) { $personnelId = $insert_status->id;
throw new \Exception($result['msg']); //获取Personnel模型中所有字段
$fields = (new Personnel())->getFields();
// 过滤只保留字符串和整数类型的键
$fields = array_filter($fields, function($field) {
return is_string($field) || is_int($field);
});
$PersonnelData = array_intersect_key($createData, array_flip($fields));
(new Personnel())->where(['id' => $insert_status->id])->update($PersonnelData);
$fields = (new PersonnelInfo())->getFields();
// 过滤只保留字符串和整数类型的键
$fields = array_filter($fields, function($field) {
return is_string($field) || is_int($field);
});
$PersonnelInfoData = array_intersect_key($createData, array_flip($fields));
(new PersonnelInfo())->where(['person_id' => $insert_status->id])->update($PersonnelInfoData);
} else {
// 创建人员记录
$result = $personnelService->addPersonnel($createData);
if (!$result['code']) {
throw new \Exception($result['msg']);
}
$personnelId = $result['data']['personnel_id'];
} }
$personnelId = $result['data']['personnel_id'];
// 更新流程的business_id为实际创建的人员ID // 更新流程的business_id为实际创建的人员ID
(new SchoolApprovalProcess())->where(['id' => $process['id']]) (new SchoolApprovalProcess())->where(['id' => $process['id']])
->update(['business_id' => $personnelId]); ->update(['business_id' => $personnelId]);
@ -555,10 +577,10 @@ class SchoolApprovalProcessService
*/ */
private function recordApprovalHistory(int $process_id, int $participant_id, int $sequence, string $status, string $remarks): void private function recordApprovalHistory(int $process_id, int $participant_id, int $sequence, string $status, string $remarks): void
{ {
$action = ($status == SchoolApprovalParticipants::STATUS_APPROVED) ? $action = ($status == SchoolApprovalParticipants::STATUS_APPROVED) ?
SchoolApprovalHistory::ACTION_APPROVE : SchoolApprovalHistory::ACTION_REJECT; SchoolApprovalHistory::ACTION_APPROVE : SchoolApprovalHistory::ACTION_REJECT;
$history_status = ($status == SchoolApprovalParticipants::STATUS_APPROVED) ? $history_status = ($status == SchoolApprovalParticipants::STATUS_APPROVED) ?
SchoolApprovalHistory::STATUS_APPROVED : SchoolApprovalHistory::STATUS_REJECTED; SchoolApprovalHistory::STATUS_APPROVED : SchoolApprovalHistory::STATUS_REJECTED;
(new SchoolApprovalHistory())->insert([ (new SchoolApprovalHistory())->insert([
@ -615,23 +637,23 @@ class SchoolApprovalProcessService
// 根据通知类型设置消息内容 // 根据通知类型设置消息内容
$title = ''; $title = '';
$content = ''; $content = '';
switch ($type) { switch ($type) {
case 'pending': case 'pending':
$title = '待审批通知'; $title = '待审批通知';
$content = "您有一个审批流程需要处理:{$process['process_name']},申请人:{$process['applicant_name']}"; $content = "您有一个审批流程需要处理:{$process['process_name']},申请人:{$process['applicant_name']}";
break; break;
case 'approved': case 'approved':
$title = '审批通过通知'; $title = '审批通过通知';
$content = "您的审批申请已通过:{$process['process_name']}"; $content = "您的审批申请已通过:{$process['process_name']}";
break; break;
case 'rejected': case 'rejected':
$title = '审批拒绝通知'; $title = '审批拒绝通知';
$content = "您的审批申请已被拒绝:{$process['process_name']}"; $content = "您的审批申请已被拒绝:{$process['process_name']}";
break; break;
default: default:
return; return;
} }

6
uniapp/pages-coach/coach/my/update_pass.vue

@ -177,11 +177,7 @@ import apiRoute from '@/api/apiRoute.js';
}) })
//1s //1s
setTimeout(() => { setTimeout(() => {
//- uni.navigateBack()
//
uni.redirectTo({
url: `/pages-coach/coach/my/index`
})
}, 1000) }, 1000)
}, },
} }

6
uniapp/pages-market/my/update_pass.vue

@ -177,11 +177,7 @@ import apiRoute from '@/api/apiRoute.js';
}) })
//1s //1s
setTimeout(() => { setTimeout(() => {
//- uni.navigateBack()
//
uni.redirectTo({
url: `/pages-market/my/index`
})
}, 1000) }, 1000)
}, },
} }

6
uniapp/pages/coach/my/update_pass.vue

@ -177,11 +177,7 @@ import apiRoute from '@/api/apiRoute.js';
}) })
//1s //1s
setTimeout(() => { setTimeout(() => {
//- uni.navigateBack()
//
uni.redirectTo({
url: `/pages-coach/coach/my/index`
})
}, 1000) }, 1000)
}, },
} }

6
uniapp/pages/market/my/update_pass.vue

@ -177,11 +177,7 @@ import apiRoute from '@/api/apiRoute.js';
}) })
//1s //1s
setTimeout(() => { setTimeout(() => {
//- uni.navigateBack()
//
uni.redirectTo({
url: `/pages-market/my/index`
})
}, 1000) }, 1000)
}, },
} }

Loading…
Cancel
Save