refactor(ticket): 优化工单消息推送与多语言组件适配

- 优化工单相关控制器,新增工单推送消息的统一推送功能
- 设备详情VO改造,拆分实体,增加字段,丰富设备信息
- 统一零件多语言数据服务,替换旧语言数据实体及接口
- 统一工单事件发送逻辑,新增处理中状态的消息及邮件发送支持
- 修改TBaseLanguageData为GongfuDevicePartLanguageData,实现零件名称多语言支持
- 统一uniPushService发送方法,新增工单聊天消息及待办消息发送接口
- 统一工单导出PDF时客户名称和区域的获取逻辑,完善导出内容
- 修改深度翻译接口,调整请求参数传递方式由请求体改为请求参数
- 调整IdPostRequest类,ids类型由Integer改为Long
- 更新pom文件中ognl依赖版本,降低版本号以兼容需求
- 修改票据PDF模板,调整标题及设备区域展示标签和内容
- 完善uniPush消息体,新增标题和内容字段以支持更丰富的推送消息
- 优化TicketController中多处代码,规范集合处理与字符串切割转换
- 代码中统一格式和注释,提升代码可读性和维护性
This commit is contained in:
曹鹏飞 2025-11-28 18:23:42 +08:00
parent a24d588be4
commit cc53fb1b68
18 changed files with 348 additions and 68 deletions

View File

@ -67,7 +67,7 @@
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.4.3</version>
<version>3.1.28</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.itextpdf</groupId>-->

View File

