diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java index c4bb112..9cd6da3 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java @@ -278,10 +278,63 @@ public class ServiceApplicationsService { public PageResult queryPageReport(@Valid ServiceApplicationsQueryForm queryForm) { - + List longs = new ArrayList<>(); Page page = SmartPageUtil.convert2PageQuery(queryForm); //根据用户角色的查询数据范围来查询数据 RequestEmployee requestUser = AdminRequestUtil.getRequestUser(); + List roleIdList = roleEmployeeService.getRoleIdList(requestUser.getUserId()); + String roleCode = AdminRequestUtil.getRoleCode(roleIdList); + + // 检查角色类型 + boolean isAssociationRole = AdminRequestUtil.isAssociationRole(roleIdList); + boolean isFirmRole = AdminRequestUtil.isFirmRole(roleIdList); // 律所主任或行政 + if (!UserTypeEnum.Admin.getDesc().equals(roleCode)) { + if (isAssociationRole) { + // 协会用户(CEO):可以看到所有律所提交的数据,但只显示associationAuditStatus为待审核(1)、通过(3)和拒绝(4)的数据和自己创建的数据 + queryForm.setIncludeAssociationReviewed(true); + } else if (isFirmRole) { + // 律所主任或行政:能看到自己部门范围内的数据,但只显示firmAuditStatus为待审核、通过和拒绝的数据和自己创建的数据 + Integer oneByRoleId = dataScopeViewService.getOneByRoleId(roleIdList.get(0).getRoleId()); + // 获取自己部门范围内的数据 + List departmentEmployees = new ArrayList<>(); + if (DataScopeViewTypeEnum.ME.getValue().equals(oneByRoleId)) { + departmentEmployees = dataScopeViewService.getCanViewEmployeeId(DataScopeViewTypeEnum.ME, requestUser.getUserId()); + } else if (DataScopeViewTypeEnum.DEPARTMENT.getValue().equals(oneByRoleId)) { + departmentEmployees = dataScopeViewService.getCanViewEmployeeId(DataScopeViewTypeEnum.DEPARTMENT, requestUser.getUserId()); + } + + // 确保包含当前用户ID,以便能看到自己创建的数据 + if (departmentEmployees == null) { + departmentEmployees = new ArrayList<>(); + } + if (!departmentEmployees.contains(requestUser.getUserId())) { + departmentEmployees.add(requestUser.getUserId()); + } + + queryForm.setEmployeeIdList(departmentEmployees); + // 律所主任或行政可以查看部门内所有已审核数据以及自己创建的有效数据(明确排除未提交的草稿) + queryForm.setIncludeFirmReviewed(true); + } else { + // 律所普通用户:只能看到自己提交的数据,包括所有firmAuditStatus状态 + Integer oneByRoleId = dataScopeViewService.getOneByRoleId(roleIdList.get(0).getRoleId()); + if (DataScopeViewTypeEnum.ME.getValue().equals(oneByRoleId)) { + longs = dataScopeViewService.getCanViewEmployeeId(DataScopeViewTypeEnum.ME, requestUser.getUserId()); + } else if (DataScopeViewTypeEnum.DEPARTMENT.getValue().equals(oneByRoleId)) { + longs = dataScopeViewService.getCanViewEmployeeId(DataScopeViewTypeEnum.DEPARTMENT, requestUser.getUserId()); + } + // 确保普通用户至少能看到自己的数据 + if (longs == null) { + longs = new ArrayList<>(); + } + if (!longs.contains(requestUser.getUserId())) { + longs.add(requestUser.getUserId()); + } + queryForm.setEmployeeIdList(longs); + // 普通用户不需要审核状态过滤,可以看到自己所有状态的数据 + queryForm.setNoStatusFilter(true); + } + queryForm.setCurrentUserId(requestUser.getUserId()); + } queryForm.setUserId(requestUser.getUserId()); List list = serviceApplicationsDao.queryPage(page, queryForm); if (!CollectionUtils.isEmpty(list)) { @@ -755,7 +808,41 @@ public class ServiceApplicationsService { return ResponseDTO.ok(); } - //RequestEmployee requestUser = AdminRequestUtil.getRequestUser(); + // 获取当前用户信息 + RequestEmployee requestUser = AdminRequestUtil.getRequestUser(); + List roleIdList = roleEmployeeService.getRoleIdList(requestUser.getUserId()); + + // 检查是否是律所角色(主任或行政) + boolean isFirmRole = AdminRequestUtil.isFirmRole(roleIdList); + if (!isFirmRole) { + return ResponseDTO.error(UserErrorCode.NO_PERMISSION); + } + + // 查询这些记录的详细信息,进行权限和状态校验 + for (Long id : idList) { + ServiceApplicationsVO record = serviceApplicationsDao.queryById(id); + if (record == null) { + return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST, "记录ID:" + id + "不存在"); + } + + // 校验1:只能上报本所的数据 + if (!record.getFirmId().equals(requestUser.getDepartmentId())) { + return ResponseDTO.error(UserErrorCode.NO_PERMISSION, "只能上报本所的数据"); + } + + // 校验2:执业机构审核状态必须是已通过(3) + if (!ReviewEnum.PASS.getValue().equals(record.getFirmAuditStatus())) { + return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "记录ID:" + id + "未通过执业机构审核,无法上报"); + } + + // 校验3:协会审核状态必须是未提交(0)或被驳回(4) + Integer associationStatus = record.getAssociationAuditStatus(); + if (!ReviewEnum.NOSUBMIT.getValue().equals(associationStatus) && + !ReviewEnum.REFUSE.getValue().equals(associationStatus)) { + return ResponseDTO.error(UserErrorCode.PARAM_ERROR, "记录ID:" + id + "已上报或正在审核中,无法重复上报"); + } + } + serviceApplicationsDao.batchSubmitAsAssociation(idList, ReviewEnum.APPROVAL.getValue()); return ResponseDTO.ok(); diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java index 905e917..b8dbcef 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java @@ -120,4 +120,13 @@ public class EmployeeController { return employeeService.queryAllEmployee(disabledFlag); } + @Operation(summary = "搜索员工(下拉框搜索用)") + @GetMapping("/employee/search") + public ResponseDTO> searchEmployee( + @RequestParam(value = "firmId", required = false) Long firmId, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "limit", defaultValue = "500") Integer limit) { + return employeeService.searchEmployees(firmId, keyword, limit); + } + } diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java index 8def4a3..e7c0337 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java @@ -102,4 +102,11 @@ public interface EmployeeDao extends BaseMapper { */ Integer updatePassword(@Param("employeeId") Long employeeId, @Param("password") String password); + /** + * 搜索员工(下拉框搜索用) + * @param firmId 律所ID(律协传null查所有,律所传当前律所) + * @param keyword 搜索关键字(姓名或手机号) + * @param limit 返回数量上限 + */ + List searchEmployees(@Param("firmId") Long firmId, @Param("keyword") String keyword, @Param("limit") Integer limit); } \ No newline at end of file diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java index a1be2ac..29d5038 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java @@ -447,6 +447,28 @@ public class EmployeeService { return ResponseDTO.ok(employeeList); } + /** + * 搜索员工(下拉框搜索用) + */ + public ResponseDTO> searchEmployees(Long firmId, String keyword, Integer limit) { + RequestEmployee requestUser = AdminRequestUtil.getRequestUser(); + List roleIdList = roleEmployeeService.getRoleIdList(requestUser.getEmployeeId()); + String roleCode = roleIdList.isEmpty() ? "" : roleIdList.get(0).getRoleCode(); + + // 律所管理员角色:只看当前律所 + // 律协角色(ceo/user):可以看所有律师 + Long searchFirmId = null; + if (UserTypeEnum.CTO.getDesc().equals(roleCode)) { + searchFirmId = requestUser.getDepartmentId(); + } else if (firmId != null) { + // 如果前端传了firmId,使用传入的值 + searchFirmId = firmId; + } + + List result = employeeDao.searchEmployees(searchFirmId, keyword, limit); + return ResponseDTO.ok(result); + } + /** * 根据登录名获取员工 */ diff --git a/yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml b/yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml index 8dd9c97..7d89641 100644 --- a/yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml +++ b/yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml @@ -41,8 +41,16 @@ AND te_employee.actual_name like concat('%',#{queryForm.userName},'%') - - AND tp_apply.status = #{queryForm.status} + + + + + AND tp_apply.audit_status = #{queryForm.status} + + + AND tp_apply.status = #{queryForm.status} + + AND tp_apply.apply_date >= #{queryForm.applyDateStart} @@ -61,7 +69,18 @@ - ORDER BY tp_apply.status, tp_apply.create_time DESC + ORDER BY + CASE + + WHEN tp_apply.status = 1 OR tp_apply.audit_status = 1 THEN 0 + + WHEN tp_apply.status = 2 OR tp_apply.audit_status = 2 THEN 1 + + WHEN tp_apply.status = 3 OR tp_apply.audit_status IN (3, 4) THEN 2 + + ELSE 3 + END, + tp_apply.create_time DESC diff --git a/yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml b/yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml index 779ca20..f59c65b 100644 --- a/yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml +++ b/yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml @@ -169,8 +169,9 @@ ORDER BY CASE - WHEN t_service_applications.firm_audit_status = 1 OR t_service_applications.association_audit_status = 1 THEN 0 - ELSE 1 + WHEN t_service_applications.firm_audit_status = 0 THEN 0 + WHEN t_service_applications.firm_audit_status = 1 OR t_service_applications.association_audit_status = 1 THEN 1 + ELSE 2 END ASC, t_service_applications.report_time DESC, t_service_applications.application_id DESC diff --git a/yun-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml b/yun-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml index e8551c9..eed5559 100644 --- a/yun-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml +++ b/yun-admin/src/main/resources/mapper/system/employee/EmployeeMapper.xml @@ -202,4 +202,34 @@ WHERE employee_id = #{employeeId} + + + \ No newline at end of file