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.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.TreeFieldUtils; import com.example.server.utils.UUIDUtil; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; 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 UserService sysUserService; @Autowired private SysTeamGroupClassService sysTeamGroupClassService; public List getList(Long level1NetworkId, Integer status) { 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, status, userId); /*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 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 columnDto = new ArrayList<>(); columnDto.add(new ExcelColumnDto("一级节点", "Level1NodeName", 20, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("二级节点", "Level2NodeName", 20, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("项目名称", "Level3NetworkName", 20, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("当前节点", "Level3NodeName", 20, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("专业", "TeamGroupName", 20, HorizontalAlignment.CENTER)); columnDto.add(new ExcelColumnDto("总承修单位及负责人", "GeneralRepair", 25, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("分承修单位及负责人", "Repair", 25, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("跟踪方式", "trackMethodStr", 10, HorizontalAlignment.CENTER)); columnDto.add(new ExcelColumnDto("助修人", "TrackPerson", 25, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("厂方", "TrackedPerson", 25, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("跟踪地点", "TrackLocation", 10, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("节点进展", "status", 10, HorizontalAlignment.CENTER)); columnDto.add(new ExcelColumnDto("脱期风险", "hasDelayRiskStr", 10, HorizontalAlignment.CENTER)); columnDto.add(new ExcelColumnDto("预计完成时间", "EstimatedCompletionTime", 15, HorizontalAlignment.CENTER)); columnDto.add(new ExcelColumnDto("存在问题", "Problem", 20, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("后续计划", "FollowupPlan", 20, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("备注", "Remark", 20, HorizontalAlignment.LEFT)); columnDto.add(new ExcelColumnDto("填写时间", "UpdateDate", 15, HorizontalAlignment.CENTER)); 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(); } } }