From 0a63bef177bdadbad3d901480bb6a7bd359fe4ff Mon Sep 17 00:00:00 2001 From: wang Date: Tue, 14 Apr 2026 23:19:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/entity/PenaltyApplyEntity.java | 5 + .../domain/form/PenaltyApplyAddForm.java | 5 + .../domain/form/PenaltyApplyUpdateForm.java | 4 + .../penalty/domain/vo/PenaltyApplyVO.java | 7 + .../penalty/service/PenaltyApplyService.java | 53 +++++- .../ServiceApplicationsController.java | 4 +- .../service/dao/ServiceApplicationsDao.java | 8 + .../service/ServiceApplicationsService.java | 97 +++++++++- .../word/WordApplicationsController.java | 17 +- .../penaltyapply/PenaltyApplyMapper.xml | 4 +- .../service/ServiceApplicationsMapper.xml | 165 +++++++++++------- 11 files changed, 282 insertions(+), 87 deletions(-) diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/entity/PenaltyApplyEntity.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/entity/PenaltyApplyEntity.java index 7f0586e..d709b3e 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/entity/PenaltyApplyEntity.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/entity/PenaltyApplyEntity.java @@ -78,4 +78,9 @@ public class PenaltyApplyEntity { * 类型 */ private String type; + + /** + * 申请类型:PERSONAL-个人证明,FIRM-律所证明 + */ + private String applyType; } diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyAddForm.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyAddForm.java index d4cea77..0cc383d 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyAddForm.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyAddForm.java @@ -21,5 +21,10 @@ public class PenaltyApplyAddForm { @NotNull(message = "申请人用途 不能为空") private String usePurpose; + @Schema(description = "类型") private String type; + + @Schema(description = "申请类型:PERSONAL-个人证明,FIRM-律所证明", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "申请类型不能为空") + private String applyType; } \ No newline at end of file diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyUpdateForm.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyUpdateForm.java index 343a803..7859a45 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyUpdateForm.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/form/PenaltyApplyUpdateForm.java @@ -25,5 +25,9 @@ public class PenaltyApplyUpdateForm { @Schema(description = "律协审批状态(0-未提交,1-已提交,2-审核中,3-已批准,5-已驳回)") private Integer auditStatus; + @Schema(description = "类型") private String type; + + @Schema(description = "申请类型:PERSONAL-个人证明,FIRM-律所证明") + private String applyType; } \ No newline at end of file diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/vo/PenaltyApplyVO.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/vo/PenaltyApplyVO.java index 4bb5919..84ea74d 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/vo/PenaltyApplyVO.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/domain/vo/PenaltyApplyVO.java @@ -50,5 +50,12 @@ public class PenaltyApplyVO { @Schema(description = "删除标志(0-正常,1-已删除)") private Integer deletedFlag; + @Schema(description = "类型") private String type; + + @Schema(description = "申请类型:PERSONAL-个人证明,FIRM-律所证明") + private String applyType; + + @Schema(description = "申请类型名称") + private String applyTypeName; } diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyApplyService.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyApplyService.java index d7bc3b3..737d668 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyApplyService.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/penalty/service/PenaltyApplyService.java @@ -78,6 +78,23 @@ public class PenaltyApplyService { } } List list = penaltyApplyDao.queryPage(page, queryForm); + + // 转换申请类型名称 + for (PenaltyApplyVO vo : list) { + if ("PERSONAL".equals(vo.getApplyType())) { + vo.setApplyTypeName("个人证明"); + } else if ("FIRM".equals(vo.getApplyType())) { + vo.setApplyTypeName("律所证明"); + } else { + // 兼容旧数据 + if (UserTypeEnum.USER.getDesc().equals(vo.getType())) { + vo.setApplyTypeName("个人证明"); + } else { + vo.setApplyTypeName("律所证明"); + } + } + } + return SmartPageUtil.convert2PageResult(page, list); } @@ -87,29 +104,47 @@ public class PenaltyApplyService { public ResponseDTO add(PenaltyApplyAddForm addForm) { Long userId = AdminRequestUtil.getRequestUser().getUserId(); EmployeeEntity entity = employeeService.getById(userId); - //判断有没有处罚 - if (UserTypeEnum.USER.getDesc().equals(addForm.getType())){ + + // 根据申请类型判断是个人证明还是律所证明 + // PERSONAL = 个人证明(查申请人自己) + // FIRM = 律所证明(查律所) + if ("PERSONAL".equals(addForm.getApplyType())) { + // 个人证明:查询申请人自己是否有处罚记录 Boolean query = penaltyLawyerService.query(entity.getActualName()); - if (query){ + if (query) { return ResponseDTO.error(UserErrorCode.FORM_REPEAT_SUBMIT_PENALTY); } - }else { - //查询机构名称 + } else if ("FIRM".equals(addForm.getApplyType())) { + // 律所证明:查询律所是否有处罚记录 DepartmentVO departmentById = departmentService.getDepartmentById(entity.getDepartmentId()); Boolean query = penaltyLawyerService.queryNoName(departmentById.getDepartmentName()); - if (query){ + if (query) { return ResponseDTO.error(UserErrorCode.FORM_REPEAT_SUBMIT_PENALTY); } + } else { + // 兼容旧逻辑:如果没有传 applyType,按原来的 type 字段判断 + if (UserTypeEnum.USER.getDesc().equals(addForm.getType())) { + Boolean query = penaltyLawyerService.query(entity.getActualName()); + if (query) { + return ResponseDTO.error(UserErrorCode.FORM_REPEAT_SUBMIT_PENALTY); + } + } else { + DepartmentVO departmentById = departmentService.getDepartmentById(entity.getDepartmentId()); + Boolean query = penaltyLawyerService.queryNoName(departmentById.getDepartmentName()); + if (query) { + return ResponseDTO.error(UserErrorCode.FORM_REPEAT_SUBMIT_PENALTY); + } + } } PenaltyApplyEntity penaltyApplyEntity = SmartBeanUtil.copy(addForm, PenaltyApplyEntity.class); penaltyApplyEntity.setUserId(userId); String roleCode = letterService.getRoleCode(); - //判断类型 - if (roleCode.equals(UserTypeEnum.CTO.getDesc()) || roleCode.equals(UserTypeEnum.STAFF.getDesc())){ + // 判断类型 + if (roleCode.equals(UserTypeEnum.CTO.getDesc()) || roleCode.equals(UserTypeEnum.STAFF.getDesc())) { penaltyApplyEntity.setStatus(ReviewEnum.PASS.getValue()); penaltyApplyEntity.setAuditStatus(ReviewEnum.APPROVAL.getValue()); - }else { + } else { penaltyApplyEntity.setStatus(ReviewEnum.APPROVAL.getValue()); } penaltyApplyEntity.setDepartmentId(entity.getDepartmentId()); 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 56cd95a..dc00640 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 @@ -161,8 +161,8 @@ public class ServiceApplicationsController { @Operation(summary = "律所统计信息 @author wzh") @PostMapping("/serviceApplications/statistics/department") //@SaCheckPermission("serviceApplications:statistics") - public ResponseDTO> getLawyerStatisticsByDepartment(@RequestBody @Valid LawyerStatisticsQueryFormList queryForm) { - return ResponseDTO.ok(serviceApplicationsService.getLawyerStatisticsByDepartment(queryForm)); + public ResponseDTO> getLawyerStatisticsByDepartment(@RequestBody @Valid LawyerStatisticsQueryFormPage queryForm) { + return ResponseDTO.ok(serviceApplicationsService.getLawyerStatisticsByDepartmentPage(queryForm)); } @Operation(summary = "律所统计信息导出 @author wzh") 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 10a73af..4c705ed 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 @@ -86,6 +86,14 @@ public interface ServiceApplicationsDao extends BaseMapper getdepartmentStatistics(@Param("queryForm") LawyerStatisticsQueryForm queryForm); + /** + * 律所统计分页查询 + * @param page + * @param queryForm + * @return + */ + List getdepartmentStatisticsPage(@Param("page") Page page, @Param("queryForm") LawyerStatisticsQueryFormPage queryForm); + /** * 月度统计 * @param queryForm 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 1ff8358..fbdc32b 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 @@ -774,25 +774,59 @@ public class ServiceApplicationsService { } /** - * 律所统计 + * 律所统计(不分页) */ public List getLawyerStatisticsByDepartment(@Valid LawyerStatisticsQueryFormList queryForms) { LawyerStatisticsQueryForm queryForm = getQueryForm(queryForms); DictEntity dictItem = dictService.getOne("FILECOST"); - + // 获取年度统计数据 List annualStatistics = getAnnualStatistics(queryForm); - + if (!annualStatistics.isEmpty()) { // 处理统计数据 processStatistics(annualStatistics, queryForm, dictItem); } - + // 屏蔽成本数据 maskCostDataForUser(annualStatistics); return annualStatistics; } - + + /** + * 律所统计(分页) + */ + public PageResult getLawyerStatisticsByDepartmentPage(@Valid LawyerStatisticsQueryFormPage queryForm) { + // 应用权限控制 + applyUserPermissionControl(queryForm); + + // 设置时间范围(根据季度参数设置) + setTimeRangeByQuarter(queryForm); + + DictEntity dictItem = dictService.getOne("FILECOST"); + + // 创建分页对象,查询律所列表 + Page page = SmartPageUtil.convert2PageQuery(queryForm); + + // 创建年度查询表单(分页类型) + LawyerStatisticsQueryFormPage annualQueryFormPage = createAnnualQueryFormPage(queryForm); + + // 分页查询律所年度统计数据(使用年度时间范围) + List annualStatistics = serviceApplicationsDao.getdepartmentStatisticsPage(page, annualQueryFormPage); + + if (!annualStatistics.isEmpty()) { + // 处理统计数据(季度数据、律师明细等) + // 创建 LawyerStatisticsQueryForm 用于处理逻辑 + LawyerStatisticsQueryForm annualQueryForm = createAnnualQueryForm(queryForm); + processStatistics(annualStatistics, annualQueryForm, dictItem); + } + + // 屏蔽成本数据 + maskCostDataForUser(annualStatistics); + + return SmartPageUtil.convert2PageResult(page, annualStatistics); + } + /** * 获取年度统计数据 */ @@ -807,20 +841,66 @@ public class ServiceApplicationsService { private LawyerStatisticsQueryForm createAnnualQueryForm(LawyerStatisticsQueryForm queryForm) { LawyerStatisticsQueryForm annualQueryForm = new LawyerStatisticsQueryForm(); annualQueryForm.setYear(queryForm.getYear()); - + // 如果指定了机构ID,则应用过滤条件 if (queryForm.getFirmId() != null) { annualQueryForm.setFirmId(queryForm.getFirmId()); } - + // 设置年度时间范围 String yearStart = queryForm.getYear() + "-01-01"; String yearEnd = queryForm.getYear() + "-12-31"; annualQueryForm.setStartTime(yearStart); annualQueryForm.setEndTime(yearEnd); - + return annualQueryForm; } + + /** + * 创建年度查询表单(从分页表单) + */ + private LawyerStatisticsQueryForm createAnnualQueryForm(LawyerStatisticsQueryFormPage queryForm) { + LawyerStatisticsQueryForm annualQueryForm = new LawyerStatisticsQueryForm(); + annualQueryForm.setYear(queryForm.getYear()); + annualQueryForm.setQuarter(queryForm.getQuarter()); + + // 如果指定了机构 ID,则应用过滤条件 + if (queryForm.getFirmId() != null) { + annualQueryForm.setFirmId(queryForm.getFirmId()); + } + + // 设置年度时间范围 + String yearStart = queryForm.getYear() + "-01-01"; + String yearEnd = queryForm.getYear() + "-12-31"; + annualQueryForm.setStartTime(yearStart); + annualQueryForm.setEndTime(yearEnd); + + return annualQueryForm; + } + + /** + * 创建年度查询表单(分页类型) + */ + private LawyerStatisticsQueryFormPage createAnnualQueryFormPage(LawyerStatisticsQueryFormPage queryForm) { + LawyerStatisticsQueryFormPage annualQueryFormPage = new LawyerStatisticsQueryFormPage(); + annualQueryFormPage.setYear(queryForm.getYear()); + annualQueryFormPage.setQuarter(queryForm.getQuarter()); + annualQueryFormPage.setPageNum(queryForm.getPageNum()); + annualQueryFormPage.setPageSize(queryForm.getPageSize()); + + // 如果指定了机构 ID,则应用过滤条件 + if (queryForm.getFirmId() != null) { + annualQueryFormPage.setFirmId(queryForm.getFirmId()); + } + + // 设置年度时间范围 + String yearStart = queryForm.getYear() + "-01-01"; + String yearEnd = queryForm.getYear() + "-12-31"; + annualQueryFormPage.setStartTime(yearStart); + annualQueryFormPage.setEndTime(yearEnd); + + return annualQueryFormPage; + } /** * 处理统计数据 @@ -855,6 +935,7 @@ public class ServiceApplicationsService { private LawyerStatisticsQueryForm createQuarterlyQueryForm(LawyerStatisticsQueryForm queryForm) { LawyerStatisticsQueryForm quarterlyQueryForm = new LawyerStatisticsQueryForm(); quarterlyQueryForm.setYear(queryForm.getYear()); + quarterlyQueryForm.setQuarter(queryForm.getQuarter()); quarterlyQueryForm.setFirmId(queryForm.getFirmId()); // 设置季度时间范围 diff --git a/yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordApplicationsController.java b/yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordApplicationsController.java index c47f86e..8222bde 100644 --- a/yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordApplicationsController.java +++ b/yun-admin/src/main/java/net/lab1024/sa/admin/module/word/WordApplicationsController.java @@ -266,13 +266,20 @@ public class WordApplicationsController { EmployeeEntity employee = employeeService.getById(penaltyApplyEntity.getUserId()); DepartmentVO department = departmentService.getById(employee.getDepartmentId()); + // 判断申请类型:优先使用 applyType,兼容旧数据使用 type + String applyType = penaltyApplyEntity.getApplyType(); + if (applyType == null || applyType.isEmpty()) { + // 兼容旧数据:根据 type 判断 + applyType = UserTypeEnum.USER.getDesc().equals(penaltyApplyEntity.getType()) ? "PERSONAL" : "FIRM"; + } + return new WordCertificateService.CertificateData( department.getDepartmentName(), department.getCreditCode(), employee.getActualName(), employee.getCertificateNumber(), penaltyApplyEntity.getCreateTime(), - penaltyApplyEntity.getType() + applyType ); } @@ -339,13 +346,15 @@ public class WordApplicationsController { int lineHeight = bodyMetrics.getHeight(); int maxLineWidth = PAGE_WIDTH - LEFT_MARGIN - RIGHT_MARGIN; String fullContent = ""; - if (UserTypeEnum.USER.getDesc().equals(data.getType())){ - // 构建完整内容 + // 根据 applyType 判断是个人证明还是律所证明 + if ("PERSONAL".equals(data.getType())) { + // 个人证明:包含律师姓名和执业证号 fullContent = "兹证明" + data.getCertificateNo() + "(统一社会信用代码:" + data.getPurpose() + ")" + data.getName() + "律师(执业证号:" + data.getIdCard() + ")近五年在我市执业期间未受到律师协会行业处分。"; - }else { + } else { + // 律所证明:不包含律师个人信息 fullContent = "兹证明" + data.getCertificateNo() + "(统一社会信用代码:" + data.getPurpose() + ")" + "近五年在我市执业期间未受到律师协会行业处分。"; diff --git a/yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml b/yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml index bee6d99..8dd9c97 100644 --- a/yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml +++ b/yun-admin/src/main/resources/mapper/penaltyapply/PenaltyApplyMapper.xml @@ -14,7 +14,8 @@ t_penalty_apply.deleted_flag, t_penalty_apply.department_id, t_penalty_apply.audit_status, - t_penalty_apply.type + t_penalty_apply.type, + t_penalty_apply.apply_type @@ -31,6 +32,7 @@ tp_apply.audit_status as auditStatus, tp_apply.department_id as departmentId, tp_apply.type, + tp_apply.apply_type as applyType, te_employee.actual_name AS userName FROM t_penalty_apply tp_apply left join t_employee te_employee on tp_apply.user_id = te_employee.employee_id diff --git a/yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml b/yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml index 95f6e72..6107ef2 100644 --- a/yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml +++ b/yun-admin/src/main/resources/mapper/service/ServiceApplicationsMapper.xml @@ -51,7 +51,7 @@ and user_id = #{queryForm.userId} - + and firm_id = #{queryForm.firmId} @@ -282,15 +282,16 @@ LEFT JOIN t_department d ON tsa.firm_id = d.department_id tsa.deleted_flag = 0 - AND tsa.association_audit_status = 3 + AND tsa.association_audit_status = 3 + AND tsa.firm_id IS NOT NULL - AND tsa.firm_audit_time >= #{queryForm.startTime} + AND tsa.report_time >= #{queryForm.startTime} - AND tsa.firm_audit_time <= #{queryForm.endTime} + AND tsa.report_time <= #{queryForm.endTime} - and user_id = #{queryForm.userId} + and tsa.user_id = #{queryForm.userId} AND e.actual_name LIKE CONCAT('%', #{queryForm.lawyerName}, '%') @@ -298,7 +299,7 @@ AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%') - + AND tsa.firm_id = #{queryForm.firmId} @@ -318,11 +319,12 @@ tsa.deleted_flag = 0 AND tsa.association_audit_status = 3 + AND tsa.firm_id IS NOT NULL - AND tsa.firm_audit_time >= #{queryForm.startTime} + AND tsa.report_time >= #{queryForm.startTime} - AND tsa.firm_audit_time <= #{queryForm.endTime} + AND tsa.report_time <= #{queryForm.endTime} and tsa.user_id = #{queryForm.userId} @@ -333,8 +335,8 @@ AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%') - - AND d.department_id = #{queryForm.firmId} + + AND tsa.firm_id = #{queryForm.firmId} GROUP BY tsa.user_id, tsa.certificate_number @@ -353,11 +355,12 @@ tsa.deleted_flag = 0 AND tsa.association_audit_status = 3 + AND tsa.firm_id IS NOT NULL - AND tsa.firm_audit_time >= #{queryForm.startTime} + AND tsa.report_time >= #{queryForm.startTime} - AND tsa.firm_audit_time <= #{queryForm.endTime} + AND tsa.report_time <= #{queryForm.endTime} and tsa.user_id = #{queryForm.userId} @@ -368,8 +371,8 @@ AND d.department_name LIKE CONCAT('%', #{queryForm.firmName}, '%') - - AND d.department_id = #{queryForm.firmId} + + AND tsa.firm_id = #{queryForm.firmId} GROUP BY tsa.user_id, tsa.certificate_number @@ -386,15 +389,19 @@ tsa.deleted_flag = 0 AND tsa.association_audit_status = 3 + AND tsa.firm_id IS NOT NULL - AND tsa.firm_audit_time >= #{queryForm.startTime} + AND tsa.report_time >= #{queryForm.startTime} - AND tsa.firm_audit_time <= #{queryForm.endTime} + AND tsa.report_time <= #{queryForm.endTime} and tsa.user_id = #{queryForm.userId} + + and tsa.firm_id = #{queryForm.firmId} + GROUP BY tsa.user_id, tsa.certificate_number LIMIT 1 @@ -410,17 +417,46 @@ tsa.deleted_flag = 0 AND tsa.association_audit_status = 3 + AND tsa.firm_id IS NOT NULL - AND tsa.association_audit_time >= #{queryForm.startTime} + AND tsa.report_time >= #{queryForm.startTime} - AND tsa.association_audit_time <= #{queryForm.endTime} + AND tsa.report_time <= #{queryForm.endTime} and tsa.user_id = #{queryForm.userId} - - and d.department_id = #{queryForm.firmId} + + and tsa.firm_id = #{queryForm.firmId} + + + GROUP BY d.department_id, d.department_name + + +