package com.example.server.progressTrack.service; import com.example.client.dto.JComboBoxItem; import com.example.client.service.BaseService; import com.example.server.cabin.service.CabinService; import com.example.server.progressTrack.Dto.NetworkNodeStatusDto; import com.example.server.progressTrack.Dto.StatistProductDto; import com.example.server.progressTrack.Dto.TableNodeDto; import com.example.server.progressTrack.dao.DjJdgzNetworkLevel3Dao; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3List; import com.example.server.teamGroup.service.SysTeamGroupClassService; import com.example.server.utils.FileUtils; import com.example.server.utils.ImportUtil; import com.example.server.utils.UUIDUtil; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * dj_jdgz_network_level3 * * @author zt generator * @since 1.0.0 2024-12-17 */ @Service public class DjJdgzNetworkLevel3Service extends BaseService { @Autowired NetWorkDiagramService netWorkDiagramService; @Autowired DjJdgzNetworkLevel3ListService DjJdgzNetworkLevel3ListService; @Autowired SysTeamGroupClassService sysTeamGroupClassService; @Autowired CabinService cabinService; @Value("${zt.oss.local-path}") private String path; public List getStatist(Long level1Id,String type) { return baseDao.getStatist(level1Id,type); } enum StatusEnum {zy, jxz, lq, yq, zcwc, cqwc} String[] fillColorArr = {"#e5e5e5", "#3498DB", "#F1C40F", "#E74C3C", "#2ECC71", "#006400"}; String[] fontColorArr = {"#e5e5e5", "#3498DB", "#F1C40F", "#E74C3C", "#2ECC71", "#006400"}; public List getList(Long shipId, Long deptId, Long teamId, Long cabinId, String type, Integer isealCabin,Integer isLt, String name) { List list = baseDao.getList(shipId, deptId, teamId, cabinId, type, isealCabin,isLt, name); return list; } /** * 获取节点状态数据 */ public List getNodeStatusData(Long id) { List list = baseDao.getNodeStatusData(id); return list; } /** * 删除 * * @param ids */ public void delete(Long[] ids) { super.deleteLogic(ids); } public String getStatusDiagram(Long id) { DjJdgzNetworkLevel3 djJdgzNetworkLevel3 = this.get(id); String json = djJdgzNetworkLevel3.getContent(); List nodeStatusData = this.getNodeStatusData(id); String statusDiagram = netWorkDiagramService.getStatusDiagram(json, null, nodeStatusData); return statusDiagram; } public void deleteLevel3(Long id) { baseDao.deleteLevel3List(id); baseDao.deleteLevel3(id); } public List getDiagramByNodeId(Long id) { List data = baseDao.getByNodeId(id); return data; } public JComboBoxItem[] getListByLevel1(Long level1NetworkId) { return baseDao.getListByLevel1(level1NetworkId); } public String importDiagramFromExcel(String path, Long level1NetworkId, Long level2NetworkId, Long level2NodeId) { String result = "true"; Integer sum = 0; // 总共的条数 Integer suc = 0; // 成功的条数 Integer err = 0; // 失败的条数 Map errMap = new HashMap<>(); MultipartFile mutFile = null; try { mutFile = FileUtils.convertFileToMultipartFile(path); } catch (IOException e) { e.printStackTrace(); } String sheetName = null; int row1 = 0; try { // 获取导入文件的后缀名 String fileName = mutFile.getOriginalFilename(); Workbook workbook = null; //解决excel版本问题 if (fileName != null && fileName.endsWith(".xls")) { workbook = new HSSFWorkbook(mutFile.getInputStream()); } else if (fileName != null && fileName.endsWith(".xlsx")) { workbook = new XSSFWorkbook(mutFile.getInputStream()); } assert workbook != null; //断言如果[boolean表达式]为true,则程序继续执行。 如果为false,则程序抛出AssertionError,并终止执行。 Sheet sheet = workbook.getSheetAt(0); int num = sheet.getLastRowNum(); // 一共有多少行 sheetName = sheet.getSheetName(); //获取当前sheet名称 sum = sum + num; Map mapTeamGroup = sysTeamGroupClassService.getMapGroup(false, "hld"); JComboBoxItem[] cabinList = cabinService.getList(); JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList(); JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null); Map cabinMap = new HashMap<>(); Map deptMap = new HashMap<>(); Map teamMap = new HashMap<>(); for (JComboBoxItem item : cabinList) { cabinMap.put(item.getName(), item.getId()); } for (JComboBoxItem item : deptList) { deptMap.put(item.getName(), item.getId()); } for (JComboBoxItem item : teamList) { teamMap.put(item.getName(), item.getId()); } for (int j = 2; j <= num; j++) { int sort = 0; DjJdgzNetworkLevel3 data = new DjJdgzNetworkLevel3(); DjJdgzNetworkLevel3List node = new DjJdgzNetworkLevel3List(); boolean isErr = false; row1 = j + 1; String pattern = "yyyy-MM-dd"; Row row = sheet.getRow(j); String name = ImportUtil.getCellValue(row, 0, pattern); String isealCabinStr = ImportUtil.getCellValue(row, 1, pattern); String isltStr = ImportUtil.getCellValue(row, 2, pattern); String deptStr = ImportUtil.getCellValue(row, 3, pattern); String teamGroupStr = ImportUtil.getCellValue(row, 4, pattern); String cabinStr = ImportUtil.getCellValue(row, 5, pattern); String typeStr = ImportUtil.getCellValue(row, 6, pattern); String time1 = ImportUtil.getCellValue(row, 7, pattern); String time2 = ImportUtil.getCellValue(row, 8, pattern); String time3 = ImportUtil.getCellValue(row, 9, pattern); String time4 = ImportUtil.getCellValue(row, 10, pattern); String time5 = ImportUtil.getCellValue(row, 11, pattern); String repairUnit = ImportUtil.getCellValue(row, 12, pattern); String repairUnitDirector = ImportUtil.getCellValue(row, 13, pattern); String repairUnitContact = ImportUtil.getCellValue(row, 14, pattern); String generalRepairUnit = ImportUtil.getCellValue(row, 15, pattern); String generalRepairUnitDirector = ImportUtil.getCellValue(row, 16, pattern); String generalRepairUnitContact = ImportUtil.getCellValue(row, 17, pattern); Integer isealCabin = 0; Integer islt = 0; if (isealCabinStr.equals("是")) { isealCabin = 1; } if (isltStr.equals("是")) { islt = 1; } Long id = UUIDUtil.generateId(); if (StringUtils.isEmpty(name)) { result = "第" + j + "行" + "设备名称不能为空"; isErr = true; continue; } else { data.setId(id); node.setNetworkId(id); data.setName(name); data.setLevel1NetworkId(level1NetworkId); data.setLevel2NetworkId(level2NetworkId); data.setLevel2NodeId(level2NodeId); data.setIsealCabin(isealCabin); data.setIslt(islt); } if (StringUtils.isEmpty(deptStr)) { result = "第" + j + "行" + "部门不能为空"; isErr = true; continue; } else { if (deptMap.get(deptStr) == null) { result = "第" + j + "行" + "部门不存在"; isErr = true; continue; } else { Long deptId = deptMap.get(deptStr); data.setDeptId(deptId); } } if (StringUtils.isEmpty(teamGroupStr)) { result = "第" + j + "行" + "专业不能为空"; isErr = true; continue; } else { if (teamMap.get(teamGroupStr) == null) { result = "第" + j + "行" + "专业不存在"; isErr = true; continue; } else { Long teamId = teamMap.get(teamGroupStr); data.setTeamgroupId(teamId); data.setTeamgroupName(teamGroupStr); } } if (StringUtils.isEmpty(cabinStr)) { result = "第" + j + "行" + "舱室不能为空"; isErr = true; continue; } else { String[] cabins = cabinStr.split(","); // 用于存储拼接后的 id StringBuilder idBuilder = new StringBuilder(); // 遍历每个键 for (String key : cabins) { key = key.trim(); // 去除可能的空格 Long cabinId = cabinMap.get(key); // 如果键在 Map 中存在 if (cabinId != null) { if (idBuilder.length() > 0) { idBuilder.append(","); // 添加分隔符 } idBuilder.append(cabinId); // 添加 id } else { result = "第" + j + "行" + "舱室不存在"; isErr = true; continue; } } data.setCabinId(idBuilder.toString()); } if (StringUtils.isNotBlank(time1)) { String Pname = ""; if (typeStr.equals("改换装")||typeStr.equals("改进性修理")){ Pname = "设备到厂"; }else if(typeStr.equals("修理")){ Pname = "设备拆卸出舱"; }else if(typeStr.equals("不复装设备")){ Pname = "拆卸出舱"; } if (time1.matches("[0-9/]+")) { time1 = time1.replace("/", "-"); node.setRequiredCompletionTime(time1); node.setProcessName(Pname); node.setSort(1); DjJdgzNetworkLevel3ListService.insert(node); } else if (time1.matches("[0-9.]+")) { time1 = time1.replace(".", "-"); node.setRequiredCompletionTime(time1); node.setProcessName(Pname); node.setSort(1); DjJdgzNetworkLevel3ListService.insert(node); } else if (time1.matches("[0-9-]+")) { node.setRequiredCompletionTime(time1); node.setProcessName(Pname); node.setSort(1); DjJdgzNetworkLevel3ListService.insert(node); } else { result = "第" + j + "行" + "第" + 1 + "个" + "节点时间日期格式不规范"; isErr = true; } } if (StringUtils.isNotBlank(time2)) { if (node.getId() != null) { node.setId(null); } String Pname = ""; if (typeStr.equals("改换装")||typeStr.equals("改进性修理")){ Pname = "设备安装"; }else if(typeStr.equals("修理")){ Pname = "设备分交"; }else if(typeStr.equals("不复装设备")){ Pname = "入库"; } if (time2.matches("[0-9/]+")) { node.setRequiredCompletionTime(time2); node.setProcessName(Pname); node.setSort(2); DjJdgzNetworkLevel3ListService.insert(node); } else if (time2.matches("[0-9.]+")) { time2 = time2.replace(".", "-"); node.setRequiredCompletionTime(time2); node.setProcessName(Pname); node.setSort(2); DjJdgzNetworkLevel3ListService.insert(node); } else if (time2.matches("[0-9-]+")) { node.setRequiredCompletionTime(time2); node.setProcessName(Pname); node.setSort(2); DjJdgzNetworkLevel3ListService.insert(node); } else { result = "第" + j + "行" + "第" + 2 + "个" + "节点时间的日期格式不规范"; isErr = true; } } if (StringUtils.isNotBlank(time3)) { if (node.getId() != null) { node.setId(null); } String Pname = ""; if(typeStr.equals("修理")){ Pname = "拆检鉴定"; }else if(typeStr.equals("不复装设备")){ Pname = "存放位置"; } if (time3.matches("[0-9/]+")) { time3 = time3.replace("/", "-"); node.setRequiredCompletionTime(time3); node.setProcessName(Pname); node.setSort(3); DjJdgzNetworkLevel3ListService.insert(node); } else if (time3.matches("[0-9.]+")) { time3 = time3.replace(".", "-"); node.setRequiredCompletionTime(time3); node.setProcessName(Pname); node.setSort(3); DjJdgzNetworkLevel3ListService.insert(node); } else if (time3.matches("[0-9-]+")) { node.setRequiredCompletionTime(time3); node.setProcessName(Pname); node.setSort(3); DjJdgzNetworkLevel3ListService.insert(node); } else { result = "第" + j + "行" + "第" + 3 + "个" + "节点时间的日期格式不规范"; isErr = true; } } if (StringUtils.isNotBlank(time4)) { if (node.getId() != null) { node.setId(null); } String Pname = ""; if(typeStr.equals("修理")){ Pname = "设备返厂"; }else if(typeStr.equals("不复装设备")){ Pname = "移交T队"; } if (time4.matches("[0-9/]+")) { time4 = time4.replace("/", "-"); node.setRequiredCompletionTime(time4); node.setProcessName(Pname); node.setSort(4); DjJdgzNetworkLevel3ListService.insert(node); } else if (time4.matches("[0-9.]+")) { time4 = time4.replace(".", "-"); node.setRequiredCompletionTime(time4); node.setProcessName(Pname); node.setSort(4); DjJdgzNetworkLevel3ListService.insert(node); } else if (time4.matches("[0-9-]+")) { node.setRequiredCompletionTime(time4); node.setProcessName(Pname); node.setSort(4); DjJdgzNetworkLevel3ListService.insert(node); } else { result = "第" + j + "行" + "第" + 4 + "个" + "节点时间的日期格式不规范"; isErr = true; } } if (StringUtils.isNotBlank(time5)) { if (node.getId() != null) { node.setId(null); } if (time5.matches("[0-9/]+")) { time5 = time5.replace("/", "-"); node.setRequiredCompletionTime(time5); node.setProcessName("回装"); node.setSort(5); DjJdgzNetworkLevel3ListService.insert(node); } else if (time5.matches("[0-9.]+")) { time5 = time5.replace(".", "-"); node.setRequiredCompletionTime(time5); node.setProcessName("回装"); node.setSort(5); DjJdgzNetworkLevel3ListService.insert(node); } else if (time5.matches("[0-9-]+")) { node.setRequiredCompletionTime(time5); node.setProcessName("回装"); node.setSort(5); DjJdgzNetworkLevel3ListService.insert(node); } else { result = "第" + j + "行" + "第" + 5 + "个" + "要求完成时间的日期格式不规范"; isErr = true; } } if (StringUtils.isNotBlank(typeStr)) { data.setType(typeStr); } if (StringUtils.isNotBlank(generalRepairUnit)) { data.setGeneralRepairUnit(generalRepairUnit); } if (StringUtils.isNotBlank(generalRepairUnitContact)) { data.setGeneralRepairUnitContact(generalRepairUnitContact); } if (StringUtils.isNotBlank(generalRepairUnitDirector)) { data.setGeneralRepairUnitDirector(generalRepairUnitDirector); } if (StringUtils.isNotBlank(repairUnit)) { data.setRepairUnit(repairUnit); } if (StringUtils.isNotBlank(repairUnitContact)) { data.setRepairUnitContact(repairUnitContact); } if (StringUtils.isNotBlank(repairUnitDirector)) { data.setRepairUnitDirector(repairUnitDirector); } if (!isErr) { this.insert(data); String diagram = DjJdgzNetworkLevel3ListService.getDiagram(data.getId()); data.setContent(diagram); this.update(data); } if (isErr) { err++; continue; } } } catch (Exception e) { e.printStackTrace(); result = "导入" + row1 + "行数据时检测到异常,中断导入操作。"; } suc = sum - err; return result; } public JComboBoxItem[] getListByExport(Long projectId, Long deptId, Long teamId) { JComboBoxItem[] list = baseDao.getListByExport(projectId, deptId, teamId); return list; } public List getNodeList(Long shipId, Long deptId, Long teamId, Long cabinId, String type,Integer isCabin,Integer islt, String name) { List list = baseDao.getNodeList(shipId, deptId, teamId, cabinId, type,isCabin,islt, name); Map statusMap = new HashMap<>(); Date today = new Date(); for (TableNodeDto node : list) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date requiredCompletionDate = null; Date actualCompletionDate = null; try { if (StringUtils.isNotBlank(node.getRequiredCompletionTime())) { requiredCompletionDate = sdf.parse(node.getRequiredCompletionTime()); } if (StringUtils.isNotBlank(node.getActualCompletion())) { actualCompletionDate = sdf.parse(node.getActualCompletion()); } } catch (ParseException e) { e.printStackTrace(); } if (node.getCurrentStatus() == null || node.getCurrentStatus() == 0) { if (today.after(requiredCompletionDate)) { statusMap.put(node.getId(), StatusEnum.yq); int days = (int) ((today.getTime() - requiredCompletionDate.getTime()) / (1000 * 60 * 60 * 24)); node.setYqText("要求时间为" + sdf.format(requiredCompletionDate) + "已逾期" + days + "天"); } else if ((requiredCompletionDate.getTime() - today.getTime()) / (1000 * 60 * 60 * 24) < 7) { statusMap.put(node.getId(), StatusEnum.lq); int days = (int) ((requiredCompletionDate.getTime() - today.getTime()) / (1000 * 60 * 60 * 24)); node.setLqText("要求时间为" + sdf.format(requiredCompletionDate) + "还有" + days + "天临期"); } else { statusMap.put(node.getId(), StatusEnum.jxz); } } else if (node.getCurrentStatus() == 1) { // 已完成 if (node.getActualCompletion() != null && actualCompletionDate.after(requiredCompletionDate)) { statusMap.put(node.getId(), StatusEnum.cqwc); int days = (int) ((today.getTime() - requiredCompletionDate.getTime()) / (1000 * 60 * 60 * 24)); node.setCqText("要求时间为" + sdf.format(requiredCompletionDate) + "超期" + days + "天完成"); } else { statusMap.put(node.getId(), StatusEnum.zcwc); } } } StatusEnum status = StatusEnum.jxz; List dataList = new ArrayList<>(); Long oldId = 0L; TableNodeDto data = null; for (TableNodeDto node : list) { if (oldId.equals(node.getNetworkId())) { } else { data = new TableNodeDto(); String remark = baseDao.getRemark(node.getNetworkId(),type); if (StringUtils.isNotBlank(remark)){ data.setRemark(remark); } data.setName(node.getName()); data.setNetworkId(node.getNetworkId()); data.setIsealCabin(node.getIsealCabin()); data.setIslt(node.getIslt()); dataList.add(data); oldId = node.getNetworkId(); } status = statusMap.get(node.getId()); if (StringUtils.isNotBlank(node.getLqText())) { data.setLqText(node.getLqText()); } if (StringUtils.isNotBlank(node.getYqText())) { data.setYqText(node.getYqText()); } if (StringUtils.isNotBlank(node.getCqText())) { data.setCqText(node.getCqText()); } if (node.getProcessName().equals("设备拆卸出舱")||node.getProcessName().equals("设备到厂")||node.getProcessName().equals("拆卸出舱")) { data.setTime1Color(fillColorArr[status.ordinal()]); } else if (node.getProcessName().equals("设备分交")||node.getProcessName().equals("设备安装")||node.getProcessName().equals("入库")) { data.setTime2Color(fillColorArr[status.ordinal()]); } else if (node.getProcessName().equals("拆检鉴定")||node.getProcessName().equals("存放位置")) { data.setTime3Color(fillColorArr[status.ordinal()]); } else if (node.getProcessName().equals("设备返厂")||node.getProcessName().equals("移交T队")) { data.setTime4Color(fillColorArr[status.ordinal()]); } else if (node.getProcessName().equals("回装")) { data.setTime5Color(fillColorArr[status.ordinal()]); } } return dataList; } /* public void exportExcelTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException { String excelName="三级网络图批量模版"; String excelPath = path + "template/jx-model/" + excelName + ".xlsx"; //模板路径 File file = new File(excelPath); excelName = excelName + "_" + DateUtil.now() + ".xlsx"; DownloadService.exportModelPath(excelPath, excelName, file, response, request); }*/ }