veve-batch-material/src/main/java/com/veve_plus/root/service/TaskService.java
2025-07-21 11:43:14 +07:00

95 lines
3.6 KiB
Java

package com.veve_plus.root.service;
import com.veve_plus.root.dto.task.KstTaskHistoryDto;
import com.veve_plus.root.dto.task.TaskDto;
import com.veve_plus.root.mapper.TaskMapper;
import lombok.RequiredArgsConstructor;
import org.json.JSONObject;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@Service
@RequiredArgsConstructor
public class TaskService {
private final TaskMapper taskMapper;
private final UserService userService;
public List<TaskDto> listDesignerTask(){
//get list task
List<TaskDto> tasks = taskMapper.listDesignerTask(userService.getCurrentAuditor());
//get login token
String token = getSynologyToken();
for(TaskDto dto : tasks){
String folderName = "/RAW/" + dto.getGeId() + "_" + dto.getLanguage() + "/" + dto.getChapter();
String downloadUrl = "https://disk.dnkinno.vn:5001/webapi/entry.cgi?api=SYNO.FileStation.Sharing&method=create&version=3&path=" + folderName + "&sid=" + token;
HttpHeaders header = new HttpHeaders();
//set token to cookie
header.add("Cookie", "id=" + token);
HttpEntity<String> entity = new HttpEntity<>(header);
RestTemplate downloadTemplate = new RestTemplate();
//send get request to NAS
ResponseEntity<String> downloadResponse = downloadTemplate.exchange(downloadUrl, HttpMethod.GET, entity, String.class);
String responseStr = downloadResponse.getBody();
JSONObject dlRes = new JSONObject(responseStr);
if(!dlRes.getBoolean("success")){
dto.setDownloadUrl("There is an error when getting download url");
continue;
}
//extract url from response
dto.setDownloadUrl(new JSONObject(dlRes.getJSONObject("data").getJSONArray("links").get(0).toString()).getString("url"));
}
return tasks;
}
public String getSynologyToken(){
String loginUrl = "https://disk.dnkinno.vn:5001/webapi/entry.cgi?api=SYNO.API.Auth&version=6&method=login&account=DKI-veve&passwd=Dki@2025&session=FileStation&format=cookie";
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>("{}", header);
RestTemplate loginTemplate = new RestTemplate();
ResponseEntity<String> loginResponse = loginTemplate.exchange(loginUrl, HttpMethod.GET, entity, String.class);
String responseStr = loginResponse.getBody();
//extract auth token
JSONObject jsonResponse = new JSONObject(responseStr);
return jsonResponse.getJSONObject("data").getString("sid");
}
@Transactional
public boolean updateEditStatus(TaskDto dto){
return taskMapper.updateEditStatus(dto);
}
@Transactional
public boolean confirmTask(String language){
//get latest version
List<KstTaskHistoryDto> latestTaskHistory = taskMapper.getLatestVersion(language);
//insert content, title, task. Update them if already exist
//old veve use procedure: sp_01_create_content, sp_02_create_content_title, sp_03_create_task
for (KstTaskHistoryDto dto : latestTaskHistory) {
taskMapper.createVeveInfo(dto.getTitle(), language, dto.getChapter(), "", 2);
}
return true;
}
public void autoAssignDesigner(String language){
taskMapper.autoAssignDesigner(language);
}
}