package com.example.server.progressTrack.service; import cn.hutool.core.convert.Convert; import com.example.client.dto.JComboBoxItem; import com.example.client.service.BaseService; import com.example.server.major.service.SysMajorService; import com.example.server.progressTrack.Dto.DiagramMajorDto; import com.example.server.progressTrack.Dto.DiagramNode2Dto; import com.example.server.progressTrack.Dto.DiagramNodeDto; import com.example.server.progressTrack.dao.DjJdgzNetworkLevel2ListDao; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1; import com.example.server.progressTrack.model.DjJdgzNetworkLevel1List; import com.example.server.progressTrack.model.DjJdgzNetworkLevel2; import com.example.server.progressTrack.model.DjJdgzNetworkLevel2List; import com.example.server.utils.FileUtils; import com.example.server.utils.ImportUtil; import com.mxgraph.view.mxGraph; 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.streaming.SXSSFWorkbook; 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 javax.servlet.http.HttpServletResponse; import javax.swing.*; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; /** * dj_jdgz_network_level2_list * * @author zt generator * @since 1.0.0 2024-12-18 */ @Service public class DjJdgzNetworkLevel2ListService extends BaseService { @Autowired NetWorkDiagramService netWorkDiagramService; @Autowired private DjJdgzNetworkLevel1Service djJdgzNetworkLevel1Service; @Autowired private DjJdgzNetworkLevel1ListService djJdgzNetworkLevel1ListService; @Autowired private DjJdgzNetworkLevel2Service djJdgzNetworkLevel2Service; @Autowired private SysMajorService sysMajorService; public List getList(Long netWorkId) { return baseDao.getList(netWorkId); } /* public List status(QueryFilter queryFilter) { return baseDao.getListStatus(queryFilter.getQueryParams()); }*/ /* public List getDataList(Integer type, Long networkId) { List list = null; QueryFilter queryFilter = new QueryFilter(); queryFilter.getParams().put("networkId", networkId); if (type == 0) { Integer adventDays = baseDao.getAdventDays(networkId); if (adventDays == null) adventDays = 7; queryFilter.getParams().put("adventDays", 0 - adventDays); list = baseDao.getListAdvent(queryFilter.getQueryParams()); } else if (type == 1) { list = baseDao.getListExpire(queryFilter.getQueryParams()); } else if (type == 2) { list = baseDao.getListCompletion(queryFilter.getQueryParams()); } else if (type == 3) { list = baseDao.getListOverdueCompletion(queryFilter.getQueryParams()); } return list; }*/ public void setStatus(DjJdgzNetworkLevel2List djJdgzNetworkLevel2List) { baseDao.setStatus(djJdgzNetworkLevel2List.getId(), djJdgzNetworkLevel2List.getCurrentStatus(), djJdgzNetworkLevel2List.getActualCompletion(), djJdgzNetworkLevel2List.getManualSetFlag()); } public void updateData(DjJdgzNetworkLevel2List djJdgzNetworkLevel2List) { baseDao.updateData(djJdgzNetworkLevel2List.getId(), djJdgzNetworkLevel2List.getExpireSituation()); } public void saveDiagram(Long networkId, JPanel jPanel, mxGraph graph) { List list2 = baseDao.getNodeList(networkId); String simpleDiagram = netWorkDiagramService.createSimpleDiagram(list2); DjJdgzNetworkLevel2 level2 = djJdgzNetworkLevel2Service.get(networkId); level2.setContent(simpleDiagram); djJdgzNetworkLevel2Service.update(level2); netWorkDiagramService.getCsDiagram(graph,simpleDiagram,null,jPanel.getWidth(),jPanel.getHeight()); } /** * 删除 * * @param ids */ public void delete(Long[] ids) { super.deleteLogic(ids); } public String importDiagramFromExcel(String path, Long projectId) { 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; this.deleteByNetworkId(projectId); 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; for (int j = 1; j < num; j++) { DjJdgzNetworkLevel2List data = new DjJdgzNetworkLevel2List(); data.setNetworkId(projectId); boolean isErr = false; row1 = j + 1; String pattern = "yyyy-MM-dd"; Row row = sheet.getRow(j); String processName = ImportUtil.getCellValue(row, 0, pattern); // 过程名称 String requiredCompletionTime = ImportUtil.getCellValue(row, 1, pattern); // 要求完成时间 if (StringUtils.isEmpty(processName)) { isErr = true; result = "第"+j+"行"+"过程名称为空"; } else { data.setProcessName(processName); } if (StringUtils.isEmpty(requiredCompletionTime)) { isErr = true; result = "第"+j+"行"+"要求完成时间为空"; } else { if (requiredCompletionTime.matches("[0-9/]+")) { requiredCompletionTime = requiredCompletionTime.replace("/", "-"); data.setRequiredCompletionTime(requiredCompletionTime); } else if (requiredCompletionTime.matches("[0-9.]+")) { requiredCompletionTime = requiredCompletionTime.replace(".", "-"); data.setRequiredCompletionTime(requiredCompletionTime); } else if (requiredCompletionTime.matches("[0-9-]+")) { data.setRequiredCompletionTime(requiredCompletionTime); } else { isErr = true; result = "第"+j+"行"+"要求完成时间格式不正确"; } } data.setSort(j); if (!isErr) { this.insert(data); } if (isErr) { err++; continue; } } } catch (Exception e) { e.printStackTrace(); result = "导入"+row1+"行数据时检测到异常,中断导入操作。"; } suc = sum - err; return result; } private void deleteByNetworkId(Long networkId) { baseDao.deleteByNetworkId(networkId); } public List getByLevel1Node(Long level1NodeId) { return baseDao.getByLevel1Node(level1NodeId); } public JComboBoxItem[] getNode(Long networkId) { return baseDao.getNode(networkId); } public void save(List list, Long networkId, JPanel jPanel, mxGraph finalGraph) { for (DjJdgzNetworkLevel2List data : list){ data.setNetworkId(networkId); if (data.getId()!=null){ this.update(data); }else{ this.insert(data); } } this.saveDiagram(networkId,jPanel,finalGraph); } /* public String getDiagram(Long networkId, Date startDate, Integer diagramWidth, Integer lineNodeNum) { List majorList = baseDao.getMajorList(networkId); List node2List = baseDao.getNodeList(networkId); String simpleDiagram = netWorkDiagramService.createDiagram(majorList,node2List,startDate,diagramWidth,lineNodeNum); return simpleDiagram; }*/ /* public void exportExcel(int type, HttpServletResponse response, Long networkId) throws IOException { DjJdgzNetworkLevel2 network2 = djJdgzNetworkLevel2Service.get(networkId); DjJdgzNetworkLevel1 network1 = djJdgzNetworkLevel1Service.get(network2.getLevel1NetworkId()); DjJdgzNetworkLevel1List network1Node = djJdgzNetworkLevel1ListService.get(network2.getLevel1NodeId()); //导出文件名称 String dataType = null; if (type == 0) { dataType = "临期"; } else if (type == 1) { dataType = "逾期"; } else if (type == 2) { dataType = "完成"; } else if (type == 3) { dataType = "超期完成"; } String filename = "二级网络图(" + network1.getProjectName() + "-" + network1Node.getProcessName() + ")" + dataType + "数据"; List list = null; QueryFilter queryFilter = new QueryFilter(); queryFilter.getParams().put("networkId", networkId); if (type == 0) { Integer adventDays = baseDao.getAdventDays(networkId); if (adventDays == null) adventDays = 7; queryFilter.getParams().put("adventDays", 0 - adventDays); list = baseDao.getListAdvent(queryFilter.getQueryParams()); } else if (type == 1) { list = baseDao.getListExpire(queryFilter.getQueryParams()); } else if (type == 2) { list = baseDao.getListCompletion(queryFilter.getQueryParams()); } else if (type == 3) { list = baseDao.getListOverdueCompletion(queryFilter.getQueryParams()); } String[] title1 = {"工程专业", "过程名称", "要求完成时间", "实际完成时间", "当前状态", dataType + "天数"}; String[] title2 = {"工程专业", "过程名称", "要求完成时间", "实际完成时间", "当前状态"}; String[] title3 = {"工程专业", "过程名称", "要求完成时间", "实际完成时间", "当前状态", dataType + "天数", "逾期说明"}; String[] title = null; if (type == 2) { title = title2; } else if (type == 1) { title = title3; } else { title = title1; } String[][] content = new String[list.size()][title.length]; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < list.size(); i++) { DjJdgzNetworkLevel2List data = list.get(i); int idx = 0; content[i][idx++] = data.getMajorName() == null ? "" : data.getMajorName(); content[i][idx++] = data.getProcessName() == null ? "" : data.getProcessName(); content[i][idx++] = data.getRequiredCompletionTime() == null ? "" : sdf.format(data.getRequiredCompletionTime()); content[i][idx++] = data.getActualCompletion() == null ? "" : sdf.format(data.getActualCompletion()); if (data.getCurrentStatus() == null) { content[i][idx++] = "进行中"; } else if (data.getCurrentStatus().equals(0)) { content[i][idx++] = "进行中"; } else if (data.getCurrentStatus().equals(1)) { content[i][idx++] = "已完成"; } if (type != 2) { content[i][idx++] = data.getLateDueDays().toString(); } if (type == 1) { content[i][idx++] = data.getExpireSituation(); } } DailyPlanService.getHSSFWorkbook(response, filename, "二级网络图", title, content, new SXSSFWorkbook()); }*/ }