package com.mzl.flower.service.film.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.dto.BatchDTO;
import com.mzl.flower.dto.request.film.AiContentTaskConfigDTO;
import com.mzl.flower.dto.request.film.AiContentTaskConfigQueryDTO;
import com.mzl.flower.dto.response.film.AiContentTaskConfigVO;
import com.mzl.flower.entity.film.AiContentTaskConfig;
import com.mzl.flower.entity.system.Role;
import com.mzl.flower.mapper.customer.CustomerMapper;
import com.mzl.flower.mapper.film.AiContentTaskConfigMapper;
import com.mzl.flower.schedule.DynamicTaskManager;
import com.mzl.flower.service.film.AiContentTaskConfigService;
import com.mzl.flower.service.system.RoleService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import java.util.ArrayList;
import java.util.List;
/**
*
* 影视作品信息表 服务实现类
*
*
* @author generator@Fang
* @since 2025-05-19
*/
@Service
@Transactional
@RequiredArgsConstructor
public class AiContentTaskConfigServiceImpl extends ServiceImpl implements AiContentTaskConfigService {
private final AiContentTaskConfigMapper aiContentTaskConfigMapper;
private final CustomerMapper customerMapper;
private final RoleService roleService;
private final DynamicTaskManager dynamicTaskManager;
@Override
public List getAiContentTaskConfigAll() {
return aiContentTaskConfigMapper.getAiContentTaskConfigAllInfo();
}
@Override
public List getEnabledAiContentTaskConfig() {
return aiContentTaskConfigMapper.getEnabledAiContentTaskConfig();
}
@Override
public Page queryPage(AiContentTaskConfigQueryDTO dto, Page page) {
List list = aiContentTaskConfigMapper.queryPage(dto, page);
// 测试前端展示用代码,部署发布不适用
page.setRecords(list);
return page;
}
@Override
@Transactional
public void deleteAiContentTaskConfig(String id) {
AiContentTaskConfig filmWork = aiContentTaskConfigMapper.selectById(id);
if (filmWork == null) {
throw new ValidationException("找不到id为" + id + "的影视作品");
}
aiContentTaskConfigMapper.deleteById(id);
dynamicTaskManager.refreshTasks(); // 每次删除后刷新定时任务
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
dynamicTaskManager.refreshTasks();
}
});
}
@Override
@Transactional
public void saveAiContentTaskConfig(AiContentTaskConfigDTO aiContentTaskConfigDTO) {
//获取当前人员角色,判断是不是编辑角色
List roleIds = new ArrayList<>();
List roleList = roleService.getUserRoleList(SecurityUtils.getUserId());
for (Role role : roleList) {
roleIds.add(role.getId());
}
// if (!roleIds.contains("8f9ef89f6b2d4d8e9ea1fc8d2f25ce69")) {
// throw new ValidationException("非编辑角色不能新增");
// }
// 转换
AiContentTaskConfig aiContentTaskConfig = new AiContentTaskConfig();
BeanUtils.copyProperties(aiContentTaskConfigDTO, aiContentTaskConfig);
aiContentTaskConfig.create();
aiContentTaskConfigMapper.insert(aiContentTaskConfig);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
dynamicTaskManager.refreshTasks();
}
});
}
@Override
@Transactional
public void updateAiContentTaskConfig(AiContentTaskConfigDTO aiContentTaskConfigDTO) {
AiContentTaskConfig aiContentTaskConfig = new AiContentTaskConfig();
List roleIds = new ArrayList<>();
List roleList = roleService.getUserRoleList(SecurityUtils.getUserId());
for (Role role : roleList) {
roleIds.add(role.getId());
}
// if (!roleIds.contains("8f9ef89f6b2d4d8e9ea1fc8d2f25ce69")) {
// throw new ValidationException("非编辑角色不能修改");
// }
aiContentTaskConfig = aiContentTaskConfigMapper.selectById(aiContentTaskConfigDTO.getId());
BeanUtils.copyProperties(aiContentTaskConfigDTO, aiContentTaskConfig,"type");
aiContentTaskConfig.update(SecurityUtils.getUserId());
aiContentTaskConfigMapper.updateById(aiContentTaskConfig);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
dynamicTaskManager.refreshTasks();
}
});
}
@Override
public AiContentTaskConfigVO detail(Long id) {
// userId 可以是空,因为用户可以登录
String userId = SecurityUtils.getUserId();
AiContentTaskConfigVO aiContentTaskConfigVO = aiContentTaskConfigMapper.selectInfoById(id, userId);
if (aiContentTaskConfigVO == null) {
return null;
}
// CustomerDTO currentCustomer = customerMapper.getCurrentCustomer(aiContentTaskConfigVO.getCreateBy());
// if (!ObjectUtils.isEmpty(currentCustomer)) {
// aiContentTaskConfigVO.setNickname(currentCustomer.getNickName());
// aiContentTaskConfigVO.setAvatar(currentCustomer.getCover());
// }
return aiContentTaskConfigVO;
}
@Override
public List getEnabledConfigs() {
return aiContentTaskConfigMapper.getAiContentTaskConfigAll();
}
@Override
@Transactional
public void batchDelete(BatchDTO dto) {
aiContentTaskConfigMapper.deleteBatchIds(dto.getIds());
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
dynamicTaskManager.refreshTasks();
}
});
}
}