From 2ca6153cda037d835680a7b3a5f8629c85428aad Mon Sep 17 00:00:00 2001 From: Timer <@> Date: Tue, 21 Apr 2026 23:45:48 +0800 Subject: [PATCH] bug --- .../safety/SafetyCertificateController.java | 40 +- .../SafetyExternalCertificateController.java | 132 ++- .../jsp/safety/ExternalCertificateList.jsp | 970 +++++++++--------- .../jsp/safety/InternalCertificateList.jsp | 23 +- 4 files changed, 650 insertions(+), 515 deletions(-) diff --git a/src/main/java/com/sipai/controller/safety/SafetyCertificateController.java b/src/main/java/com/sipai/controller/safety/SafetyCertificateController.java index 8dfbcf4d..b5d13e0f 100644 --- a/src/main/java/com/sipai/controller/safety/SafetyCertificateController.java +++ b/src/main/java/com/sipai/controller/safety/SafetyCertificateController.java @@ -222,18 +222,50 @@ public class SafetyCertificateController { @RequestMapping("/deletes.do") @Transactional(rollbackFor = Exception.class) - public String delete(HttpServletRequest request, Model model, String[] ids) throws IOException { + public String delete(HttpServletRequest request, Model model, + @RequestParam(value = "ids", required = false) String ids, + @RequestParam(value = "staffIds", required = false) String staffIds) throws IOException { int result = 0; - for (String id : ids) { + + // 兼容:支持 ids/staffIds 传 CSV,也支持重复参数数组 + Set idSet = new LinkedHashSet<>(parseRequestIds(request, "ids", ids)); + idSet.addAll(parseRequestIds(request, "staffIds", staffIds)); + + for (String id : idSet) { result += service.deleteById(id); - } - for (String id : ids) { safetyFilesService.deleteByBizId(id); } + model.addAttribute("result", result); return "result"; } + private List parseRequestIds(HttpServletRequest request, String paramName, String rawIds) { + List result = new ArrayList<>(parseIdTokens(rawIds)); + String[] values = request.getParameterValues(paramName); + if (values != null) { + for (String value : values) { + result.addAll(parseIdTokens(value)); + } + } + return result; + } + + private List parseIdTokens(String rawIds) { + List result = new ArrayList<>(); + if (org.apache.commons.lang3.StringUtils.isBlank(rawIds) || "null".equals(rawIds)) { + return result; + } + String[] split = rawIds.split(","); + for (String id : split) { + String value = org.apache.commons.lang3.StringUtils.trim(id); + if (org.apache.commons.lang3.StringUtils.isNotBlank(value) && value.matches("^[0-9A-Za-z_-]+$")) { + result.add(value); + } + } + return result; + } + /** * 跳转导入页面 * diff --git a/src/main/java/com/sipai/controller/safety/SafetyExternalCertificateController.java b/src/main/java/com/sipai/controller/safety/SafetyExternalCertificateController.java index 22d88322..c2366fbc 100644 --- a/src/main/java/com/sipai/controller/safety/SafetyExternalCertificateController.java +++ b/src/main/java/com/sipai/controller/safety/SafetyExternalCertificateController.java @@ -339,16 +339,39 @@ public class SafetyExternalCertificateController { @RequestMapping("/deletes.do") @Transactional(rollbackFor = Exception.class) - public String delete(HttpServletRequest request, Model model, String[] ids) throws IOException { + public String delete(HttpServletRequest request, Model model, + @RequestParam(value = "ids", required = false) String ids, + @RequestParam(value = "staffIds", required = false) String staffIds) throws IOException { int result = 0; - for (String id : ids) { + + // 兼容:支持 ids/staffIds 传 CSV,也支持重复参数数组 + Set certificateIdSet = new LinkedHashSet<>(parseRequestIds(request, "ids", ids)); + Set staffIdSet = new LinkedHashSet<>(parseRequestIds(request, "staffIds", staffIds)); + + for (String id : certificateIdSet) { result += service.deleteById(id); safetyFilesService.deleteByBizId(id); } + + for (String staffId : staffIdSet) { + safetyExternalStaffService.deleteById(staffId); + } + model.addAttribute("result", result); return "result"; } + private List parseRequestIds(HttpServletRequest request, String paramName, String rawIds) { + List result = new ArrayList<>(parseExportIds(rawIds)); + String[] values = request.getParameterValues(paramName); + if (values != null) { + for (String value : values) { + result.addAll(parseExportIds(value)); + } + } + return result; + } + /** * 跳转导入页面 * @@ -536,67 +559,61 @@ public class SafetyExternalCertificateController { public void export(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "issueDate", required = false) String issueDate, @RequestParam(value = "jobType", required = false) String jobType, - @RequestParam(value = "companyParam", required = false) String companyParam) throws IOException { - // 摘自列表查询接口 start - User cu = (User) request.getSession().getAttribute("cu"); + @RequestParam(value = "companyParam", required = false) String companyParam, + @RequestParam(value = "search_name", required = false) String searchName, + @RequestParam(value = "ids", required = false) String ids, + @RequestParam(value = "staffIds", required = false) String staffIds) throws IOException { + // 与列表接口保持一致,避免“页面有数据但导出为空” String sort = " sc.userid, sc.create_time "; String order = " desc "; String orderstr = " order by " + sort + " " + order; - String wherestr = " where flag='2' "; - if (request.getParameter("search_code") != null && !request.getParameter("search_code").isEmpty()) { - List unitlist = unitService.getUnitChildrenById(request.getParameter("search_code")); - String pidstr = ""; - for (int i = 0; i < unitlist.size(); i++) { - pidstr += "'" + unitlist.get(i).getId() + "',"; - } - if (pidstr != "") { - pidstr = pidstr.substring(0, pidstr.length() - 1); - wherestr += "and u.pid in (" + pidstr + ") "; - } - } else { - Company company = unitService.getCompanyByUserId(cu.getId()); - String companyId = "-1"; - if (company != null) { - companyId = company.getId(); - } - List users = unitService.getChildrenUsersById(companyId); - String userIds = ""; - for (User user : users) { - if (!userIds.isEmpty()) { - userIds += "','"; - } - userIds += user.getId(); - } - if (!userIds.isEmpty()) { - wherestr += "and u.id in ('" + userIds + "') "; - } - } + String wherestr = " where 1=1 "; // 搜索框筛选 - if (request.getParameter("search_name") != null && !request.getParameter("search_name").isEmpty()) { - wherestr += " and (sc.certificate_name like '%" + request.getParameter("search_name") + "%'" + - " or ses.name like '%" + request.getParameter("search_name") + "%')"; + if (StringUtils.isNotBlank(searchName)) { + wherestr += " and (sc.certificate_name like '%" + searchName + "%'" + + " or ses.name like '%" + searchName + "%')"; } // 领证时间筛选 if (StringUtils.isNotBlank(issueDate) && !"null".equals(issueDate)) { String[] split = issueDate.split("~"); - String issueDate_param_start_time = split[0].trim(); - String issueDate_param_end_time = split[1].trim(); - wherestr += " and sc.issue_date >= '" + issueDate_param_start_time + "'" + - " and sc.issue_date <= '" + issueDate_param_end_time + "'"; + if (split.length == 2) { + String issueDate_param_start_time = split[0].trim(); + String issueDate_param_end_time = split[1].trim(); + wherestr += " and sc.issue_date >= '" + issueDate_param_start_time + "'" + + " and sc.issue_date <= '" + issueDate_param_end_time + "'"; + } } - //作业类型 + // 作业类型 if (StringUtils.isNotBlank(jobType) && !"null".equals(jobType)) { wherestr += " and sc.job_type = '" + jobType + "'"; } - //施工单位 + // 施工单位 if (StringUtils.isNotBlank(companyParam) && !"null".equals(companyParam)) { wherestr += " and ses.company = '" + companyParam + "'"; } + // 勾选导出:有勾选则仅导出勾选数据;无勾选则按筛选条件导出全部 + List certificateIdList = parseExportIds(ids); + List staffIdList = parseExportIds(staffIds); + if (!CollectionUtils.isEmpty(certificateIdList) || !CollectionUtils.isEmpty(staffIdList)) { + StringBuilder selectedWhere = new StringBuilder(" and ("); + if (!CollectionUtils.isEmpty(certificateIdList)) { + selectedWhere.append("sc.id in (").append(joinForSqlIn(certificateIdList)).append(")"); + } + if (!CollectionUtils.isEmpty(staffIdList)) { + if (!CollectionUtils.isEmpty(certificateIdList)) { + selectedWhere.append(" or "); + } + selectedWhere.append("ses.id in (").append(joinForSqlIn(staffIdList)).append(")"); + } + selectedWhere.append(")"); + wherestr += selectedWhere; + } + List list = this.service.selectListByConditionForExternal(wherestr + orderstr); List excelList = new ArrayList<>(); SafetyExternalCertificateExcel excelEntity = null; @@ -605,7 +622,7 @@ public class SafetyExternalCertificateController { BeanUtils.copyProperties(vo, excelEntity); excelList.add(excelEntity); } - // 摘自列表查询接口 end + response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf8"); response.setHeader("Content-disposition", "attachment;filename=" + java.net.URLEncoder.encode("外部人员证书信息", "UTF-8") + ".xlsx"); @@ -616,4 +633,31 @@ public class SafetyExternalCertificateController { excelWriter.finish(); } } + + private List parseExportIds(String rawIds) { + List result = new ArrayList<>(); + if (StringUtils.isBlank(rawIds) || "null".equals(rawIds)) { + return result; + } + String[] split = rawIds.split(","); + for (String id : split) { + String value = StringUtils.trim(id); + // 仅保留安全字符,避免拼接 SQL 时引入非法字符 + if (StringUtils.isNotBlank(value) && value.matches("^[0-9A-Za-z_-]+$")) { + result.add(value); + } + } + return result; + } + + private String joinForSqlIn(List idList) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < idList.size(); i++) { + if (i > 0) { + sb.append(","); + } + sb.append("'").append(idList.get(i)).append("'"); + } + return sb.toString(); + } } diff --git a/src/main/webapp/jsp/safety/ExternalCertificateList.jsp b/src/main/webapp/jsp/safety/ExternalCertificateList.jsp index 2858aca7..5dcf816b 100644 --- a/src/main/webapp/jsp/safety/ExternalCertificateList.jsp +++ b/src/main/webapp/jsp/safety/ExternalCertificateList.jsp @@ -55,6 +55,7 @@ .table-hover > tbody > tr:hover { cursor: pointer; } + .input-clear-a { color: white; @@ -68,470 +69,515 @@ } @@ -554,12 +600,14 @@
- - + +