feat: 产品中心

This commit is contained in:
曹鹏飞 2025-06-14 16:46:41 +08:00
parent 88cfd1df74
commit e40199b564
12 changed files with 90 additions and 7 deletions

View File

@ -3,6 +3,8 @@ package com.nflg.mobilebroken.common.pojo.vo;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.util.List;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
public class ProductModelInfoVO { public class ProductModelInfoVO {
@ -43,4 +45,29 @@ public class ProductModelInfoVO {
* 图片地址 * 图片地址
*/ */
private String image; private String image;
/**
* 热图
*/
private ProductHotImageInfoVO hotImage;
/**
* 主要参数列表
*/
private List<ProductModelParamVO> params;
/**
* 产品图册
*/
private List<ProductImageVO> images;
/**
* 产品视频
*/
private List<ProductVideoVO> videos;
/**
* 产品资料
*/
private List<ProductFileVO> files;
} }

View File

@ -1,10 +1,12 @@
package com.nflg.mobilebroken.product.controller; package com.nflg.mobilebroken.product.controller;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.PageData;
import com.nflg.mobilebroken.common.pojo.request.ProductSeriesSearchRequest; import com.nflg.mobilebroken.common.pojo.request.ProductSeriesSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.*; import com.nflg.mobilebroken.common.pojo.vo.*;
import com.nflg.mobilebroken.common.util.MultilingualUtil; import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.repository.service.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -39,6 +41,9 @@ public class InfoController extends BaseController{
@Resource @Resource
private IProductModelService productModelService; private IProductModelService productModelService;
@Resource
private IDictionaryItemService dictionaryItemService;
/** /**
* 获取介绍列表 * 获取介绍列表
*/ */
@ -63,6 +68,14 @@ public class InfoController extends BaseController{
return ApiResult.success(productCaseService.get(MultilingualUtil.getLanguage())); return ApiResult.success(productCaseService.get(MultilingualUtil.getLanguage()));
} }
/**
* 获取模块列表
*/
@GetMapping("/getModuleList")
public ApiResult<List<DictionaryItem>> getModuleList(){
return ApiResult.success(dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_PRODUCT_MODULE));
}
/** /**
* 搜索产品系列 * 搜索产品系列
*/ */

View File

@ -1,6 +1,6 @@
spring.application.name=product spring.application.name=product
spring.profiles.active=dev spring.profiles.active=dev
server.port=8084 server.port=8085
# 设置最大文件大小 (默认为1MB) # 设置最大文件大小 (默认为1MB)
spring.servlet.multipart.max-file-size=100MB spring.servlet.multipart.max-file-size=100MB
# 设置所有文件总大小 (默认为10MB) # 设置所有文件总大小 (默认为10MB)

View File

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.mobilebroken.common.pojo.vo.ProductFileVO; import com.nflg.mobilebroken.common.pojo.vo.ProductFileVO;
import com.nflg.mobilebroken.repository.entity.ProductModelFile; import com.nflg.mobilebroken.repository.entity.ProductModelFile;
import java.util.List;
/** /**
* <p> * <p>
* 产品中心-产品机型-文件 Mapper 接口 * 产品中心-产品机型-文件 Mapper 接口
@ -14,7 +16,9 @@ import com.nflg.mobilebroken.repository.entity.ProductModelFile;
*/ */
public interface ProductModelFileMapper extends BaseMapper<ProductModelFile> { public interface ProductModelFileMapper extends BaseMapper<ProductModelFile> {
ProductFileVO getListByLanguage(Integer modelId, String language); ProductFileVO getDefaultByLanguage(Integer modelId, String language);
void copyItems(Integer oldId, Integer newId); void copyItems(Integer oldId, Integer newId);
List<ProductFileVO> getListByLanguage(Integer modelId, String language);
} }

View File

@ -50,4 +50,6 @@ public interface IProductModelFileService extends IService<ProductModelFile> {
List<FileDefaultConfigVO> getDefaultConfig(@Valid @NotNull Integer modelId); List<FileDefaultConfigVO> getDefaultConfig(@Valid @NotNull Integer modelId);
void setFileDefaultCondig(@Valid FileDefaultConfigRequest request); void setFileDefaultCondig(@Valid FileDefaultConfigRequest request);
List<ProductFileVO> getListByLanguage(Integer modelId, String language);
} }

View File

