diff --git a/pom.xml b/pom.xml index 08c61642..125a9683 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,12 @@ + + + net.java.dev.jna + jna + 5.4.0 + org.springframework @@ -798,11 +804,11 @@ 1.6.1 - - net.java.dev.jna - jna - 1.0 - + + + + + net.java.dev.jna @@ -813,6 +819,14 @@ TGLW + + + + + + + + src/main/java diff --git a/src/main/java/com/sipai/activiti/Test.java b/src/main/java/com/sipai/activiti/Test.java deleted file mode 100644 index 006e2819..00000000 --- a/src/main/java/com/sipai/activiti/Test.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.sipai.activiti; - -public class Test { - public static void main(String[] args) { - int a = 3; - int b = 3; - System.out.println(a % b); - } -} diff --git a/src/main/java/com/sipai/controller/equipment/EquipmentCardController.java b/src/main/java/com/sipai/controller/equipment/EquipmentCardController.java index 2dfb753e..23162936 100644 --- a/src/main/java/com/sipai/controller/equipment/EquipmentCardController.java +++ b/src/main/java/com/sipai/controller/equipment/EquipmentCardController.java @@ -2217,12 +2217,27 @@ public class EquipmentCardController { HttpServletResponse response, Model model) throws IOException { String wherestr = " where 1=1 "; String unitId = request.getParameter("unitId"); + if (unitId == null || unitId.isEmpty()) { + unitId = request.getParameter("companyId"); + } String search_name = request.getParameter("search_name"); + if (search_name == null || search_name.trim().isEmpty()) { + search_name = request.getParameter("equipmentName"); + } String processSectionId = request.getParameter("processSectionId"); + if (processSectionId == null || processSectionId.trim().isEmpty() || "undefined".equals(processSectionId)) { + processSectionId = request.getParameter("processSection"); + } String equipmentClassId = request.getParameter("equipmentClassId"); + if (equipmentClassId == null || equipmentClassId.trim().isEmpty() || "undefined".equals(equipmentClassId)) { + equipmentClassId = request.getParameter("search_pid1"); + } String equipmentLevel = request.getParameter("equipmentLevel"); String equipmentClassCode = request.getParameter("equipmentClassCode");//类似竹一的计量表 该页面仅显示一种设备类型的 String ids = request.getParameter("ids");//页面勾选的设备id + if (ids == null || ids.trim().isEmpty()) { + ids = request.getParameter("equipmentIds"); + } if (unitId != null && !unitId.isEmpty()) { //获取公司下所有子节点 @@ -2272,6 +2287,26 @@ public class EquipmentCardController { // System.out.println(wherestr); + if (ids != null && !ids.trim().isEmpty()) { + // 兼容前端可能携带的首尾逗号与空白,确保仅导出选中设备。 + String[] idArr = ids.split(","); + StringBuilder selectedIds = new StringBuilder(); + for (String id : idArr) { + if (id != null) { + String trimmedId = id.trim(); + if (!trimmedId.isEmpty()) { + if (selectedIds.length() > 0) { + selectedIds.append("','"); + } + selectedIds.append(trimmedId); + } + } + } + if (selectedIds.length() > 0) { + wherestr += " and id in ('" + selectedIds + "') "; + } + } + List equipmentCards = this.equipmentCardService.selectListByWhere(wherestr); //导出文件到指定目录,兼容Linux this.equipmentCardService.downloadEquipmentExcel(response, equipmentCards); diff --git a/src/main/java/com/sipai/controller/kpi/KpiPlanController.java b/src/main/java/com/sipai/controller/kpi/KpiPlanController.java index c6db56fe..cd7c030e 100644 --- a/src/main/java/com/sipai/controller/kpi/KpiPlanController.java +++ b/src/main/java/com/sipai/controller/kpi/KpiPlanController.java @@ -104,7 +104,7 @@ public class KpiPlanController { if (StringUtils.isNotBlank(positonTypeList)) { wherestr += " and j.level_type = " + positonTypeList; } - wherestr += "and p.create_user_id ='" + id + "'"; + wherestr += " and p.create_user_id ='" + id + "'"; PageHelper.startPage(page, rows); List list = kpiPlanService.selectListByWhere(wherestr + orderstr); @@ -387,7 +387,8 @@ public class KpiPlanController { @RequestMapping("/export.do") public void export(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "periodTypeName", required = false) String periodTypeList, - @RequestParam(value = "positionType", required = false) String positonTypeList) throws IOException { + @RequestParam(value = "positionType", required = false) String positonTypeList, + @RequestParam(value = "ids", required = false) String ids) throws IOException { // 摘自列表查询接口 start User cu = (User) request.getSession().getAttribute("cu"); String id = cu.getId(); @@ -399,6 +400,10 @@ public class KpiPlanController { if (StringUtils.isNotBlank(positonTypeList) && !"null".equals(positonTypeList)) { wherestr += " and j.level_type = " + positonTypeList; } + if (StringUtils.isNotBlank(ids)) { + String idstr = ids.replace("'", "").replace(",", "','"); + wherestr += " and p.id in ('" + idstr + "')"; + } wherestr += "and p.create_user_id ='" + id + "'"; List list = kpiPlanService.selectListByWhere(wherestr + orderstr); diff --git a/src/main/java/com/sipai/controller/report/RptDayLogController.java b/src/main/java/com/sipai/controller/report/RptDayLogController.java index bb4f6d91..c86545aa 100644 --- a/src/main/java/com/sipai/controller/report/RptDayLogController.java +++ b/src/main/java/com/sipai/controller/report/RptDayLogController.java @@ -122,14 +122,14 @@ public class RptDayLogController { @RequestParam(value = "rptdt") String rptdt) throws IOException { User cu = (User) request.getSession().getAttribute("cu"); String userId = cu.getId(); - + // 权限验证:检查用户是否有填报权限 - if (!this.rptDayLogService.checkInputPermission(rptdeptId, cu)) { - Result result = Result.failed("您没有该报表的填报权限"); - model.addAttribute("result", CommUtil.toJson(result)); - return "result"; - } - +// if (!this.rptDayLogService.checkInputPermission(rptdeptId, cu)) { +// Result result = Result.failed("您没有该报表的填报权限"); +// model.addAttribute("result", CommUtil.toJson(result)); +// return "result"; +// } + JSONObject jsonObject = this.rptDayLogService.getJson(null,rptdeptId,rptdt,userId); Result result = Result.success(jsonObject); @@ -251,6 +251,29 @@ public class RptDayLogController { @RequestMapping("/dodeletes.do") public String dodels(HttpServletRequest request,Model model, @RequestParam(value="ids") String ids){ +// User cu = (User) request.getSession().getAttribute("cu"); +// String userId = cu.getId(); + + // 获取rptdeptId,假设从参数或第一个ID推断 +// String rptdeptId = request.getParameter("rptdeptId"); +// if (rptdeptId == null || rptdeptId.isEmpty()) { +// // 如果没有提供rptdeptId,从第一个ID获取 +// String[] idArray = ids.split(","); +// if (idArray.length > 0) { +// RptDayLog rptDayLog = this.rptDayLogService.selectById(idArray[0]); +// if (rptDayLog != null) { +// rptdeptId = rptDayLog.getRptdeptId(); +// } +// } +// } + + // 权限验证:检查用户是否有生成权限 +// if (!this.rptDayLogService.checkGeneratePermission(rptdeptId, cu)) { +// Result result = Result.failed("您没有该报表的删除权限,无法删除");// 生成权限=删除权限 +// model.addAttribute("result", CommUtil.toJson(result)); +// return "result"; +// } + String[] idArray = ids.split(","); try { for (int i = 0; i < idArray.length; i++) { 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/java/com/sipai/controller/sparepart/SewageController.java b/src/main/java/com/sipai/controller/sparepart/SewageController.java index 69c3ef0f..7bfee94d 100644 --- a/src/main/java/com/sipai/controller/sparepart/SewageController.java +++ b/src/main/java/com/sipai/controller/sparepart/SewageController.java @@ -134,6 +134,12 @@ public class SewageController { public String dosave(HttpServletRequest request,Model model, @ModelAttribute Sewage sewage) { User cu = (User) request.getSession().getAttribute("cu"); + String contractNumber = sewage.getContractNumber() == null ? null : sewage.getContractNumber().trim(); + sewage.setContractNumber(contractNumber); + if (this.sewageService.existsByContractNumber(contractNumber)) { + model.addAttribute("result", "{\"res\":\"合同编号已存在,不可重复\"}"); + return "result"; + } sewage.setId(CommUtil.getUUID()); int result = this.sewageService.save(sewage); String resultstr = "{\"res\":\""+result+"\",\"id\":\""+sewage.getId()+"\"}"; @@ -193,6 +199,12 @@ public class SewageController { public String doupdate(HttpServletRequest request,Model model, @ModelAttribute Sewage sewage) { User cu = (User) request.getSession().getAttribute("cu"); + String contractNumber = sewage.getContractNumber() == null ? null : sewage.getContractNumber().trim(); + sewage.setContractNumber(contractNumber); + if (this.sewageService.existsByContractNumberExcludeId(contractNumber, sewage.getId())) { + model.addAttribute("result", "{\"res\":\"合同编号已存在,不可重复\"}"); + return "result"; + } int result = this.sewageService.update(sewage); String resstr="{\"res\":\""+result+"\",\"id\":\""+sewage.getId()+"\"}"; model.addAttribute("result", resstr); @@ -348,7 +360,8 @@ public class SewageController { @RequestMapping(value = "downloadExcelFun.do") public ModelAndView downloadExcelFun(HttpServletRequest request, HttpServletResponse response, Model model) throws IOException { - this.sewageService.outExcelFun(response); + String ids = request.getParameter("ids"); + this.sewageService.outExcelFun(response, ids); return null; } diff --git a/src/main/java/com/sipai/controller/user/ProcessSectionController.java b/src/main/java/com/sipai/controller/user/ProcessSectionController.java index ee570fbc..52eb0dee 100644 --- a/src/main/java/com/sipai/controller/user/ProcessSectionController.java +++ b/src/main/java/com/sipai/controller/user/ProcessSectionController.java @@ -242,11 +242,20 @@ public class ProcessSectionController { @RequestMapping("/getProcessSection4Select.do") public String getProcessSection4Select(HttpServletRequest request, Model model) { String companyId = request.getParameter("companyId"); // 默认查询JSBZ??? - // 使用unitService获取Unit信息,因为companyId来自tb_unit表 + // companyId在不同页面可能来自tb_unit或tb_company,统一兼容两种来源 Unit unit = this.unitService.getUnitById(companyId); + String unitType = null; + if (unit != null) { + unitType = unit.getType(); + } else if (companyId != null && !companyId.isEmpty()) { + Company company = this.unitService.getCompById(companyId); + if (company != null) { + unitType = company.getType(); + } + } String wherestr = "where 1=1 and active='" + CommString.Active_True + "' "; - if (unit != null && unit.getType().equals(CommString.UNIT_TYPE_COMPANY)) { // "C";//公司 + if (CommString.UNIT_TYPE_COMPANY.equals(unitType)) { // "C";//公司 String bizs = "";//公司下属所有厂id List blist = this.unitService.getParentCompanyChildrenBizByUnitid(companyId); if (blist != null && blist.size() > 0) { @@ -258,7 +267,7 @@ public class ProcessSectionController { } bizs = bizs.replace(",", "','"); wherestr += " and (unit_id='" + ProcessSection.UnitId_Sys + "' or (code not in (select code from tb_process_section where unit_id='" + ProcessSection.UnitId_Sys + "')) and unit_id in ('" + bizs + "') ) "; - } else if (unit != null && unit.getType().equals(CommString.UNIT_TYPE_BIZ)) { // B 水厂 + } else if (CommString.UNIT_TYPE_BIZ.equals(unitType)) { // B 水厂 wherestr += " and unit_id='" + companyId + "' "; } if (request.getParameter("search_name") != null && !request.getParameter("search_name").isEmpty()) { @@ -273,13 +282,16 @@ public class ProcessSectionController { for (int i = 0; i < processSections.size(); i++) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", processSections.get(i).getCode()); - if (unit != null && unit.getType().equals(CommString.UNIT_TYPE_COMPANY)) { // "C";//公司 + if (CommString.UNIT_TYPE_COMPANY.equals(unitType)) { // "C";//公司 if (!processSections.get(i).getUnitId().equals(ProcessSection.UnitId_Sys)) { jsonObject.put("text", processSections.get(i).getSname() + "(" + processSections.get(i).getCompanySname() + ")"); } else { jsonObject.put("text", processSections.get(i).getSname()); } - } else if (unit != null && unit.getType().equals(CommString.UNIT_TYPE_BIZ)) { // "B";//水厂 + } else if (CommString.UNIT_TYPE_BIZ.equals(unitType)) { // "B";//水厂 + jsonObject.put("text", processSections.get(i).getSname()); + } else { + // 兜底,避免前端下拉出现有id无text导致显示为空 jsonObject.put("text", processSections.get(i).getSname()); } diff --git a/src/main/java/com/sipai/controller/work/KPIPointController.java b/src/main/java/com/sipai/controller/work/KPIPointController.java index 1ecb9ada..a39ce77b 100644 --- a/src/main/java/com/sipai/controller/work/KPIPointController.java +++ b/src/main/java/com/sipai/controller/work/KPIPointController.java @@ -89,11 +89,26 @@ public class KPIPointController { // List lists = mPointHistoryService.selectListByTableAWhere("tb_mp_11_GNJ1_F","MeasureDT='2016-01-10 10:16:57'"); // int dd= mPointHistoryService.deleteByTableAWhere("tb_mp_11_GNJ1_F","MeasureDT='2016-01-10 10:16:57'"); for (int i=0; i < list.size(); i++) { - ProcessSection processSection = this.processSectionService.selectById(list.get(i).getProcesssectionid()); + String rawBizId = list.get(i).getBizid(); + ProcessSection processSection = this.processSectionService.selectById(list.get(i).getProcesssectionid()); + if (processSection == null && list.get(i).getProcesssectionid() != null && !list.get(i).getProcesssectionid().isEmpty()) { + // KPI里历史数据存在按code保存工艺段的场景,优先按厂区code匹配,再回退到系统库 + List processSectionList = this.processSectionService.selectSimpleListByWhere( + "where code='" + list.get(i).getProcesssectionid() + "' and unit_id='" + rawBizId + "' " + ); + if (processSectionList == null || processSectionList.isEmpty()) { + processSectionList = this.processSectionService.selectSimpleListByWhere( + "where code='" + list.get(i).getProcesssectionid() + "' and unit_id='" + ProcessSection.UnitId_Sys + "' " + ); + } + if (processSectionList != null && !processSectionList.isEmpty()) { + processSection = processSectionList.get(0); + } + } if (processSection != null) { list.get(i).setProcessectionname(processSection.getName()); } - Company company = this.unitService.getCompById(list.get(i).getBizid()); + Company company = this.unitService.getCompById(rawBizId); if (company != null) { list.get(i).setBizid(company.getName()); } diff --git a/src/main/java/com/sipai/controller/work/SchedulingController.java b/src/main/java/com/sipai/controller/work/SchedulingController.java index 5fc2bdf4..c5d5917b 100644 --- a/src/main/java/com/sipai/controller/work/SchedulingController.java +++ b/src/main/java/com/sipai/controller/work/SchedulingController.java @@ -481,7 +481,7 @@ public class SchedulingController { JSONArray array = new JSONArray(); String[] workpeopleids = scheduling.getWorkpeople().split(","); if (workpeopleids != null && workpeopleids.length > 0) { - if (!workpeopleids[0].equals("")) { + if (!userId.equals(workpeopleids[0])) { for (int i = 0; i < workpeopleids.length; i++) { if (!userId.equals(workpeopleids[i])) { JSONObject object = new JSONObject(); @@ -1156,6 +1156,10 @@ public class SchedulingController { } } + // 获取交班表单数据 + List formDataList = this.groupContentFormDataService.selectListByWhere(" where schedulingId='" + schedulingId + "' "); + model.addAttribute("formDataList", formDataList); + model.addAttribute("scheduling", scheduling); return "work/schedulingView"; } diff --git a/src/main/java/com/sipai/controller/workorder/WorkorderDetailController.java b/src/main/java/com/sipai/controller/workorder/WorkorderDetailController.java index d28d0a71..2c19d4e5 100644 --- a/src/main/java/com/sipai/controller/workorder/WorkorderDetailController.java +++ b/src/main/java/com/sipai/controller/workorder/WorkorderDetailController.java @@ -1252,21 +1252,14 @@ public class WorkorderDetailController { @RequestMapping("/doExportRepair.do") public ModelAndView doExportRepair(HttpServletRequest request, HttpServletResponse response, Model model, - @RequestParam(value = "ids") String ids, + @RequestParam(value = "ids", required = false) String ids, @RequestParam(value = "type") String type) throws IOException { - if (ids != null && !ids.equals("")) { - String[] id = ids.split(","); - String workorderDetailsIds = ""; - for (String s : id) { - workorderDetailsIds += "'" + s + "',"; - } - String whereStr = "where id in (" + workorderDetailsIds.substring(0, workorderDetailsIds.length() - 1) + ")"; - try { - List workorderDetails = workorderDetailService.selectListByWhere(whereStr); - this.workorderDetailService.doExportRepair(response, workorderDetails, type); - } catch (Exception e) { - e.printStackTrace(); - } + String whereStr = buildExportWhereByIdsAndType(ids, type); + try { + List workorderDetails = workorderDetailService.selectListByWhere(whereStr); + this.workorderDetailService.doExportRepair(response, workorderDetails, type); + } catch (Exception e) { + e.printStackTrace(); } return null; } @@ -1292,21 +1285,14 @@ public class WorkorderDetailController { @RequestMapping("/doExportRepairJS.do") public ModelAndView doExportRepairJS(HttpServletRequest request, HttpServletResponse response, Model model, - @RequestParam(value = "ids") String ids, + @RequestParam(value = "ids", required = false) String ids, @RequestParam(value = "type") String type) throws IOException { - if (ids != null && !ids.equals("")) { - String[] id = ids.split(","); - String workorderDetailsIds = ""; - for (String s : id) { - workorderDetailsIds += "'" + s + "',"; - } - String whereStr = "where id in (" + workorderDetailsIds.substring(0, workorderDetailsIds.length() - 1) + ")"; - try { - List workorderDetails = workorderDetailService.selectListByWhere(whereStr); - this.workorderDetailService.doExportRepairJS(response, workorderDetails, type); - } catch (Exception e) { - e.printStackTrace(); - } + String whereStr = buildExportWhereByIdsAndType(ids, type); + try { + List workorderDetails = workorderDetailService.selectListByWhere(whereStr); + this.workorderDetailService.doExportRepairJS(response, workorderDetails, type); + } catch (Exception e) { + e.printStackTrace(); } return null; } @@ -1332,26 +1318,47 @@ public class WorkorderDetailController { @RequestMapping("/doExportMain.do") public ModelAndView doExportMain(HttpServletRequest request, HttpServletResponse response, Model model, - @RequestParam(value = "ids") String ids, + @RequestParam(value = "ids", required = false) String ids, @RequestParam(value = "type") String type) throws IOException { - if (ids != null && !ids.equals("")) { - String[] id = ids.split(","); - String workorderDetailsIds = ""; - for (String s : id) { - workorderDetailsIds += "'" + s + "',"; - } - String whereStr = "where id in (" + workorderDetailsIds.substring(0, workorderDetailsIds.length() - 1) + ")"; -// System.out.println(whereStr); - try { - List workorderDetails = workorderDetailService.selectListByWhere(whereStr); - this.workorderDetailService.doExportMain(response, workorderDetails, type); - } catch (Exception e) { - e.printStackTrace(); - } + String whereStr = buildExportWhereByIdsAndType(ids, type); + try { + List workorderDetails = workorderDetailService.selectListByWhere(whereStr); + this.workorderDetailService.doExportMain(response, workorderDetails, type); + } catch (Exception e) { + e.printStackTrace(); } return null; } + private String buildExportWhereByIdsAndType(String ids, String type) { + String normalizedIds = normalizeIds(ids); + if (!normalizedIds.isEmpty()) { + String[] idArr = normalizedIds.split(","); + StringBuilder idBuilder = new StringBuilder(); + for (String item : idArr) { + String id = item.trim(); + if (id.isEmpty()) { + continue; + } + if (idBuilder.length() > 0) { + idBuilder.append(","); + } + idBuilder.append("'").append(id).append("'"); + } + if (idBuilder.length() > 0) { + return "where id in (" + idBuilder + ")"; + } + } + return "where type = '" + type + "'"; + } + + private String normalizeIds(String ids) { + if (ids == null || ids.trim().isEmpty()) { + return ""; + } + return ids.replace("'", "").replace(" ", "").replaceAll(",+$", ""); + } + /** * 日历中弹出指定日期的 维修单 * diff --git a/src/main/java/com/sipai/dao/sparepart/SewageDao.java b/src/main/java/com/sipai/dao/sparepart/SewageDao.java index 2494acfc..889701f3 100644 --- a/src/main/java/com/sipai/dao/sparepart/SewageDao.java +++ b/src/main/java/com/sipai/dao/sparepart/SewageDao.java @@ -5,6 +5,7 @@ import com.sipai.entity.sparepart.Sewage; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Map; @Repository public class SewageDao extends CommDaoImpl { @@ -16,5 +17,13 @@ public class SewageDao extends CommDaoImpl { List list = getSqlSession().selectList(this.getMappernamespace()+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), sewage); return list; } + + public Integer selectCountByContractNumber(String contractNumber) { + return getSqlSession().selectOne(this.getMappernamespace() + "." + Thread.currentThread().getStackTrace()[1].getMethodName(), contractNumber); + } + + public Integer selectCountByContractNumberExcludeId(Map params) { + return getSqlSession().selectOne(this.getMappernamespace() + "." + Thread.currentThread().getStackTrace()[1].getMethodName(), params); + } } diff --git a/src/main/java/com/sipai/mapper/sparepart/SewageMapper.xml b/src/main/java/com/sipai/mapper/sparepart/SewageMapper.xml index 873248a1..3d09833c 100644 --- a/src/main/java/com/sipai/mapper/sparepart/SewageMapper.xml +++ b/src/main/java/com/sipai/mapper/sparepart/SewageMapper.xml @@ -312,6 +312,17 @@ delete from TB_Sewage_Source ${where} + + +
-
diff --git a/src/main/webapp/jsp/safety/InternalCertificateList.jsp b/src/main/webapp/jsp/safety/InternalCertificateList.jsp index 8d0d632a..ce5009fb 100644 --- a/src/main/webapp/jsp/safety/InternalCertificateList.jsp +++ b/src/main/webapp/jsp/safety/InternalCertificateList.jsp @@ -129,11 +129,17 @@ }; var deletesFun = function () { var checkedItems = $("#table").bootstrapTable('getSelections'); - var datas = ""; + var ids = []; + var staffIds = []; $.each(checkedItems, function (index, item) { - datas += item.id + ","; + if (item.id) { + ids.push(item.id); + } else if (item.staffId) { + // 兼容模式:若后续行模型提供备用ID,批删也可工作 + staffIds.push(item.staffId); + } }); - if (datas == "") { + if (ids.length === 0 && staffIds.length === 0) { showAlert('d', '请先选择记录', 'mainAlertdiv'); } else { swal({ @@ -157,7 +163,10 @@ } }).then(function (willDelete) { if (willDelete) { - $.post(ext.contextPath + '/safety/internalCertificate/deletes.do', {ids: datas}, function (data) { + $.post(ext.contextPath + '/safety/internalCertificate/deletes.do', { + ids: ids.join(","), + staffIds: staffIds.join(",") + }, function (data) { if (data > 0) { $("#table").bootstrapTable('refresh'); // 初始化 作业类型 @@ -313,17 +322,17 @@ field: 'jobType', // 返回json数据中的name title: '作业类型', // 表格表头显示文字 align: 'center', // 左右居中 - valign: 'middle', // 上下居中 + valign: 'middle' // 上下居中 }, { field: 'issuingAuthority', // 返回json数据中的name title: '发证机构', // 表格表头显示文字 align: 'center', // 左右居中 - valign: 'middle', // 上下居中 + valign: 'middle' // 上下居中 }, { field: 'issueDate', // 返回json数据中的name title: '领证时间', // 表格表头显示文字 align: 'center', // 左右居中 - valign: 'middle', // 上下居中 + valign: 'middle' // 上下居中 }, { field: 'expirationDate', // 返回json数据中的name title: '有效期至', // 表格表头显示文字 diff --git a/src/main/webapp/jsp/sparepart/sewageList.jsp b/src/main/webapp/jsp/sparepart/sewageList.jsp index f4764e26..d0137950 100644 --- a/src/main/webapp/jsp/sparepart/sewageList.jsp +++ b/src/main/webapp/jsp/sparepart/sewageList.jsp @@ -400,7 +400,17 @@ //导出 function downloadExcelFun() { - window.open(ext.contextPath + "/sparepart/sewage/downloadExcelFun.do"); + var checkedItems = $("#table").bootstrapTable('getSelections'); + var ids = ""; + $.each(checkedItems, function(index, item){ + ids += item.id + ","; + }); + if(ids !== ""){ + ids = ids.substring(0, ids.length - 1); + window.open(ext.contextPath + "/sparepart/sewage/downloadExcelFun.do?ids=" + encodeURIComponent(ids)); + }else{ + window.open(ext.contextPath + "/sparepart/sewage/downloadExcelFun.do"); + } } diff --git a/src/main/webapp/jsp/visual/modules/bigScreen_pipelineStatus.jsp b/src/main/webapp/jsp/visual/modules/bigScreen_pipelineStatus.jsp index a6737913..98ff1afb 100644 --- a/src/main/webapp/jsp/visual/modules/bigScreen_pipelineStatus.jsp +++ b/src/main/webapp/jsp/visual/modules/bigScreen_pipelineStatus.jsp @@ -534,7 +534,7 @@
-     上海金山排海工程有限公司成立于1993年,主要承担金山东部地区生活污水和工业废水的收集处理任务,服务范围包括金山东部亭林、张堰、山阳、漕泾四镇及金山工业区、金山新城区、金山卫钱圩地区,服务区域约155平方公里。 +     上海金山卫污水厂成立于1993年,主要承担金山东部地区生活污水和工业废水的收集处理任务,服务范围包括金山东部亭林、张堰、山阳、漕泾四镇及金山工业区、金山新城区、金山卫钱圩地区,服务区域约155平方公里。
-<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> -<%@ page import="com.sipai.entity.base.ServerObject"%> -<%@ taglib uri="http://www.springsecurity.org/jsp" prefix="security"%> +<%@ page language="java" pageEncoding="UTF-8" %> +<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> +<%@ page import="com.sipai.entity.base.ServerObject" %> +<%@ taglib uri="http://www.springsecurity.org/jsp" prefix="security" %> -<%= ServerObject.atttable.get("TOPTITLE")%> + <%= ServerObject.atttable.get("TOPTITLE")%> + - - - - + + }) + + + }); + -
- - <%-- --%> - - <%-- --%> -
- -
-

