mirror of
https://gitee.com/270580156/weiyu.git
synced 2026-05-14 11:18:02 +00:00
auto commit: 2025-02-05 12:25:44
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* @Author: jackning 270580156@qq.com
|
||||
* @Date: 2025-01-28 13:33:20
|
||||
* @LastEditors: jackning 270580156@qq.com
|
||||
* @LastEditTime: 2025-01-28 13:36:32
|
||||
* @LastEditTime: 2025-02-05 12:19:25
|
||||
* @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.
|
||||
@@ -13,19 +13,98 @@
|
||||
*/
|
||||
package com.bytedesk.ticket.delegate;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.flowable.engine.delegate.DelegateExecution;
|
||||
import org.flowable.engine.delegate.JavaDelegate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.bytedesk.ticket.ticket.TicketEntity;
|
||||
import com.bytedesk.ticket.ticket.TicketRestService;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@Component("ticketEvaluatePriorityDelegate")
|
||||
public class TicketEvaluatePriorityDelegate implements JavaDelegate {
|
||||
|
||||
|
||||
@Autowired
|
||||
private TicketRestService ticketRestService;
|
||||
|
||||
public TicketEvaluatePriorityDelegate() {
|
||||
// 默认构造函数
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(DelegateExecution execution) {
|
||||
log.info("Evaluating ticket priority for process: {}", execution.getProcessInstanceId());
|
||||
// TODO: 实现优先级评估逻辑
|
||||
log.info("Evaluating ticket priority");
|
||||
|
||||
// 获取工单相关变量
|
||||
String ticketUid = (String) execution.getVariable("ticketUid");
|
||||
|
||||
Optional<TicketEntity> ticketOptional = ticketRestService.findByUid(ticketUid);
|
||||
if (!ticketOptional.isPresent()) {
|
||||
log.error("Ticket not found: {}", ticketUid);
|
||||
return;
|
||||
}
|
||||
TicketEntity ticket = ticketOptional.get();
|
||||
|
||||
// String customerLevel = (String) execution.getVariable("customerLevel");
|
||||
// String issueType = (String) execution.getVariable("issueType");
|
||||
// String impactLevel = (String) execution.getVariable("impactLevel");
|
||||
|
||||
// 根据规则评估优先级
|
||||
String priority = ticket.getPriority();
|
||||
// String slaTime = ticket.getSlaTime();
|
||||
|
||||
// if ("VIP".equals(customerLevel) && "SYSTEM_ERROR".equals(issueType) && "HIGH".equals(impactLevel)) {
|
||||
// priority = TicketPriorityEnum.URGENT.name();
|
||||
// slaTime = "PT1H";
|
||||
// } else if ("VIP".equals(customerLevel) && "COMPLAINT".equals(issueType)) {
|
||||
// priority = TicketPriorityEnum.HIGH.name();
|
||||
// slaTime = "PT2H";
|
||||
// } else if ("REGULAR".equals(customerLevel) && "SYSTEM_ERROR".equals(issueType) && "HIGH".equals(impactLevel)) {
|
||||
// priority = TicketPriorityEnum.HIGH.name();
|
||||
// slaTime = "PT4H";
|
||||
// } else if ("FUNCTION".equals(issueType)) {
|
||||
// priority = TicketPriorityEnum.MEDIUM.name();
|
||||
// slaTime = "PT8H";
|
||||
// } else {
|
||||
// priority = TicketPriorityEnum.LOW.name();
|
||||
// slaTime = "P1D";
|
||||
// }
|
||||
|
||||
// 根据优先级设置SLA时间
|
||||
// 根据不同优先级设置不同的SLA时间
|
||||
String slaTime = "P1D";
|
||||
switch (ticket.getPriority()) {
|
||||
case "CRITICAL":
|
||||
slaTime = "PT30M"; // 30分钟
|
||||
break;
|
||||
case "URGENT":
|
||||
slaTime = "PT1H"; // 1小时
|
||||
break;
|
||||
case "HIGH":
|
||||
slaTime = "PT2H"; // 2小时
|
||||
break;
|
||||
case "MEDIUM":
|
||||
slaTime = "PT4H"; // 4小时
|
||||
break;
|
||||
case "LOW":
|
||||
slaTime = "PT8H"; // 8小时
|
||||
break;
|
||||
case "LOWEST":
|
||||
slaTime = "P1D"; // 1天
|
||||
break;
|
||||
default:
|
||||
slaTime = "P1D"; // 1天
|
||||
}
|
||||
|
||||
// 设置流程变量
|
||||
execution.setVariable("priority", priority);
|
||||
execution.setVariable("slaTime", slaTime);
|
||||
|
||||
log.info("Priority evaluation completed: priority={}, slaTime={}", priority, slaTime);
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
* @Author: jackning 270580156@qq.com
|
||||
* @Date: 2025-01-23 14:52:45
|
||||
* @LastEditors: jackning 270580156@qq.com
|
||||
* @LastEditTime: 2025-02-05 11:15:26
|
||||
* @LastEditTime: 2025-02-05 12:13:48
|
||||
* @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.
|
||||
@@ -15,6 +15,7 @@ package com.bytedesk.ticket.listener;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
@@ -25,7 +26,7 @@ import com.bytedesk.ticket.consts.TicketConsts;
|
||||
import com.bytedesk.ticket.event.TicketCreateEvent;
|
||||
import com.bytedesk.ticket.event.TicketUpdateEvent;
|
||||
import com.bytedesk.ticket.ticket.TicketEntity;
|
||||
import com.bytedesk.ticket.ticket.TicketRepository;
|
||||
import com.bytedesk.ticket.ticket.TicketRestService;
|
||||
import com.bytedesk.ticket.ticket.TicketTypeEnum;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -38,7 +39,7 @@ public class TicketEventListener {
|
||||
|
||||
private final RuntimeService runtimeService;
|
||||
|
||||
private final TicketRepository ticketRepository;
|
||||
private final TicketRestService ticketRestService;
|
||||
|
||||
@EventListener
|
||||
public void handleTicketCreateEvent(TicketCreateEvent event) {
|
||||
@@ -47,7 +48,8 @@ public class TicketEventListener {
|
||||
|
||||
// 启动工单流程
|
||||
Map<String, Object> variables = new HashMap<>();
|
||||
// variables.put("orgUid", ticket.getOrgUid());
|
||||
variables.put("ticketUid", ticket.getUid());
|
||||
variables.put("orgUid", ticket.getOrgUid());
|
||||
variables.put("userUid", ticket.getReporter().getUid());
|
||||
String processKey = null;
|
||||
if (ticket.getType().equals(TicketTypeEnum.AGENT.name())) {
|
||||
@@ -90,8 +92,12 @@ public class TicketEventListener {
|
||||
log.info("TicketEventListener processInstance: {}", processInstance.getId());
|
||||
|
||||
// 设置工单的流程实例ID
|
||||
ticket.setProcessInstanceId(processInstance.getId());
|
||||
ticketRepository.save(ticket);
|
||||
Optional<TicketEntity> ticketOptional = ticketRestService.findByUid(ticket.getUid());
|
||||
if (ticketOptional.isPresent()) {
|
||||
TicketEntity ticketEntity = ticketOptional.get();
|
||||
ticketEntity.setProcessInstanceId(processInstance.getId());
|
||||
ticketRestService.save(ticketEntity);
|
||||
}
|
||||
}
|
||||
|
||||
@EventListener
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.bytedesk.ticket.ticket;
|
||||
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.modelmapper.ModelMapper;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
@@ -81,6 +82,13 @@ public class TicketRestService extends BaseRestService<TicketEntity, TicketReque
|
||||
return ticketPage.map(this::convertToResponse);
|
||||
}
|
||||
|
||||
@Cacheable(value = "ticket", key = "#uid", unless = "#result == null")
|
||||
@Override
|
||||
public Optional<TicketEntity> findByUid(String uid) {
|
||||
return ticketRepository.findByUid(uid);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public TicketResponse create(TicketRequest request) {
|
||||
@@ -251,11 +259,7 @@ public class TicketRestService extends BaseRestService<TicketEntity, TicketReque
|
||||
save(ticket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<TicketEntity> findByUid(String uid) {
|
||||
return ticketRepository.findByUid(uid);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handleOptimisticLockingFailureException(ObjectOptimisticLockingFailureException e,
|
||||
TicketEntity entity) {
|
||||
|
||||
@@ -1,40 +1,48 @@
|
||||
spring:
|
||||
mail:
|
||||
host: smtp.example.com
|
||||
port: 587
|
||||
username: noreply@bytedesk.com
|
||||
password: your-password
|
||||
properties:
|
||||
mail:
|
||||
smtp:
|
||||
auth: true
|
||||
starttls:
|
||||
enable: true
|
||||
# spring:
|
||||
# mail:
|
||||
# host: smtp.example.com
|
||||
# port: 587
|
||||
# username: noreply@bytedesk.com
|
||||
# password: your-password
|
||||
# properties:
|
||||
# mail:
|
||||
# smtp:
|
||||
# auth: true
|
||||
# starttls:
|
||||
# enable: true
|
||||
|
||||
flowable:
|
||||
idm:
|
||||
ldap:
|
||||
enabled: true
|
||||
server: ldap://ldap.bytedesk.com:389
|
||||
base-dn: dc=bytedesk,dc=com
|
||||
user-base-dn: ou=users
|
||||
group-base-dn: ou=groups
|
||||
user-search-filter: (uid={0})
|
||||
group-search-filter: (member={0})
|
||||
user-id-attribute: uid
|
||||
user-first-name-attribute: givenName
|
||||
user-last-name-attribute: sn
|
||||
user-email-attribute: mail
|
||||
group-id-attribute: cn
|
||||
group-name-attribute: cn
|
||||
authentication: simple
|
||||
security-principal: cn=admin,dc=bytedesk,dc=com
|
||||
security-credentials: admin_password
|
||||
dmn:
|
||||
enabled: true
|
||||
deploy-resources: true
|
||||
resource-location: classpath*:/dmn/*.dmn
|
||||
history-enabled: true
|
||||
process:
|
||||
definition-cache-limit: 1
|
||||
async-executor-activate: true
|
||||
# flowable:
|
||||
# idm:
|
||||
# ldap:
|
||||
# enabled: true
|
||||
# server: ldap://ldap.bytedesk.com:389
|
||||
# base-dn: dc=bytedesk,dc=com
|
||||
# user-base-dn: ou=users
|
||||
# group-base-dn: ou=groups
|
||||
# user-search-filter: (uid={0})
|
||||
# group-search-filter: (member={0})
|
||||
# user-id-attribute: uid
|
||||
# user-first-name-attribute: givenName
|
||||
# user-last-name-attribute: sn
|
||||
# user-email-attribute: mail
|
||||
# group-id-attribute: cn
|
||||
# group-name-attribute: cn
|
||||
# authentication: simple
|
||||
# security-principal: cn=admin,dc=bytedesk,dc=com
|
||||
# security-credentials: admin_password
|
||||
# dmn:
|
||||
# enabled: true
|
||||
# deploy-resources: true
|
||||
# resource-location: classpath*:/dmn/
|
||||
# resource-suffixes: **.dmn
|
||||
# process:
|
||||
# definition-location-prefix: classpath*:/processes/
|
||||
# definition-location-suffixes: **.bpmn20.xml
|
||||
# database-schema-update: true
|
||||
# async-executor-activate: true
|
||||
# common:
|
||||
# app:
|
||||
# idm-url: http://localhost:8080/flowable-idm
|
||||
# idm-admin:
|
||||
# user: admin
|
||||
# password: test
|
||||
@@ -21,7 +21,7 @@
|
||||
flowable:decisionRefBinding="latest"
|
||||
flowable:resultVariable="priorityResult"></businessRuleTask> -->
|
||||
<serviceTask id="evaluatePriority" name="Evaluate Priority"
|
||||
flowable:class="com.bytedesk.ticket.delegate.TicketEvaluatePriorityDelegate"/>
|
||||
flowable:delegateExpression="${ticketEvaluatePriorityDelegate}"/>
|
||||
<sequenceFlow id="sequenceFlow-a275b096-0da9-42a2-b28a-df7147204665"
|
||||
sourceRef="evaluatePriority" targetRef="assignToAgent"></sequenceFlow>
|
||||
<userTask id="assignToAgent" name="Agent Handle" flowable:assignee="${agentUid}"
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
flowable:decisionRefBinding="latest"
|
||||
flowable:resultVariable="priorityResult"></businessRuleTask> -->
|
||||
<serviceTask id="evaluatePriority" name="Evaluate Priority"
|
||||
flowable:class="com.bytedesk.ticket.delegate.TicketEvaluatePriorityDelegate"/>
|
||||
flowable:delegateExpression="${ticketEvaluatePriorityDelegate}"/>
|
||||
<sequenceFlow id="sequenceFlow-d42ed887-6f67-4060-8889-8fabec33506b"
|
||||
sourceRef="evaluatePriority" targetRef="assignToGroup"></sequenceFlow>
|
||||
<userTask id="assignToGroup" name="Group Handle" flowable:candidateGroups="${workgroupUid}"
|
||||
|
||||
Reference in New Issue
Block a user