diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketEntity.java b/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketEntity.java index 7a849a5c74..f6987032a5 100644 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketEntity.java +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketEntity.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-01-16 14:56:11 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-02-11 16:40:53 + * @LastEditTime: 2025-02-12 13:03:03 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -78,6 +78,12 @@ public class TicketEntity extends BaseEntity { // private CategoryEntity category; private String categoryUid; + // user, 使用UserProtobuf json格式化 + // 关联service thread ThreadEntity的user字段,访客信息 + @Builder.Default + @Column(name = "ticket_user") + private String user = BytedeskConsts.EMPTY_JSON_STRING; + // 使用UserProtobuf json格式化 // 一个工单一个工作组,一个工作组可以有多个工单 // @ManyToOne(fetch = FetchType.LAZY) diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketResponse.java b/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketResponse.java index 9af5ca2950..a3da42d58c 100644 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketResponse.java +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketResponse.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-01-16 14:58:38 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-02-11 17:44:51 + * @LastEditTime: 2025-02-12 13:04:41 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -47,6 +47,9 @@ public class TicketResponse extends BaseResponse { // private CategoryResponse category; private String categoryUid; + // 使用UserProtobuf json格式化 + private UserProtobuf user; + // 使用UserProtobuf json格式化 // private WorkgroupResponse workgroup; private UserProtobuf workgroup; diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketRestService.java b/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketRestService.java index 469954b1e8..5733bc6fa7 100644 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketRestService.java +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketRestService.java @@ -22,6 +22,7 @@ import java.time.LocalDateTime; import com.alibaba.fastjson2.JSON; import com.bytedesk.core.base.BaseRestService; +import com.bytedesk.core.constant.BytedeskConsts; import com.bytedesk.core.rbac.auth.AuthService; import com.bytedesk.core.rbac.user.UserEntity; import com.bytedesk.core.rbac.user.UserProtobuf; @@ -152,27 +153,51 @@ public class TicketRestService extends BaseRestService serviceThreadOptional = threadRestService.findFirstByTopic(serviceThreadTopic); + if (serviceThreadOptional.isPresent()) { + userJson = serviceThreadOptional.get().getUser(); + ticket.setUser(userJson); + } + } else { + // + UserProtobuf userProtobuf = UserProtobuf.builder() + .nickname(assigneeOptional.get().getNickname()) + .avatar(assigneeOptional.get().getAvatar()) + .build(); + userProtobuf.setUid(assigneeOptional.get().getUid()); + userProtobuf.setType(UserTypeEnum.AGENT.name()); + userJson = JSON.toJSONString(userProtobuf); + } // 创建工单会话 ThreadEntity thread = createTicketThread(request, TicketTypeEnum.AGENT, userJson); ticket.setThreadTopic(thread.getTopic()); } else { ticket.setType(TicketTypeEnum.WORKGROUP.name()); ticket.setStatus(TicketStatusEnum.NEW.name()); + + String userJson = BytedeskConsts.EMPTY_JSON_STRING; // - UserProtobuf userProtobuf = UserProtobuf.builder() - .nickname(workgroupOptional.get().getNickname()) + if (StringUtils.hasText(request.getServiceThreadTopic())) { + String serviceThreadTopic = request.getServiceThreadTopic(); + Optional serviceThreadOptional = threadRestService.findFirstByTopic(serviceThreadTopic); + if (serviceThreadOptional.isPresent()) { + userJson = serviceThreadOptional.get().getUser(); + ticket.setUser(userJson); + } + } else { + // + UserProtobuf userProtobuf = UserProtobuf.builder() + .nickname(workgroupOptional.get().getNickname()) .avatar(workgroupOptional.get().getAvatar()) .build(); - userProtobuf.setUid(workgroupOptional.get().getUid()); - userProtobuf.setType(UserTypeEnum.WORKGROUP.name()); - String userJson = JSON.toJSONString(userProtobuf); + userProtobuf.setUid(workgroupOptional.get().getUid()); + userProtobuf.setType(UserTypeEnum.WORKGROUP.name()); + userJson = JSON.toJSONString(userProtobuf); + } // 创建工单会话 ThreadEntity thread = createTicketThread(request, TicketTypeEnum.WORKGROUP, userJson); ticket.setThreadTopic(thread.getTopic());