- -
- -
-
-
-
-
- -
+
+ + <%-- --%> + + <%-- --%> +
+ +
+

+ +
+ +
+
+
+
+
+ +
+
-
-
- - - - -
-
-
-
-
- -
- -
+
+ + + +
-
- - -
- -
+
+
+ +
+ +
+
+
+
+ + +
- - - -
- -
- <%-- --%> - <%-- --%> + +
+
+ + +
+
+ <%-- --%> + <%-- --%> +
<%-- --%> + document.write("/node_modules/bootstrap-fileinput/js/fileinput.min.js\">") + document.write("/node_modules/bootstrap-fileinput/js/locales/zh.js\">") + - - + + - - - + + + diff --git a/src/main/webapp/jsp/work/KPIPointProfessorList.jsp b/src/main/webapp/jsp/work/KPIPointProfessorList.jsp index 8140d8b1..69938439 100644 --- a/src/main/webapp/jsp/work/KPIPointProfessorList.jsp +++ b/src/main/webapp/jsp/work/KPIPointProfessorList.jsp @@ -139,6 +139,34 @@ var companyId = ""; var dosearch = function() { $("#table").bootstrapTable('refresh'); }; + var loadProcessSectionSelect = function(companyId) { + if (!companyId) { + refreshSelect(); + return; + } + $.post(ext.contextPath + "/user/processSection/getProcessSection4Select.do", {companyId:companyId}, function(data) { + $("#processSection").empty(); + var selelct_ =$("#processSection").select2({ + data: data, + cache : false, + placeholder:'请选择', + allowClear: true, + escapeMarkup: function (markup) { return markup; }, + language: "zh-CN", + minimumInputLength: 0, + minimumResultsForSearch: 10, + formatResult: function formatRepo(repo){return repo.text;}, + formatSelection: function formatRepoSelection(repo){return repo.text;} + }); + $(".select2-selection--single").css({'height':'30px','paddingTop':'4px'}); + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear",function(){ + setTimeout(function(){ + dosearch(); + },0); + }); + },'json'); + }; var refreshSelect = function() { var selelct_ =$("#processSection").select2({ data: null, @@ -163,27 +191,7 @@ var companyId = ""; $("#company").text(data[0].text); companyId=data[0].id; dosearch(); - $.post(ext.contextPath + "/user/processSection/getProcessSection4Select.do", {companyId:companyId}, function(data) { - $("#processSection").empty(); - var selelct_ =$("#processSection").select2({ - data: data, - cache : false, - placeholder:'请选择',//默认文字提示 - allowClear: true,//允许清空 - escapeMarkup: function (markup) { return markup; }, // 自定义格式化防止xss注入 - language: "zh-CN", - minimumInputLength: 0, - minimumResultsForSearch: 10,//数据超过十个启用搜索框 - formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果 - formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 - }); - $(".select2-selection--single").css({'height':'30px','paddingTop':'4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change",function(e){ - dosearch(); - }); - - },'json'); + loadProcessSectionSelect(companyId); }else{ $("#company").css("display", "none"); var selelct=$("#search_code").select2({ @@ -198,33 +206,14 @@ var companyId = ""; formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height':'30px','paddingTop':'4px'}) - selelct.val('').trigger("change"); + selelct.val('').trigger("change.select2"); refreshSelect(); - selelct.on("change",function(e){ + selelct.off("select2:select select2:clear").on("select2:select select2:clear",function(){ companyId= $(this).val(); dosearch(); refreshSelect(); - $.post(ext.contextPath + "/user/processSection/getProcessSection4Select.do", {companyId:companyId}, function(data) { - $("#processSection").empty(); - var selelct_ =$("#processSection").select2({ - data: data, - cache : false, - placeholder:'请选择',//默认文字提示 - allowClear: true,//允许清空 - escapeMarkup: function (markup) { return markup; }, // 自定义格式化防止xss注入 - language: "zh-CN", - minimumInputLength: 0, - minimumResultsForSearch: 10,//数据超过十个启用搜索框 - formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果 - formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 - }); - $(".select2-selection--single").css({'height':'30px','paddingTop':'4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change",function(e){ - dosearch(); - }); - },'json'); - }); + loadProcessSectionSelect(companyId); + }); } },'json'); diff --git a/src/main/webapp/jsp/work/cameraIdsHisShowlist.jsp b/src/main/webapp/jsp/work/cameraIdsHisShowlist.jsp index ca7a0eb1..fb11c59c 100644 --- a/src/main/webapp/jsp/work/cameraIdsHisShowlist.jsp +++ b/src/main/webapp/jsp/work/cameraIdsHisShowlist.jsp @@ -366,8 +366,8 @@ } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change", function (e) { + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) { dosearch(); }); }, 'json'); @@ -394,9 +394,8 @@ } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}) - selelct.val('').trigger("change"); - //refreshSelect(); - selelct.on("change", function (e) { + selelct.val('').trigger("change.select2"); + selelct.off("select2:select select2:clear").on("select2:select select2:clear", function (e) { companyId = $(this).val(); //dosearch(); //refreshSelect(); @@ -422,8 +421,8 @@ } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change", function (e) { + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) { dosearch(); }); }, 'json'); diff --git a/src/main/webapp/jsp/work/cameraIdsShowlist.jsp b/src/main/webapp/jsp/work/cameraIdsShowlist.jsp index 2cad3feb..1a5fc7d4 100644 --- a/src/main/webapp/jsp/work/cameraIdsShowlist.jsp +++ b/src/main/webapp/jsp/work/cameraIdsShowlist.jsp @@ -325,8 +325,8 @@ } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change", function (e) { + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) { dosearch(); }); }, 'json'); @@ -353,9 +353,8 @@ } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}) - selelct.val('').trigger("change"); - //refreshSelect(); - selelct.on("change", function (e) { + selelct.val('').trigger("change.select2"); + selelct.off("select2:select select2:clear").on("select2:select select2:clear", function (e) { companyId = $(this).val(); //dosearch(); //refreshSelect(); @@ -381,8 +380,8 @@ } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change", function (e) { + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function (e) { dosearch(); }); }, 'json'); diff --git a/src/main/webapp/jsp/work/kPointList.jsp b/src/main/webapp/jsp/work/kPointList.jsp index 202de01c..96883a31 100644 --- a/src/main/webapp/jsp/work/kPointList.jsp +++ b/src/main/webapp/jsp/work/kPointList.jsp @@ -133,8 +133,8 @@ formatSelection: function formatRepoSelection(repo) { return repo.text; } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({ 'height': '30px', 'paddingTop': '4px' }) - selelct_.val('').trigger("change"); - selelct_.on("change", function (e) { + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function () { $("#table").bootstrapTable('refresh'); }); diff --git a/src/main/webapp/jsp/work/mPointList.jsp b/src/main/webapp/jsp/work/mPointList.jsp index ee045578..d3fa316e 100644 --- a/src/main/webapp/jsp/work/mPointList.jsp +++ b/src/main/webapp/jsp/work/mPointList.jsp @@ -149,8 +149,8 @@ minimumInputLength: 0, minimumResultsForSearch: 10,//数据超过十个启用搜索框 }); - select.val('').trigger("change"); - select.on("change", function (e) { + select.val('').trigger("change.select2"); + select.off("select2:select select2:clear").on("select2:select select2:clear", function () { $("#table").bootstrapTable('refresh'); }); @@ -166,8 +166,8 @@ minimumInputLength: 0, minimumResultsForSearch: 10,//数据超过十个启用搜索框 }); - select.val("").trigger("change"); - select.on("change", function (e) { + select.val("").trigger("change.select2"); + select.off("select2:select select2:clear").on("select2:select select2:clear", function () { $("#table").bootstrapTable('refresh'); }); @@ -196,8 +196,8 @@ } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change", function (e) { + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function () { $("#table").bootstrapTable('refresh'); }); diff --git a/src/main/webapp/jsp/work/mPointListES.jsp b/src/main/webapp/jsp/work/mPointListES.jsp index b80edc59..7a5494e6 100644 --- a/src/main/webapp/jsp/work/mPointListES.jsp +++ b/src/main/webapp/jsp/work/mPointListES.jsp @@ -181,8 +181,8 @@ minimumInputLength: 0, minimumResultsForSearch: 10,//数据超过十个启用搜索框 }); - select.val('').trigger("change"); - select.on("change", function (e) { + select.val('').trigger("change.select2"); + select.off("select2:select select2:clear").on("select2:select select2:clear", function () { $("#table").bootstrapTable('refresh', {pageNumber: 1}); }); @@ -200,8 +200,8 @@ minimumInputLength: 0, minimumResultsForSearch: 10,//数据超过十个启用搜索框 }); - select.val("").trigger("change"); - select.on("change", function (e) { + select.val("").trigger("change.select2"); + select.off("select2:select select2:clear").on("select2:select select2:clear", function () { $("#table").bootstrapTable('refresh', {pageNumber: 1}); }); @@ -231,8 +231,8 @@ } // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change", function (e) { + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear", function () { $("#table").bootstrapTable('refresh', {pageNumber: 1}); }); diff --git a/src/main/webapp/jsp/workorder/overHaulRecordAdd.jsp b/src/main/webapp/jsp/workorder/overHaulRecordAdd.jsp index 9c4fdc2b..2a5329b9 100644 --- a/src/main/webapp/jsp/workorder/overHaulRecordAdd.jsp +++ b/src/main/webapp/jsp/workorder/overHaulRecordAdd.jsp @@ -108,7 +108,7 @@ formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); if(data!=null && data.length>0){ - selelct_.val(data[0].id).trigger("change"); + selelct_.val(data[0].id).trigger("change.select2"); } },'json'); }else{ @@ -126,7 +126,7 @@ formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果 formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); - selelct.on("change",function(e){ + selelct.off("select2:select select2:clear").on("select2:select select2:clear",function(){ companyId= $(this).val(); //重新选择厂区后清空设备和工艺段数据 $("#equipname").val(""); @@ -134,7 +134,7 @@ $("#processSectionId").val(""); $("#processectionname").val(""); }); - selelct.val('').trigger("change"); + selelct.val('').trigger("change.select2"); } },'json'); @@ -149,9 +149,9 @@ .updateStatus('plannedenddt', 'NOT_VALIDATED',null) .validateField('plannedenddt'); }); - $("#active").select2({minimumResultsForSearch: 10}).val('${Active_True}').trigger("change"); - $("#maintenanceWay").select2({minimumResultsForSearch: 10}).val('${INTER_MAINTENANCE}').trigger("change"); - }); + $("#active").select2({minimumResultsForSearch: 10}).val('${Active_True}').trigger("change.select2"); + $("#maintenanceWay").select2({minimumResultsForSearch: 10}).val('${INTER_MAINTENANCE}').trigger("change.select2"); + }); //选择设备,根据厂区id选择厂内设备 var selectEquipmentCard = function() { $.post(ext.contextPath + '/equipment/showEquipmentCardForSelect.do', {companyId:companyId, equipmentId:$("#equipid").val()} , function(data) { diff --git a/src/main/webapp/jsp/workorder/overHaulRecordEdit.jsp b/src/main/webapp/jsp/workorder/overHaulRecordEdit.jsp index 70cb6981..44bad2df 100644 --- a/src/main/webapp/jsp/workorder/overHaulRecordEdit.jsp +++ b/src/main/webapp/jsp/workorder/overHaulRecordEdit.jsp @@ -101,7 +101,7 @@ formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); if(data!=null && data.length>0){ - selelct_.val(data[0].id).trigger("change"); + selelct_.val(data[0].id).trigger("change.select2"); } },'json'); }else{ @@ -119,7 +119,7 @@ formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); - selelct.on("change",function(e){ + selelct.off("select2:select select2:clear").on("select2:select select2:clear", function(e){ companyId = $(this).val(); //重新选择厂区后清空设备和工艺段数据 if(companyId != "${maintenanceDetail.companyid}"){ @@ -129,10 +129,10 @@ $("#processectionname").val(""); } }); - selelct.val('${maintenanceDetail.companyid}').trigger("change"); + selelct.val('${maintenanceDetail.companyid}').trigger("change.select2"); } },'json'); - $("#maintenanceWay").select2({minimumResultsForSearch: 10}).val("${maintenanceDetail.maintenanceWay}").trigger("change"); + $("#maintenanceWay").select2({minimumResultsForSearch: 10}).val("${maintenanceDetail.maintenanceWay}").trigger("change.select2"); //选择时间 $('#startDate').datepicker({ language: 'zh-CN', diff --git a/src/main/webapp/jsp/workorder/overHaulRecordList.jsp b/src/main/webapp/jsp/workorder/overHaulRecordList.jsp index d5ef5622..f45ae793 100644 --- a/src/main/webapp/jsp/workorder/overHaulRecordList.jsp +++ b/src/main/webapp/jsp/workorder/overHaulRecordList.jsp @@ -133,8 +133,8 @@ formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height':'30px','paddingTop':'4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change",function(e){ + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear",function(){ dosearch(); }); @@ -153,9 +153,9 @@ formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height':'30px','paddingTop':'4px'}) - selelct.val('').trigger("change"); + selelct.val('').trigger("change.select2"); refreshSelect(); - selelct.on("change",function(e){ + selelct.off("select2:select select2:clear").on("select2:select select2:clear",function(){ companyId= $(this).val(); dosearch(); refreshSelect(); @@ -174,8 +174,8 @@ formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择 }); $(".select2-selection--single").css({'height':'30px','paddingTop':'4px'}) - selelct_.val('').trigger("change"); - selelct_.on("change",function(e){ + selelct_.val('').trigger("change.select2"); + selelct_.off("select2:select select2:clear").on("select2:select select2:clear",function(){ dosearch(); }); },'json'); diff --git a/src/main/webapp/jsp/workorder/workorderDetailEndMaintainList.jsp b/src/main/webapp/jsp/workorder/workorderDetailEndMaintainList.jsp index dde887c1..7daebfa0 100644 --- a/src/main/webapp/jsp/workorder/workorderDetailEndMaintainList.jsp +++ b/src/main/webapp/jsp/workorder/workorderDetailEndMaintainList.jsp @@ -418,17 +418,12 @@ var getExs = function () { var datas = selectionIds.toString(); - if (datas === "") { - showAlert('d', '请选中之后导出', 'mainAlertdiv'); - } else { - // window.open(ext.contextPath + "/workorder/workorderDetail/doExportMain.do?ids=" + datas + "&type=maintain"); - var params = { - responseType: 'blob', - ids: datas, - type: 'maintain' - }; - postExcelFile(params, ext.contextPath + '/workorder/workorderDetail/doExportMain.do'); - } + var params = { + responseType: 'blob', + ids: datas, + type: 'maintain' + }; + postExcelFile(params, ext.contextPath + '/workorder/workorderDetail/doExportMain.do'); } function postExcelFile(params, url) { //params是post请求需要的参数,url是请求url地址 diff --git a/src/main/webapp/jsp/workorder/workorderDetailEndRepairList.jsp b/src/main/webapp/jsp/workorder/workorderDetailEndRepairList.jsp index 4604f1f8..4162dba7 100644 --- a/src/main/webapp/jsp/workorder/workorderDetailEndRepairList.jsp +++ b/src/main/webapp/jsp/workorder/workorderDetailEndRepairList.jsp @@ -117,11 +117,7 @@ //金山项目导出(暂时不用) var getExs_JS = function () { var datas = selectionIds; - if (datas == 0) { - showAlert('d', '请选中之后导出', 'mainAlertdiv'); - } else { - window.open(ext.contextPath + "/workorder/workorderDetail/doExportRepairJS.do?ids=" + datas + "&type=repair"); - } + window.open(ext.contextPath + "/workorder/workorderDetail/doExportRepairJS.do?ids=" + datas + "&type=repair"); } /** @@ -129,16 +125,12 @@ */ var getExs = function () { var datas = selectionIds; - if (datas == 0) { - showAlert('d', '请选中之后导出', 'mainAlertdiv'); - } else { - var params = { - responseType: 'blob', - ids: datas, - type: 'repair' - }; - postExcelFile(params, ext.contextPath + '/workorder/workorderDetail/doExportRepair.do'); - } + var params = { + responseType: 'blob', + ids: datas, + type: 'repair' + }; + postExcelFile(params, ext.contextPath + '/workorder/workorderDetail/doExportRepair.do'); } function postExcelFile(params, url) { //params是post请求需要的参数,url是请求url地址 diff --git a/使用说明文档.md b/使用说明文档.md new file mode 100644 index 00000000..c77b4f5f --- /dev/null +++ b/使用说明文档.md @@ -0,0 +1,205 @@ +# SIPAIIS_WMS_JSSW 项目使用说明文档 + +## 项目概述 + +SIPAIIS_WMS_JSSW 是一个基于Java的污水处理管理平台(SIPAIIS Wastewater Management System for JSSW),旨在提供全过程的监控、管理和优化服务。该系统采用Spring框架、MyBatis ORM、Activiti工作流引擎等技术栈,支持多种集成如Redis缓存、RabbitMQ消息队列、MQTT物联网通信等。 + +### 技术栈 +- **后端框架**: Spring 5.1.12, Spring MVC, Spring Security +- **数据库ORM**: MyBatis 3.5.1 +- **工作流**: Activiti 5.22.0 +- **缓存**: Redis, Redisson +- **消息队列**: RabbitMQ, Spring AMQP +- **物联网**: MQTT (Eclipse Paho), Modbus +- **搜索**: Elasticsearch +- **定时任务**: Quartz, XXL-Job +- **WebSocket**: 实时通信 +- **报表**: JasperReports, iText PDF +- **Excel处理**: Apache POI, EasyExcel +- **对象存储**: MinIO +- **其他**: Hutool工具库, Lombok, Knife4j API文档 + +### 部署环境 +- **Java版本**: JDK 1.8 +- **应用服务器**: 支持WAR包部署,如Tomcat, Jetty +- **数据库**: SQL Server (推荐), 支持其他JDBC兼容数据库 +- **端口**: 默认8088 (Jetty) + +## 功能点梳理 + +基于项目中的功能清单,系统包含以下主要功能模块: + +### 1. 用户管理 +- 用户信息增删改查 +- 部门组织架构管理 +- 角色权限管理 +- 菜单配置 + +### 2. 监控与报警 +- 测点数据管理 +- 报警记录管理 +- 报警类型配置 +- 设备监控 + +### 3. 设备管理 +- 设备基本信息管理 +- 设备类型分类 +- 设备生命周期管理(采购、入库、出库、维修、保养、巡检、点检、润滑、校准、报废等) +- 设备统计、分析、排名、对比、预警 +- BIM设备关联与巡检 + +### 4. 工单管理 +- 工作工单管理 +- 维修工单处理 +- 保养工单管理 +- 工单执行与跟踪 + +### 5. 备品备件管理 +- 备件库存管理 +- 采购记录管理 +- 库存调拨管理 + +### 6. 视频监控 +- 摄像头管理 +- NVR设备管理 + +### 7. 巡检与考核 +- 巡检计划与记录 +- KPI考核指标、计划、结果 + +### 8. 消息与通知 +- 系统消息管理 +- 短信用户管理 + +### 9. 工作流管理 +- 工作流流程管理 +- 请假申请 +- 任务管理 + +### 10. 文档管理 +- 文档资料管理 +- 图书资料管理 +- 图纸管理 + +### 11. 报表与分析 +- 数据报表管理 +- 工作日报管理 +- 能源数据监控 +- 生产工艺参数 +- 生产指标管理 + +### 12. 可视化展示 +- 大屏数据可视化 +- 工艺流程图管理 +- 页面布局配置 + +### 13. 计划与交互 +- 生产计划管理 +- 页面交互配置 +- 数据类型定义 + +### 14. BIM管理 +- BIM模型管理 +- BIM巡检路线 +- BIM设备关联 +- BIM报警记录 + +### 15. 其他模块 +- 缓存数据管理 +- JSP配置 +- 第三方接口集成 + +## 功能点间相互依赖关系 + +### 核心依赖关系 +- **设备管理** 是基础模块,其他模块如报警、工单、巡检、BIM等均依赖设备数据。 +- **测点与报警**: 报警依赖测点数据和设备状态。 +- **工单管理**: 维修、保养工单依赖设备信息和工作流引擎。 +- **工作流**: 工单、请假、任务等流程依赖Activiti工作流。 +- **巡检与KPI**: 巡检记录影响KPI考核结果。 +- **BIM**: BIM设备关联依赖设备管理,BIM报警依赖报警模块。 +- **报表与可视化**: 依赖各模块数据进行统计和展示。 +- **消息通知**: 报警、工单等事件触发消息发送。 +- **缓存与消息队列**: Redis用于缓存热点数据,RabbitMQ用于异步处理,MQTT用于设备通信。 + +### 数据流依赖 +- 用户权限控制贯穿所有模块。 +- 设备数据是中心,影响报警、工单、统计等。 +- 工作流驱动业务流程,如工单审批。 +- 集成技术(Redis、MQ、ES)支持高性能和实时性。 + +## 安装与部署 + +### 环境要求 +- JDK 1.8+ +- Maven 3.6+ +- 数据库:SQL Server 2012+ 或兼容JDBC数据库 +- Redis 2.6+ +- RabbitMQ 5.9+ +- Elasticsearch 3.2+ +- MinIO (可选,用于文件存储) + +### 部署步骤 +1. **克隆或下载项目**: + ``` + git clone + cd SIPAIIS_WMS_JSSW + ``` + +2. **配置数据库**: + - 编辑 `src/main/resources/db.properties` 配置数据库连接。 + - 执行数据库脚本初始化表结构。 + +3. **配置其他服务**: + - 编辑 `config.properties`, `redis.properties`, `rabbitmq.properties`, `mqtt.properties` 等配置文件。 + - 启动Redis, RabbitMQ, Elasticsearch等服务。 + +4. **构建项目**: + ``` + mvn clean package + ``` + +5. **部署WAR包**: + - 将 `target/TGLW.war` 部署到Tomcat或Jetty。 + - 默认端口8088,可在 `pom.xml` 中修改。 + +6. **启动应用**: + - 访问 `http://localhost:8088/` 进入系统。 + +### 配置说明 +- **applicationContext.xml**: Spring上下文配置,XXL-Job执行器。 +- **log4j.properties**: 日志配置。 +- **xxl-job-executor.properties**: 定时任务配置。 + +## 使用指南 + +### 系统登录 +- 默认管理员账号:根据配置。 +- 登录后,根据角色权限访问不同模块。 + +### 主要操作 +- **设备管理**: 添加设备,配置参数,监控状态。 +- **报警处理**: 查看报警记录,确认处理。 +- **工单执行**: 创建工单,分配任务,跟踪进度。 +- **巡检管理**: 设置巡检计划,记录巡检结果。 +- **报表查看**: 生成各类统计报表。 +- **BIM可视化**: 查看3D模型,关联设备数据。 + +### API文档 +- 使用Knife4j查看API接口:`http://localhost:8088/doc.html` + +### 维护与监控 +- 日志文件:`logs/TGLW.log` +- 监控Redis、MQ连接状态。 +- 使用XXL-Job管理定时任务。 + +## 注意事项 +- 确保数据库和外部服务正常运行。 +- 定期备份数据。 +- 根据实际环境调整配置文件。 +- 安全配置:启用Spring Security,定期更新密码。 + +## 联系与支持 +- 项目维护者:JSSW团队 +- 版本:0.0.1-SNAPSHOT +- 更新日期:2026-04-05