From 46715d892da947c31f07796fdc79dbbef06677b3 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期一, 14 七月 2025 09:53:19 +0800 Subject: [PATCH] add:定时任务配置,热门城市 --- src/main/java/com/mzl/flower/web/film/FilmContentTaskConfigController.java | 91 ++++ src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java | 12 src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java | 7 src/main/java/com/mzl/flower/config/RestTemplateConfig.java | 21 + src/main/java/com/mzl/flower/entity/film/FilmHotCity.java | 24 + src/main/java/com/mzl/flower/service/film/impl/AiContentTaskConfigServiceImpl.java | 175 +++++++++ src/main/java/com/mzl/flower/constant/Constants.java | 15 src/main/java/com/mzl/flower/service/film/FilmHotCityService.java | 33 + src/main/java/com/mzl/flower/schedule/TaskExecutor.java | 33 + src/main/java/com/mzl/flower/web/film/FilmLocationController.java | 7 src/main/java/com/mzl/flower/service/film/AiContentTaskConfigService.java | 39 ++ src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java | 3 src/main/java/com/mzl/flower/dto/request/film/AiContentTaskConfigQueryDTO.java | 30 + src/main/java/com/mzl/flower/web/film/AiContentTaskConfigController.java | 81 ++++ src/main/java/com/mzl/flower/entity/film/AiContentTaskConfig.java | 33 + src/main/resources/mapper/film/FilmHotCityMapper.xml | 27 + src/main/java/com/mzl/flower/service/system/WeChatService.java | 33 + src/main/java/com/mzl/flower/web/film/FilmHotCityController.java | 87 ++++ src/main/java/com/mzl/flower/dto/request/film/FilmHotCityDTO.java | 21 + src/main/resources/application-test.yml | 1 src/main/resources/mapper/film/AiContentTaskConfigMapper.xml | 20 + src/main/java/com/mzl/flower/config/ResourceServerConfig.java | 2 src/main/java/com/mzl/flower/dto/response/film/AiContentTaskConfigVO.java | 43 ++ src/main/java/com/mzl/flower/mapper/film/FilmHotCityMapper.java | 29 + src/main/java/com/mzl/flower/schedule/DynamicTaskManager.java | 8 src/main/java/com/mzl/flower/dto/response/film/FilmHotCityVO.java | 33 + src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java | 4 src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java | 3 src/main/java/com/mzl/flower/dto/request/film/FilmHotCityQueryDTO.java | 20 + src/main/java/com/mzl/flower/service/film/impl/FilmHotCityServiceImpl.java | 132 ++++++ src/main/java/com/mzl/flower/dto/request/film/AiContentTaskConfigDTO.java | 24 + src/main/java/com/mzl/flower/service/film/FilmLocationService.java | 2 32 files changed, 1,072 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/mzl/flower/config/ResourceServerConfig.java b/src/main/java/com/mzl/flower/config/ResourceServerConfig.java index 19fb3bf..d3d2bb3 100644 --- a/src/main/java/com/mzl/flower/config/ResourceServerConfig.java +++ b/src/main/java/com/mzl/flower/config/ResourceServerConfig.java @@ -58,6 +58,8 @@ .antMatchers("/api/filmWorks/**").permitAll() .antMatchers("/api/film/category/**").permitAll() .antMatchers("/api/filmLocation/**").permitAll() + .antMatchers("/api/aiTaskConfig/**").permitAll() + .antMatchers("/api/home/homeConfig/**").permitAll() .antMatchers("api/pub/customer/home/**").permitAll() .antMatchers("/api/customer/point/goods/**").permitAll() .antMatchers("/api/upload/oss/file").permitAll() diff --git a/src/main/java/com/mzl/flower/config/RestTemplateConfig.java b/src/main/java/com/mzl/flower/config/RestTemplateConfig.java new file mode 100644 index 0000000..fcb6bb8 --- /dev/null +++ b/src/main/java/com/mzl/flower/config/RestTemplateConfig.java @@ -0,0 +1,21 @@ +package com.mzl.flower.config; + + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + + @Bean + public RestTemplate restTemplate() { + RestTemplate restTemplate = new RestTemplate(); + + // 可选:添加自定义配置 + // restTemplate.setErrorHandler(new CustomErrorHandler()); + // restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8)); + + return restTemplate; + } +} diff --git a/src/main/java/com/mzl/flower/constant/Constants.java b/src/main/java/com/mzl/flower/constant/Constants.java index ffd4f47..f700953 100644 --- a/src/main/java/com/mzl/flower/constant/Constants.java +++ b/src/main/java/com/mzl/flower/constant/Constants.java @@ -795,6 +795,21 @@ } } + public enum GENERATOR_CONTENT { + film_name("影视作品"), film_content("影视内容"); + + GENERATOR_CONTENT(String desc) { + this.desc = desc; + } + + private String desc; + + public String getDesc() { + return desc; + } + } + + diff --git a/src/main/java/com/mzl/flower/dto/request/film/AiContentTaskConfigDTO.java b/src/main/java/com/mzl/flower/dto/request/film/AiContentTaskConfigDTO.java new file mode 100644 index 0000000..1881b42 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/film/AiContentTaskConfigDTO.java @@ -0,0 +1,24 @@ +package com.mzl.flower.dto.request.film; + +import lombok.Data; + +import java.util.Date; + +@Data +public class AiContentTaskConfigDTO { + + private Long id; + private String taskName; + private String aiParams; + private String cron; + private Boolean isEnabled; + private Date lastRunTime; + + + private String type; + private String promptArticle; + private String promptRoute; + private String promptTravel; + private String promptLocaltion; + +} diff --git a/src/main/java/com/mzl/flower/dto/request/film/AiContentTaskConfigQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/film/AiContentTaskConfigQueryDTO.java new file mode 100644 index 0000000..f0f819a --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/film/AiContentTaskConfigQueryDTO.java @@ -0,0 +1,30 @@ +package com.mzl.flower.dto.request.film; + +import lombok.Data; + +import java.util.Date; + +@Data +public class AiContentTaskConfigQueryDTO { + + + private Integer id; + private String taskName; + private String aiParams; + private String cron; + /** + * 状态(0禁用,1启用) + */ + private Boolean isEnabled; + private Date lastRunTime; + + + private String type; + + private String promptArticle; + private String promptRoute; + private String promptTravel; + private String promptLocaltion; + + +} diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmHotCityDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmHotCityDTO.java new file mode 100644 index 0000000..cc784e4 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/film/FilmHotCityDTO.java @@ -0,0 +1,21 @@ +package com.mzl.flower.dto.request.film; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +public class FilmHotCityDTO { + + private Long id; + private String name; + private String cityUrl; + private String country; + private String continent; + private Boolean isEnabled; + private String createBy; + private String updateBy; + private Integer cityWeight; + +} diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmHotCityQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmHotCityQueryDTO.java new file mode 100644 index 0000000..fdf2bf9 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/request/film/FilmHotCityQueryDTO.java @@ -0,0 +1,20 @@ +package com.mzl.flower.dto.request.film; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class FilmHotCityQueryDTO { + + @ApiModelProperty(value = "城市名称") + private String name; + + @ApiModelProperty(value = "所在国家") + private String country; + + @ApiModelProperty(value = "所在洲") + private String continent; + + @ApiModelProperty("启用/禁用(USER_ENABLED_OR_DISABLED)") + private Integer isEnabled; +} diff --git a/src/main/java/com/mzl/flower/dto/response/film/AiContentTaskConfigVO.java b/src/main/java/com/mzl/flower/dto/response/film/AiContentTaskConfigVO.java new file mode 100644 index 0000000..e848a96 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/response/film/AiContentTaskConfigVO.java @@ -0,0 +1,43 @@ +package com.mzl.flower.dto.response.film; + +import com.mzl.flower.base.AbstractTransDTO; +import com.mzl.flower.base.annotation.DictTrans; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Date; + + +@Data +public class AiContentTaskConfigVO extends AbstractTransDTO { + private Long id; + + private String taskName; + private String aiParams; + private String cron; + /** + * 状态(0禁用,1启用) + */ + private Boolean isEnabled; + private Date lastRunTime; + + /** + * 创建者ID + */ + private String createBy; + + /** + * 最后修改者ID + */ + private String updateBy; + + + private String type; + + private String promptArticle; + private String promptRoute; + private String promptTravel; + private String promptLocaltion; + + +} diff --git a/src/main/java/com/mzl/flower/dto/response/film/FilmHotCityVO.java b/src/main/java/com/mzl/flower/dto/response/film/FilmHotCityVO.java new file mode 100644 index 0000000..009a8e8 --- /dev/null +++ b/src/main/java/com/mzl/flower/dto/response/film/FilmHotCityVO.java @@ -0,0 +1,33 @@ +package com.mzl.flower.dto.response.film; + +import com.mzl.flower.base.AbstractTransDTO; +import com.mzl.flower.base.annotation.DictTrans; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +public class FilmHotCityVO extends AbstractTransDTO { + + private Long id; + + @ApiModelProperty("城市名称") + private String name; + + @ApiModelProperty("城市URL") + private String cityUrl; + + @ApiModelProperty("国家") + private String country; + + @ApiModelProperty("洲") + private String continent; + + @ApiModelProperty("是否锁定") + private Boolean isEnabled; + + @ApiModelProperty("热度") + private Integer cityWeight; +} diff --git a/src/main/java/com/mzl/flower/entity/film/AiContentTaskConfig.java b/src/main/java/com/mzl/flower/entity/film/AiContentTaskConfig.java new file mode 100644 index 0000000..e39a0b8 --- /dev/null +++ b/src/main/java/com/mzl/flower/entity/film/AiContentTaskConfig.java @@ -0,0 +1,33 @@ +package com.mzl.flower.entity.film; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.mzl.flower.base.BaseAutoEntity; +import lombok.Data; + +import java.util.Date; + +/** + * 模型任务配置表 + * + * @author generator@Fang + * @since 2025-07-01 + */ +@Data +@TableName("ai_content_task_config") +public class AiContentTaskConfig extends BaseAutoEntity { + private String taskName; + private String aiParams; + private String cron; + /** + * 状态(0禁用,1启用) + */ + private Boolean isEnabled; + private Date lastRunTime; + private String type; + + private String promptArticle; + private String promptRoute; + private String promptTravel; + private String promptLocaltion; + +} diff --git a/src/main/java/com/mzl/flower/entity/film/FilmHotCity.java b/src/main/java/com/mzl/flower/entity/film/FilmHotCity.java new file mode 100644 index 0000000..ee28d54 --- /dev/null +++ b/src/main/java/com/mzl/flower/entity/film/FilmHotCity.java @@ -0,0 +1,24 @@ +package com.mzl.flower.entity.film; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.mzl.flower.base.BaseAutoEntity; +import lombok.Data; + +import java.util.Date; + +/** + * FilmHotCity热门城市表 + * + * @author generator@Fang + * @since 2025-07-01 + */ +@Data +@TableName("film_hot_city") +public class FilmHotCity extends BaseAutoEntity { + private String name; + private String cityUrl; + private String country; + private String continent; + private Boolean isEnabled; + private Integer cityWeight; +} diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmHotCityMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmHotCityMapper.java new file mode 100644 index 0000000..3116bd7 --- /dev/null +++ b/src/main/java/com/mzl/flower/mapper/film/FilmHotCityMapper.java @@ -0,0 +1,29 @@ +package com.mzl.flower.mapper.film; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.mzl.flower.dto.request.film.FilmHotCityQueryDTO; +import com.mzl.flower.dto.response.film.FilmHotCityVO; +import com.mzl.flower.entity.film.FilmHotCity; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * <p> + * FilmHotCity热门城市 Mapper 接口 + * </p> + * + * @author generator@Fang + */ +public interface FilmHotCityMapper extends BaseMapper<FilmHotCity> { + + List<FilmHotCityVO> queryPage(@Param("dto") FilmHotCityQueryDTO dto, Page page); + + @Select("select * from film_hot_city where name = #{name} and deleted = '0' limit 1 ") + FilmHotCity selectByName(@Param("name") String name); + + @Select("select * from film_hot_city where id = #{id} ") + FilmHotCityVO selectByIdInfo(Long id); +} diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java index 85c6cc1..1aa3157 100644 --- a/src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java +++ b/src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java @@ -42,4 +42,8 @@ "</script>") @MapKey("id") Map<Long, FilmLocationNameDTO> getLocationNamesByIds(@Param("list") List<Long> ids); + + + @Select("select * from film_location where is_enabled = '1' and deleted = '0' order by location_weight desc limit 3") + List<FilmLocationVO> getFilmLocationListTop3(); } diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java index 6ca94f4..8607791 100644 --- a/src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java +++ b/src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java @@ -1,6 +1,7 @@ package com.mzl.flower.mapper.film; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mzl.flower.dto.response.film.FilmLocationVO; import com.mzl.flower.entity.film.FilmLocationWork; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -35,4 +36,6 @@ "</foreach>" + "</script>") Set<Long> findFilmIdsWithWorks(@Param("list") List<Long> locationIds); + + } diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java index 89f70b4..3aeff4b 100644 --- a/src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java +++ b/src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java @@ -47,4 +47,7 @@ "</script>") @MapKey("id") List<FilmWorksVO> getFilmWorksByIds(@Param("list") List<Long> ids); + + @Select("select * from film_works where deleted = '0' and name_cn = #{nameCn} and type = #{type} and release_year = #{releaseYear} limit 1") + FilmWorks getFilmWorksByName(@Param("nameCn") String nameCn, @Param("type")String type, @Param("releaseYear") String releaseYear); } diff --git a/src/main/java/com/mzl/flower/schedule/DynamicTaskManager.java b/src/main/java/com/mzl/flower/schedule/DynamicTaskManager.java index 3db0e8a..1195cf6 100644 --- a/src/main/java/com/mzl/flower/schedule/DynamicTaskManager.java +++ b/src/main/java/com/mzl/flower/schedule/DynamicTaskManager.java @@ -1,6 +1,7 @@ package com.mzl.flower.schedule; import com.mzl.flower.entity.film.AiContentTaskConfig; +import com.mzl.flower.mapper.film.AiContentTaskConfigMapper; import com.mzl.flower.service.film.AiContentTaskConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @@ -8,6 +9,7 @@ import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import javax.annotation.Resource; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; @@ -19,8 +21,8 @@ @Autowired private ThreadPoolTaskScheduler taskScheduler; - @Autowired - private AiContentTaskConfigService configService; + @Resource + private AiContentTaskConfigMapper aiContentTaskConfigMapper; @Autowired private TaskExecutor taskExecutor; @@ -30,7 +32,7 @@ } public synchronized void refreshTasks() { - List<AiContentTaskConfig> latestConfigs = configService.getEnabledConfigs(); + List<AiContentTaskConfig> latestConfigs = aiContentTaskConfigMapper.getAiContentTaskConfigAll(); Set<Long> latestIds = latestConfigs.stream() .map(AiContentTaskConfig::getId) .collect(Collectors.toSet()); diff --git a/src/main/java/com/mzl/flower/schedule/TaskExecutor.java b/src/main/java/com/mzl/flower/schedule/TaskExecutor.java index 04e82d6..e16fbda 100644 --- a/src/main/java/com/mzl/flower/schedule/TaskExecutor.java +++ b/src/main/java/com/mzl/flower/schedule/TaskExecutor.java @@ -1,11 +1,13 @@ package com.mzl.flower.schedule; +import com.mzl.flower.constant.Constants; import com.mzl.flower.entity.film.AiContentTaskConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; import java.util.Date; @@ -28,9 +30,16 @@ System.out.println("定时任务执行 - 时间: " + new Date()); try { -// String aiResult = callPythonAiService(paramsJson); -// System.out.println("AI 服务返回结果: " + aiResult); System.out.println("开始执行调用AI服务: "); + if(Constants.GENERATOR_CONTENT.film_content.name().equals(config.getType())){ + System.out.println("开始执行调用内容生成服务: "); + String aiResult = callPythonContentService(paramsJson); + System.out.println("AI 服务返回结果: " + aiResult); + }else{ + System.out.println("开始执行调用作品名称生成服务: "); + String aiResult = callPythonFilmNameService(paramsJson); + System.out.println("AI 服务返回结果: " + aiResult); + } // 这里处理结果入库逻辑... } catch (Exception e) { System.err.println("调用 AI 服务失败: " + e.getMessage()); @@ -38,8 +47,24 @@ } } - public String callPythonAiService(String paramsJson) { - String url = "http://127.0.0.1:5000/crawl-douban"; + public String callPythonFilmNameService(String paramsJson) { + System.out.println("开始执行调用python crawl: "); + String url = "http://14.103.144.28:5000/crawl-douban"; + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity<String> request = new HttpEntity<>(paramsJson, headers); + + ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class); + + return response.getBody(); + } + + public String callPythonContentService(String paramsJson) { + System.out.println("开始执行调用python generate: "); +// String url = "http://192.168.1.213:5000/generate-film-content"; + String url = "http://14.103.144.28:5000/generate-film-content"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); diff --git a/src/main/java/com/mzl/flower/service/film/AiContentTaskConfigService.java b/src/main/java/com/mzl/flower/service/film/AiContentTaskConfigService.java new file mode 100644 index 0000000..fa392bf --- /dev/null +++ b/src/main/java/com/mzl/flower/service/film/AiContentTaskConfigService.java @@ -0,0 +1,39 @@ +package com.mzl.flower.service.film; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +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 java.util.List; + +/** + * <p> + * 模型任务配置表 服务类 + * </p> + * + * @author generator@Fang + * @since 2025-05-19 + */ +public interface AiContentTaskConfigService extends IService<AiContentTaskConfig> { + List<AiContentTaskConfigVO> getAiContentTaskConfigAll(); + List<AiContentTaskConfigVO> getEnabledAiContentTaskConfig(); + + Page<AiContentTaskConfigVO> queryPage(AiContentTaskConfigQueryDTO aiContentTaskConfigQueryDTO, Page page); + + void deleteAiContentTaskConfig(String id); + + void saveAiContentTaskConfig(AiContentTaskConfigDTO aiContentTaskConfigDTO); + + void updateAiContentTaskConfig(AiContentTaskConfigDTO aiContentTaskConfigDTO); + + AiContentTaskConfigVO detail(Long id); + + //获取配置信息 + List<AiContentTaskConfig> getEnabledConfigs(); + + void batchDelete(BatchDTO dto); +} diff --git a/src/main/java/com/mzl/flower/service/film/FilmHotCityService.java b/src/main/java/com/mzl/flower/service/film/FilmHotCityService.java new file mode 100644 index 0000000..114fc29 --- /dev/null +++ b/src/main/java/com/mzl/flower/service/film/FilmHotCityService.java @@ -0,0 +1,33 @@ +package com.mzl.flower.service.film; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.mzl.flower.dto.BatchDTO; +import com.mzl.flower.dto.request.film.FilmHotCityDTO; +import com.mzl.flower.dto.request.film.FilmHotCityQueryDTO; +import com.mzl.flower.dto.response.film.FilmHotCityVO; +import com.mzl.flower.dto.response.film.FilmWorksVO; +import com.mzl.flower.entity.film.FilmHotCity; + +import java.util.List; + +/** + * <p> + * FilmHotCity热门城市表 服务类 + * </p> + * + * @author generator@Fang + */ +public interface FilmHotCityService extends IService<FilmHotCity> { + + + void saveFilmHotCity(FilmHotCityDTO filmHotCityDTO); + + void updateFilmHotCity(FilmHotCityDTO filmHotCityDTO); + void deleteFilmHotCity(String id); + Page<FilmHotCityVO> queryPage(FilmHotCityQueryDTO filmHotCityQueryDTO, Page page); + FilmHotCityVO detail(Long id); + void isEnable(Long id); + void batchDelete(BatchDTO dto); + +} diff --git a/src/main/java/com/mzl/flower/service/film/FilmLocationService.java b/src/main/java/com/mzl/flower/service/film/FilmLocationService.java index 0f6f95c..5fdab4d 100644 --- a/src/main/java/com/mzl/flower/service/film/FilmLocationService.java +++ b/src/main/java/com/mzl/flower/service/film/FilmLocationService.java @@ -40,4 +40,6 @@ void batchDelete(BatchDTO dto); List<FilmWorksVO> related(Long locationId); + + List<FilmLocationVO> getFilmLocationListTop3(); } diff --git a/src/main/java/com/mzl/flower/service/film/impl/AiContentTaskConfigServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/AiContentTaskConfigServiceImpl.java new file mode 100644 index 0000000..7deda13 --- /dev/null +++ b/src/main/java/com/mzl/flower/service/film/impl/AiContentTaskConfigServiceImpl.java @@ -0,0 +1,175 @@ +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; + +/** + * <p> + * 影视作品信息表 服务实现类 + * </p> + * + * @author generator@Fang + * @since 2025-05-19 + */ +@Service +@Transactional +@RequiredArgsConstructor +public class AiContentTaskConfigServiceImpl extends ServiceImpl<AiContentTaskConfigMapper, AiContentTaskConfig> implements AiContentTaskConfigService { + + private final AiContentTaskConfigMapper aiContentTaskConfigMapper; + private final CustomerMapper customerMapper; + private final RoleService roleService; + + private final DynamicTaskManager dynamicTaskManager; + + @Override + public List<AiContentTaskConfigVO> getAiContentTaskConfigAll() { + return aiContentTaskConfigMapper.getAiContentTaskConfigAllInfo(); + } + + @Override + public List<AiContentTaskConfigVO> getEnabledAiContentTaskConfig() { + return aiContentTaskConfigMapper.getEnabledAiContentTaskConfig(); + } + + @Override + public Page<AiContentTaskConfigVO> queryPage(AiContentTaskConfigQueryDTO dto, Page page) { + List<AiContentTaskConfigVO> 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<String> roleIds = new ArrayList<>(); + List<Role> 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<String> roleIds = new ArrayList<>(); + List<Role> 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<AiContentTaskConfig> 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(); + } + }); + } + + +} diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmHotCityServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmHotCityServiceImpl.java new file mode 100644 index 0000000..da0f4ec --- /dev/null +++ b/src/main/java/com/mzl/flower/service/film/impl/FilmHotCityServiceImpl.java @@ -0,0 +1,132 @@ +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.FilmHotCityDTO; +import com.mzl.flower.dto.request.film.FilmHotCityQueryDTO; +import com.mzl.flower.dto.response.film.FilmHotCityVO; +import com.mzl.flower.entity.film.FilmHotCity; +import com.mzl.flower.mapper.film.FilmHotCityMapper; +import com.mzl.flower.mapper.film.FilmWorksMapper; +import com.mzl.flower.service.film.FilmHotCityService; +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.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.util.*; + +/** + * <p> + * FilmHotCity热门城市表 服务实现类 + * </p> + * + * @author generator@Fang + * @since 2025-05-20 + */ +@Service +@Transactional +@RequiredArgsConstructor +public class FilmHotCityServiceImpl extends ServiceImpl<FilmHotCityMapper, FilmHotCity> implements FilmHotCityService { + + private final FilmHotCityMapper filmHotCityMapper; + private final RoleService roleService; + private final FilmWorksMapper filmWorksMapper; + + @Override + public void saveFilmHotCity(FilmHotCityDTO filmHotCityDTO) { + // 转换 + //增加保存时判断是否有城市名称 + if (StringUtils.isEmpty(filmHotCityDTO.getName())) { + throw new ValidationException("城市名称不能为空"); + } + FilmHotCity filmHotCity1 = filmHotCityMapper.selectByName(filmHotCityDTO.getName()); + if (!ObjectUtils.isEmpty(filmHotCity1)) { + throw new ValidationException("城市名称重复"); + } + FilmHotCity filmHotCity = new FilmHotCity(); + BeanUtils.copyProperties(filmHotCityDTO, filmHotCity); + filmHotCity.setIsEnabled(false); + filmHotCity.create(); + filmHotCityMapper.insert(filmHotCity); + } + + @Override + public void updateFilmHotCity(FilmHotCityDTO filmHotCityDTO) { + if (StringUtils.isEmpty(filmHotCityDTO.getName())) { + throw new ValidationException("城市名称不能为空"); + } + + //增加修改时保存得城市名称是否有重复,排除当前这条 + FilmHotCity filmHotCity1 = filmHotCityMapper.selectByName(filmHotCityDTO.getName()); + + FilmHotCity filmHotCity = filmHotCityMapper.selectById(filmHotCityDTO.getId()); + if (!filmHotCity1.getId().equals(filmHotCity.getId())) { + throw new ValidationException("城市名称重复"); + } + BeanUtils.copyProperties(filmHotCityDTO, filmHotCity, "isEnabled"); + filmHotCity.update(SecurityUtils.getUserId()); + filmHotCityMapper.updateById(filmHotCity); + } + + @Override + public void deleteFilmHotCity(String id) { + FilmHotCity filmHotCity = filmHotCityMapper.selectById(id); + if (filmHotCity == null) { + throw new ValidationException("找不到id为" + id + "的城市"); + } + filmHotCityMapper.deleteById(id); + } + + @Override + public Page<FilmHotCityVO> queryPage(FilmHotCityQueryDTO dto, Page page) { + + List<FilmHotCityVO> list = filmHotCityMapper.queryPage(dto, page); + page.setRecords(list); + return page; + } + + @Override + public FilmHotCityVO detail(Long id) { + FilmHotCityVO filmHotCityVO = filmHotCityMapper.selectByIdInfo(id); + if (filmHotCityVO == null) { + return null; + } + return filmHotCityVO; + } + + + @Override + public void isEnable(Long id) { + FilmHotCity filmHotCity = filmHotCityMapper.selectById(id); + if (filmHotCity == null) { + throw new ValidationException("找不到id为" + id + "的城市"); + } + if (filmHotCity.getIsEnabled()) { + filmHotCity.setIsEnabled(false); + } else { + filmHotCity.setIsEnabled(true); + } + filmHotCity.update(SecurityUtils.getUserId()); + filmHotCityMapper.updateById(filmHotCity); + } + + + @Override + @Transactional + public void batchDelete(BatchDTO dto) { + if (CollectionUtils.isEmpty(dto.getIds())) { + throw new ValidationException("删除ID列表不能为空"); + } + filmHotCityMapper.deleteBatchIds(dto.getIds()); + } + + +} diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java index 4528c16..507a3d3 100644 --- a/src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java +++ b/src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java @@ -66,6 +66,13 @@ BeanUtils.copyProperties(filmLocationDTO, filmLocation); filmLocation.create(); filmLocationMapper.insert(filmLocation); + //此处传入参数是否有影视作品ID,如果不等于空,则需要保存关联关系 + if (!StringUtils.isEmpty(filmLocationDTO.getFilmId())) { + FilmLocationWork filmLocationWork = new FilmLocationWork(); + filmLocationWork.setFilmId(filmLocationDTO.getFilmId()); + filmLocationWork.setLocationId(filmLocation.getId()); + filmLocationWorkMapper.insert(filmLocationWork); + } } @Override @@ -238,6 +245,11 @@ } } + @Override + public List<FilmLocationVO> getFilmLocationListTop3() { + return filmLocationMapper.getFilmLocationListTop3(); + } + private void updateLocationRelations(Long targetId, List<Long> mergeIds) { // 查询所有待更新的工作记录 LambdaQueryWrapper<FilmLocationWork> query = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java index e6e0575..f777319 100644 --- a/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java +++ b/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java @@ -62,11 +62,16 @@ if (!roleIds.contains("8f9ef89f6b2d4d8e9ea1fc8d2f25ce69")) { throw new ValidationException("非编辑角色不能新增"); } + // 判断系统是否存在重复的名称+类型+年份,如果有就不保存 + FilmWorks filmWorksByName = filmWorksMapper.getFilmWorksByName(filmWorksDTO.getNameCn(), filmWorksDTO.getType(), filmWorksDTO.getReleaseYear()); + if (!ObjectUtils.isEmpty(filmWorksByName)) { + throw new ValidationException("系统已存在名称为【" + filmWorksDTO.getNameCn() + "】,类型为【" + filmWorksDTO.getType() + "】,年份为【" + filmWorksDTO.getReleaseYear() + "】的影视作品"); + } // 转换 FilmWorks filmWorks = new FilmWorks(); BeanUtils.copyProperties(filmWorksDTO, filmWorks); filmWorks.create(); - filmWorks.setStatus(Constants.COMMON_PUBLISH_STATUS.pending_review.name()); + filmWorks.setStatus(Constants.COMMON_PUBLISH_STATUS.pending_create.name()); filmWorksMapper.insert(filmWorks); } diff --git a/src/main/java/com/mzl/flower/service/system/WeChatService.java b/src/main/java/com/mzl/flower/service/system/WeChatService.java index 51c39d0..ee2fa99 100644 --- a/src/main/java/com/mzl/flower/service/system/WeChatService.java +++ b/src/main/java/com/mzl/flower/service/system/WeChatService.java @@ -166,22 +166,29 @@ throw new ValidationException("微信code为空"); } - String accessToken=""; - try { - accessToken=maService.getAccessToken(); - } catch (WxErrorException e) { - throw new RuntimeException(e); - } +// String accessToken=""; +// try { +// accessToken=maService.getAccessToken(); +// } catch (WxErrorException e) { +// throw new RuntimeException(e); +// } +// +// if(StringUtils.isEmpty(accessToken)){ +// accessToken=getAccessToken( +// wxMiniappProperties.getCustomer().getAppid(), +// wxMiniappProperties.getCustomer().getSecret()); +// if(StringUtils.isEmpty(accessToken)){ +// throw new ValidationException("获取微信AccessToken失败"); +// } +// } + // 直接使用手动获取token的方式(跳过WxMaService的token) + String accessToken = getAccessToken( + wxMiniappProperties.getCustomer().getAppid(), + wxMiniappProperties.getCustomer().getSecret()); if(StringUtils.isEmpty(accessToken)){ - accessToken=getAccessToken( - wxMiniappProperties.getCustomer().getAppid(), - wxMiniappProperties.getCustomer().getSecret()); - if(StringUtils.isEmpty(accessToken)){ - throw new ValidationException("获取微信AccessToken失败"); - } + throw new ValidationException("获取微信AccessToken失败"); } - String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="+ accessToken; try{ diff --git a/src/main/java/com/mzl/flower/web/film/AiContentTaskConfigController.java b/src/main/java/com/mzl/flower/web/film/AiContentTaskConfigController.java new file mode 100644 index 0000000..8158160 --- /dev/null +++ b/src/main/java/com/mzl/flower/web/film/AiContentTaskConfigController.java @@ -0,0 +1,81 @@ +package com.mzl.flower.web.film; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.mzl.flower.base.BaseController; +import com.mzl.flower.base.R; +import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.constant.Constants; +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.schedule.TaskExecutor; +import com.mzl.flower.service.film.AiContentTaskConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author fanghaowei + * @version version2.0 + * @className FilmWorksController + * @date 2024/8/26 + * @description 模型任务配置 + */ +@Api(value = "模型任务配置", tags = "模型任务配置") +@RestController +@RequestMapping("/api") +@RequiredArgsConstructor +public class AiContentTaskConfigController extends BaseController { + + private final AiContentTaskConfigService aiContentTaskConfigService; + private final TaskExecutor taskExecutor; + + @GetMapping("/aiTaskConfig/all") + @ApiOperation(value = "模型任务配置列表", httpMethod = "GET") + public ResponseEntity<ReturnDataDTO<List<AiContentTaskConfigVO>>> getFilmWorksAll() { + return returnData(R.SUCCESS.getCode(), aiContentTaskConfigService.getEnabledAiContentTaskConfig()); + } + + @GetMapping("/aiTaskConfig/list") + @ApiOperation(value = "模型任务配置列表", httpMethod = "GET") + public ResponseEntity<ReturnDataDTO<Page<AiContentTaskConfigVO>>> getFilmWorksList(Page page, AiContentTaskConfigQueryDTO dto) { + dto.setType(Constants.GENERATOR_CONTENT.film_content.name()); + return returnData(R.SUCCESS.getCode(), aiContentTaskConfigService.queryPage(dto, page)); + } + + + @GetMapping(value = "/aiTaskConfig/delete") + @ApiOperation(value = "删除模型任务配置 ", httpMethod = "GET", notes = "ID") + public ResponseEntity delete(@NotNull(message = "id不能为空") Long id) { + aiContentTaskConfigService.deleteAiContentTaskConfig(String.valueOf(id)); + return returnData(R.SUCCESS.getCode(), null); + } + + @PostMapping(value = "/aiTaskConfig/new") + @ApiOperation(value = "保存模型任务配置", httpMethod = "POST") + public ResponseEntity insert(@RequestBody AiContentTaskConfigDTO aiContentTaskConfigDTO) { + aiContentTaskConfigDTO.setType(Constants.GENERATOR_CONTENT.film_content.name()); + aiContentTaskConfigService.saveAiContentTaskConfig(aiContentTaskConfigDTO); + return returnData(R.SUCCESS.getCode(), null); + } + + @PostMapping(value = "/aiTaskConfig/edit") + @ApiOperation(value = "更新模型任务配置", httpMethod = "POST") + public ResponseEntity update(@RequestBody AiContentTaskConfigDTO aiContentTaskConfigDTO) { + aiContentTaskConfigService.updateAiContentTaskConfig(aiContentTaskConfigDTO); + return returnData(R.SUCCESS.getCode(), null); + } + + @GetMapping("/aiTaskConfig/list/view") + @ApiOperation(value = "详情", notes = "详情") + public ResponseEntity<ReturnDataDTO<AiContentTaskConfigVO>> detail(@NotNull(message = "id不能为空") Long id) { + return returnData(R.SUCCESS.getCode(),aiContentTaskConfigService.detail(id)); + } + +} + diff --git a/src/main/java/com/mzl/flower/web/film/FilmContentTaskConfigController.java b/src/main/java/com/mzl/flower/web/film/FilmContentTaskConfigController.java new file mode 100644 index 0000000..f374c03 --- /dev/null +++ b/src/main/java/com/mzl/flower/web/film/FilmContentTaskConfigController.java @@ -0,0 +1,91 @@ +package com.mzl.flower.web.film; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.mzl.flower.base.BaseController; +import com.mzl.flower.base.R; +import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.constant.Constants; +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.schedule.TaskExecutor; +import com.mzl.flower.service.film.AiContentTaskConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author fanghaowei + * @version version2.0 + * @className FilmWorksController + * @date 2024/8/26 + * @description 影视作品任务配置 + */ +@Api(value = "影视作品任务配置", tags = "影视作品任务配置") +@RestController +@RequestMapping("/api") +@RequiredArgsConstructor +public class FilmContentTaskConfigController extends BaseController { + + private final AiContentTaskConfigService aiContentTaskConfigService; + private final TaskExecutor taskExecutor; + + @GetMapping("/filmTaskConfig/all") + @ApiOperation(value = "影视作品任务配置列表", httpMethod = "GET") + public ResponseEntity<ReturnDataDTO<List<AiContentTaskConfigVO>>> getFilmWorksAll() { + return returnData(R.SUCCESS.getCode(), aiContentTaskConfigService.getAiContentTaskConfigAll()); + } + + @GetMapping("/filmTaskConfig/list") + @ApiOperation(value = "影视作品任务配置列表", httpMethod = "GET") + public ResponseEntity<ReturnDataDTO<Page<AiContentTaskConfigVO>>> getFilmWorksList(Page page, AiContentTaskConfigQueryDTO dto) { + dto.setType(Constants.GENERATOR_CONTENT.film_name.name()); + return returnData(R.SUCCESS.getCode(), aiContentTaskConfigService.queryPage(dto, page)); + } + + + @GetMapping(value = "/filmTaskConfig/delete") + @ApiOperation(value = "删除影视作品任务配置 ", httpMethod = "GET", notes = "ID") + public ResponseEntity delete(@NotNull(message = "id不能为空") Long id) { + aiContentTaskConfigService.deleteAiContentTaskConfig(String.valueOf(id)); + return returnData(R.SUCCESS.getCode(), null); + } + + @PostMapping(value = "/filmTaskConfig/new") + @ApiOperation(value = "保存影视作品任务配置", httpMethod = "POST") + public ResponseEntity insert(@RequestBody AiContentTaskConfigDTO aiContentTaskConfigDTO) { + aiContentTaskConfigDTO.setType(Constants.GENERATOR_CONTENT.film_name.name()); + aiContentTaskConfigService.saveAiContentTaskConfig(aiContentTaskConfigDTO); +// taskExecutor.callPythonAiService(aiContentTaskConfigDTO.getAiParams()); + return returnData(R.SUCCESS.getCode(), null); + } + + @PostMapping(value = "/filmTaskConfig/edit") + @ApiOperation(value = "更新影视作品任务配置", httpMethod = "POST") + public ResponseEntity update(@RequestBody AiContentTaskConfigDTO aiContentTaskConfigDTO) { + aiContentTaskConfigService.updateAiContentTaskConfig(aiContentTaskConfigDTO); + return returnData(R.SUCCESS.getCode(), null); + } + + @GetMapping("/filmTaskConfig/list/view") + @ApiOperation(value = "详情", notes = "详情") + public ResponseEntity<ReturnDataDTO<AiContentTaskConfigVO>> detail(@NotNull(message = "id不能为空") Long id) { + return returnData(R.SUCCESS.getCode(),aiContentTaskConfigService.detail(id)); + } + + @PostMapping("/filmTaskConfig/delete/batch") + @ApiOperation(value = "批量删除", notes = "批量删除") + public ResponseEntity<ReturnDataDTO> batchDelete(@Validated @RequestBody BatchDTO dto) { + aiContentTaskConfigService.batchDelete(dto); + return returnData(R.SUCCESS.getCode(),null); + } + +} + diff --git a/src/main/java/com/mzl/flower/web/film/FilmHotCityController.java b/src/main/java/com/mzl/flower/web/film/FilmHotCityController.java new file mode 100644 index 0000000..dfc4c01 --- /dev/null +++ b/src/main/java/com/mzl/flower/web/film/FilmHotCityController.java @@ -0,0 +1,87 @@ +package com.mzl.flower.web.film; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.mzl.flower.base.BaseController; +import com.mzl.flower.base.R; +import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.dto.BatchDTO; +import com.mzl.flower.dto.request.film.FilmHotCityDTO; +import com.mzl.flower.dto.request.film.FilmHotCityQueryDTO; +import com.mzl.flower.dto.response.film.FilmHotCityVO; +import com.mzl.flower.service.film.FilmHotCityService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; + +/** + * FilmHotCity热门城市表前端控制器 + * + * @author generator@Fang + */ +@Api(value = "热门城市信息管理", tags = "热门城市信息管理") +@RestController +@RequestMapping("/api") +@RequiredArgsConstructor +public class FilmHotCityController extends BaseController { + + + private final FilmHotCityService filmHotCityService; + + @GetMapping("/filmHotCity/list") + @ApiOperation(value = "热门城市列表", httpMethod = "GET") + public ResponseEntity<ReturnDataDTO<Page<FilmHotCityVO>>> getFilmHotCityList(Page page, FilmHotCityQueryDTO dto) { + return returnData(R.SUCCESS.getCode(), filmHotCityService.queryPage(dto, page)); + } + + + @GetMapping(value = "/filmHotCity/delete") + @ApiOperation(value = "删除热门城市 ", httpMethod = "GET", notes = "ID") + public ResponseEntity delete(@NotNull(message = "id不能为空") Long id) { + filmHotCityService.deleteFilmHotCity(String.valueOf(id)); + return returnData(R.SUCCESS.getCode(), null); + } + + @PostMapping(value = "/filmHotCity/new") + @ApiOperation(value = "保存热门城市", httpMethod = "POST") + public ResponseEntity insert(@RequestBody FilmHotCityDTO filmHotCityDTO) { + filmHotCityService.saveFilmHotCity(filmHotCityDTO); + return returnData(R.SUCCESS.getCode(), null); + } + + @PostMapping(value = "/filmHotCity/edit") + @ApiOperation(value = "更新热门城市", httpMethod = "POST") + public ResponseEntity update(@RequestBody FilmHotCityDTO filmHotCityDTO) { + filmHotCityService.updateFilmHotCity(filmHotCityDTO); + return returnData(R.SUCCESS.getCode(), null); + } + + @GetMapping("/filmHotCity/list/view") + @ApiOperation(value = "详情", notes = "详情") + public ResponseEntity<ReturnDataDTO<FilmHotCityVO>> detail(@NotNull(message = "id不能为空") Long id) { + return returnData(R.SUCCESS.getCode(), filmHotCityService.detail(id)); + } + + + @GetMapping("/filmHotCity/isEnable") + @ApiOperation(value = "启用/禁用", notes = "启用/禁用景点") + public ResponseEntity<ReturnDataDTO<String>> isEnable(@NotNull(message = "id不能为空") Long id) { + filmHotCityService.isEnable(id); + return returnData(R.SUCCESS.getCode(), null); + } + + + @PostMapping("/filmHotCity/delete/batch") + @ApiOperation(value = "批量删除", notes = "批量删除") + public ResponseEntity<ReturnDataDTO> batchDelete(@Validated @RequestBody BatchDTO dto) { + filmHotCityService.batchDelete(dto); + return returnData(R.SUCCESS.getCode(), null); + } + + +} diff --git a/src/main/java/com/mzl/flower/web/film/FilmLocationController.java b/src/main/java/com/mzl/flower/web/film/FilmLocationController.java index 105bda5..6e98f4f 100644 --- a/src/main/java/com/mzl/flower/web/film/FilmLocationController.java +++ b/src/main/java/com/mzl/flower/web/film/FilmLocationController.java @@ -42,6 +42,13 @@ return returnData(R.SUCCESS.getCode(), filmLocationService.queryPage(dto, page)); } + @GetMapping("/filmLocation/getTop3") + @ApiOperation(value = "影视拍摄场地前三", httpMethod = "GET") + public ResponseEntity<ReturnDataDTO<List<FilmLocationVO>>> getFilmLocationListTop3() { + return returnData(R.SUCCESS.getCode(), filmLocationService.getFilmLocationListTop3()); + } + + @GetMapping(value = "/filmLocation/delete") @ApiOperation(value = "删除影视拍摄场地 ", httpMethod = "GET", notes = "ID") public ResponseEntity delete(@NotNull(message = "id不能为空") Long id) { diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index c70b3e0..0ff770b 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -39,6 +39,7 @@ redis: database: 0 host: 192.168.1.235 +# host: 127.0.0.1 password: 123456 port: 6379 diff --git a/src/main/resources/mapper/film/AiContentTaskConfigMapper.xml b/src/main/resources/mapper/film/AiContentTaskConfigMapper.xml new file mode 100644 index 0000000..0ada459 --- /dev/null +++ b/src/main/resources/mapper/film/AiContentTaskConfigMapper.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.mzl.flower.mapper.film.AiContentTaskConfigMapper"> + + <select id="queryPage" resultType="com.mzl.flower.dto.response.film.AiContentTaskConfigVO"> + select t.* from ai_content_task_config t + where t.deleted= 0 + <if test="dto.taskName != null and dto.taskName != ''"> + and t.task_name like concat('%', #{dto.taskName}, '%') + </if> + <if test="dto.type != null and dto.type != ''"> + and t.type = #{dto.type} + </if> + <if test="dto.isEnabled!=null"> + AND t.is_enabled = #{dto.isEnabled} + </if> + + </select> + +</mapper> diff --git a/src/main/resources/mapper/film/FilmHotCityMapper.xml b/src/main/resources/mapper/film/FilmHotCityMapper.xml new file mode 100644 index 0000000..4b6b695 --- /dev/null +++ b/src/main/resources/mapper/film/FilmHotCityMapper.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.mzl.flower.mapper.film.FilmHotCityMapper"> + + <select id="queryPage" resultType="com.mzl.flower.dto.response.film.FilmHotCityVO"> + SELECT + t.* + FROM + film_hot_city t + WHERE + t.deleted = 0 + <if test="dto.name != null and dto.name != ''"> + AND t.name LIKE concat('%', #{dto.name},'%') + </if> + <if test="dto.country != null and dto.country != ''"> + AND t.country LIKE concat('%', #{dto.country},'%') + </if> + <if test="dto.continent != null and dto.continent != ''"> + AND t.continent LIKE concat('%', #{dto.continent},'%') + </if> + <if test="dto.isEnabled!=null"> + AND t.is_enabled = #{dto.isEnabled} + </if> + ORDER BY + t.city_weight DESC + </select> +</mapper> -- Gitblit v1.9.3