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<DjJdgzNetworkLevel3Dao, DjJdgzNetworkLevel3> {
|
@Autowired
|
NetWorkDiagramService netWorkDiagramService;
|
@Autowired
|
DjJdgzNetworkLevel3ListService DjJdgzNetworkLevel3ListService;
|
@Autowired
|
SysTeamGroupClassService sysTeamGroupClassService;
|
@Autowired
|
CabinService cabinService;
|
|
|
@Value("${zt.oss.local-path}")
|
private String path;
|
|
public List<StatistProductDto> getStatist(Long level1Id) {
|
return baseDao.getStatist(level1Id);
|
}
|
|
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<DjJdgzNetworkLevel3> getList(Long shipId, Long deptId, Long teamId, Long cabinId, String type,Integer isealCabin, String name) {
|
List<DjJdgzNetworkLevel3> list = baseDao.getList(shipId, deptId, teamId, cabinId, type,isealCabin, name);
|
return list;
|
}
|
|
/**
|
* 获取节点状态数据
|
*/
|
public List<NetworkNodeStatusDto> getNodeStatusData(Long id) {
|
List<NetworkNodeStatusDto> 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<NetworkNodeStatusDto> 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<DjJdgzNetworkLevel3> getDiagramByNodeId(Long id) {
|
List<DjJdgzNetworkLevel3> 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<String, Object> 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<Integer, String> mapProcessName = new HashMap<>();
|
mapProcessName.put(1, "设备拆卸出舱");
|
mapProcessName.put(2, "设备分交");
|
mapProcessName.put(3, "拆检鉴定");
|
mapProcessName.put(4, "设备返厂");
|
mapProcessName.put(5, "回装");
|
|
Map<String, String> mapTeamGroup = sysTeamGroupClassService.getMapGroup(false, "hld");
|
JComboBoxItem[] cabinList = cabinService.getList();
|
JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
|
JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
|
|
Map<String, Long> cabinMap = new HashMap<>();
|
Map<String, Long> deptMap = new HashMap<>();
|
Map<String, Long> 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 deptStr = ImportUtil.getCellValue(row, 2, pattern);
|
String teamGroupStr = ImportUtil.getCellValue(row, 3, pattern);
|
String cabinStr = ImportUtil.getCellValue(row, 4, pattern);
|
String typeStr = ImportUtil.getCellValue(row, 5, pattern);
|
String time1 = ImportUtil.getCellValue(row, 6, pattern);
|
String time2 = ImportUtil.getCellValue(row, 7, pattern);
|
String time3 = ImportUtil.getCellValue(row, 8, pattern);
|
String time4 = ImportUtil.getCellValue(row, 9, pattern);
|
String time5 = ImportUtil.getCellValue(row, 10, pattern);
|
String repairUnit = ImportUtil.getCellValue(row, 11, pattern);
|
String repairUnitDirector = ImportUtil.getCellValue(row, 12, pattern);
|
String repairUnitContact = ImportUtil.getCellValue(row, 13, pattern);
|
String generalRepairUnit = ImportUtil.getCellValue(row, 14, pattern);
|
String generalRepairUnitDirector = ImportUtil.getCellValue(row, 15, pattern);
|
String generalRepairUnitContact = ImportUtil.getCellValue(row, 16, pattern);
|
|
Integer isealCabin = 0;
|
if (isealCabinStr.equals("是")){
|
isealCabin = 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);
|
}
|
|
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)) {
|
if (time1.matches("[0-9/]+")) {
|
time1 = time1.replace("/", "-");
|
node.setRequiredCompletionTime(time1);
|
node.setProcessName(mapProcessName.get(1));
|
node.setSort(1);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time1.matches("[0-9.]+")) {
|
time1 = time1.replace(".", "-");
|
node.setRequiredCompletionTime(time1);
|
node.setProcessName(mapProcessName.get(1));
|
node.setSort(1);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time1.matches("[0-9-]+")) {
|
node.setRequiredCompletionTime(time1);
|
node.setProcessName(mapProcessName.get(1));
|
node.setSort(1);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else {
|
result = "第" + j + "行" + "第" + 1 + "个" + "节点时间日期格式不规范";
|
isErr = true;
|
}
|
}
|
|
if (StringUtils.isNotBlank(time2)) {
|
if (node.getId() != null) {
|
node.setId(null);
|
}
|
if (time2.matches("[0-9/]+")) {
|
node.setRequiredCompletionTime(time2);
|
node.setProcessName(mapProcessName.get(2));
|
node.setSort(2);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time2.matches("[0-9.]+")) {
|
time2 = time2.replace(".", "-");
|
node.setRequiredCompletionTime(time2);
|
node.setProcessName(mapProcessName.get(2));
|
node.setSort(2);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time2.matches("[0-9-]+")) {
|
node.setRequiredCompletionTime(time2);
|
node.setProcessName(mapProcessName.get(2));
|
node.setSort(2);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else {
|
result = "第" + j + "行" + "第" + 2 + "个" + "节点时间的日期格式不规范";
|
isErr = true;
|
}
|
}
|
|
if (StringUtils.isNotBlank(time3)) {
|
if (node.getId() != null) {
|
node.setId(null);
|
}
|
if (time3.matches("[0-9/]+")) {
|
time3 = time3.replace("/", "-");
|
node.setRequiredCompletionTime(time3);
|
node.setProcessName(mapProcessName.get(3));
|
node.setSort(3);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time3.matches("[0-9.]+")) {
|
time3 = time3.replace(".", "-");
|
node.setRequiredCompletionTime(time3);
|
node.setProcessName(mapProcessName.get(3));
|
node.setSort(3);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time3.matches("[0-9-]+")) {
|
node.setRequiredCompletionTime(time3);
|
node.setProcessName(mapProcessName.get(3));
|
node.setSort(3);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else {
|
result = "第" + j + "行" + "第" + 3 + "个" + "节点时间的日期格式不规范";
|
isErr = true;
|
}
|
}
|
|
if (StringUtils.isNotBlank(time4)) {
|
if (node.getId() != null) {
|
node.setId(null);
|
}
|
if (time4.matches("[0-9/]+")) {
|
time4 = time4.replace("/", "-");
|
node.setRequiredCompletionTime(time4);
|
node.setProcessName(mapProcessName.get(4));
|
node.setSort(4);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time4.matches("[0-9.]+")) {
|
time4 = time4.replace(".", "-");
|
node.setRequiredCompletionTime(time4);
|
node.setProcessName(mapProcessName.get(4));
|
node.setSort(4);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time4.matches("[0-9-]+")) {
|
node.setRequiredCompletionTime(time4);
|
node.setProcessName(mapProcessName.get(4));
|
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(mapProcessName.get(5));
|
node.setSort(5);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time5.matches("[0-9.]+")) {
|
time5 = time5.replace(".", "-");
|
node.setRequiredCompletionTime(time5);
|
node.setProcessName(mapProcessName.get(5));
|
node.setSort(5);
|
DjJdgzNetworkLevel3ListService.insert(node);
|
} else if (time5.matches("[0-9-]+")) {
|
node.setRequiredCompletionTime(time5);
|
node.setProcessName(mapProcessName.get(5));
|
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<TableNodeDto> getNodeList(Long shipId, Long deptId, Long teamId, Long cabinId, String type, String name) {
|
List<TableNodeDto> list = baseDao.getNodeList(shipId, deptId, teamId, cabinId, type, name);
|
|
Map<Long, StatusEnum> 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);
|
} else if ((requiredCompletionDate.getTime() - today.getTime()) / (1000 * 60 * 60 * 24) < 7) {
|
statusMap.put(node.getId(), StatusEnum.lq);
|
} 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);
|
} else {
|
statusMap.put(node.getId(), StatusEnum.zcwc);
|
}
|
}
|
}
|
StatusEnum status = StatusEnum.jxz;
|
List<TableNodeDto> dataList = new ArrayList<>();
|
Long oldId = 0L;
|
TableNodeDto data = null;
|
for (TableNodeDto node : list) {
|
if (oldId.equals(node.getNetworkId())) {
|
|
} else {
|
data = new TableNodeDto();
|
data.setName(node.getName());
|
data.setNetworkId(node.getNetworkId());
|
dataList.add(data);
|
oldId = node.getNetworkId();
|
}
|
|
status = statusMap.get(node.getId());
|
if (node.getProcessName().equals("设备拆卸出舱")) {
|
data.setTime1Color(fillColorArr[status.ordinal()]);
|
} else if (node.getProcessName().equals("设备分交")) {
|
data.setTime2Color(fillColorArr[status.ordinal()]);
|
} else if (node.getProcessName().equals("拆检鉴定")) {
|
data.setTime3Color(fillColorArr[status.ordinal()]);
|
} else if (node.getProcessName().equals("设备返厂")) {
|
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);
|
}*/
|
}
|