package com.example.server.progressTrack.service; import com.example.server.ExportExcel.dto.ExcelColumnDto; import com.example.client.service.BaseService; import com.example.server.ExportExcel.dto.ExprotExcelDto; import com.example.server.ExportExcel.method.ExcelExport; import com.example.server.progressTrack.Dto.StatistReportsDto; import com.example.server.progressTrack.dao.DjJdgzTrackRecordDao; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3; import com.example.server.progressTrack.model.DjJdgzNetworkLevel3List; import com.example.server.progressTrack.model.DjJdgzTrackRecord; import com.example.server.teamGroup.service.SysTeamGroupClassService; import com.example.server.user.service.UserService; import com.example.server.utils.FileUtils; import com.example.server.utils.ImportUtil; import com.example.server.utils.TreeFieldUtils; 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.HorizontalAlignment; 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.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** * dj_jdgz_track_record * * @author zt generator * @since 1.0.0 2024-12-17 */ @Service public class DjJdgzTrackRecordService extends BaseService { @Autowired private DjJdgzNetworkLevel1Service djJdgzNetworkLevel1Service; @Autowired private DjJdgzNetworkLevel3ListService djJdgzNetworkLevel3ListService; @Autowired private DjJdgzNetworkLevel3Service djJdgzNetworkLevel3Service; @Autowired private UserService sysUserService; @Autowired private SysTeamGroupClassService sysTeamGroupClassService; public List getList(Long level1NetworkId, Long deptId, Long teamId, Long cabinId, String type, Integer status, String name) { Long userId = null; /* Map adminRole = sysUserService.adminRole(); Object isTyRole = adminRole.get("isTyRole"); Object isYwzRole = adminRole.get("isYwzRole"); if (isTyRole.equals(true) || isYwzRole.equals(true)) { userId = UserContext.getUser().getId(); }*/ List list = baseDao.getList(level1NetworkId,deptId,teamId,cabinId,type, status, name); /*if (list != null && list.size() > 0) { sysOssService.setListOsses(list, "ProjectProgressFileUpload"); }*/ if (list != null && list.size() > 0) { list = list.stream().filter(item -> item.getLevel1NetworkId().equals(level1NetworkId)).collect(Collectors.toList()); for (DjJdgzTrackRecord data : list) { Integer trackNum = baseDao.getTrackNum(data.getLevel3NodeId()); data.setActualCompletion(data.getEstimatedCompletionTime()); data.setTrackNum(trackNum); int weekNo = this.getWeekNo(data.getLevel1NetworkId()); if (data.getWeekNo() != null) { if (data.getWeekNo() != weekNo) { data.setWeekNo(weekNo); data.setIsUpdate(false); } else { data.setIsUpdate(true); } } else { data.setWeekNo(weekNo); data.setIsUpdate(false); } } } return list; } /** * 删除 * * @param ids */ public void delete(Long[] ids) { super.deleteLogic(ids); } public Long save(DjJdgzTrackRecord djJdgzTrackRecord) { Long id = null; int weekNo = this.getWeekNo(djJdgzTrackRecord.getLevel1NetworkId()); LocalDate currentDate = LocalDate.now(); // 定义日期格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 将当前日期格式化为字符串 String formattedDate = currentDate.format(formatter); djJdgzTrackRecord.setUpdateDate(formattedDate); if (djJdgzTrackRecord.getCurrentStatus() == 1) { //时间比较 djJdgzTrackRecord.setEstimatedCompletionTime(formattedDate); } if (djJdgzTrackRecord.getIsUpdate()) { this.update(djJdgzTrackRecord); id = djJdgzTrackRecord.getId(); } else { id = UUIDUtil.generateId(); djJdgzTrackRecord.setWeekNo(weekNo); djJdgzTrackRecord.setId(id); djJdgzTrackRecord.setCreateDate(formattedDate); this.insert(djJdgzTrackRecord); id = djJdgzTrackRecord.getId(); } if (djJdgzTrackRecord.getCurrentStatus() == 1) { DjJdgzNetworkLevel3List nextNode = djJdgzNetworkLevel3ListService.getNextNode(djJdgzTrackRecord.getLevel3NodeId(), djJdgzTrackRecord.getLevel3NetworkId()); if (nextNode != null) { DjJdgzTrackRecord data = new DjJdgzTrackRecord(); data.setLevel3NodeId(nextNode.getId()); data.setProcessName(nextNode.getProcessName()); data.setLevel3NetworkId(djJdgzTrackRecord.getLevel3NetworkId()); data.setLevel3NetworkName(djJdgzTrackRecord.getLevel3NetworkName()); data.setEstimatedCompletionTime(nextNode.getRequiredCompletionTime()); data.setGeneralRepairUnit(djJdgzTrackRecord.getGeneralRepairUnit()); data.setGeneralRepairUnitContact(djJdgzTrackRecord.getGeneralRepairUnitContact()); data.setGeneralRepairUnitDirector(djJdgzTrackRecord.getGeneralRepairUnitDirector()); data.setRepairUnit(djJdgzTrackRecord.getRepairUnit()); data.setRepairUnitContact(djJdgzTrackRecord.getRepairUnitContact()); data.setRepairUnitDirector(djJdgzTrackRecord.getRepairUnitDirector()); data.setTrackMethod(1); data.setWeekNo(weekNo); data.setUpdateDate(formattedDate); data.setCreateDate(formattedDate); this.insert(data); } } //改变三级网络图状态 this.setLevel3Status(djJdgzTrackRecord.getLevel3NodeId(), djJdgzTrackRecord.getCurrentStatus(), djJdgzTrackRecord.getEstimatedCompletionTime()); return id; } public int getWeekNo(Long level1NetworkId) { DjJdgzNetworkLevel1 level1Network = djJdgzNetworkLevel1Service.get(level1NetworkId); SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = sdFormat.format(new Date()); Date nowDate = null; Date startDate = null; try { nowDate = sdFormat.parse(formattedDate); startDate = sdFormat.parse(level1Network.getStartDate()); } catch (ParseException e) { e.printStackTrace(); } long nowTime = nowDate.getTime(); long startTime = startDate.getTime(); if (nowTime < startTime) { return 1; } else { int weekNo = (int) ((nowTime - startTime) / (7 * 24 * 3600 * 1000)) + 1; return weekNo; } } public List getHistory(Long level3NodeId) { List data = baseDao.getHistory(level3NodeId); return data; } public void setLevel3Status(Long level3NodeId, Integer status, String date) { DjJdgzNetworkLevel3List djJdgzNetworkLevel3List = djJdgzNetworkLevel3ListService.get(level3NodeId); if (status == 1) { djJdgzNetworkLevel3List.setCurrentStatus(1); djJdgzNetworkLevel3List.setActualCompletion(date); } else if (status == 0) { djJdgzNetworkLevel3List.setCurrentStatus(0); djJdgzNetworkLevel3List.setActualCompletion(null); } djJdgzNetworkLevel3ListService.update(djJdgzNetworkLevel3List); } public List getReport(Long level1NetworkId) { return baseDao.getReport(level1NetworkId); } public List prompt(Long level1NetworkId) { Long userId = null; /* Map adminRole = sysUserService.adminRole(); Object isTyRole = adminRole.get("isTyRole"); Object isYwzRole = adminRole.get("isYwzRole"); if (isTyRole.equals(true) || isYwzRole.equals(true)) { userId = UserContext.getUser().getId(); }*/ int weekNo = this.getWeekNo(level1NetworkId); List data = baseDao.prompt(level1NetworkId, weekNo, userId); for (DjJdgzTrackRecord record : data) { int i = weekNo - record.getWeekNo(); record.setStatus(i + "周未完成"); } return data; } public void exportExcel(String filePath, String teamgroupId, Long level1NetworkId, Long level3NetworkId, Long level3NodeId, Integer status, Date beginDate, Date endDate, Integer istq, List columnDto) { List dtos = new ArrayList<>(); /* Map keywordMap = dailyPlanService.getReplacement(); String keywordT = keywordMap.get("ting");*/ Map trackMethodMap = new HashMap<>(); trackMethodMap.put(0, "线下"); trackMethodMap.put(1, "电话"); Map statusMap = new HashMap<>(); statusMap.put(0, "进行中"); statusMap.put(1, "已完成"); Map hasDelayRiskMap = new HashMap<>(); hasDelayRiskMap.put(1, "有"); hasDelayRiskMap.put(0, "无"); ExprotExcelDto dto = new ExprotExcelDto(); dto.setSheetName("跟踪记录明细"); List list = baseDao.getdata(teamgroupId, level1NetworkId, level3NetworkId, level3NodeId, status, beginDate, endDate, istq); for (int i = 0; i < list.size(); i++) { DjJdgzTrackRecord data = list.get(i); if (data.getTrackMethod() != null) { data.setTrackMethodStr(trackMethodMap.get(data.getTrackMethod())); } if (data.getCurrentStatus() != null) { data.setStatus(statusMap.get(data.getCurrentStatus())); } if (data.getHasDelayRisk() != null) { data.setHasDelayRiskStr(hasDelayRiskMap.get(data.getHasDelayRisk())); } } String[] filed = {"Level1NodeName", "Level2NodeName", "Level3NetworkName"}; TreeFieldUtils.build(list, filed); dto.setColumnDto(columnDto); //dto.setValues(content); dto.setDataList(list); ExprotExcelDto dto2 = new ExprotExcelDto(); dto2.setSheetName("节点汇总"); List columnDto2 = new ArrayList<>(); List list2 = baseDao.getSummaryData(teamgroupId, level1NetworkId, level3NetworkId, level3NodeId, status, beginDate, endDate, istq); columnDto2.add(new ExcelColumnDto("一级节点", "Level1NodeName", 25, HorizontalAlignment.LEFT)); columnDto2.add(new ExcelColumnDto("二级节点", "Level2NodeName", 25, HorizontalAlignment.LEFT)); columnDto2.add(new ExcelColumnDto("三级网络名称\n" + "(设备名称)", "Level3NetworkName", 25, HorizontalAlignment.LEFT)); columnDto2.add(new ExcelColumnDto("三级节点", "Level3NodeName", 15, HorizontalAlignment.LEFT)); columnDto2.add(new ExcelColumnDto("计划\n" + "完成时间", "RequiredCompletionTime", 12, HorizontalAlignment.CENTER)); columnDto2.add(new ExcelColumnDto("是否脱期", "Istq", 5, HorizontalAlignment.CENTER)); columnDto2.add(new ExcelColumnDto("脱期次数", "Tqcs", 5, HorizontalAlignment.RIGHT)); columnDto2.add(new ExcelColumnDto("最大预计\n" + "完成时间", "Maxtime", 12, HorizontalAlignment.CENTER)); columnDto2.add(new ExcelColumnDto("最大脱期天数", "MaxDay", 10, HorizontalAlignment.RIGHT)); columnDto2.add(new ExcelColumnDto("最新预计\n" + "完成时间", "Zxtime", 12, HorizontalAlignment.CENTER)); columnDto2.add(new ExcelColumnDto("最新脱期天数", "ZxDay", 10, HorizontalAlignment.RIGHT)); TreeFieldUtils.build(list2, filed); dto2.setColumnDto(columnDto2); //dto2.setValues(content2); dto2.setDataList(list2); dtos.add(dto); dtos.add(dto2); try { ExcelExport.getHSSFWorkbook(filePath, dtos); } catch (IOException e) { e.printStackTrace(); } } public List getListByImport(Long level1Id, Long level2Id, Long level2NodeId, String selectedIds) { return baseDao.getListByImport(level1Id, level2Id, level2NodeId, selectedIds); } public String importDiagramFromExcel(String path) { 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 trackMethodMap = new HashMap<>(); trackMethodMap.put("线下", 0); trackMethodMap.put("电话", 1); Map statusMap = new HashMap<>(); statusMap.put("进行中", 0); statusMap.put("已完成", 1); Map hasDelayRiskMap = new HashMap<>(); hasDelayRiskMap.put("有", 1); hasDelayRiskMap.put("无", 0); for (int j = 2; j <= num; j++) { int sort = 0; DjJdgzTrackRecord data = new DjJdgzTrackRecord(); boolean isErr = false; row1 = j + 1; String pattern = "yyyy-MM-dd"; Row row = sheet.getRow(j); String idStr = ImportUtil.getCellValue(row, 0, pattern); String dataDate = ImportUtil.getCellValue(row, 1, pattern); String name = ImportUtil.getCellValue(row, 2, pattern); String progressName = ImportUtil.getCellValue(row, 3, pattern); String trackMethodStr = ImportUtil.getCellValue(row, 4, pattern); String trackLocationStr = ImportUtil.getCellValue(row, 5, pattern); String currentStatusStr = ImportUtil.getCellValue(row, 6, pattern); String hasDelayRiskStr = ImportUtil.getCellValue(row, 7, pattern); String estimatedCompletionTimeStr = ImportUtil.getCellValue(row, 8, pattern); String problemStr = ImportUtil.getCellValue(row, 9, pattern); String followupPlanStr = ImportUtil.getCellValue(row, 10, pattern); String remarkStr = ImportUtil.getCellValue(row, 11, pattern); String trackPersonStr = ImportUtil.getCellValue(row, 12, pattern); String trackPersonContact = ImportUtil.getCellValue(row, 13, pattern); String trackPersonUnit = ImportUtil.getCellValue(row, 14, pattern); String trackedPerson = ImportUtil.getCellValue(row, 15, pattern); String trackedPersonContact = ImportUtil.getCellValue(row, 16, pattern); String trackedPersonUnit = ImportUtil.getCellValue(row, 17, pattern); String generalRepairUnit = ImportUtil.getCellValue(row, 18, pattern); String generalRepairUnitDirector = ImportUtil.getCellValue(row, 19, pattern); String generalRepairUnitContact = ImportUtil.getCellValue(row, 20, pattern); String repairUnit = ImportUtil.getCellValue(row, 21, pattern); String repairUnitDirector = ImportUtil.getCellValue(row, 22, pattern); String repairUnitContact = ImportUtil.getCellValue(row, 23, pattern); DjJdgzNetworkLevel3 level3 = djJdgzNetworkLevel3Service.get(Long.parseLong(idStr)); Long level1NetworkId = level3.getLevel1NetworkId(); Long id = UUIDUtil.generateId(); if (StringUtils.isEmpty(dataDate)) { result = "第" + j + "行" + "录入时间不能为空"; isErr = true; continue; } else { int weekNo = this.getWeekNo(level1NetworkId); data.setWeekNo(weekNo); data.setLevel1NetworkId(level1NetworkId); data.setLevel3NetworkId(level3.getId()); } if (StringUtils.isEmpty(name)) { result = "第" + j + "行" + "设备名称不能为空"; isErr = true; continue; } else { data.setId(id); data.setLevel3NetworkName(name); } if (StringUtils.isEmpty(progressName)) { result = "第" + j + "行" + "节点名称不能为空"; isErr = true; continue; } else { List list = djJdgzNetworkLevel3ListService.getList(level3.getId()); for (DjJdgzNetworkLevel3List item : list) { if(item.getProcessName().equals(progressName)){ data.setLevel3NodeId(item.getId()); data.setEstimatedCompletionTime(item.getRequiredCompletionTime()); break; } } data.setProcessName(progressName); } if (StringUtils.isEmpty(trackMethodStr)) { data.setTrackMethod(0); } else { data.setTrackMethod(trackMethodMap.get(trackMethodStr)); } if (StringUtils.isNotBlank(trackLocationStr)) { data.setTrackLocation(trackLocationStr); } if (StringUtils.isEmpty(currentStatusStr)) { data.setCurrentStatus(0); } else { data.setCurrentStatus(statusMap.get(currentStatusStr)); } if (StringUtils.isEmpty(hasDelayRiskStr)) { data.setHasDelayRisk(0); } else { data.setHasDelayRisk(hasDelayRiskMap.get(hasDelayRiskStr)); } if (StringUtils.isNotBlank(estimatedCompletionTimeStr)) { if (estimatedCompletionTimeStr.matches("[0-9/]+")) { estimatedCompletionTimeStr = estimatedCompletionTimeStr.replace("/", "-"); data.setEstimatedCompletionTime(estimatedCompletionTimeStr); } else if (estimatedCompletionTimeStr.matches("[0-9.]+")) { estimatedCompletionTimeStr = estimatedCompletionTimeStr.replace(".", "-"); data.setEstimatedCompletionTime(estimatedCompletionTimeStr); } else if (estimatedCompletionTimeStr.matches("[0-9-]+")) { data.setEstimatedCompletionTime(estimatedCompletionTimeStr); } else { result = "第" + j + "行" + "第" + 1 + "个" + "预计完成时间日期格式不规范"; isErr = true; } } if (StringUtils.isNotBlank(problemStr)) { data.setProblem(problemStr); } if (StringUtils.isNotBlank(followupPlanStr)) { data.setFollowupPlan(followupPlanStr); } if (StringUtils.isNotBlank(remarkStr)) { data.setRemark(remarkStr); } if (StringUtils.isNotBlank(trackPersonStr)) { data.setTrackPerson(trackPersonStr); } if (StringUtils.isNotBlank(trackPersonContact)) { data.setTrackPersonContact(trackPersonContact); } if (StringUtils.isNotBlank(trackPersonUnit)) { data.setTrackPersonUnit(trackPersonUnit); } if (StringUtils.isNotBlank(trackedPerson)) { data.setTrackPerson(trackPersonStr); } if (StringUtils.isNotBlank(trackedPersonContact)) { data.setTrackPersonContact(trackPersonContact); } if (StringUtils.isNotBlank(trackedPersonUnit)) { data.setTrackPersonUnit(trackPersonUnit); } if (StringUtils.isNotBlank(generalRepairUnit)) { data.setGeneralRepairUnit(generalRepairUnit); } if (StringUtils.isNotBlank(generalRepairUnitContact)) { data.setGeneralRepairUnitContact(generalRepairUnitContact); } if (StringUtils.isNotBlank(generalRepairUnitDirector)) { data.setGeneralRepairUnitDirector(generalRepairUnitDirector); } if (StringUtils.isNotBlank(generalRepairUnit)) { data.setRepairUnit(repairUnit); } if (StringUtils.isNotBlank(generalRepairUnit)) { data.setRepairUnitContact(repairUnitContact); } if (StringUtils.isNotBlank(generalRepairUnit)) { data.setRepairUnitDirector(repairUnitDirector); } if (!isErr) { data.setIsUpdate(false); this.save(data); } if (isErr) { err++; continue; } } } catch (Exception e) { e.printStackTrace(); result = "导入" + row1 + "行数据时检测到异常,中断导入操作。"; } suc = sum - err; return result; } public void retract(Long id) { baseDao.retract(id); } }