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<DjJdgzTrackRecordDao, DjJdgzTrackRecord> {
|
|
@Autowired
|
private DjJdgzNetworkLevel1Service djJdgzNetworkLevel1Service;
|
@Autowired
|
private DjJdgzNetworkLevel3ListService djJdgzNetworkLevel3ListService;
|
@Autowired
|
private UserService sysUserService;
|
@Autowired
|
private SysTeamGroupClassService sysTeamGroupClassService;
|
|
|
public List<DjJdgzTrackRecord> 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<DjJdgzTrackRecord> 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<DjJdgzTrackRecord> getHistory(Long level3NodeId) {
|
List<DjJdgzTrackRecord> 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<StatistReportsDto> getReport(Long level1NetworkId) {
|
return baseDao.getReport(level1NetworkId);
|
}
|
|
public List<DjJdgzTrackRecord> 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<DjJdgzTrackRecord> 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<ExprotExcelDto> dtos = new ArrayList<>();
|
/* Map<String, String> keywordMap = dailyPlanService.getReplacement();
|
String keywordT = keywordMap.get("ting");*/
|
|
Map<Integer, String> trackMethodMap = new HashMap<>();
|
trackMethodMap.put(0, "线下");
|
trackMethodMap.put(1, "电话");
|
|
Map<Integer, String> statusMap = new HashMap<>();
|
statusMap.put(0, "进行中");
|
statusMap.put(1, "已完成");
|
|
Map<Integer, String> hasDelayRiskMap = new HashMap<>();
|
hasDelayRiskMap.put(1, "有");
|
hasDelayRiskMap.put(0, "无");
|
|
|
ExprotExcelDto dto = new ExprotExcelDto();
|
dto.setSheetName("跟踪记录明细");
|
List<ExcelColumnDto> 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<DjJdgzTrackRecord> 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<ExcelColumnDto> columnDto2 = new ArrayList<>();
|
List<DjJdgzTrackRecord> 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<DjJdgzTrackRecord> getListByImport(Long level1Id, Long level2Id, Long level2NodeId, String selectedIds) {
|
return baseDao.getListByImport(level1Id,level2Id,level2NodeId,selectedIds);
|
}
|
}
|