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.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<DjJdgzNetworkLevel2ListDao, DjJdgzNetworkLevel2List> {
|
@Autowired
|
NetWorkDiagramService netWorkDiagramService;
|
@Autowired
|
private DjJdgzNetworkLevel1Service djJdgzNetworkLevel1Service;
|
@Autowired
|
private DjJdgzNetworkLevel1ListService djJdgzNetworkLevel1ListService;
|
@Autowired
|
private DjJdgzNetworkLevel2Service djJdgzNetworkLevel2Service;
|
@Autowired
|
private SysMajorService sysMajorService;
|
|
public List<DjJdgzNetworkLevel2List> getList(Long netWorkId) {
|
return baseDao.getList(netWorkId);
|
}
|
|
/* public List<DjJdgzNetworkLevel2List> status(QueryFilter queryFilter) {
|
return baseDao.getListStatus(queryFilter.getQueryParams());
|
}*/
|
|
/* public List<DjJdgzNetworkLevel2List> getDataList(Integer type, Long networkId) {
|
List<DjJdgzNetworkLevel2List> 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 save(Long networkId, JPanel jPanel, mxGraph graph) {
|
DjJdgzNetworkLevel2 level2 = djJdgzNetworkLevel2Service.get(networkId);
|
DjJdgzNetworkLevel1 level1 = djJdgzNetworkLevel1Service.get(level2.getLevel1NetworkId());
|
|
List<DiagramMajorDto> majorList = baseDao.getMajorList(networkId);
|
List<DiagramNode2Dto> node2List = baseDao.getNodeList(networkId);
|
String simpleDiagram = netWorkDiagramService.createDiagram(majorList,node2List,level1.getStartDate(),5000,10);
|
|
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<String, Object> 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;
|
|
Map<String, Long> mapMajors = new HashMap<>();
|
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);
|
Map<String, String> mapMajor = sysMajorService.getMapMajor(false, String.valueOf(20000), null, "");
|
|
|
String majorName = ImportUtil.getCellValue(row, 0, pattern); //工程专业
|
String processName = ImportUtil.getCellValue(row, 1, pattern); // 过程名称
|
String requiredCompletionTime = ImportUtil.getCellValue(row, 2, pattern); // 要求完成时间
|
|
|
if (StringUtils.isEmpty(majorName)) {
|
isErr = true;
|
result = "第"+j+"行"+"专业不能为空";
|
} else {
|
String majorIdStr = mapMajor.get(majorName);
|
if (majorIdStr == null) {
|
isErr = true;
|
result = "第"+j+"行"+"专业不存在";
|
} else {
|
data.setMajorId(Convert.toLong(majorIdStr));
|
}
|
|
}
|
data.setMajorName(majorName);
|
|
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<DjJdgzNetworkLevel2List> getByLevel1Node(Long level1NodeId) {
|
return baseDao.getByLevel1Node(level1NodeId);
|
}
|
|
public JComboBoxItem[] getNode(Long networkId) {
|
return baseDao.getNode(networkId);
|
}
|
|
/* public String getDiagram(Long networkId, Date startDate, Integer diagramWidth, Integer lineNodeNum) {
|
List<DiagramMajorDto> majorList = baseDao.getMajorList(networkId);
|
List<DiagramNode2Dto> 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<DjJdgzNetworkLevel2List> 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());
|
}*/
|
|
}
|