@startuml
participant Actor
Actor -> BpmnDesignerController : 保存流程模型
activate BpmnDesignerController
BpmnDesignerController -> FlowableBpmnServiceImpl : 保存流程模型
activate FlowableBpmnServiceImpl
FlowableBpmnServiceImpl -> ModelService:查询model
activate ModelService


ModelService --> FlowableBpmnServiceImpl:Model
deactivate ModelService
alt 流程模型不存在
    FlowableBpmnServiceImpl --> BpmnDesignerController: 保存失败
    deactivate FlowableBpmnServiceImpl
    BpmnDesignerController-->Actor:保存失败
else 流程模型存在


FlowableBpmnServiceImpl -> BpmnXMLConverter: bpmn_xml转换成BpmnModel内存模型对象
        activate FlowableBpmnServiceImpl
        activate BpmnXMLConverter
     alt BpmnModel转换失败
        FlowableBpmnServiceImpl --> BpmnDesignerController: 保存失败
        deactivate FlowableBpmnServiceImpl
        BpmnDesignerController-->Actor:保存失败
     else BpmnModel转换成功

         BpmnXMLConverter --> FlowableBpmnServiceImpl:BpmnModel
         deactivate BpmnXMLConverter
         activate FlowableBpmnServiceImpl
         FlowableBpmnServiceImpl->FlowableBpmnServiceImpl: 校验是否存在主流程
         FlowableBpmnServiceImpl->FlowableBpmnServiceImpl: 是否存在节点元素
         alt 校验失败
            FlowableBpmnServiceImpl --> BpmnDesignerController: 保存失败
            deactivate FlowableBpmnServiceImpl
            BpmnDesignerController --> Actor: 保存失败
         else 校验通过
              activate FlowableBpmnServiceImpl
              FlowableBpmnServiceImpl->FlowableBpmnServiceImpl: 构造ConverterContext
              FlowableBpmnServiceImpl -> CustomBpmnJsonConverter : bpmn模型转json
              activate CustomBpmnJsonConverter
              CustomBpmnJsonConverter -> BpmnJsonConverter : 父类bpmn模型转json
              activate BpmnJsonConverter
              BpmnJsonConverter->BpmnJsonConverter: 全局属性转换json
               loop 各个节点属性
                 BpmnJsonConverter -> CustomUserTaskJsonConverter: 用户任务属性转换
                 activate CustomUserTaskJsonConverter
                 CustomUserTaskJsonConverter->UserTaskJsonConverter:用户基础属性转json
                 activate UserTaskJsonConverter
                 UserTaskJsonConverter-->CustomUserTaskJsonConverter
                 deactivate UserTaskJsonConverter
                 CustomUserTaskJsonConverter->CustomUserTaskJsonConverter:用户自定义属性转换(节点前后操做，办理人，抄送人等)
                 CustomUserTaskJsonConverter-->BpmnJsonConverter
                 deactivate CustomUserTaskJsonConverter
                 BpmnJsonConverter->CustomSequenceFlowJsonConverter: 流转线属性转换
                 activate CustomSequenceFlowJsonConverter
                 CustomSequenceFlowJsonConverter->CustomSequenceFlowJsonConverter: 基础属性
                 CustomSequenceFlowJsonConverter->CustomSequenceFlowJsonConverter: 自定义属性(流转条件，流转类型)
                 CustomSequenceFlowJsonConverter-->BpmnJsonConverter
                 deactivate CustomSequenceFlowJsonConverter
               end
              BpmnJsonConverter --> CustomBpmnJsonConverter
              deactivate BpmnJsonConverter
              CustomBpmnJsonConverter->CustomBpmnJsonConverter: 自定义属性转json(催办，流程撤回，审批人去重)
              CustomBpmnJsonConverter --> FlowableBpmnServiceImpl
              deactivate CustomBpmnJsonConverter
              FlowableBpmnServiceImpl -> ISysUserUsageApi : 更新常用用户
              activate ISysUserUsageApi
              ISysUserUsageApi --> FlowableBpmnServiceImpl
              deactivate ISysUserUsageApi
              FlowableBpmnServiceImpl -> ModelService : 保存流程模型（act_de_model）
              activate ModelService
              ModelService --> FlowableBpmnServiceImpl
              deactivate ModelService
              FlowableBpmnServiceImpl-->BpmnDesignerController
              deactivate FlowableBpmnServiceImpl
              BpmnDesignerController-->Actor
              deactivate  BpmnDesignerController
         end
    end
end
@enduml
