feat: 产品中心

This commit is contained in:
曹鹏飞 2025-06-18 17:49:20 +08:00
parent 13df05f316
commit 902a3937d6
31 changed files with 382 additions and 66 deletions

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.admin.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
@ -21,8 +22,14 @@ import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.*;
import com.nflg.mobilebroken.repository.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.ttzero.excel.entity.TemplateSheet;
import org.ttzero.excel.entity.Workbook;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
@ -30,6 +37,7 @@ import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@ -41,7 +49,7 @@ import java.util.stream.Collectors;
public class ProductModelController extends ControllerBase{
@Resource
private IProductModelService productModelService;
private IProductModelService productModelService;
@Resource
private IProductModelIntroService productModelIntroService;
@ -251,6 +259,15 @@ public class ProductModelController extends ControllerBase{
return ApiResult.success(productModelParamsItemService.getList(modelParamsId));
}
/**
* 获取中文设备技术参数
* @param modelId 机型id
*/
@GetMapping("/getCNParamsItems")
public ApiResult<List<ProductModelMainParamsItemChildrenVO>> getCNParamsItems(@RequestParam Integer modelId){
return ApiResult.success(productModelParamsService.getCNList(modelId));
}
/**
* 添加设备技术参数指标
* @param request 请求参数
@ -398,28 +415,195 @@ public class ProductModelController extends ControllerBase{
return ApiResult.success(request.getModelParamsId());
}
/**
* 下载导入设备技术参数项模板
*/
@GetMapping("/downloadParamImportTemplate")
public void downloadParamImportTemplate(HttpServletResponse response) throws IOException {
EecExcelUtil.setResponseExcelHeader(response, "机型参数导入模版");
ClassPathResource resource = new ClassPathResource("templates/ProductModelParamImport.xlsx");
new Workbook()
.addSheet(new TemplateSheet(resource.getInputStream()))
.writeTo(response.getOutputStream());
}
/**
* 导出设备技术参数项
* @param modelParamsId 设备技术参数ID
*/
@GetMapping("/exportModelParamsItem")
public void exportModelParamsItem(HttpServletResponse response, @Valid @RequestParam @NotNull Integer modelParamsId) throws IOException {
List<ProductModelParamsItemVO> vos = productModelParamsItemService.getList(modelParamsId);
List<ProductModelParamsExcelDTO> datas = vos.stream().map(vo -> vo.getItems()
.stream()
.map(item -> item.getItems().stream().map(t -> new ProductModelParamsExcelDTO()
.setLanguageCode(vo.getLanguageCode())
.setIndexName(item.getIndexName())
.setName(t.getName())
.setValue(t.getValue())
.setMain(t.getMain())
.setCompare(t.getCompare()))
.collect(Collectors.toList()))
.flatMap(Collection::stream)
.collect(Collectors.toList()))
.flatMap(Collection::stream)
.collect(Collectors.toList());
EecExcelUtil.export("设备技术参数", "sheet1", datas, response);
ProductModelParams params=productModelParamsService.getById(modelParamsId);
VUtils.trueThrowBusinessError(Objects.isNull(params)).throwMessage("无效的数据");
ProductModel model = productModelService.getById(params.getModelId());
VUtils.trueThrowBusinessError(Objects.isNull(model)).throwMessage("无效的数据");
EecExcelUtil.setResponseExcelHeader(response, model.getNo() + "机型技术参数");
List<Language> languages = languageService.getLanguages();
int colCount = languages.size() * 3 + 2;
Set<CellRangeAddress> cellRangeAddresses = new HashSet<>();
try (org.apache.poi.ss.usermodel.Workbook workbook = new XSSFWorkbook()) {
List<ProductModelParamsItem> paramsItems = productModelParamsItemService.lambdaQuery().eq(ProductModelParamsItem::getModelParamsId, modelParamsId).list();
Sheet sheet = workbook.createSheet("sheet1");
sheet.setVerticallyCenter(true);
sheet.setDefaultRowHeightInPoints(20);
CellStyle headerStyle = workbook.createCellStyle();
headerStyle.setAlignment(HorizontalAlignment.CENTER);
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
headerStyle.setBorderTop(BorderStyle.THIN);
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
CellStyle dataStyle = workbook.createCellStyle();
dataStyle.setAlignment(HorizontalAlignment.LEFT);
dataStyle.setVerticalAlignment(VerticalAlignment.CENTER);
dataStyle.setBorderTop(BorderStyle.THIN);
dataStyle.setBorderBottom(BorderStyle.THIN);
dataStyle.setBorderLeft(BorderStyle.THIN);
dataStyle.setBorderRight(BorderStyle.THIN);
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerStyle.setFont(headerFont);
Row headerRow0 = sheet.createRow(0);
Cell cell0_0 = headerRow0.createCell(0);
cell0_0.setCellValue("机型技术参数");
cell0_0.setCellStyle(headerStyle);
createEmptyCell(headerRow0,headerStyle,1, colCount - 1);
cellRangeAddresses.add(new CellRangeAddress(0, 0, 0, colCount - 1));
Row headerRow1 = sheet.createRow(1);
Cell cell1_0 = headerRow1.createCell(0);
cell1_0.setCellValue(getRequiredText(workbook,"产品型号"));
cell1_0.setCellStyle(headerStyle);
Cell cell1_1 = headerRow1.createCell(1);
cell1_1.setCellValue(model.getNo());
createEmptyCell(headerRow1,headerStyle,2, colCount - 1);
cellRangeAddresses.add(new CellRangeAddress(1, 1, 1, colCount - 1));
Row headerRow2 = sheet.createRow(2);
Row headerRow3 = sheet.createRow(3);
AtomicInteger colStart = new AtomicInteger();
AtomicInteger colEnd = new AtomicInteger();
for (int i = 0; i < languages.size(); i++) {
Language language = languages.get(i);
if (i == 0) {
colEnd.set(3 + 2 - 1);
} else {
colStart.set(colEnd.get() + 1);
colEnd.addAndGet(3);
}
Cell cell_row2 = headerRow2.createCell(colStart.get());
cell_row2.setCellValue(language.getName());
cell_row2.setCellStyle(headerStyle);
createEmptyCell(headerRow2,headerStyle,colStart.get()+1, colEnd.get());
cellRangeAddresses.add(new CellRangeAddress(2, 2, colStart.get(), colEnd.get()));
if (i == 0){
Cell cell3_0 = headerRow3.createCell(0);
cell3_0.setCellStyle(headerStyle);
cell3_0.setCellValue(getRequiredText(workbook,"指标名称"));
Cell cell3_1 = headerRow3.createCell(1);
cell3_1.setCellStyle(headerStyle);
cell3_1.setCellValue(getRequiredText(workbook, "技术参数"));
Cell cell3_2 = headerRow3.createCell(2);
cell3_2.setCellStyle(headerStyle);
cell3_2.setCellValue(getRequiredText(workbook, "参数指标"));
Cell cell3_3 = headerRow3.createCell(3);
cell3_3.setCellStyle(headerStyle);
cell3_3.setCellValue(getRequiredText(workbook, "主要参数"));
Cell cell3_4 = headerRow3.createCell(4);
cell3_4.setCellStyle(headerStyle);
cell3_4.setCellValue(getRequiredText(workbook, "是否参与对比"));
} else {
Cell cell3_0 = headerRow3.createCell(colStart.get());
cell3_0.setCellStyle(headerStyle);
cell3_0.setCellValue("指标名称");
Cell cell3_1 = headerRow3.createCell(colStart.get() + 1);
cell3_1.setCellStyle(headerStyle);
cell3_1.setCellValue("技术参数");
Cell cell3_2 = headerRow3.createCell(colStart.get() + 2);
cell3_2.setCellStyle(headerStyle);
cell3_2.setCellValue("参数指标");
}
}
if (CollectionUtil.isNotEmpty(paramsItems)){
AtomicInteger rowIndex= new AtomicInteger(4);
List<ProductModelParamsItem> cnItems=paramsItems.stream().filter(item -> StrUtil.equals(item.getLanguageCode(), Constant.DEFAULT_LANGUAGE_CODE)).collect(Collectors.toList());
Map<String, List<ProductModelParamsItem>> itemMap=cnItems.stream().collect(Collectors.groupingBy(ProductModelParamsItem::getIndexName));
AtomicInteger row= new AtomicInteger(rowIndex.get());
itemMap.forEach((indexName, itemData) -> {
itemData.forEach(mit->{
Row dataRow = sheet.createRow(rowIndex.getAndIncrement());
List<ProductModelParamsItem> rowItem = paramsItems.stream()
.filter(item -> StrUtil.equals(item.getBatchNumber(), mit.getBatchNumber()))
.collect(Collectors.toList());
for (int i = 0; i < languages.size(); i++) {
Language language = languages.get(i);
ProductModelParamsItem litem=rowItem.stream().filter(item -> StrUtil.equals(item.getLanguageCode(),language.getCode())).findFirst().orElse(null);
if (Objects.nonNull(litem)) {
if (i == 0) {
cellRangeAddresses.add(new CellRangeAddress(row.get(), row.get() + itemData.size()-1, 0, 0));
colStart.set(0);
colEnd.set(3 + 2 - 1);
Cell dataCell0 = dataRow.createCell(0);
dataCell0.setCellValue(litem.getIndexName());
dataCell0.setCellStyle(dataStyle);
Cell dataCell1 = dataRow.createCell(1);
dataCell1.setCellValue(litem.getName());
dataCell1.setCellStyle(dataStyle);
Cell dataCell2 = dataRow.createCell(2);
dataCell2.setCellValue(litem.getValue());
dataCell2.setCellStyle(dataStyle);
Cell dataCell3 = dataRow.createCell(3);
dataCell3.setCellValue(litem.getMain() ? "" : "");
dataCell3.setCellStyle(dataStyle);
Cell dataCell4 = dataRow.createCell(4);
dataCell4.setCellValue(litem.getCompare() ? "" : "");
dataCell4.setCellStyle(dataStyle);
} else {
colStart.set(colEnd.get() + 1);
colEnd.addAndGet(3);
cellRangeAddresses.add(new CellRangeAddress(row.get(), row.get() +itemData.size()-1, colStart.get(),colStart.get()));
Cell dataCell0 = dataRow.createCell(colStart.get());
dataCell0.setCellValue(litem.getIndexName());
dataCell0.setCellStyle(dataStyle);
Cell dataCell1 = dataRow.createCell(colStart.get() + 1);
dataCell1.setCellValue(litem.getName());
dataCell1.setCellStyle(dataStyle);
Cell dataCell2 = dataRow.createCell(colStart.get() + 2);
dataCell2.setCellValue(litem.getValue());
dataCell2.setCellStyle(dataStyle);
}
}
}
});
row.addAndGet(itemData.size());
});
}
for (int i = 0; i < colCount; i++) {
// sheet.autoSizeColumn(i);
sheet.setColumnWidth(i, 15 * 256);
}
cellRangeAddresses.forEach(sheet::addMergedRegion);
workbook.write(response.getOutputStream());
}
}
private void createEmptyCell(Row row,CellStyle style,int colStart,int colEnd){
for (int colIndex = colStart; colIndex <= colEnd; colIndex++){
Cell cell=row.createCell(colIndex);
cell.setCellStyle(style);
cell.setCellValue("");
}
}
private RichTextString getRequiredText(org.apache.poi.ss.usermodel.Workbook workbook,String text){
RichTextString richString = workbook.getCreationHelper().createRichTextString("*"+text);
Font boldFont = workbook.createFont();
boldFont.setBold(true);
Font redFont = workbook.createFont();
redFont.setColor(IndexedColors.RED.getIndex());
redFont.setBold(true);
richString.applyFont(boldFont);
richString.applyFont(0, 1, redFont);
return richString;
}
/**

View File

@ -40,7 +40,6 @@
<dependency>
<groupId>org.ttzero</groupId>
<artifactId>eec</artifactId>
<version>0.5.21</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>

View File

@ -9,6 +9,8 @@ import java.util.List;
@Accessors(chain = true)
public class ProductModelCompareInfoVO {
private Integer id;
/**
* 机型型号
*/

View File

@ -0,0 +1,34 @@
package com.nflg.mobilebroken.common.pojo.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
@Data
public class ProductPartInfoLanguageVO {
/**
* 部件名称
*/
private String name;
/**
* 类型0-视频1图片
*/
private Integer type;
/**
* 图片地址
*/
private String image;
/**
* 视频地址
*/
private String video;
/**
* 部件介绍
*/
@TableField(value = "`desc`")
private String desc;
}

View File

@ -15,8 +15,8 @@ import org.ttzero.excel.reader.Sheet;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@ -32,9 +32,9 @@ import java.util.stream.Collectors;
*/
public class EecExcelUtil {
public static void setResponseExcelHeader(HttpServletResponse response, String fileName) throws UnsupportedEncodingException {
public static void setResponseExcelHeader(HttpServletResponse response, String fileName) {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8"));
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", StandardCharsets.UTF_8));
}
public static void eecExcel(String fileName, List<ListSheet> sheets, HttpServletResponse response) throws IOException {
@ -69,6 +69,14 @@ public class EecExcelUtil {
.writeTo(response.getOutputStream());
}
public static <T> void export(String fileName, org.ttzero.excel.entity.Sheet sheet, HttpServletResponse response) throws IOException {
setResponseExcelHeader(response, fileName);
new Workbook()
.setAutoSize(true)
.addSheet(sheet)
.writeTo(response.getOutputStream());
}
public static <T> List<T> readTo(InputStream stream, Class<T> clazz) {
try (ExcelReader reader = ExcelReader.read(stream)) {
return reader.sheet(0) // 读取第1个Sheet页

View File

@ -4,10 +4,7 @@ import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.request.BatchDeleteRequest;
import com.nflg.mobilebroken.common.pojo.vo.*;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.service.IProductMobilebrokenIntroService;
import com.nflg.mobilebroken.repository.service.IProductModelService;
import com.nflg.mobilebroken.repository.service.IProductSeriesService;
import com.nflg.mobilebroken.repository.service.IProductTypeService;
import com.nflg.mobilebroken.repository.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@ -36,6 +33,9 @@ public class MobilebrokenController extends BaseController{
@Resource
private IProductMobilebrokenIntroService productMobilebrokenIntroService;
@Resource
private IProductPartService productPartService;
/**
* 获取移动破介绍
*/
@ -66,11 +66,11 @@ public class MobilebrokenController extends BaseController{
/**
* 获取产品类型详情
* @param typeId 产品类型id
* @param typeNumber 产品类型批次号
*/
@GetMapping("/getTypeInfo")
public ApiResult<ProductTypeLanguageInfoVO> getTypeInfo(@Valid @RequestParam @NotNull Integer typeId){
return ApiResult.success(productTypeService.getInfoByLanguage(typeId,MultilingualUtil.getLanguage()));
public ApiResult<ProductTypeLanguageInfoVO> getTypeInfo(@Valid @RequestParam @NotNull String typeNumber){
return ApiResult.success(productTypeService.getInfoByLanguage(typeNumber,MultilingualUtil.getLanguage()));
}
/**
@ -104,6 +104,15 @@ public class MobilebrokenController extends BaseController{
return ApiResult.success(productModelService.getInfo(modelId,MultilingualUtil.getLanguage()));
}
/**
* 获取部件详情
* @param id 产品部件id
*/
@GetMapping("/getPartInfo")
public ApiResult<ProductPartInfoLanguageVO> getPartInfo(@Valid @RequestParam @NotNull Integer id) {
return ApiResult.success(productPartService.getInfo(id,MultilingualUtil.getLanguage()));
}
/**
* 机型比较
* @param request 请求参数

View File

@ -3,6 +3,7 @@ package com.nflg.mobilebroken.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.mobilebroken.common.pojo.request.ProductPartSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoLanguageVO;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoVO;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartSearchVO;
import com.nflg.mobilebroken.repository.entity.ProductPart;
@ -20,4 +21,6 @@ public interface ProductPartMapper extends BaseMapper<ProductPart> {
Page<ProductPartSearchVO> getList(ProductPartSearchRequest request, Page<?> page);
ProductPartInfoVO getInfo(Integer partId);
ProductPartInfoLanguageVO getInfoByLanguage(Integer partId,String language);
}

View File

@ -19,5 +19,5 @@ public interface ProductTypeInfoMapper extends BaseMapper<ProductTypeInfo> {
List<ProductTypeInfoAddRequest> getInfo(Integer typeId);
ProductTypeLanguageInfoVO getInfoByLanguage(Integer typeId, String language);
ProductTypeLanguageInfoVO getInfoByLanguage(String typeNumber, String language);
}

View File

@ -1,11 +1,11 @@
package com.nflg.mobilebroken.repository.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.mobilebroken.common.pojo.dto.ProductModelParamsExcelDTO;
import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.ProductModelMainParamsItemVO;
import com.nflg.mobilebroken.common.pojo.vo.ProductModelParamsItemVO;
import com.nflg.mobilebroken.repository.entity.ProductModelParamsItem;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;

View File

@ -47,4 +47,6 @@ public interface IProductModelParamsService extends IService<ProductModelParams>
void copyItems(Integer oldId, Integer newId);
List<ProductModelMainParamsItemChildrenVO> getAListByLanguage(Integer modelId, String language);
List<ProductModelMainParamsItemChildrenVO> getCNList(Integer modelId);
}

View File

@ -3,6 +3,7 @@ package com.nflg.mobilebroken.repository.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoLanguageVO;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoVO;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartSearchVO;
import com.nflg.mobilebroken.repository.entity.ProductPart;
@ -28,6 +29,8 @@ public interface IProductPartService extends IService<ProductPart> {
ProductPartInfoVO getInfo(@Valid @NotNull Integer partId);
ProductPartInfoLanguageVO getInfo(@Valid @NotNull Integer partId, String language);
void enable(@Valid EnableRequest request);
void delete(@Valid BatchDeleteRequest request);

View File

@ -28,5 +28,5 @@ public interface IProductTypeInfoService extends IService<ProductTypeInfo> {
void delete(@NotEmpty List<Integer> ids);
ProductTypeLanguageInfoVO getInfoByLanguage(Integer typeId, String language);
ProductTypeLanguageInfoVO getInfoByLanguage(String typeNumber, String language);
}

View File

@ -48,5 +48,5 @@ public interface IProductTypeService extends IService<ProductType> {
List<ProductFileVO> getFilesByLanguage(@Valid @NotNull Integer moduleId, String seriesNumber, String language);
ProductTypeLanguageInfoVO getInfoByLanguage(@Valid @NotNull Integer typeId, String language);
ProductTypeLanguageInfoVO getInfoByLanguage(@Valid @NotNull String typeNumber, String language);
}

View File

@ -23,7 +23,7 @@ public class LanguageServiceImpl extends ServiceImpl<LanguageMapper, Language> i
@Override
public List<Language> getLanguages() {
return lambdaQuery().eq(Language::getEnable,true).list();
return lambdaQuery().eq(Language::getEnable,true).orderByDesc(Language::getSort).list();
}
@Override

View File

@ -164,10 +164,13 @@ public class ProductCaseServiceImpl extends ServiceImpl<ProductCaseMapper, Produ
.orderByDesc(ProductCase::getPublishTime)
.last("Limit 1")
.one();
VUtils.trueThrowBusinessError(Objects.isNull(obsolete)).throwMessage("不能取消该发布");
if (Objects.nonNull(obsolete)) {
obsolete.setState(PublishState.Published.getState());
obsolete.setPublishBy(AdminUserUtil.getUserName());
obsolete.setPublishTime(LocalDateTime.now());
updateById(obsolete);
}
info.setState(PublishState.Obsolete.getState());
obsolete.setState(PublishState.Published.getState());
updateById(obsolete);
}
updateById(info);
}

View File

@ -128,10 +128,13 @@ public class ProductHonorServiceImpl extends ServiceImpl<ProductHonorMapper, Pro
.orderByDesc(ProductHonor::getPublishTime)
.last("Limit 1")
.one();
VUtils.trueThrowBusinessError(Objects.isNull(obsolete)).throwMessage("不能取消该发布");
if (Objects.nonNull(obsolete)) {
obsolete.setState(PublishState.Published.getState());
obsolete.setPublishBy(AdminUserUtil.getUserName());
obsolete.setPublishTime(LocalDateTime.now());
updateById(obsolete);
}
info.setState(PublishState.Obsolete.getState());
obsolete.setState(PublishState.Published.getState());
updateById(obsolete);
}
updateById(info);
}

View File

@ -152,10 +152,13 @@ public class ProductModelFileServiceImpl extends ServiceImpl<ProductModelFileMap
.orderByDesc(ProductModelFile::getPublishTime)
.last("Limit 1")
.one();
VUtils.trueThrowBusinessError(Objects.isNull(obsolete)).throwMessage("不能取消该发布");
if (Objects.nonNull(obsolete)) {
obsolete.setState(PublishState.Published.getState());
obsolete.setPublishBy(AdminUserUtil.getUserName());
obsolete.setPublishTime(LocalDateTime.now());
updateById(obsolete);
}
info.setState(PublishState.Obsolete.getState());
obsolete.setState(PublishState.Published.getState());
updateById(obsolete);
}
updateById(info);
}

View File

@ -109,10 +109,13 @@ public class ProductModelImageServiceImpl extends ServiceImpl<ProductModelImageM
.orderByDesc(ProductModelImage::getPublishTime)
.last("Limit 1")
.one();
VUtils.trueThrowBusinessError(Objects.isNull(obsolete)).throwMessage("不能取消该发布");
if (Objects.nonNull(obsolete)) {
obsolete.setState(PublishState.Published.getState());
obsolete.setPublishBy(AdminUserUtil.getUserName());
obsolete.setPublishTime(LocalDateTime.now());
updateById(obsolete);
}
info.setState(PublishState.Obsolete.getState());
obsolete.setState(PublishState.Published.getState());
updateById(obsolete);
}
updateById(info);
}

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -206,4 +207,32 @@ public class ProductModelParamsServiceImpl extends ServiceImpl<ProductModelParam
});
return vos;
}
@Override
public List<ProductModelMainParamsItemChildrenVO> getCNList(Integer modelId) {
ProductModelParams modelParams=lambdaQuery().eq(ProductModelParams::getModelId, modelId)
.ne(ProductModelParams::getState, PublishState.Obsolete.getState())
.orderByDesc(ProductModelParams::getState)
.last("Limit 1")
.one();
if (Objects.isNull(modelParams)){
return Collections.emptyList();
}
List<ProductModelParamsItem> datas = productModelParamsItemService.lambdaQuery()
.eq(ProductModelParamsItem::getModelParamsId, modelParams.getId())
.eq(ProductModelParamsItem::getLanguageCode, Constant.DEFAULT_LANGUAGE_CODE)
.list();
List<ProductModelMainParamsItemChildrenVO> vos = new ArrayList<>();
Map<String, List<ProductModelParamsItem>> itemMap = datas.stream().collect(Collectors.groupingBy(ProductModelParamsItem::getIndexName));
itemMap.forEach((indexName, itemData) -> {
ProductModelMainParamsItemChildrenVO ivo=new ProductModelMainParamsItemChildrenVO()
.setIndexName(indexName)
.setItems(itemData.stream()
.filter(pi -> StrUtil.isNotBlank(pi.getName()))
.map(pi -> Convert.convert(ProductParamsItemVO.class, pi))
.collect(Collectors.toList()));
vos.add(ivo);
});
return vos;
}
}

View File

@ -250,10 +250,13 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
.orderByDesc(ProductModel::getPublishTime)
.last("Limit 1")
.one();
VUtils.trueThrowBusinessError(Objects.isNull(obsolete)).throwMessage("不能取消该发布");
if (Objects.nonNull(obsolete)) {
obsolete.setState(PublishState.Published.getState());
obsolete.setPublishBy(AdminUserUtil.getUserName());
obsolete.setPublishTime(LocalDateTime.now());
updateById(obsolete);
}
info.setState(PublishState.Obsolete.getState());
obsolete.setState(PublishState.Published.getState());
updateById(obsolete);
}
updateById(info);
}
@ -394,6 +397,7 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
ProductModel productModel = getById(modelId);
VUtils.trueThrowBusinessError(Objects.isNull(productModel)).throwMessage("无效的数据");
return new ProductModelCompareInfoVO()
.setId(productModel.getId())
.setNo(productModel.getNo())
.setImage(productModel.getImage())
.setParams(productPartParamsService.getAllListByLanguage(modelId, language));

View File

@ -130,10 +130,13 @@ public class ProductModelVideoServiceImpl extends ServiceImpl<ProductModelVideoM
.orderByDesc(ProductModelVideo::getPublishTime)
.last("Limit 1")
.one();
VUtils.trueThrowBusinessError(Objects.isNull(obsolete)).throwMessage("不能取消该发布");
if (Objects.nonNull(obsolete)) {
obsolete.setState(PublishState.Published.getState());
obsolete.setPublishBy(AdminUserUtil.getUserName());
obsolete.setPublishTime(LocalDateTime.now());
updateById(obsolete);
}
info.setState(PublishState.Obsolete.getState());
obsolete.setState(PublishState.Published.getState());
updateById(obsolete);
}
updateById(info);
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoLanguageVO;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoVO;
import com.nflg.mobilebroken.common.pojo.vo.ProductPartSearchVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil;
@ -86,6 +87,11 @@ public class ProductPartServiceImpl extends ServiceImpl<ProductPartMapper, Produ
return part;
}
@Override
public ProductPartInfoLanguageVO getInfo(Integer partId, String language) {
return baseMapper.getInfoByLanguage(partId, language);
}
@Override
public void enable(EnableRequest request) {
lambdaUpdate()

View File

@ -166,10 +166,13 @@ public class ProductSeriesServiceImpl extends ServiceImpl<ProductSeriesMapper, P
.orderByDesc(ProductSeries::getPublishTime)
.last("Limit 1")
.one();
VUtils.trueThrowBusinessError(Objects.isNull(obsolete)).throwMessage("不能取消该发布");
if (Objects.nonNull(obsolete)) {
obsolete.setState(PublishState.Published.getState());
obsolete.setPublishBy(AdminUserUtil.getUserName());
obsolete.setPublishTime(LocalDateTime.now());
updateById(obsolete);
}
info.setState(PublishState.Obsolete.getState());
obsolete.setState(PublishState.Published.getState());
updateById(obsolete);
}
updateById(info);
}

View File

@ -80,7 +80,7 @@ public class ProductTypeInfoServiceImpl extends ServiceImpl<ProductTypeInfoMappe
}
@Override
public ProductTypeLanguageInfoVO getInfoByLanguage(Integer typeId, String language) {
return baseMapper.getInfoByLanguage(typeId, language);
public ProductTypeLanguageInfoVO getInfoByLanguage(String typeNumber, String language) {
return baseMapper.getInfoByLanguage(typeNumber, language);
}
}

View File

@ -209,10 +209,13 @@ public class ProductTypeServiceImpl extends ServiceImpl<ProductTypeMapper, Produ
.orderByDesc(ProductType::getPublishTime)
.last("Limit 1")
.one();
VUtils.trueThrowBusinessError(Objects.isNull(obsolete)).throwMessage("不能取消该发布");
if (Objects.nonNull(obsolete)) {
obsolete.setState(PublishState.Published.getState());
obsolete.setPublishBy(AdminUserUtil.getUserName());
obsolete.setPublishTime(LocalDateTime.now());
updateById(obsolete);
}
info.setState(PublishState.Obsolete.getState());
obsolete.setState(PublishState.Published.getState());
updateById(obsolete);
}
updateById(info);
}
@ -305,8 +308,8 @@ public class ProductTypeServiceImpl extends ServiceImpl<ProductTypeMapper, Produ
}
@Override
public ProductTypeLanguageInfoVO getInfoByLanguage(Integer typeId, String language) {
return productTypeInfoService.getInfoByLanguage(typeId,language);
public ProductTypeLanguageInfoVO getInfoByLanguage(String typeNumber, String language) {
return productTypeInfoService.getInfoByLanguage(typeNumber,language);
}
private void delete(Integer typeId){

View File

@ -26,7 +26,7 @@
</select>
<select id="get" resultType="com.nflg.mobilebroken.common.pojo.vo.ProductHonorVO">
SELECT YEAR(ph.obtaining_time) AS 'year',ph.title,phi.image
SELECT YEAR(ph.obtaining_time) AS 'year',phi.title,phi.image
FROM product_honor ph
LEFT JOIN product_honor_info phi ON phi.honor_id=ph.id AND phi.language_code=#{language}
WHERE ph.enable=1 AND ph.state=1

View File

@ -26,4 +26,11 @@
LEFT JOIN product_attr pa on pp.attr_id=pa.id
WHERE pp.id=#{partId}
</select>
<select id="getInfoByLanguage" resultType="com.nflg.mobilebroken.common.pojo.vo.ProductPartInfoLanguageVO">
select ppi.*
from product_part pp
inner join product_part_info ppi on pp.id=ppi.part_id
where pp.enable=1 and pp.id=#{partId} and ppi.language_code=#{language}
</select>
</mapper>

View File

@ -10,6 +10,6 @@
select pti.*
from product_type pt
inner join product_type_info pti on pt.id=pti.type_id
where pt.state=1 and pt.enable=1 and pt.id=#{typeId} and pti.language_code=#{language}
where pt.state=1 and pt.enable=1 and pt.batch_number=#{typeNumber} and pti.language_code=#{language}
</select>
</mapper>

View File

@ -10,7 +10,6 @@ import com.nflg.mobilebroken.starter.handler.UTCLocalDateTimeTypeHandler;
import com.nflg.mobilebroken.starter.handler.UTCLocalDateTypeHandler;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
@ -26,10 +25,10 @@ import java.time.LocalDateTime;
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = MysqlDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
//@MapperScan(basePackages = MysqlDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MysqlDataSourceConfig {
static final String PACKAGE = "com.nflg.mobilebroken.repository.mapper";
// static final String PACKAGE = "com.nflg.mobilebroken.repository.mapper";
static final String MAPPER_LOCATION = "classpath*:mapper/**/*.xml";
/**

View File

@ -43,6 +43,7 @@
<weixin.version>4.7.0</weixin.version>
<zxing.version>3.5.3</zxing.version>
<oss.version>3.17.4</oss.version>
<eec.version>0.5.24</eec.version>
</properties>
<dependencies>
<dependency>
@ -172,6 +173,11 @@
<artifactId>aliyun-sdk-oss</artifactId>
<version>${oss.version}</version>
</dependency>
<dependency>
<groupId>org.ttzero</groupId>
<artifactId>eec</artifactId>
<version>${eec.version}</version>
</dependency>
</dependencies>
</dependencyManagement>