@ -372,6 +372,9 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToApp(Long.valueOf(ticket.getId()), message);
ssePushService.sendTicketMessageToAdmin(Long.valueOf(ticket.getId()), message);
request.getUserIds().forEach(userId -> {
uniPushService.sendTodoMessageFromAdmin(Long.valueOf(ticket.getId()), Constant.FROM_ADMIN, userId, "分派工单");
});
return ApiResult.success();
}
@ -430,6 +433,10 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToAdmin(Long.valueOf(id), message);
ssePushService.sendTicketMessageToApp(Long.valueOf(id), message);
uniPushService.sendTodoMessageFromAdmin(Long.valueOf(ticket.getId()), ticket.getUserPlatform(), ticket.getUserId(), "工单已完成");
deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo()).forEach(cqm -> {
uniPushService.sendTodoMessageFromAdmin(Long.valueOf(ticket.getId()), Constant.FROM_ADMIN, cqm, "工单已完成");
});
}
return ApiResult.success();
}
@ -457,6 +464,7 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToAdmin(Long.valueOf(id), message);
ssePushService.sendTicketMessageToApp(Long.valueOf(id), message);
uniPushService.sendTodoMessageFromAdmin(Long.valueOf(ticket.getId()), Constant.FROM_ADMIN, StrUtil.splitToInt(ticket.getHandle(), ",")[0], "工单被驳回");
}
return ApiResult.success();
}
@ -1288,6 +1296,8 @@ public class TicketController extends ControllerBase {
.setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话")
.setTicketId(Long.valueOf(ticketId))
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
@ -1331,6 +1341,8 @@ public class TicketController extends ControllerBase {
.setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话")
.setTicketId(request.getTicketId())
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
@ -1388,6 +1400,7 @@ public class TicketController extends ControllerBase {
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setTicketId(Long.valueOf(ticketId))
.setUserId(AdminUserUtil.getUserId())
.setCategory("ticketCallJoined")
@ -1481,6 +1494,7 @@ public class TicketController extends ControllerBase {
.setSendData(new UniPushMessageBody()
.setTitle("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话结束")
.setTicketId(request.getTicketId())
.setUserId(Integer.valueOf(StrUtil.split(uid, "-").get(1)))
.setCategory("ticketCallEnd")

View File

@ -5,10 +5,7 @@ import com.nflg.mobilebroken.common.pojo.request.TranslateWordRequest;
import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.starter.service.ITranslate;
import com.nflg.mobilebroken.starter.service.impl.DeepSeekTranslate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
@ -42,7 +39,7 @@ public class TranslateController extends ControllerBase{
* @return 翻译结果
*/
@PostMapping("deepseek")
public ApiResult<String> deepseek(@RequestBody String text) {
public ApiResult<String> deepseek(@RequestParam String text) {
return ApiResult.success(deepSeekTranslate.translateWord(text, "auto", AdminUserUtil.getLanguageName(), "text"));
}
}

View File

@ -480,6 +480,7 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToAdmin(id, message);
ssePushService.sendTicketMessageToApp(id, message);
uniPushService.sendTodoMessageFromApp(ticket.getId(), ticket.getCurrentHandle(), "工单被重启");
return ApiResult.success();
}
@ -571,6 +572,8 @@ public class TicketController extends ControllerBase {
.setTitle("视频通话")
.setContent(appUser.getName() + "请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContent(appUser.getName() + "请求与您视频通话")
.setTicketId(ticketId)
.setUserId(appUser.getId())
.setUserName(appUser.getName())
@ -609,6 +612,7 @@ public class TicketController extends ControllerBase {
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setTicketId(ticketId)
.setUserId(AppUserUtil.getUserId())
.setCategory("ticketCallJoined")
@ -635,6 +639,7 @@ public class TicketController extends ControllerBase {
.setSendData(new UniPushMessageBody()
.setTitle("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话结束")
.setTicketId(request.getTicketId())
.setUserId(Integer.valueOf(StrUtil.split(uid, "-").get(1)))
.setCategory("ticketCallEnd")

View File

@ -4,8 +4,8 @@ import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.util.AppUserUtil;
import com.nflg.mobilebroken.starter.service.impl.DeepSeekTranslate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@ -26,7 +26,7 @@ public class TranslateController extends ControllerBase {
* @return 翻译结果
*/
@PostMapping("deepseek")
public ApiResult<String> deepseek(@RequestBody String text) {
return ApiResult.success(deepSeekTranslate.translateWord(text, "auto", AppUserUtil.getLanguageName(), "html"));
public ApiResult<String> deepseek(@RequestParam String text) {
return ApiResult.success(deepSeekTranslate.translateWord(text, "auto", AppUserUtil.getLanguageName(), "text"));
}
}

View File

@ -21,10 +21,7 @@ import org.springframework.context.ApplicationEvent;
import javax.mail.MessagingException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@ -63,6 +60,9 @@ public class GongFuTicketCreateEvent extends ApplicationEvent implements Applica
if (Objects.equals(ticket.getState(), TicketState.PendingProcessing.getState())) {
sendUserMessage();
sendEmail();
} else if (Objects.equals(ticket.getState(), TicketState.Processing.getState())) {
sendUserMessage1();
sendEmail1();
}
}
@ -71,22 +71,41 @@ public class GongFuTicketCreateEvent extends ApplicationEvent implements Applica
List<Integer> cqms = deviceType1Service.getCqms(ticket.getDeviceNo());
if (CollectionUtil.isEmpty(cqms)) {
log.error("该设备尚未设置服务经理:{}", ticket.getDeviceNo());
} else {
List<AdminUser> cqmUsers = adminUserService.listByIds(cqms);
if (CollectionUtil.isNotEmpty(cqmUsers)) {
cqmUsers.forEach(c -> adminMessageService.add(
new AdminMessage()
.setNo(ticket.getNo())
.setTitle(ticket.getTitle())
.setUserId(c.getId())
.setSourceId(ticket.getId())
.setSource(3)
.setType(MessageType.WorkOrderAssignment.getState())
.setSubType(MessageSubType.TicketToBeAssigned.getState())
.setIsRead(false)
.setCreateTime(LocalDateTime.now()))
);
}
return;
}
List<AdminUser> cqmUsers = adminUserService.listByIds(cqms);
if (CollectionUtil.isNotEmpty(cqmUsers)) {
cqmUsers.forEach(c -> adminMessageService.add(
new AdminMessage()
.setNo(ticket.getNo())
.setTitle(ticket.getTitle())
.setUserId(c.getId())
.setSourceId(ticket.getId())
.setSource(3)
.setType(MessageType.WorkOrderAssignment.getState())
.setSubType(MessageSubType.TicketToBeAssigned.getState())
.setIsRead(false)
.setCreateTime(LocalDateTime.now()))
);
}
}
private void sendUserMessage1() {
//我的待办
List<AdminUser> handlers = adminUserService.listByIds(Collections.singleton(StrUtil.splitToLong(ticket.getHandle(), ",")));
if (CollectionUtil.isNotEmpty(handlers)) {
handlers.forEach(c -> adminMessageService.add(
new AdminMessage()
.setNo(ticket.getNo())
.setTitle(ticket.getTitle())
.setUserId(c.getId())
.setSourceId(ticket.getId())
.setSource(3)
.setType(MessageType.WorkOrderAssignment.getState())
.setSubType(MessageSubType.TicketAssignment.getState())
.setIsRead(false)
.setCreateTime(LocalDateTime.now()))
);
}
}
@ -120,6 +139,31 @@ public class GongFuTicketCreateEvent extends ApplicationEvent implements Applica
}
}
private void sendEmail1() {
try {
String tickerUserName;
if (StrUtil.equals(ticket.getUserPlatform(), "app")) {
AppUser appUser = appUserService.getById(ticket.getUserId());
tickerUserName = appUser.getName();
} else {
AdminUser adminUser = adminUserService.getById(ticket.getUserId());
tickerUserName = adminUser.getUserName();
}
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_ASSIGNED, language);
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY, language)
.replace("${no}", ticket.getNo())
.replace("${title}", ticket.getTitle())
.replace("${createUser}", tickerUserName)
.replace("${handleUser}", "")
.replace("${createTime}", toTimeString(ticket.getCreateTime()))
.replace("${msg}", subject);
List<AdminUser> handlers = adminUserService.listByIds(Collections.singleton(StrUtil.splitToLong(ticket.getHandle(), ",")));
sendEmail(handlers.stream().map(AdminUser::getEmail).collect(Collectors.toSet()), subject, content);
} catch (Exception ex) {
log.error("邮件发送失败", ex);
}
}
private void sendEmail(Set<String> emails, String subject, String content) throws MessagingException {
if (CollectionUtil.isNotEmpty(emails)) {
for (String email : emails) {
@ -129,10 +173,6 @@ public class GongFuTicketCreateEvent extends ApplicationEvent implements Applica
}
private String toTimeString(LocalDateTime time) {
// return time.atZone(ZoneOffset.UTC)
// .withZoneSameInstant(ZoneId.of(zone))
// .toLocalDateTime()
// .format(FORMATTER);
return time.format(FORMATTER);
}
}

View File

@ -21,4 +21,8 @@ public class UniPushMessageCallPayload {
private String from;
private String category;
private String title;
private String content;
}

View File

@ -12,5 +12,5 @@ public class IdPostRequest {
* id集合
*/
@NotEmpty
private List<Integer> ids;
private List<Long> ids;
}

View File

@ -43,6 +43,8 @@ public class DeviceInfoVO {
//代理商名称
private String agentName;
private String agentCode;
// @JsonIgnore
// private Integer componentId;

View File

@ -74,8 +74,13 @@ public class TicketPdfVO {
return TicketState.findByValue(state).getDescription();
}
//设备地址
/**
* 设备地址
*/
private String deviceAddress;
//区域
private String ticketArea;
private List<SolutionMeasuresItemVO> measures;
}

View File

@ -67,7 +67,7 @@
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.4.3</version>
<version>3.1.28</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.itextpdf</groupId>-->

View File

@ -365,6 +365,9 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToApp(ticket.getId(), message);
ssePushService.sendTicketMessageToAdmin(ticket.getId(), message);
request.getUserIds().forEach(userId -> {
uniPushService.sendTodoMessageFromAdmin(ticket.getId(), Constant.FROM_ADMIN, userId, "分派工单");
});
return ApiResult.success();
}
@ -423,6 +426,10 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToAdmin(id, message);
ssePushService.sendTicketMessageToApp(id, message);
uniPushService.sendTodoMessageFromAdmin(ticket.getId(), ticket.getUserPlatform(), ticket.getUserId(), "工单已完成");
deviceTypeService.getCqms(ticket.getDeviceNo()).forEach(cqm -> {
uniPushService.sendTodoMessageFromAdmin(ticket.getId(), Constant.FROM_ADMIN, cqm, "工单已完成");
});
}
return ApiResult.success();
}
@ -450,6 +457,7 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToAdmin(id, message);
ssePushService.sendTicketMessageToApp(id, message);
uniPushService.sendTodoMessageFromAdmin(ticket.getId(), Constant.FROM_ADMIN, StrUtil.splitToInt(ticket.getHandle(), ",")[0], "工单被驳回");
}
return ApiResult.success();
}
@ -463,9 +471,25 @@ public class TicketController extends ControllerBase {
public void exportPdf(HttpServletResponse response, @Valid @RequestParam @NotNull(message = "工单编号不能为空") Long id) {
GongfuTicket ticket = ticketService.getById(id);
AppUser user = appUserService.getById(ticket.getUserId());
List<Integer> companyIds = Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList());
List<TBaseCustomer> companys = customerService.listByIds(companyIds);
DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo());
String comnpanyName = "";
if (user.getType() == 0) {
List<Integer> companyIds = Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList());
List<TBaseCustomer> companys = customerService.listByIds(companyIds);
comnpanyName = StrUtil.join(",", companys.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList()));
} else {
TBaseCustomer customer = customerService.lambdaQuery().eq(TBaseCustomer::getAgencyCompanyCode, device.getAgentCode()).one();
if (Objects.nonNull(customer)) {
comnpanyName = customer.getAgencyCompanyName();
}
}
String areaName = "";
if (Objects.nonNull(ticket.getAreaId())) {
GongfuTicketArea ticketArea = ticketAreaService.getById(ticket.getAreaId());
if (Objects.nonNull(ticketArea)) {
areaName = ticketArea.getName();
}
}
String handle = ticket.getHandle();
if (StrUtil.isNotBlank(handle)) {
List<AdminUser> adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
@ -495,12 +519,12 @@ public class TicketController extends ControllerBase {
.setState(ticket.getState())
.setCreateUserName(user.getName())
.setCreateTime(DateTimeUtil.format(ticket.getCreateTime()))
.setCompanyName(StrUtil.join(",", companys.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList())))
.setCompanyName(comnpanyName)
.setUrgency(ticket.getUrgency())
.setUpdateTime(DateTimeUtil.format(ticket.getUpdateTime()))
.setHandleUserName(handle)
.setReason(ticket.getReason())
.setDeviceAddress(ticket.getDeviceAddress())
.setTicketArea(areaName)
.setImages(images)
// .setFiles(files)
.setMeasures(ticketSolutionService.getSolutionMeasures(ticket.getId()).getMeasures());
@ -1193,6 +1217,8 @@ public class TicketController extends ControllerBase {
.setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话")
.setTicketId(ticketId)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
@ -1236,6 +1262,8 @@ public class TicketController extends ControllerBase {
.setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话")
.setTicketId(request.getTicketId())
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
@ -1275,6 +1303,7 @@ public class TicketController extends ControllerBase {
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setTicketId(ticketId)
.setUserId(AdminUserUtil.getUserId())
.setCategory("ticketCallJoined")
@ -1301,6 +1330,7 @@ public class TicketController extends ControllerBase {
.setSendData(new UniPushMessageBody()
.setTitle("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话结束")
.setTicketId(request.getTicketId())
.setUserId(Integer.valueOf(StrUtil.split(uid, "-").get(1)))
.setCategory("ticketCallEnd")

View File

@ -1,10 +1,144 @@
package com.nflg.mobilebroken.gongfu.pojo.vo;
import com.nflg.mobilebroken.repository.entity.Device;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class DeviceDetailResultVO extends Device {
public class DeviceDetailResultVO {
private Long id;
/**
* 设备编号
*/
private String deviceNo;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备类型
*/
private String deviceType;
/**
* 设备类型细分
*/
private String deviceTypeSub;
/**
* 设备机型
*/
private String modelNo;
/**
* 客户id
*/
private Integer customerId;
/**
* 客户名称
*/
private String customerName;
/**
* 设备状态-来自字典
*/
private Integer deviceState;
/**
* 代理商编码
*/
private String agentCode;
/**
* 代理商名称
*/
private String agentName;
/**
* 区域编码
*/
private String areaCode;
/**
* 区域名称
*/
private String areaName;
/**
* 发货日期
*/
private LocalDate shipmentDate;
/**
* 质保状态-来自字典
*/
private Integer warrantyState;
/**
* 开始质保日期
*/
private LocalDate startWarrantyDate;
/**
* 质保期
*/
private Integer warrantyMonth;
/**
* 行数据是否有效 0-无效 1-有效
*/
private Boolean dataValidState;
/**
* 数据来源 1-手工新增 2-CRM(接口同步)
*/
private Integer sourceFrom;
/**
* 数据来源id
*/
private String sourceId;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新人
*/
private String updateBy;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
/**
* 备注
*/
private String remark;
/**
* 产品线
*/
private String productLine;
/**
* 设备地址
*/
private String address;
/**
* 设备状态名称

View File

@ -41,7 +41,7 @@
<td colspan="3"><img style="width: auto;height: 35px;" alt=""
src="https://cabinet-tool.oss-cn-hangzhou.aliyuncs.com/admin/20250207/1/mmwf/logo.png"/>
</td>
<td colspan="9" style="text-align: center;margin: 10px;"><span style="font-size: 16pt;font-weight: bold;">移动破售后问题反馈表</span>
<td colspan="9" style="text-align: center;margin: 10px;"><span style="font-size: 16pt;font-weight: bold;">工服售后问题反馈表</span>
</td>
</tr>
<tr>
@ -61,8 +61,8 @@
<tr>
<td class="desc1">提交人</td>
<td colspan="2" th:text="${ticket.createUserName}"></td>
<td class="desc1">设备地点</td>
<td colspan="4" th:text="${ticket.deviceAddress}"></td>
<td class="desc1">设备区域</td>
<td colspan="4" th:text="${ticket.ticketArea}"></td>
<td colspan="2" class="desc1">设备运行时间</td>
<td colspan="2" th:text="${ticket.useTime}+'小时'"></td>
</tr>

View File

@ -9,10 +9,10 @@ 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.GongfuDevicePart;
import com.nflg.mobilebroken.repository.entity.TBaseLanguageData;
import com.nflg.mobilebroken.repository.entity.GongfuDevicePartLanguageData;
import com.nflg.mobilebroken.repository.mapper.GongfuDevicePartMapper;
import com.nflg.mobilebroken.repository.service.IGongfuDevicePartLanguageDataService;
import com.nflg.mobilebroken.repository.service.IGongfuDevicePartService;
import com.nflg.mobilebroken.repository.service.ITBaseLanguageDataService;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
@ -34,10 +34,10 @@ import java.util.stream.Collectors;
public class GongfuDevicePartServiceImpl extends ServiceImpl<GongfuDevicePartMapper, GongfuDevicePart> implements IGongfuDevicePartService {
@Resource
private ITBaseLanguageDataService languageDataService;
private IGongfuDevicePartLanguageDataService gongfuDevicePartLanguageDataService;
public Page<GongfuDevicePart> selectListByPage(@Param("query") PageBaseQuery query) {
return this.getBaseMapper().getListByPage(new Page<PageBaseQuery>(query.getPage(), query.getPageSize()), query);
return this.getBaseMapper().getListByPage(new Page<>(query.getPage(), query.getPageSize()), query);
}
public List<ExportPartDTO> exportPart(@Param("partNo") String partNo, @Param("partName") String partName) {
@ -61,20 +61,20 @@ public class GongfuDevicePartServiceImpl extends ServiceImpl<GongfuDevicePartMap
if (CollectionUtil.isEmpty(parts)) {
return Collections.emptyList();
}
List<TBaseLanguageData> languageData = languageDataService.lambdaQuery()
.eq(TBaseLanguageData::getLanguageCode, language)
.in(TBaseLanguageData::getSourceId, parts.stream().map(GongfuDevicePart::getId).collect(Collectors.toList()))
List<GongfuDevicePartLanguageData> languageData = gongfuDevicePartLanguageDataService.lambdaQuery()
.eq(GongfuDevicePartLanguageData::getLanguageCode, language)
.in(GongfuDevicePartLanguageData::getSourceId, parts.stream().map(GongfuDevicePart::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()))
GongfuDevicePartLanguageData l = languageData.stream()
.filter(data -> Objects.equals(data.getSourceId(), part.getId()) && StrUtil.isNotBlank(data.getLanguageValue()))
.findFirst()
.orElseGet(() -> languageDataService.lambdaQuery()
.eq(TBaseLanguageData::getSourceId, part.getId().longValue())
.eq(TBaseLanguageData::getLanguageCode, Constant.DEFAULT_LANGUAGE_CODE)
.orElseGet(() -> gongfuDevicePartLanguageDataService.lambdaQuery()
.eq(GongfuDevicePartLanguageData::getSourceId, part.getId())
.eq(GongfuDevicePartLanguageData::getLanguageCode, Constant.DEFAULT_LANGUAGE_CODE)
.one());
if (Objects.nonNull(l) && StrUtil.isNotBlank(l.getLanguageValue())) {
vo.setName(l.getLanguageValue());
@ -89,16 +89,16 @@ public class GongfuDevicePartServiceImpl extends ServiceImpl<GongfuDevicePartMap
@Override
public GongfuDevicePart getByIdAndLanguage(Long componentId, String language) {
GongfuDevicePart part = getById(componentId);
TBaseLanguageData languageData = languageDataService.lambdaQuery()
.eq(TBaseLanguageData::getLanguageCode, language)
.eq(TBaseLanguageData::getSourceId, componentId)
GongfuDevicePartLanguageData languageData = gongfuDevicePartLanguageDataService.lambdaQuery()
.eq(GongfuDevicePartLanguageData::getLanguageCode, language)
.eq(GongfuDevicePartLanguageData::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)
languageData = gongfuDevicePartLanguageDataService.lambdaQuery()
.eq(GongfuDevicePartLanguageData::getLanguageCode, Constant.DEFAULT_LANGUAGE_CODE)
.eq(GongfuDevicePartLanguageData::getSourceId, componentId)
.one();
if (Objects.nonNull(languageData) && StrUtil.isNotBlank(languageData.getLanguageValue())) {
part.setPartName(languageData.getLanguageValue());

View File

@ -5,8 +5,8 @@
<select id="getByDeviceNo" resultType="com.nflg.mobilebroken.common.pojo.vo.DeviceInfoVO">
SELECT d.*, dc.id AS 'componentId',c.area_name
FROM gongfu_device d
LEFT JOIN gongfu_device_component dc ON d.model_no = dc.model_no AND dc.`enable` = 1
LEFT JOIN t_base_customer c ON c.agency_company_code=d.agent_code
LEFT JOIN gongfu_device_component dc ON d.model_no = dc.model_no AND dc.`enable` = 1
LEFT JOIN t_base_customer c ON c.agency_company_code=d.agent_code
WHERE d.device_no = #{deviceNo}
ORDER BY d.data_valid_state DESC,d.device_state DESC
LIMIT 1;

View File

@ -1,7 +1,13 @@
package com.nflg.mobilebroken.starter.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
import com.nflg.mobilebroken.common.pojo.dto.UniPushMessage;
import com.nflg.mobilebroken.common.pojo.dto.UniPushMessageBody;
import com.nflg.mobilebroken.common.pojo.dto.UniPushMessageCallPayload;
import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.AppUserUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
@ -15,10 +21,53 @@ public class UniPushService {
@Value("${uniapp.cloud.push.url}")
private String url;
public void send(UniPushMessage message){
public void send(UniPushMessage message) {
log.info("发送uniapp消息{}", JSONUtil.toJsonStr(message));
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.postForEntity(url,message, String.class);
ResponseEntity<String> response = restTemplate.postForEntity(url, message, String.class);
log.info("发送uniapp消息结果{}", response.getBody());
}
public void sendTicketMessage(String from, String to, ChatMessageDTO data) {
send(new UniPushMessage()
.setSenderId(from)
.setReceiverId(to)
.setSendData(new UniPushMessageBody()
.setTitle("工单聊天消息")
.setContent(CollectionUtil.isNotEmpty(data.getAttachments()) ? "文件" : (CollectionUtil.isNotEmpty(data.getImages()) ? "图片" : data.getContent()))
)
);
}
public void sendTodoMessageFromAdmin(Long ticketId, String platform, Integer userId, String content) {
send(new UniPushMessage()
.setSenderId("admin-uid-" + AdminUserUtil.getUserId())
.setReceiverId(platform + "-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("工单消息")
.setContent(content)
.setPayload(new UniPushMessageCallPayload()
.setTicketId(ticketId)
.setTitle("工单消息")
.setContent(content)
)
)
);
}
public void sendTodoMessageFromApp(Long ticketId, Integer userId, String content) {
send(new UniPushMessage()
.setSenderId("app-uid-" + AppUserUtil.getUserId())
.setReceiverId("admin-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("工单消息")
.setContent(content)
.setPayload(new UniPushMessageCallPayload()
.setTicketId(ticketId)
.setTitle("工单消息")
.setContent(content)
)
)
);
}
}

View File

@ -52,7 +52,7 @@ public class DeepSeekTranslate implements ITranslate {
data.putOnce("model", "deepseek-chat");
JSONArray array = new JSONArray();
array.add(new JSONObject().putOnce("role", "system").putOnce("content", prompt));
array.add(new JSONObject().putOnce("role", "user").putOnce("content", "请将" + text + "翻译成" + targetLanguage));
array.add(new JSONObject().putOnce("role", "user").putOnce("content", "请将" + text + "翻译成" + targetLanguage));
data.putOnce("messages", array);
data.putOnce("stream", false);
String dataStr = data.toString();