@ -3,6 +3,7 @@ package com.nflg.mobilebroken.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.mobilebroken.common.pojo.request.*; import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.ProductHotImageInfoVO;
import com.nflg.mobilebroken.repository.entity.ProductModelHotimage; import com.nflg.mobilebroken.repository.entity.ProductModelHotimage;
import javax.validation.Valid; import javax.validation.Valid;
@ -37,4 +38,6 @@ public interface IProductModelHotimageService extends IService<ProductModelHotim
void deleteByModel(@NotEmpty List<Integer> ids); void deleteByModel(@NotEmpty List<Integer> ids);
void copyTo(Integer oldId, Integer newId); void copyTo(Integer oldId, Integer newId);
ProductHotImageInfoVO getListByLanguage(Integer modelId);
} }

View File

@ -81,7 +81,7 @@ public class ProductCaseServiceImpl extends ServiceImpl<ProductCaseMapper, Produ
.ge(Objects.nonNull(request.getStartTime()), ProductCase::getPublishTime, request.getStartTime()) .ge(Objects.nonNull(request.getStartTime()), ProductCase::getPublishTime, request.getStartTime())
.le(Objects.nonNull(request.getEndTime()), ProductCase::getPublishTime, request.getEndTime()) .le(Objects.nonNull(request.getEndTime()), ProductCase::getPublishTime, request.getEndTime())
.orderByAsc(ProductCase::getState) .orderByAsc(ProductCase::getState)
.orderByAsc(ProductCase::getTitle) .orderByAsc(ProductCase::getSort)
.orderByDesc(ProductCase::getId) .orderByDesc(ProductCase::getId)
.page(new Page<>(request.getPage(), request.getPageSize())); .page(new Page<>(request.getPage(), request.getPageSize()));
return PageUtil.convert(page, d -> Convert.convert(ProductCaseSearchVO.class, d)); return PageUtil.convert(page, d -> Convert.convert(ProductCaseSearchVO.class, d));

View File

@ -159,7 +159,7 @@ public class ProductModelFileServiceImpl extends ServiceImpl<ProductModelFileMap
@Override @Override
public ProductFileVO getDefaultByLanguage(Integer modelId, String language) { public ProductFileVO getDefaultByLanguage(Integer modelId, String language) {
return baseMapper.getListByLanguage(modelId,language); return baseMapper.getDefaultByLanguage(modelId,language);
} }
@Override @Override
@ -231,4 +231,9 @@ public class ProductModelFileServiceImpl extends ServiceImpl<ProductModelFileMap
public void setFileDefaultCondig(FileDefaultConfigRequest request) { public void setFileDefaultCondig(FileDefaultConfigRequest request) {
productModelFileItemService.setFileDefaultCondig(request); productModelFileItemService.setFileDefaultCondig(request);
} }
@Override
public List<ProductFileVO> getListByLanguage(Integer modelId, String language) {
return baseMapper.getListByLanguage(modelId,language);
}
} }

View File

@ -1,11 +1,13 @@
package com.nflg.mobilebroken.repository.service.impl; package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.constant.PublishState; import com.nflg.mobilebroken.common.constant.PublishState;
import com.nflg.mobilebroken.common.pojo.request.*; import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.ProductHotImageInfoVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.ProductModelHotimage; import com.nflg.mobilebroken.repository.entity.ProductModelHotimage;
@ -131,4 +133,12 @@ public class ProductModelHotimageServiceImpl extends ServiceImpl<ProductModelHot
public void copyTo(Integer oldId, Integer newId) { public void copyTo(Integer oldId, Integer newId) {
baseMapper.copyTo(oldId,newId); baseMapper.copyTo(oldId,newId);
} }
@Override
public ProductHotImageInfoVO getListByLanguage(Integer modelId) {
return Convert.convert(ProductHotImageInfoVO.class,lambdaQuery()
.eq(ProductModelHotimage::getModelId, modelId)
.eq(ProductModelHotimage::getState, PublishState.Published.getState())
.one());
}
} }

View File

@ -188,6 +188,8 @@ public class ProductModelParamsItemServiceImpl extends ServiceImpl<ProductModelP
.setIndexName(it.getIndexName()) .setIndexName(it.getIndexName())
.setName(it.getName()) .setName(it.getName())
.setValue(it.getValue()) .setValue(it.getValue())
.setMain(it.getMain())
.setCompare(it.getCompare())
.setCreateBy(AdminUserUtil.getUserName()) .setCreateBy(AdminUserUtil.getUserName())
.setCreateTime(LocalDateTime.now())) .setCreateTime(LocalDateTime.now()))
.collect(Collectors.toList()) .collect(Collectors.toList())

View File

