This commit is contained in:
jack ning
2025-02-02 23:55:25 +08:00
parent 22cba3bd5f
commit 94aab8e7a9
3 changed files with 312 additions and 100 deletions

View File

@@ -2,7 +2,7 @@
* @Author: jackning 270580156@qq.com
* @Date: 2025-01-21 12:45:10
* @LastEditors: jackning 270580156@qq.com
* @LastEditTime: 2025-02-02 22:34:38
* @LastEditTime: 2025-02-02 23:54:17
* @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,21 +15,20 @@ package com.bytedesk.ticket.service;
import org.flowable.dmn.api.DmnDecisionService;
import org.flowable.dmn.engine.DmnEngine;
import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
// import org.flowable.dmn.api.DmnRuleService;
import com.bytedesk.ticket.ticket.TicketEntity;
import lombok.RequiredArgsConstructor;
import java.util.HashMap;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class TicketDmnService {
@Autowired
private DmnEngine dmnEngine;
private final DmnEngine dmnEngine;
public void evaluateTicketPriority(TicketEntity ticket) {
Map<String, Object> variables = new HashMap<>();

View File

@@ -1,79 +1,200 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:flowable="http://flowable.org/bpmn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
targetNamespace="BytedeskTicket">
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="BytedeskTicket"
exporter="Flowable Open Source Modeler" exporterVersion="6.8.0">
<process id="agentTicketProcess" name="Agent Ticket Process" isExecutable="true">
<startEvent id="start" name="Create Ticket"/>
<!-- Priority Evaluation -->
<sequenceFlow sourceRef="start" targetRef="evaluatePriority"/>
<businessRuleTask id="evaluatePriority" name="Evaluate Priority"
flowable:decisionRef="ticketPriorityRules"/>
<!-- Assign to Agent -->
<sequenceFlow sourceRef="evaluatePriority" targetRef="assignToAgent"/>
<userTask id="assignToAgent" name="Agent Handle" flowable:assignee="${agentUid}">
<startEvent id="start" name="Create Ticket" flowable:formFieldValidation="true"></startEvent>
<sequenceFlow id="sequenceFlow-6b9988a7-7304-40b8-b71a-9676e0060923" sourceRef="start"
targetRef="evaluatePriority"></sequenceFlow>
<businessRuleTask id="evaluatePriority" name="Evaluate Priority"></businessRuleTask>
<sequenceFlow id="sequenceFlow-a275b096-0da9-42a2-b28a-df7147204665"
sourceRef="evaluatePriority" targetRef="assignToAgent"></sequenceFlow>
<userTask id="assignToAgent" name="Agent Handle" flowable:assignee="${agentUid}"
flowable:formFieldValidation="true">
<documentation>Assigned agent handles the ticket</documentation>
<extensionElements>
<flowable:formProperty id="solution" name="Solution" type="string" required="true"/>
<flowable:formProperty id="solution" name="Solution" type="string" required="true"></flowable:formProperty>
<flowable:formProperty id="status" name="Status" type="enum">
<flowable:value id="resolved" name="Resolved"/>
<flowable:value id="pending" name="Pending"/>
<flowable:value id="escalated" name="Escalated"/>
<flowable:value id="resolved" name="Resolved"></flowable:value>
<flowable:value id="pending" name="Pending"></flowable:value>
<flowable:value id="escalated" name="Escalated"></flowable:value>
</flowable:formProperty>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<!-- SLA Monitor -->
<boundaryEvent id="slaTimer" attachedToRef="assignToAgent">
<boundaryEvent id="slaTimer" attachedToRef="assignToAgent" cancelActivity="true">
<timerEventDefinition>
<timeDuration>${slaTime}</timeDuration>
</timerEventDefinition>
</boundaryEvent>
<sequenceFlow sourceRef="slaTimer" targetRef="slaNotification"/>
<sequenceFlow id="sequenceFlow-6bba06cf-67ca-4436-b40b-99e53b9dec73" sourceRef="slaTimer"
targetRef="slaNotification"></sequenceFlow>
<serviceTask id="slaNotification" name="SLA Timeout Notification"
flowable:class="com.bytedesk.ticket.delegate.TicketSLATimeoutNotificationDelegate"/>
<sequenceFlow sourceRef="slaNotification" targetRef="escalateTicket"/>
<!-- Ticket Escalation -->
flowable:class="com.bytedesk.ticket.delegate.TicketSLATimeoutNotificationDelegate"></serviceTask>
<sequenceFlow id="sequenceFlow-5f9c2d88-90a6-4463-a57d-0a37045d8a19"
sourceRef="slaNotification" targetRef="escalateTicket"></sequenceFlow>
<serviceTask id="escalateTicket" name="Escalate Ticket"
flowable:class="com.bytedesk.ticket.delegate.TicketEscalationDelegate"/>
<sequenceFlow sourceRef="escalateTicket" targetRef="supervisorHandle"/>
<!-- Supervisor Handle -->
<userTask id="supervisorHandle" name="Supervisor Handle" flowable:candidateGroups="supervisors">
flowable:class="com.bytedesk.ticket.delegate.TicketEscalateDelegate"></serviceTask>
<sequenceFlow id="sequenceFlow-e62f7af5-5b8c-4bb0-96aa-38fc86c7fef4"
sourceRef="escalateTicket" targetRef="supervisorHandle"></sequenceFlow>
<userTask id="supervisorHandle" name="Supervisor Handle"
flowable:candidateGroups="supervisors" flowable:formFieldValidation="true">
<documentation>Supervisor handles escalated ticket</documentation>
<extensionElements>
<flowable:formProperty id="solution" name="Solution" type="string" required="true"></flowable:formProperty>
<flowable:formProperty id="status" name="Status" type="enum">
<flowable:value id="resolved" name="Resolved"></flowable:value>
<flowable:value id="pending" name="Pending"></flowable:value>
</flowable:formProperty>
</extensionElements>
</userTask>
<sequenceFlow sourceRef="supervisorHandle" targetRef="assignToAgent"/>
<!-- Customer Verification -->
<sequenceFlow sourceRef="assignToAgent" targetRef="customerVerify"/>
<userTask id="customerVerify" name="Customer Verify" flowable:assignee="${creator}">
<sequenceFlow id="sequenceFlow-599241c8-5be4-4a9f-89b1-3dad57547453"
sourceRef="supervisorHandle" targetRef="customerVerify"></sequenceFlow>
<sequenceFlow id="sequenceFlow-056d0348-b895-4548-8f29-171bf6b045bb"
sourceRef="assignToAgent" targetRef="customerVerify"></sequenceFlow>
<userTask id="customerVerify" name="Customer Verify" flowable:assignee="${userUid}"
flowable:formFieldValidation="true">
<documentation>Customer verifies if the issue is resolved</documentation>
<extensionElements>
<flowable:formProperty id="satisfied" name="Satisfied" type="boolean" required="true"/>
<flowable:formProperty id="comment" name="Comment" type="string"/>
<flowable:formProperty id="satisfied" name="Satisfied" type="boolean"
required="true"></flowable:formProperty>
<flowable:formProperty id="comment" name="Comment" type="string"></flowable:formProperty>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<!-- Satisfaction Survey -->
<sequenceFlow sourceRef="customerVerify" targetRef="satisfactionSurvey"/>
<userTask id="satisfactionSurvey" name="Satisfaction Survey" flowable:assignee="${creator}">
<sequenceFlow id="sequenceFlow-1ff290a2-7f8d-4303-a819-ec4115a509b0"
sourceRef="customerVerify" targetRef="satisfactionSurvey"></sequenceFlow>
<userTask id="satisfactionSurvey" name="Satisfaction Survey" flowable:assignee="${userUid}"
flowable:formFieldValidation="true">
<extensionElements>
<flowable:formProperty id="rating" name="Rating" type="enum">
<flowable:value id="5" name="Very Satisfied"/>
<flowable:value id="4" name="Satisfied"/>
<flowable:value id="3" name="Neutral"/>
<flowable:value id="2" name="Dissatisfied"/>
<flowable:value id="1" name="Very Dissatisfied"/>
<flowable:value id="5" name="Very Satisfied"></flowable:value>
<flowable:value id="4" name="Satisfied"></flowable:value>
<flowable:value id="3" name="Neutral"></flowable:value>
<flowable:value id="2" name="Dissatisfied"></flowable:value>
<flowable:value id="1" name="Very Dissatisfied"></flowable:value>
</flowable:formProperty>
<flowable:formProperty id="feedback" name="Feedback" type="string"/>
<flowable:formProperty id="feedback" name="Feedback" type="string"></flowable:formProperty>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<sequenceFlow sourceRef="satisfactionSurvey" targetRef="end"/>
<endEvent id="end" name="End Ticket"/>
<sequenceFlow id="sequenceFlow-90cf414f-3cf9-4b11-bbfa-f43d5f85ed2e"
sourceRef="satisfactionSurvey" targetRef="end"></sequenceFlow>
<endEvent id="end" name="End Ticket"></endEvent>
</process>
</definitions>
<bpmndi:BPMNDiagram id="BPMNDiagram_agentTicketProcess">
<bpmndi:BPMNPlane bpmnElement="agentTicketProcess" id="BPMNPlane_agentTicketProcess">
<bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
<omgdc:Bounds height="30.0" width="30.0" x="135.0" y="115.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="evaluatePriority" id="BPMNShape_evaluatePriority">
<omgdc:Bounds height="60.0" width="100.0" x="250.0" y="100.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="assignToAgent" id="BPMNShape_assignToAgent">
<omgdc:Bounds height="60.0" width="100.0" x="400.0" y="100.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="slaTimer" id="BPMNShape_slaTimer">
<omgdc:Bounds height="31.0" width="31.0" x="465.20710678118655"
y="145.20710678118655"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="slaNotification" id="BPMNShape_slaNotification">
<omgdc:Bounds height="60.0" width="100.0" x="100.0" y="260.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="escalateTicket" id="BPMNShape_escalateTicket">
<omgdc:Bounds height="60.0" width="100.0" x="250.0" y="260.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="supervisorHandle" id="BPMNShape_supervisorHandle">
<omgdc:Bounds height="60.0" width="100.0" x="400.0" y="260.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="customerVerify" id="BPMNShape_customerVerify">
<omgdc:Bounds height="60.0" width="100.0" x="550.0" y="180.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="satisfactionSurvey" id="BPMNShape_satisfactionSurvey">
<omgdc:Bounds height="60.0" width="100.0" x="700.0" y="180.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
<omgdc:Bounds height="28.0" width="28.0" x="850.0" y="195.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-6bba06cf-67ca-4436-b40b-99e53b9dec73"
id="BPMNEdge_sequenceFlow-6bba06cf-67ca-4436-b40b-99e53b9dec73"
flowable:sourceDockerX="15.500000000000002"
flowable:sourceDockerY="15.500000000000002" flowable:targetDockerX="50.0"
flowable:targetDockerY="30.0">
<omgdi:waypoint x="480.64236654715717" y="176.15697486332536"></omgdi:waypoint>
<omgdi:waypoint x="480.0" y="330.0"></omgdi:waypoint>
<omgdi:waypoint x="150.0" y="330.0"></omgdi:waypoint>
<omgdi:waypoint x="150.0" y="319.95"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-599241c8-5be4-4a9f-89b1-3dad57547453"
id="BPMNEdge_sequenceFlow-599241c8-5be4-4a9f-89b1-3dad57547453"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="499.95000000000005" y="290.0"></omgdi:waypoint>
<omgdi:waypoint x="512.0" y="290.0"></omgdi:waypoint>
<omgdi:waypoint x="512.0" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="550.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-6b9988a7-7304-40b8-b71a-9676e0060923"
id="BPMNEdge_sequenceFlow-6b9988a7-7304-40b8-b71a-9676e0060923"
flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="164.94999525015479" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="212.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="212.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="249.99999999997692" y="130.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-e62f7af5-5b8c-4bb0-96aa-38fc86c7fef4"
id="BPMNEdge_sequenceFlow-e62f7af5-5b8c-4bb0-96aa-38fc86c7fef4"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="349.9499999998728" y="290.0"></omgdi:waypoint>
<omgdi:waypoint x="399.9999999997658" y="290.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-a275b096-0da9-42a2-b28a-df7147204665"
id="BPMNEdge_sequenceFlow-a275b096-0da9-42a2-b28a-df7147204665"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="349.95000000000005" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="362.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="362.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="399.9999999999769" y="130.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-90cf414f-3cf9-4b11-bbfa-f43d5f85ed2e"
id="BPMNEdge_sequenceFlow-90cf414f-3cf9-4b11-bbfa-f43d5f85ed2e"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="799.9499999999977" y="209.56140350877192"></omgdi:waypoint>
<omgdi:waypoint x="850.0005248012809" y="209.1223639291296"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-056d0348-b895-4548-8f29-171bf6b045bb"
id="BPMNEdge_sequenceFlow-056d0348-b895-4548-8f29-171bf6b045bb"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="499.95000000000005" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="512.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="512.0" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="550.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-5f9c2d88-90a6-4463-a57d-0a37045d8a19"
id="BPMNEdge_sequenceFlow-5f9c2d88-90a6-4463-a57d-0a37045d8a19"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="199.94999999987277" y="290.0"></omgdi:waypoint>
<omgdi:waypoint x="249.9999999997658" y="290.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-1ff290a2-7f8d-4303-a819-ec4115a509b0"
id="BPMNEdge_sequenceFlow-1ff290a2-7f8d-4303-a819-ec4115a509b0"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="649.9499999999581" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="700.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View File

@@ -1,68 +1,160 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:flowable="http://flowable.org/bpmn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
targetNamespace="BytedeskTicket">
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="BytedeskTicket"
exporter="Flowable Open Source Modeler" exporterVersion="6.8.0">
<process id="groupTicketProcess" name="Group Ticket Process" isExecutable="true">
<startEvent id="start" name="Create Ticket"/>
<!-- Priority Evaluation -->
<sequenceFlow sourceRef="start" targetRef="evaluatePriority"/>
<businessRuleTask id="evaluatePriority" name="Evaluate Priority"
flowable:decisionRef="ticketPriorityRules"/>
<!-- Assign to Group -->
<sequenceFlow sourceRef="evaluatePriority" targetRef="assignToGroup"/>
<userTask id="assignToGroup" name="Group Handle" flowable:candidateGroups="${workgroupUid}">
<startEvent id="start" name="Create Ticket" flowable:formFieldValidation="true"></startEvent>
<sequenceFlow id="sequenceFlow-bc10ee85-13ff-41cb-9801-e3312a63a5c9" sourceRef="start"
targetRef="evaluatePriority"></sequenceFlow>
<businessRuleTask id="evaluatePriority" name="Evaluate Priority"></businessRuleTask>
<sequenceFlow id="sequenceFlow-d42ed887-6f67-4060-8889-8fabec33506b"
sourceRef="evaluatePriority" targetRef="assignToGroup"></sequenceFlow>
<userTask id="assignToGroup" name="Group Handle" flowable:candidateGroups="${workgroupUid}"
flowable:formFieldValidation="true">
<documentation>Group members handle the ticket</documentation>
<extensionElements>
<flowable:formProperty id="solution" name="Solution" type="string" required="true"/>
<flowable:formProperty id="solution" name="Solution" type="string" required="true"></flowable:formProperty>
<flowable:formProperty id="status" name="Status" type="enum">
<flowable:value id="resolved" name="Resolved"/>
<flowable:value id="pending" name="Pending"/>
<flowable:value id="escalated" name="Escalated"/>
<flowable:value id="resolved" name="Resolved"></flowable:value>
<flowable:value id="pending" name="Pending"></flowable:value>
<flowable:value id="escalated" name="Escalated"></flowable:value>
</flowable:formProperty>
</extensionElements>
</userTask>
<!-- SLA Monitor -->
<boundaryEvent id="slaTimer" attachedToRef="assignToGroup">
<boundaryEvent id="slaTimer" attachedToRef="assignToGroup" cancelActivity="true">
<timerEventDefinition>
<timeDuration>${slaTime}</timeDuration>
</timerEventDefinition>
</boundaryEvent>
<sequenceFlow sourceRef="slaTimer" targetRef="slaNotification"/>
<sequenceFlow id="sequenceFlow-9a5f6c89-bdd8-428f-b877-3cabfc132b2a" sourceRef="slaTimer"
targetRef="slaNotification"></sequenceFlow>
<serviceTask id="slaNotification" name="SLA Timeout Notification"
flowable:class="com.bytedesk.ticket.delegate.TicketSLATimeoutNotificationDelegate"/>
<sequenceFlow sourceRef="slaNotification" targetRef="assignToGroup"/>
<!-- Customer Verification -->
<sequenceFlow sourceRef="assignToGroup" targetRef="customerVerify"/>
<userTask id="customerVerify" name="Customer Verify" flowable:assignee="${creator}">
flowable:class="com.bytedesk.ticket.delegate.TicketSLATimeoutNotificationDelegate"></serviceTask>
<sequenceFlow id="sequenceFlow-07427c3a-696b-4964-b0c6-2c22ad9a0384"
sourceRef="slaNotification" targetRef="assignToGroup"></sequenceFlow>
<sequenceFlow id="sequenceFlow-dbd150a1-5d93-4c09-aec6-11f47705eb1e"
sourceRef="assignToGroup" targetRef="customerVerify"></sequenceFlow>
<userTask id="customerVerify" name="Customer Verify" flowable:assignee="${userUid}"
flowable:formFieldValidation="true">
<documentation>Customer verifies if the issue is resolved</documentation>
<extensionElements>
<flowable:formProperty id="satisfied" name="Satisfied" type="boolean" required="true"/>
<flowable:formProperty id="comment" name="Comment" type="string"/>
<flowable:formProperty id="satisfied" name="Satisfied" type="boolean"
required="true"></flowable:formProperty>
<flowable:formProperty id="comment" name="Comment" type="string"></flowable:formProperty>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<!-- Satisfaction Survey -->
<sequenceFlow sourceRef="customerVerify" targetRef="satisfactionSurvey"/>
<userTask id="satisfactionSurvey" name="Satisfaction Survey" flowable:assignee="${creator}">
<sequenceFlow id="sequenceFlow-c405b332-2cc3-4866-842b-c4b0d82f653d"
sourceRef="customerVerify" targetRef="satisfactionSurvey"></sequenceFlow>
<userTask id="satisfactionSurvey" name="Satisfaction Survey" flowable:assignee="${userUid}"
flowable:formFieldValidation="true">
<extensionElements>
<flowable:formProperty id="rating" name="Rating" type="enum">
<flowable:value id="5" name="Very Satisfied"/>
<flowable:value id="4" name="Satisfied"/>
<flowable:value id="3" name="Neutral"/>
<flowable:value id="2" name="Dissatisfied"/>
<flowable:value id="1" name="Very Dissatisfied"/>
<flowable:value id="5" name="Very Satisfied"></flowable:value>
<flowable:value id="4" name="Satisfied"></flowable:value>
<flowable:value id="3" name="Neutral"></flowable:value>
<flowable:value id="2" name="Dissatisfied"></flowable:value>
<flowable:value id="1" name="Very Dissatisfied"></flowable:value>
</flowable:formProperty>
<flowable:formProperty id="feedback" name="Feedback" type="string"/>
<flowable:formProperty id="feedback" name="Feedback" type="string"></flowable:formProperty>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<sequenceFlow sourceRef="satisfactionSurvey" targetRef="end"/>
<endEvent id="end" name="End Ticket"/>
<sequenceFlow id="sequenceFlow-0c15524d-972d-4287-a905-582a2abbbcaa"
sourceRef="satisfactionSurvey" targetRef="end"></sequenceFlow>
<endEvent id="end" name="End Ticket"></endEvent>
</process>
</definitions>
<bpmndi:BPMNDiagram id="BPMNDiagram_groupTicketProcess">
<bpmndi:BPMNPlane bpmnElement="groupTicketProcess" id="BPMNPlane_groupTicketProcess">
<bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
<omgdc:Bounds height="30.0" width="30.0" x="100.0" y="115.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="evaluatePriority" id="BPMNShape_evaluatePriority">
<omgdc:Bounds height="60.0" width="100.0" x="180.0" y="100.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="assignToGroup" id="BPMNShape_assignToGroup">
<omgdc:Bounds height="60.0" width="100.0" x="330.0" y="180.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="slaTimer" id="BPMNShape_slaTimer">
<omgdc:Bounds height="31.0" width="31.0" x="395.20710678118655"
y="225.20710678118655"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="slaNotification" id="BPMNShape_slaNotification">
<omgdc:Bounds height="60.0" width="100.0" x="180.0" y="260.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="customerVerify" id="BPMNShape_customerVerify">
<omgdc:Bounds height="60.0" width="100.0" x="480.0" y="180.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="satisfactionSurvey" id="BPMNShape_satisfactionSurvey">
<omgdc:Bounds height="60.0" width="100.0" x="630.0" y="180.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
<omgdc:Bounds height="28.0" width="28.0" x="780.0" y="195.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-bc10ee85-13ff-41cb-9801-e3312a63a5c9"
id="BPMNEdge_sequenceFlow-bc10ee85-13ff-41cb-9801-e3312a63a5c9"
flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="129.9499750044467" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="142.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="142.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="179.99999999997692" y="130.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-9a5f6c89-bdd8-428f-b877-3cabfc132b2a"
id="BPMNEdge_sequenceFlow-9a5f6c89-bdd8-428f-b877-3cabfc132b2a"
flowable:sourceDockerX="15.500000000000002"
flowable:sourceDockerY="15.500000000000002" flowable:targetDockerX="50.0"
flowable:targetDockerY="30.0">
<omgdi:waypoint x="410.5843666811879" y="256.1566324820013"></omgdi:waypoint>
<omgdi:waypoint x="410.0" y="330.0"></omgdi:waypoint>
<omgdi:waypoint x="230.0" y="330.0"></omgdi:waypoint>
<omgdi:waypoint x="230.0" y="319.95"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-07427c3a-696b-4964-b0c6-2c22ad9a0384"
id="BPMNEdge_sequenceFlow-07427c3a-696b-4964-b0c6-2c22ad9a0384"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="279.95000000000005" y="290.0"></omgdi:waypoint>
<omgdi:waypoint x="292.0" y="290.0"></omgdi:waypoint>
<omgdi:waypoint x="292.0" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="330.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-c405b332-2cc3-4866-842b-c4b0d82f653d"
id="BPMNEdge_sequenceFlow-c405b332-2cc3-4866-842b-c4b0d82f653d"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="579.9499999999581" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="630.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-dbd150a1-5d93-4c09-aec6-11f47705eb1e"
id="BPMNEdge_sequenceFlow-dbd150a1-5d93-4c09-aec6-11f47705eb1e"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="429.9499999999581" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="480.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-0c15524d-972d-4287-a905-582a2abbbcaa"
id="BPMNEdge_sequenceFlow-0c15524d-972d-4287-a905-582a2abbbcaa"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="729.9499999999977" y="209.56140350877192"></omgdi:waypoint>
<omgdi:waypoint x="780.0005248012809" y="209.1223639291296"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow-d42ed887-6f67-4060-8889-8fabec33506b"
id="BPMNEdge_sequenceFlow-d42ed887-6f67-4060-8889-8fabec33506b"
flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0"
flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="279.95000000000005" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="292.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="292.0" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="330.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>