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 listDesignerTask(){ //get list task List 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 entity = new HttpEntity<>(header); RestTemplate downloadTemplate = new RestTemplate(); //send get request to NAS ResponseEntity 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 entity = new HttpEntity<>("{}", header); RestTemplate loginTemplate = new RestTemplate(); ResponseEntity 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 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); } }