diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/ReviewEnum.java b/yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/ReviewEnum.java index f3caf8d..36e9800 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/ReviewEnum.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/common/enums/ReviewEnum.java @@ -5,9 +5,9 @@ import net.lab1024.sa.base.common.enumeration.BaseEnum; public enum ReviewEnum implements BaseEnum { NOSUBMIT(0, "未提交"), - APPROVAL(1, "待审批"), + APPROVAL(1, "待审核"), - REVIEW(2, "审批中"), + REVIEW(2, "审核中"), PASS(3, "已通过"), diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.java index fe7f818..59c58f1 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/controller/ServiceApplicationsController.java @@ -3,6 +3,7 @@ package net.lab1024.sa.admin.module.service.controller; import net.lab1024.sa.admin.module.service.domain.form.*; import net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO; import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO; +import net.lab1024.sa.admin.module.service.domain.vo.ServiceReportStatisticsVO; import net.lab1024.sa.admin.module.service.service.ServiceApplicationsService; import net.lab1024.sa.base.common.domain.ValidateList; import org.springframework.web.bind.annotation.*; @@ -32,6 +33,13 @@ public class ServiceApplicationsController { @Resource private ServiceApplicationsService serviceApplicationsService; + //查询详情 + @Operation(summary = "查询详情 @author wzh") + @GetMapping("/serviceApplications/queryDetail/{applicationId}") + public ResponseDTO queryDetail(@PathVariable Long applicationId) { + return ResponseDTO.ok(serviceApplicationsService.queryDetail(applicationId)); + } + @Operation(summary = "分页查询 @author wzh") @PostMapping("/serviceApplications/queryPage") //@SaCheckPermission("serviceApplications:query") @@ -58,6 +66,13 @@ public class ServiceApplicationsController { public ResponseDTO review(@RequestBody @Valid ServiceApplicationsUpdateForm updateForm) { return serviceApplicationsService.review(updateForm); } + //批量审核 + @Operation(summary = "批量审核 @author wzh") + @PostMapping("/serviceApplications/batchReview") + //@SaCheckPermission("serviceApplications:batchReview") + public ResponseDTO batchReview(@RequestBody @Valid ServiceApplicationsUpdateForm updateForm) { + return serviceApplicationsService.batchReview(updateForm); + } @Operation(summary = "批量提交 @author wzh") @PostMapping("/serviceApplications/batchSubmit") //@SaCheckPermission("serviceApplications:batchSubmit") @@ -65,6 +80,13 @@ public class ServiceApplicationsController { return serviceApplicationsService.batchSubmit(idList); } + @Operation(summary = "批量提交到协会审核 @author wzh") + @PostMapping("/serviceApplications/batchSubmitAsFirm") + //@SaCheckPermission("serviceApplications:batchSubmitAsFirm") + public ResponseDTO batchSubmitAsFirm(@RequestBody ValidateList idList) { + return serviceApplicationsService.batchSubmitAsFirm(idList); + } + @Operation(summary = "编辑时提交 @author wzh") @GetMapping("/serviceApplications/submit/{applicationId}") //@SaCheckPermission("serviceApplications:submit") @@ -134,4 +156,10 @@ public class ServiceApplicationsController { public void exportLawyer(ServiceLawyerQueryForm queryForm, HttpServletResponse response) { serviceApplicationsService.exportLawyer(queryForm, response); } + + @Operation(summary = "服务上报统计 @author ") + @PostMapping("/serviceApplications/reportStatistics") + public ResponseDTO> getServiceReportStatistics(@RequestBody @Valid ServiceApplicationsQueryForm queryForm) { + return ResponseDTO.ok(serviceApplicationsService.getServiceReportStatistics(queryForm)); + } } diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.java index 4194560..4f797dc 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/dao/ServiceApplicationsDao.java @@ -7,6 +7,7 @@ import net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO; import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.lab1024.sa.admin.module.service.domain.vo.ServiceReportStatisticsVO; import net.lab1024.sa.base.common.domain.ValidateList; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -45,6 +46,16 @@ public interface ServiceApplicationsDao extends BaseMapper idList, @Param("deletedFlag")Integer b); + /** + * 批量提交律所审核 + */ + void batchSubmitAsFirm(@Param("idList")List idList, @Param("firmAuditStatus")Integer firmAuditStatus); + + /** + * 批量提交协会审核 + */ + void batchSubmitAsAssociation(@Param("idList")List idList, @Param("associationAuditStatus")Integer associationAuditStatus, @Param("userId")Long userId, @Param("submitTime")String submitTime); + /** * 律师统计查询(无参数,保持向后兼容) */ @@ -86,4 +97,24 @@ public interface ServiceApplicationsDao extends BaseMapper getDepartmentStatisticsWithParam(@Param("queryForm") ServiceLawyerQueryForm queryForm); -} + + void batchReview(@Param("fileKeyList") List fileKeyList, @Param("value") Integer value); + + /** + * 批量审核 - 律所审核 + */ + void batchReviewAsFirm(@Param("fileKeyList") List fileKeyList, @Param("value") Integer value, @Param("userId") Long userId, @Param("reviewTime") String reviewTime); + + /** + * 批量审核 - 协会审核 + */ + void batchReviewAsAssociation(@Param("fileKeyList") List fileKeyList, @Param("value") Integer value, @Param("userId") Long userId, @Param("reviewTime") String reviewTime); + + /** + * 服务上报统计 + * @param page + * @param queryForm + * @return + */ + List getServiceReportStatistics(Page page, @Param("queryForm") ServiceApplicationsQueryForm queryForm); +} \ No newline at end of file diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/entity/ServiceApplicationsEntity.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/entity/ServiceApplicationsEntity.java index 79be195..ffc7c47 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/entity/ServiceApplicationsEntity.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/entity/ServiceApplicationsEntity.java @@ -115,7 +115,7 @@ public class ServiceApplicationsEntity { /** * 协会审核人 */ - private Integer associationAuditUser; + private Long associationAuditUser; /** * 协会审核时间 @@ -176,4 +176,9 @@ public class ServiceApplicationsEntity { * 附件id */ private String attachmentIds; + + /** + * 职务id + */ + private Long positionId; } diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsAddForm.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsAddForm.java index 9d03cc9..c15781e 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsAddForm.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsAddForm.java @@ -72,5 +72,8 @@ public class ServiceApplicationsAddForm { @Schema(description = "附件id集合", requiredMode = Schema.RequiredMode.REQUIRED) private String attachmentIds; - + /** + * 职务id + */ + private Long positionId; } \ No newline at end of file diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsQueryForm.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsQueryForm.java index a46d67b..e5fa1ea 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsQueryForm.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsQueryForm.java @@ -145,4 +145,44 @@ public class ServiceApplicationsQueryForm extends PageParam { private Long activityNameId; public List employeeIdList; + + /** + * 职务id + */ + private Long positionId; + + /** + * 是否排除草稿状态的数据(仅适用于协会角色) + */ + private Boolean excludeDraft; + + /** + * 是否包含协会审核过的数据(协会角色使用) + */ + private Boolean includeAssociationReviewed; + + /** + * 是否包含律所审核过的数据(律所管理员使用) + */ + private Boolean includeFirmReviewed; + + /** + * 是否需要过滤审核状态(普通律所用户使用) + */ + private Boolean noStatusFilter; + + /** + * 当前用户ID(用于SQL中的特殊过滤逻辑) + */ + private Long currentUserId; + + /** + * 年份 + */ + private Integer year; + + /** + * 季度 + */ + private Integer quarter; } diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsUpdateForm.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsUpdateForm.java index 76cde8e..5e1d679 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsUpdateForm.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/form/ServiceApplicationsUpdateForm.java @@ -20,9 +20,8 @@ import java.time.LocalDateTime; public class ServiceApplicationsUpdateForm{ @Schema(description = "申报ID", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "申报ID 不能为空") private Long applicationId; - + private String applicationIds; @Schema(description = "律所审核状态") private Integer firmAuditStatus; @Schema(description = "申报律师") @@ -66,4 +65,16 @@ public class ServiceApplicationsUpdateForm{ @Schema(description = "附件id集合") private String attachmentIds; + + @Schema(description = "协会审核状态") + private Integer associationAuditStatus; + + @Schema(description = "协会审核意见") + private String associationAuditOpinion; + + /** + * 职务id + */ + private Long positionId; + } \ No newline at end of file diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceApplicationsVO.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceApplicationsVO.java index 2d9e550..891e601 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceApplicationsVO.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceApplicationsVO.java @@ -3,7 +3,10 @@ package net.lab1024.sa.admin.module.service.domain.vo; import io.swagger.v3.oas.annotations.media.Schema; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; + import lombok.Data; +import net.lab1024.sa.base.module.support.file.domain.entity.FileEntity; import javax.validation.constraints.NotBlank; @@ -78,7 +81,7 @@ public class ServiceApplicationsVO { private String associationAuditOpinion; @Schema(description = "协会审核人") - private Integer associationAuditUser; + private Long associationAuditUser; @Schema(description = "协会审核时间") private LocalDateTime associationAuditTime; @@ -98,18 +101,22 @@ public class ServiceApplicationsVO { @Schema(description = "职业证号") private String certificateNumber; - @NotBlank(message = "活动类别 ") private String activityCategory; - @NotBlank(message = "活动名称 ") private String activityName; - @NotBlank(message = "活动类别id ") private Long activityCategoryId; - @NotBlank(message = "活动名称id ") private Long activityNameId; @Schema(description = "附件id集合") private String attachmentIds; + @Schema(description = "附件地址集合") + private List attachmentList; + /** + * 职务id + */ + private Long positionId; + private String positionName; + private String associationAuditUserName; } diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceReportStatisticsVO.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceReportStatisticsVO.java new file mode 100644 index 0000000..f54f11b --- /dev/null +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/service/domain/vo/ServiceReportStatisticsVO.java @@ -0,0 +1,35 @@ +package net.lab1024.sa.admin.module.service.domain.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 服务上报统计VO + * + * @Author + * @Date 2026-01-11 + * @Copyright + */ +@Data +public class ServiceReportStatisticsVO { + + @Schema(description = "律所id") + private Long firmId; + @Schema(description = "律所名称") + private String firmName; + + @Schema(description = "律师数量") + private Long lawyerCount; + + @Schema(description = "上报数量") + private Long reportCount; + + @Schema(description = "已审批") + private Long approvedCount; + + @Schema(description = "未审批") + private Long pendingCount; + + @Schema(description = "总服务时长") + private Double totalServiceDuration; +} \ No newline at end of file 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 efc122e..75fef37 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 @@ -16,19 +16,16 @@ import net.lab1024.sa.admin.module.service.domain.entity.ServiceApplicationsEnti import net.lab1024.sa.admin.module.service.domain.form.*; import net.lab1024.sa.admin.module.service.domain.form.LawyerStatisticsQueryForm; import net.lab1024.sa.admin.common.enums.DateTimeEnum; -import net.lab1024.sa.admin.module.service.domain.vo.ActivityCategoryConverter; -import net.lab1024.sa.admin.module.service.domain.vo.ActivityNameConverter; -import net.lab1024.sa.admin.module.service.domain.vo.EmployeeNameConverter; -import net.lab1024.sa.admin.module.service.domain.vo.OrganizationNameConverter; -import net.lab1024.sa.admin.module.service.domain.vo.LawyerStatisticsVO; -import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsTemplateVO; -import net.lab1024.sa.admin.module.service.domain.vo.ServiceApplicationsVO; +import net.lab1024.sa.admin.module.service.domain.vo.*; import net.lab1024.sa.admin.module.system.datascope.constant.DataScopeViewTypeEnum; import net.lab1024.sa.admin.module.system.datascope.service.DataScopeViewService; import net.lab1024.sa.admin.module.system.department.domain.entity.DepartmentEntity; import net.lab1024.sa.admin.module.system.department.service.DepartmentService; import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity; import net.lab1024.sa.admin.module.system.employee.service.EmployeeService; +import net.lab1024.sa.admin.module.system.login.domain.RequestEmployee; +import net.lab1024.sa.admin.module.system.position.service.PositionService; +import net.lab1024.sa.admin.module.system.role.domain.entity.RoleEntity; import net.lab1024.sa.admin.module.system.role.domain.vo.RoleVO; import net.lab1024.sa.admin.module.system.role.service.RoleEmployeeService; import net.lab1024.sa.admin.module.system.role.service.RoleService; @@ -36,9 +33,11 @@ import net.lab1024.sa.admin.util.AdminRequestUtil; import net.lab1024.sa.admin.util.CellStyleStrategy; import net.lab1024.sa.admin.util.DateTimeUtil; import net.lab1024.sa.admin.util.TimeVo; +import net.lab1024.sa.base.common.code.UserErrorCode; import net.lab1024.sa.base.common.domain.PageResult; import net.lab1024.sa.base.common.domain.RequestUser; import net.lab1024.sa.base.common.domain.ResponseDTO; +import net.lab1024.sa.base.common.enumeration.UserTypeEnum; import net.lab1024.sa.base.common.exception.BusinessException; import net.lab1024.sa.base.common.util.SmartBeanUtil; import net.lab1024.sa.base.common.util.SmartPageUtil; @@ -58,6 +57,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.time.LocalDateTime; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -90,6 +90,37 @@ public class ServiceApplicationsService { private DataScopeViewService dataScopeViewService; @Resource private RoleEmployeeService roleEmployeeService; + @Resource + PositionService positionService; + + //查看详情 + public ServiceApplicationsVO queryDetail(Long applicationId) { + ServiceApplicationsVO serviceApplicationsVO = new ServiceApplicationsVO(); + ServiceApplicationsEntity item = serviceApplicationsDao.selectById(applicationId); + SmartBeanUtil.copyProperties(item, serviceApplicationsVO); + + if (item.getFirmId() != null) { + serviceApplicationsVO.setDepartmentName(departmentService.queryByFirmId(item.getFirmId()).getDepartmentName()); + } + if (item.getUserId() != null){ + serviceApplicationsVO.setUserName(employeeService.queryById(item.getUserId()).getActualName()); + } + if (item.getFirmAuditUser() != null){ + serviceApplicationsVO.setFirmAuditUserName(employeeService.queryById(item.getFirmAuditUser()).getActualName()); + } + if (item.getActivityCategoryId() != null) { + serviceApplicationsVO.setActivityCategory(categoryService.queryById(item.getActivityCategoryId()).getCategoryName()); + } + if (item.getActivityNameId() != null) { + serviceApplicationsVO.setActivityName(goodsService.queryById(item.getActivityNameId()).getGoodsName()); + } + if (item.getPositionId() != null) { + serviceApplicationsVO.setPositionName(positionService.queryById(item.getPositionId()).getPositionName()); + } + return serviceApplicationsVO; + } + + /** * 分页查询 */ @@ -99,15 +130,77 @@ public class ServiceApplicationsService { //根据用户角色的查询数据范围来查询数据 RequestUser requestUser = AdminRequestUtil.getRequestUser(); List roleIdList = roleEmployeeService.getRoleIdList(requestUser.getUserId()); - 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()); - + String roleCode = roleIdList.get(0).getRoleCode(); + + // 检查角色类型 + boolean isAssociationRole = UserTypeEnum.CEO.getDesc().equals(roleCode); + boolean isFirmAdminRole = UserTypeEnum.CTO.getDesc().equals(roleCode); // 律所管理员 + + if (isAssociationRole) { + // 协会用户(CEO):可以看到所有律所提交的数据,但只显示associationAuditStatus为待审核(1)、通过(3)和拒绝(4)的数据和自己创建的数据 + 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); + // 设置只显示associationAuditStatus为待审核、通过、拒绝的数据 + queryForm.setIncludeAssociationReviewed(true); + } else if (isFirmAdminRole) { + // 律所管理员(cto):能看到自己部门范围内的数据,但只显示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); + // 设置只查看firmAuditStatus为待审核、通过和拒绝的数据 + 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()); + } + // 确保普通用户至少能看到自己的数据,如果longs为空或不包含当前用户ID,则添加当前用户ID + if (longs == null) { + longs = new ArrayList<>(); + } + if (!longs.contains(requestUser.getUserId())) { + longs.remove(requestUser.getUserId()); + } + queryForm.setEmployeeIdList(longs); + // 普通用户不需要审核状态过滤,可以看到自己所有状态的数据 + queryForm.setNoStatusFilter(true); } - queryForm.setEmployeeIdList(longs); + queryForm.setCurrentUserId(requestUser.getUserId()); // 传递当前用户ID用于SQL中的特殊过滤 + List list = serviceApplicationsDao.queryPage(page, queryForm); if (!CollectionUtils.isEmpty(list)) { //翻译单位名称和用户名称 @@ -119,7 +212,7 @@ public class ServiceApplicationsService { item.setUserName(employeeService.queryById(item.getUserId()).getActualName()); } if (item.getFirmAuditUser() != null){ - item.setFirmAuditUserName(employeeService.queryById(item.getUserId()).getActualName()); + item.setFirmAuditUserName(employeeService.queryById(item.getFirmAuditUser()).getActualName()); } if (item.getActivityCategoryId() != null) { item.setActivityCategory(categoryService.queryById(item.getActivityCategoryId()).getCategoryName()); @@ -127,6 +220,13 @@ public class ServiceApplicationsService { if (item.getActivityNameId() != null) { item.setActivityName(goodsService.queryById(item.getActivityNameId()).getGoodsName()); } + if (item.getPositionId() != null) { + item.setPositionName(positionService.queryById(item.getPositionId()).getPositionName()); + } + //协会审核人 + if (item.getAssociationAuditUser() != null) { + item.setAssociationAuditUserName(employeeService.queryById(item.getAssociationAuditUser()).getActualName()); + } }); } return SmartPageUtil.convert2PageResult(page, list); @@ -160,9 +260,27 @@ public class ServiceApplicationsService { if (null == applicationId){ return ResponseDTO.ok(); } + ServiceApplicationsEntity serviceApplicationsEntity = serviceApplicationsDao.selectById(applicationId); - serviceApplicationsEntity.setFirmAuditStatus(ReviewEnum.APPROVAL.getValue()); - serviceApplicationsEntity.setReportTime(LocalDateTime.now()); + + // 检查当前用户角色是否为CEO + RequestUser requestUser = AdminRequestUtil.getRequestUser(); + List roles = roleEmployeeService.getRoleIdList(requestUser.getUserId()); + if (!roles.isEmpty()) { + String roleCode = roles.get(0).getRoleCode(); + // 如果是CEO角色提交申报,默认通过律所审核和协会审核 + if (UserTypeEnum.CEO.getDesc().equals(roleCode)) { + serviceApplicationsEntity.setFirmAuditStatus(ReviewEnum.PASS.getValue()); + serviceApplicationsEntity.setFirmAuditUser(requestUser.getUserId()); + serviceApplicationsEntity.setFirmAuditTime(LocalDateTime.now()); + serviceApplicationsEntity.setAssociationAuditStatus(ReviewEnum.PASS.getValue()); + serviceApplicationsEntity.setAssociationAuditUser(requestUser.getUserId()); + serviceApplicationsEntity.setAssociationAuditTime(LocalDateTime.now()); + } + }else { + serviceApplicationsEntity.setFirmAuditStatus(ReviewEnum.APPROVAL.getValue()); + serviceApplicationsEntity.setReportTime(LocalDateTime.now()); + } serviceApplicationsDao.updateById(serviceApplicationsEntity); return ResponseDTO.ok(); } @@ -361,6 +479,11 @@ public class ServiceApplicationsService { } } + /** + * 批量提交 + * @param idList + * @return + */ public ResponseDTO batchSubmit(List idList) { if (CollectionUtils.isEmpty(idList)){ return ResponseDTO.ok(); @@ -370,10 +493,62 @@ public class ServiceApplicationsService { return ResponseDTO.ok(); } + /** + * 批量上报 + * @param idList + * @return + */ + public ResponseDTO batchSubmitAsFirm(List idList) { + if (CollectionUtils.isEmpty(idList)){ + return ResponseDTO.ok(); + } + + RequestUser requestUser = AdminRequestUtil.getRequestUser(); + // 查询用户角色是律所管理员,则修改律所的审核状态 + // 如果是ceo则修改协会审核状态 + List roles = roleEmployeeService.getRoleIdList(requestUser.getUserId()); + if (roles.isEmpty()) { + return ResponseDTO.error(UserErrorCode.NO_PERMISSION); + } + + String roleCode = roles.get(0).getRoleCode(); + + // 设置审核时间 + String reviewTime = LocalDateTime.now().toString(); + + // 根据不同角色执行不同的提交操作 + if (UserTypeEnum.CEO.getDesc().equals(roleCode)) { + // CEO角色:修改协会审核状态 + serviceApplicationsDao.batchSubmitAsAssociation(idList, ReviewEnum.PASS.getValue(), requestUser.getUserId(), reviewTime); + } else { + // 其他角色(如律所管理员):修改律所审核状态 + serviceApplicationsDao.batchSubmitAsFirm(idList, ReviewEnum.REVIEW.getValue()); + } + + return ResponseDTO.ok(); + } + public ResponseDTO addSubmit(@Valid ServiceApplicationsAddForm addForm) { ServiceApplicationsEntity serviceApplicationsEntity = SmartBeanUtil.copy(addForm, ServiceApplicationsEntity.class); serviceApplicationsEntity.setRecordStatus(ReviewEnum.APPROVAL.getValue()); serviceApplicationsEntity.setReportTime(LocalDateTime.now()); + + // 检查当前用户角色是否为CEO + RequestUser requestUser = AdminRequestUtil.getRequestUser(); + List roles = roleEmployeeService.getRoleIdList(requestUser.getUserId()); + if (!roles.isEmpty()) { + String roleCode = roles.get(0).getRoleCode(); + // 如果是CEO角色创建申报,默认通过律所审核和协会审核 + if (UserTypeEnum.CEO.getDesc().equals(roleCode)) { + serviceApplicationsEntity.setFirmAuditStatus(ReviewEnum.PASS.getValue()); + serviceApplicationsEntity.setFirmAuditUser(requestUser.getUserId()); + serviceApplicationsEntity.setFirmAuditTime(LocalDateTime.now()); + serviceApplicationsEntity.setAssociationAuditStatus(ReviewEnum.PASS.getValue()); + serviceApplicationsEntity.setAssociationAuditUser(requestUser.getUserId()); + serviceApplicationsEntity.setAssociationAuditTime(LocalDateTime.now()); + } + } + if (null == addForm.getApplicationId()){ serviceApplicationsDao.insert(serviceApplicationsEntity); }else { @@ -384,11 +559,43 @@ public class ServiceApplicationsService { } public ResponseDTO review(@Valid ServiceApplicationsUpdateForm updateForm) { - RequestUser requestUser = AdminRequestUtil.getRequestUser(); + RequestEmployee requestUser = AdminRequestUtil.getRequestUser(); + // 查询用户角色是律所管理员,则修改律所的审核状态 + // 如果是ceo则修改协会审核状态 + List roles = roleEmployeeService.getRoleIdList(requestUser.getEmployeeId()); + if (roles.isEmpty()) { + return ResponseDTO.error(UserErrorCode.NO_PERMISSION); + } + + String roleCode = roles.get(0).getRoleCode(); ServiceApplicationsEntity serviceApplicationsEntity = serviceApplicationsDao.selectById(updateForm.getApplicationId()); - serviceApplicationsEntity.setFirmAuditStatus(updateForm.getFirmAuditStatus()); - serviceApplicationsEntity.setFirmAuditUser(requestUser.getUserId()); - serviceApplicationsEntity.setFirmAuditTime(LocalDateTime.now()); + + // 根据不同角色执行不同的审核操作 + if (UserTypeEnum.CEO.getDesc().equals(roleCode)) { + //如果是CEO自己创建的数据 + if (serviceApplicationsEntity.getUserId().equals(requestUser.getEmployeeId())) { + // 修改所有状态审核状态 + serviceApplicationsEntity.setAssociationAuditStatus(updateForm.getAssociationAuditStatus()); + serviceApplicationsEntity.setAssociationAuditUser(requestUser.getEmployeeId()); + serviceApplicationsEntity.setAssociationAuditTime(LocalDateTime.now()); + serviceApplicationsEntity.setAssociationAuditOpinion(updateForm.getAssociationAuditOpinion()); + serviceApplicationsEntity.setFirmAuditStatus(updateForm.getAssociationAuditStatus()); + serviceApplicationsEntity.setFirmAuditUser(requestUser.getEmployeeId()); + serviceApplicationsEntity.setFirmAuditTime(LocalDateTime.now()); + }else { + // CEO角色:修改协会审核状态 + serviceApplicationsEntity.setAssociationAuditStatus(updateForm.getAssociationAuditStatus()); + serviceApplicationsEntity.setAssociationAuditUser(requestUser.getEmployeeId()); + serviceApplicationsEntity.setAssociationAuditTime(LocalDateTime.now()); + serviceApplicationsEntity.setAssociationAuditOpinion(updateForm.getAssociationAuditOpinion()); + } + } else { + // 其他角色(如律所管理员):修改律所审核状态 + serviceApplicationsEntity.setFirmAuditStatus(updateForm.getFirmAuditStatus()); + serviceApplicationsEntity.setFirmAuditUser(requestUser.getEmployeeId()); + serviceApplicationsEntity.setFirmAuditTime(LocalDateTime.now()); + } + serviceApplicationsDao.updateById(serviceApplicationsEntity); return ResponseDTO.ok(); } @@ -450,6 +657,40 @@ public class ServiceApplicationsService { exportExcel(response, "律所统计信息.xlsx", "律所统计信息", ServiceDepartmentImportForm.class, lawyerStatisticsWithParamYear); } + @Transactional + public ResponseDTO batchReview(@Valid ServiceApplicationsUpdateForm updateForm) { + RequestUser requestUser = AdminRequestUtil.getRequestUser(); + // 查询用户角色是律所管理员,则修改律所的审核状态 + // 如果是ceo则修改协会审核状态 + List roles = roleEmployeeService.getRoleIdList(requestUser.getUserId()); + if (roles.isEmpty()) { + return ResponseDTO.error(UserErrorCode.NO_PERMISSION); + } + + String roleCode = roles.get(0).getRoleCode(); + String applicationIds = updateForm.getApplicationIds(); + if (applicationIds == null || applicationIds.trim().isEmpty()) { + return ResponseDTO.ok(); + } + + String[] fileKeyArray = applicationIds.split(","); + List fileKeyList = Arrays.asList(fileKeyArray); + + // 设置审核时间 + String reviewTime = LocalDateTime.now().toString(); + + // 根据不同角色执行不同的审核操作 + if (UserTypeEnum.CEO.getDesc().equals(roleCode)) { + // CEO角色:修改协会审核状态 + serviceApplicationsDao.batchReviewAsAssociation(fileKeyList, ReviewEnum.PASS.getValue(), requestUser.getUserId(), reviewTime); + } else { + // 其他角色(如律所管理员):修改律所审核状态 + serviceApplicationsDao.batchReviewAsFirm(fileKeyList, ReviewEnum.PASS.getValue(), requestUser.getUserId(), reviewTime); + } + + return ResponseDTO.ok(); + } + /** * Excel下拉列表处理器 */ @@ -870,4 +1111,14 @@ public class ServiceApplicationsService { throw new BusinessException("Excel导出失败:" + e.getMessage()); } } + + /** + * 服务上报统计 + * @return + */ + public PageResult getServiceReportStatistics(ServiceApplicationsQueryForm queryForm) { + Page page = SmartPageUtil.convert2PageQuery(queryForm); + List list = serviceApplicationsDao.getServiceReportStatistics(page, queryForm); + return SmartPageUtil.convert2PageResult(page, list); + } } \ No newline at end of file diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/position/service/PositionService.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/position/service/PositionService.java index 1d13296..1c1f5a7 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/position/service/PositionService.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/system/position/service/PositionService.java @@ -102,4 +102,8 @@ public class PositionService { List list = positionDao.queryList(Boolean.FALSE); return list; } + + public PositionEntity queryById(Long positionId) { + return positionDao.selectById(positionId); + } } diff --git a/yun-base/src/main/java/net/lab1024/sa/base/common/enumeration/UserTypeEnum.java b/yun-base/src/main/java/net/lab1024/sa/base/common/enumeration/UserTypeEnum.java index 16c3c59..8796aca 100644 --- a/yun-base/src/main/java/net/lab1024/sa/base/common/enumeration/UserTypeEnum.java +++ b/yun-base/src/main/java/net/lab1024/sa/base/common/enumeration/UserTypeEnum.java @@ -4,7 +4,9 @@ package net.lab1024.sa.base.common.enumeration; * 用户类型 */ public enum UserTypeEnum implements BaseEnum { - + CEO(2, "ceo"), + CTO(3, "cto"), + USER(4, "user"), /** * 管理端 员工用户 */