@ -104,7 +104,8 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
List<ProductModelIntro> intros = productModelIntroService.lambdaQuery().eq(ProductModelIntro::getModelId, oldId).list(); List<ProductModelIntro> intros = productModelIntroService.lambdaQuery().eq(ProductModelIntro::getModelId, oldId).list();
if (CollectionUtil.isNotEmpty(intros)) { if (CollectionUtil.isNotEmpty(intros)) {
intros.forEach(intro -> { intros.forEach(intro -> {
Integer oId=intro.getId(); int oId = intro.getId();
intro.setId(null);
productModelIntroService.save(intro); productModelIntroService.save(intro);
productModelIntroService.copyItems(oId, intro.getId()); productModelIntroService.copyItems(oId, intro.getId());
}); });
@ -113,6 +114,7 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
if (CollectionUtil.isNotEmpty(files)) { if (CollectionUtil.isNotEmpty(files)) {
files.forEach(file -> { files.forEach(file -> {
Integer oId=file.getId(); Integer oId=file.getId();
file.setId(null);
productModelFileService.save(file); productModelFileService.save(file);
productModelFileService.copyItems(oId, file.getId()); productModelFileService.copyItems(oId, file.getId());
}); });
@ -122,6 +124,7 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
if (CollectionUtil.isNotEmpty(images)){ if (CollectionUtil.isNotEmpty(images)){
images.forEach(image -> { images.forEach(image -> {
Integer oId=image.getId(); Integer oId=image.getId();
image.setId(null);
productModelImageService.save(image); productModelImageService.save(image);
productModelImageService.copyItems(oId, image.getId()); productModelImageService.copyItems(oId, image.getId());
}); });
@ -130,6 +133,7 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
if (CollectionUtil.isNotEmpty(videos)){ if (CollectionUtil.isNotEmpty(videos)){
videos.forEach(video -> { videos.forEach(video -> {
Integer oId=video.getId(); Integer oId=video.getId();
video.setId(null);
productModelVideoService.save(video); productModelVideoService.save(video);
productModelVideoService.copyItems(oId, video.getId()); productModelVideoService.copyItems(oId, video.getId());
}); });
@ -138,6 +142,7 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
if (CollectionUtil.isNotEmpty(params)){ if (CollectionUtil.isNotEmpty(params)){
params.forEach(param -> { params.forEach(param -> {
Integer oId=param.getId(); Integer oId=param.getId();
param.setId(null);
productPartParamsService.save(param); productPartParamsService.save(param);
productPartParamsService.copyItems(oId, param.getId()); productPartParamsService.copyItems(oId, param.getId());
}); });
@ -257,7 +262,12 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
.setRecommend(productModel.getRecommend()) .setRecommend(productModel.getRecommend())
.setSort(productModel.getSort()) .setSort(productModel.getSort())
.setNo(productModel.getNo()) .setNo(productModel.getNo())
.setImage(productModel.getImage()); .setImage(productModel.getImage())
.setHotImage(productModelHotimageService.getListByLanguage(modelId))
.setParams(productPartParamsService.getAllListByLanguage(modelId, language))
.setImages(productModelImageService.getListByLanguage(modelId, language))
.setVideos(productModelVideoService.getListByLanguage(modelId, language))
.setFiles(productModelFileService.getListByLanguage(modelId, language));
} }
@Override @Override

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.mobilebroken.repository.mapper.ProductModelFileMapper"> <mapper namespace="com.nflg.mobilebroken.repository.mapper.ProductModelFileMapper">
<select id="getListByLanguage" resultType="com.nflg.mobilebroken.common.pojo.vo.ProductFileVO"> <select id="getDefaultByLanguage" resultType="com.nflg.mobilebroken.common.pojo.vo.ProductFileVO">
SELECT pmfi.name, pmfi.* SELECT pmfi.name, pmfi.*
FROM product_model_file pmf FROM product_model_file pmf
INNER JOIN product_model_file_item pmfi ON pmf.id = pmfi.model_file_id INNER JOIN product_model_file_item pmfi ON pmf.id = pmfi.model_file_id
@ -19,4 +19,11 @@
FROM product_model_file_item FROM product_model_file_item
WHERE model_file_id=#{oldId} WHERE model_file_id=#{oldId}
</select> </select>
<select id="getListByLanguage" resultType="com.nflg.mobilebroken.common.pojo.vo.ProductFileVO">
SELECT pmfi.name,pmf.*
FROM product_model_file pmf
INNER JOIN product_model_file_item pmfi ON pmf.id = pmfi.model_file_id
WHERE pmf.`enable` = 1 AND pmf.state = 1 AND pmfi.show_in_list = 1 AND pmf.model_id = #{modelId} AND pmfi.language_code = #{language}
</select>
</mapper> </mapper>