fix: 设备部件添加多语言支持

This commit is contained in:
曹鹏飞 2025-04-25 11:00:06 +08:00
parent 5c81feeb62
commit c9ed712d29
9 changed files with 89 additions and 20 deletions

View File

@ -7,10 +7,7 @@ import com.itextpdf.text.pdf.BaseFont;
import com.nflg.mobilebroken.admin.annotation.ApiMark;
import com.nflg.mobilebroken.admin.publisher.TicketEventPublisher;
import com.nflg.mobilebroken.admin.service.SsePushService;
import com.nflg.mobilebroken.common.constant.MessageSubType;
import com.nflg.mobilebroken.common.constant.MessageType;
import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.constant.TicketState;
import com.nflg.mobilebroken.common.constant.*;
import com.nflg.mobilebroken.common.exception.NflgException;
import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.PageData;
@ -492,12 +489,13 @@ public class TicketController extends ControllerBase {
.filter(url->url.endsWith(".jpg") || url.endsWith(".png") || url.endsWith(".jpeg"))
.collect(Collectors.toList());
}
TBasePart part = partService.getByIdAndLanguage(ticket.getComponentId(), Constant.DEFAULT_LANGUAGE_CODE);
TicketPdfVO vo = new TicketPdfVO()
.setNo(ticket.getNo())
.setTitle(ticket.getTitle())
.setDeviceNo(ticket.getDeviceNo())
.setModelNo(device.getModelNo())
.setComponent(ticket.getComponent())
.setComponent(Objects.nonNull(part)?part.getPartName():"")
.setUseTime(ticket.getUseTime())
.setDescription(ticket.getDescription())
.setState(ticket.getState())
@ -580,6 +578,7 @@ public class TicketController extends ControllerBase {
// }
List<Integer> handleIds=StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList());
List<Integer> cqms=adminUserService.getCQMIds();
TBasePart part = partService.getByIdAndLanguage(ticket.getComponentId(), Constant.DEFAULT_LANGUAGE_CODE);
TicketInfoVO vo = new TicketInfoVO()
.setId(ticket.getId())
.setNo(ticket.getNo())
@ -588,7 +587,7 @@ public class TicketController extends ControllerBase {
.setDeviceAddress(ticket.getDeviceAddress())
.setModelNo(device.getModelNo())
.setDeviceType(device.getDeviceType())
.setComponent(ticket.getComponent())
.setComponent(Objects.nonNull(part)?part.getPartName():"")
.setUseTime(ticket.getUseTime())
.setDescription(ticket.getDescription())
.setState(ticket.getState())
@ -947,7 +946,8 @@ public class TicketController extends ControllerBase {
createCell(row5, 1, normalStyle, ticket.getQuestion());
createCell(row5, 5, centerStyle, "问题部位");
addMergedRegion(sheet,5, 5, 6, 11);
createCell(row5, 6, normalStyle, ticket.getComponent());
TBasePart part = partService.getByIdAndLanguage(ticket.getComponentId(), Constant.DEFAULT_LANGUAGE_CODE);
createCell(row5, 6, normalStyle, Objects.nonNull(part) ? part.getPartName() : "");
//第六行
Row row6 = sheet.createRow(6);
row6.setHeightInPoints(height);

View File

@ -114,8 +114,8 @@ public class TiketController extends ControllerBase {
* @return 设备部件列表
**/
@GetMapping("getAllDeviceComponents")
public ApiResult<List<String>> getAllDeviceComponents() {
return ApiResult.success(partService.lambdaQuery().select(TBasePart::getPartName).eq(TBasePart::getEnable, true).list().stream().map(TBasePart::getPartName).collect(Collectors.toList()));
public ApiResult<List<ComponentInfo>> getAllDeviceComponents() {
return ApiResult.success(partService.getAllDeviceComponents(MultilingualUtil.getLanguage()));
}
/**
@ -201,6 +201,7 @@ public class TiketController extends ControllerBase {
List<AdminUser> adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(","));
}
TBasePart part = partService.getByIdAndLanguage(ticket.getComponentId(), MultilingualUtil.getLanguage());
TicketInfoVO vo = new TicketInfoVO()
.setId(ticket.getId())
.setNo(ticket.getNo())
@ -208,7 +209,7 @@ public class TiketController extends ControllerBase {
.setDeviceNo(ticket.getDeviceNo())
.setDeviceAddress(ticket.getDeviceAddress())
.setModelNo(Objects.nonNull(device)?device.getModelNo():"已删除")
.setComponent(ticket.getComponent())
.setComponent(Objects.nonNull(part) ? part.getPartName() : "")
.setUseTime(ticket.getUseTime())
.setDescription(ticket.getDescription())
.setState(ticket.getState())

View File

@ -3,6 +3,7 @@ package com.nflg.mobilebroken.common.pojo.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@ -14,8 +15,8 @@ public class TicketAddRequest {
private String deviceNo;
//问题部位
@NotBlank(message = "问题部位不能为空")
private String component;
@NotNull(message = "问题部位id不能为空")
private Integer componentId;
//使用时长单位小时
private Integer useTime;

View File

@ -5,9 +5,13 @@ import lombok.Data;
@Data
public class ComponentInfo {
//部位名称
private String name;
/**
* 部件id
*/
private int id;
//语言对应的名称
private String languageValue;
/**
* 当前语言对应的部件名称
*/
private String name;
}

View File

@ -38,9 +38,9 @@ public class Ticket implements Serializable {
private String deviceNo;
/**
* 问题部
* 问题部件idt_base_part表的id
*/
private String component;
private Integer componentId;
/**
* 使用时长单位小时

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.mobilebroken.common.pojo.dto.ExportPartDTO;
import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery;
import com.nflg.mobilebroken.common.pojo.vo.ComponentInfo;
import com.nflg.mobilebroken.repository.entity.TBasePart;
import org.apache.ibatis.annotations.Param;
@ -24,4 +25,8 @@ public interface ITBasePartService extends IService<TBasePart> {
List<ExportPartDTO> exportPart(@Param("partNo")String partNo, @Param("partName") String partName);
List<String> getSimpleList(String name);
List<ComponentInfo> getAllDeviceComponents(String language);
TBasePart getByIdAndLanguage(Integer componentId, String language);
}

View File

@ -3,15 +3,22 @@ package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.util.StrUtil;
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.dto.ExportPartDTO;
import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery;
import com.nflg.mobilebroken.common.pojo.vo.ComponentInfo;
import com.nflg.mobilebroken.repository.entity.TBaseLanguageData;
import com.nflg.mobilebroken.repository.entity.TBasePart;
import com.nflg.mobilebroken.repository.mapper.TBasePartMapper;
import com.nflg.mobilebroken.repository.service.ITBaseLanguageDataService;
import com.nflg.mobilebroken.repository.service.ITBasePartService;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -25,6 +32,8 @@ import java.util.stream.Collectors;
@Service
public class TBasePartServiceImpl extends ServiceImpl<TBasePartMapper, TBasePart> implements ITBasePartService {
@Resource
private ITBaseLanguageDataService languageDataService;
public Page<TBasePart> selectListByPage(@Param("query") PageBaseQuery query){
return this.getBaseMapper().getListByPage(new Page<PageBaseQuery>(query.getPage(),query.getPageSize()), query);
@ -44,4 +53,53 @@ public class TBasePartServiceImpl extends ServiceImpl<TBasePartMapper, TBasePart
.map(TBasePart::getPartName)
.collect(Collectors.toList());
}
@Override
public List<ComponentInfo> getAllDeviceComponents(String language) {
List<TBasePart> parts = lambdaQuery().eq(TBasePart::getEnable, 1).list();
List<TBaseLanguageData> languageData = languageDataService.lambdaQuery()
.eq(TBaseLanguageData::getLanguageCode, language)
.in(TBaseLanguageData::getSourceId, parts.stream().map(TBasePart::getId).collect(Collectors.toList()))
.list();
List<ComponentInfo> vos = new ArrayList<>();
parts.forEach(part -> {
ComponentInfo vo = new ComponentInfo();
vo.setId(part.getId());
TBaseLanguageData l = languageData.stream()
.filter(data -> Objects.equals(data.getSourceId().intValue(), part.getId()) && StrUtil.isNotBlank(data.getLanguageValue()))
.findFirst()
.orElseGet(() -> languageDataService.lambdaQuery()
.eq(TBaseLanguageData::getSourceId, part.getId().longValue())
.eq(TBaseLanguageData::getLanguageCode, Constant.DEFAULT_LANGUAGE_CODE)
.one());
if (Objects.nonNull(l) && StrUtil.isNotBlank(l.getLanguageValue())) {
vo.setName(l.getLanguageValue());
} else {
vo.setName(part.getPartName());
}
vos.add(vo);
});
return vos;
}
@Override
public TBasePart getByIdAndLanguage(Integer componentId, String language) {
TBasePart part = getById(componentId);
TBaseLanguageData languageData = languageDataService.lambdaQuery()
.eq(TBaseLanguageData::getLanguageCode, language)
.eq(TBaseLanguageData::getSourceId, componentId)
.one();
if (Objects.nonNull(languageData) && StrUtil.isNotBlank(languageData.getLanguageValue())){
part.setPartName(languageData.getLanguageValue());
}else {
languageData = languageDataService.lambdaQuery()
.eq(TBaseLanguageData::getLanguageCode, Constant.DEFAULT_LANGUAGE_CODE)
.eq(TBaseLanguageData::getSourceId, componentId)
.one();
if (Objects.nonNull(languageData) && StrUtil.isNotBlank(languageData.getLanguageValue())){
part.setPartName(languageData.getLanguageValue());
}
}
return part;
}
}

View File

@ -72,7 +72,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
.setNo(no)
.setDeviceNo(request.getDeviceNo())
.setDeviceAddress(request.getDeviceAddress())
.setComponent(request.getComponent())
.setComponentId(request.getComponentId())
.setUseTime(request.getUseTime())
.setTitle(request.getTitle())
.setDescription(request.getDescription())

View File

@ -101,7 +101,7 @@
</update>
<select id="getComponents" resultType="com.nflg.mobilebroken.common.pojo.vo.ComponentInfo">
SELECT dcd.model_part_name AS 'name', ld.language_value AS 'languageValue'
SELECT p.id, if(LENGTH(ld.language_value)>0,ld.language_value,p.part_name) AS 'name'
FROM device_component_detail dcd
INNER JOIN t_base_part p ON dcd.model_part_id = p.id
LEFT JOIN t_base_language_data ld ON dcd.model_part_id = ld.source_id