package org.jeecg.modules.demo.copywriting.controller; import cn.hutool.core.date.DateUtil; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.demo.contract.controller.ContractParam; import org.jeecg.modules.demo.contract.entity.SemanticWord; import org.jeecg.modules.demo.copywriting.entity.CopyGenerateTask; import org.jeecg.modules.demo.copywriting.entity.Copywriting; import org.jeecg.modules.demo.copywriting.service.ICopywritingService; import org.jeecg.modules.demo.copywriting.service.impl.CopyGenerateTaskServiceImpl; import org.jeecg.modules.demo.copywritingScheme.entity.CopywritingScheme; import org.jeecg.modules.demo.copywritingScheme.service.ICopywritingSchemeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; @Service public class CopywritingAsyncService { @Autowired private CopyGenerateTaskServiceImpl taskService; // 新增的任务状态服务 // 其他依赖... @Autowired private CopywritingController copywritingController; @Autowired private ICopywritingSchemeService copywritingSchemeService; @Autowired public ICopywritingService copywritingService; @Async("copywritingAsyncExecutor") public void asyncBatchGenerateCopy(List semanticWords, ContractParam cp) { // 1. 生成唯一任务ID,创建待处理任务 String taskId = UUID.randomUUID().toString().replace("-", ""); CopyGenerateTask task = new CopyGenerateTask(); task.setId(taskId); task.setContractId(cp.getContractId()); task.setStatus("PENDING"); taskService.save(task); try { // 2. 更新为处理中 task.setStatus("PROCESSING"); taskService.updateById(task); // 3. 执行实际的文案生成逻辑(你的核心业务) System.out.println("开始处理合同[" + cp.getContractId() + "]的文案生成"); for (SemanticWord semanticWord : semanticWords) { Copywriting copywriting = new Copywriting(); Result title = copywritingController.getResult(semanticWord.getOutWord(), semanticWord.getWord(), DateUtil.format(new Date(), new SimpleDateFormat("yyyy-MM-dd")), DateUtil.format(new Date(), new SimpleDateFormat("yyyy-MM-dd")), "e9ca23d68d884d4ebb19d07889727dae"); if (title.isSuccess()) { copywriting.setTitle(title.getResult().toString()); } copywriting.setStatus("1"); copywriting.setWordId(semanticWord.getId()); CopywritingScheme copywritingScheme = new CopywritingScheme(); copywritingScheme.setId(cp.getCsId()); Result text = copywritingController.getResult( cp.getFileName(), cp.getBenchmarkUrl(), cp.getBenchmarkUrl(), semanticWord.getOutWord(), cp.getYoushang(), semanticWord.getWord(), "e9ca23d68d884d4ebb19d07889727dae",copywritingScheme); if (text.isSuccess()) { copywriting.setText(text.getResult().toString()); } else { throw new IllegalArgumentException("生成失败!"+text.getMessage()); } copywriting.setAuditer(cp.getAuditor()); copywriting.setOutStatus("1"); copywriting.setCreateBy(cp.getAuditorName()); copywriting.setFileName(cp.getFileName()); copywriting.setUrlName(cp.getBenchmarkUrl()); copywriting.setSchemeId(cp.getCsId()); copywritingService.save(copywriting); Thread.sleep(10000); } // 假设生成成功,这里可以记录生成结果 task.setStatus("SUCCESS"); task.setMessage("文案生成完成,共生成" + semanticWords.size() + "条"); task.setFinishTime(new Date()); System.out.println("完成处理合同[" + cp.getContractId() + "]的文案生成"); } catch (Exception e) { // 4. 异常时更新为失败状态,记录原因 task.setStatus("FAIL"); task.setMessage("生成失败:" + e.getMessage()); task.setFinishTime(new Date()); e.printStackTrace(); } finally { // 5. 最终更新任务状态 taskService.updateById(task); } } }