AZ 结算,暂停,作废 方案

需求


  • 工单需要暂停和作废,暂停作废需要有可配置的流程

  • 北汽通过预先设置的条件自动进入结算

  • 江淮手动选择工单进行结算

架构设计


结算单是独立的模块 在AZ主站项目下 集成Aibol框架 接入 流程引擎

作废/暂停 同时存在于需要 暂停和作废 的项目下

比如工单有作废 暂停 结算也有 作废 暂停

总结: 结算单 和 工单 平级 , 每个都有独立的 作废/暂停

具体方案


  • 有独立的流程管理页面 来为每个车厂配置特有的 结算流程

结算流程图管理页面 (考虑加入到workflow项目中统一管理),比如在现有的管理页面中 加入下拉,也可以用侧边栏菜单分类(作废和暂停要分为 工单作废和暂停结算单作废和暂停)

AZ 结算,暂停,作废 方案_第1张图片
图片
  • 暂停和作废设计

当工单点击暂停/作废按钮的时候 工单的 "Status" : 0, 变成 对应状态 ,同时生成一份 暂停/作废 运行时

作废/暂停 的 开始节点 post方法 ==> 发送相关通知

网关判断审核结果 进入2个不同的 结束节点

通过结束节点的 prev方法 ==> 修改对应 "orderId" 的工单 的 "Status" 为确认暂停/作废 并添加对应 "operations" 工单暂停/作废
不通过结束节点的 prev方法 ==> 修改对应 "orderId" 的工单 的 "Status" 为确认暂停/作废 并添加对应 "operations" 工单继续运行

申请暂停的工单 在申请全过程中 只会多2个 "operations" 一个发起 一个结果

至于具体的审核流传的 "operations" 在对应的 暂停/作废 运行时 中体现

审核人/时间/结果/暂停作废运行时id 等信息 作为data保存在工单对应的审核结果的data中 (可以不同步到mainData)

如果需要查询订单的暂停次数 只要过滤 "operations" 中 "type" : 暂停 的数据 就可以知道 所有 暂停操作的开始与结果

AZ 结算,暂停,作废 方案_第2张图片
image.png

上图申请task应该不需要,点击了按钮 就自动申请了

暂停/作废
{
    "_id" : ObjectId("5913c793ad273115ccf31231"),
    "CreatedWhen" : ISODate("2017-05-11T02:08:19.255Z"),
    "CreatedBy" : null,
    "LastModifiedWhen" : ISODate("2017-05-11T02:08:19.257Z"),
    "LastModifiedBy" : null,
    "Status" : 0,

    "orderId" : ObjectId("5913c793ad273115ccf30041"),

    "operations" : [ ]
}
工单
{
    "_id" : ObjectId("5913c793ad273115ccf30041"),
    "CreatedWhen" : ISODate("2017-05-11T02:08:19.255Z"),
    "CreatedBy" : null,
    "LastModifiedWhen" : ISODate("2017-05-11T02:08:19.257Z"),
    "LastModifiedBy" : null,
    "Status" : 0,
    "wfId" : "a69e81c5-3bf5-474b-a882-a1cf8933b66f",
    "tenantId" : "5351405d-4e81-4f42-8cea-5526690b0fdc",
    "title" : "test",
    "view" : "CarIntention",
    "Alias" : null,
    "currentProcessId" : "Task_1t3nwjx",
    "operations" : [ 
        {
            "CreatedWhen" : ISODate("2017-05-11T02:08:19.255Z"),
            "CreatedBy" : "system",
            "LastModifiedWhen" : ISODate("2017-05-11T02:08:19.255Z"),
            "LastModifiedBy" : "system",
            "Status" : 4,
            "num" : 0,
            "remark" : null,
            "type" : 0,
            "currectProcessName" : "选择开始节点",
            "here" : null,
            "from" : null,
            "view" : null,
            "IsBacked" : null,
            "data" : []
        }, 
        {
            "CreatedWhen" : ISODate("2017-05-11T02:08:19.256Z"),
            "CreatedBy" : "system",
            "LastModifiedWhen" : ISODate("2017-05-11T02:08:19.256Z"),
            "LastModifiedBy" : "system",
            "Status" : 4,
            "num" : 1,
            "remark" : null,
            "type" : 0,
            "currectProcessName" : "",
            "here" : "SequenceFlow_1cgwz8s",
            "from" : "StartEvent_19fn7p6",
            "view" : "",
            "IsBacked" : null,
            "data" : []
        }, 
        {
            "CreatedWhen" : ISODate("2017-05-11T02:08:19.257Z"),
            "CreatedBy" : "system",
            "LastModifiedWhen" : ISODate("2017-05-11T02:08:19.257Z"),
            "LastModifiedBy" : "system",
            "Status" : 4,
            "num" : 2,
            "remark" : null,
            "type" : 0,
            "currectProcessName" : "新建购车意向",
            "here" : "Task_1t3nwjx",
            "from" : "SequenceFlow_1cgwz8s",
            "view" : "CarIntention",
            "IsBacked" : null,
            "data" : []
        }
    ],
    "rate" : 6.0
}
  • 结算单设计

结算单 是平级于 工单 的 一个独立的流程运行时

  1. 自动结算方案 (北汽)

当一个工单结束的时候 触发 配置在结束节点的 prev方法 ==> 判断是否有符合条件的结算单,如果有则加入,如果没有则新增并加入,然后进行后续操作

  1. 手动结算方案 (江淮)

当一个工单结束的时候 结束节点不配置prev方法,在结算流程的 第一个task "选择需要结算的工单" 的时候 去修改结算单的 OrderId 数组,然后执行后续操作

  1. 混合结算方案 (3-10日手动,其他自动)

基于自动和手动方案,修改工单结束节点prev方法 ==> 添加日期判断 符合条件才进行后续操作,不符合日期条件则不操作.在结算单流程的 "选择需要结算的工单" 可以进行手动选择结算(当然也可以根据时间 关闭手动选择的权限,只要修改一下这个 task 所属 operation 的 Verify 方法 日期条件不通过则无法添加)

settlement
{
    id:1233123123,
    orderId:[
        aaaaaaaa1,
        bbbbbbb2,
        ccccccccc3
    ],
    ......
}

缺少 : 结算流程图 与 其具体的task页面,结算模块需要有自己的 “详情页面” 类似工单的主页面,用来承载结算的流转,

post prev 方法的具体方案


该方法在前端设计器中配置,如图

AZ 结算,暂停,作废 方案_第3张图片
图片

在主站系统中实现

AZ 结算,暂停,作废 方案_第4张图片
图片

流程运转的时候被调用执行,由于方法在主站所以可以使用所有主站的资源

关于参数传递的实现设想方案,

az:prev="Basic.TestPrev?TenanId¶m1¶m2¶m3" 

prev:预方法
post:后方法
Basic:所在类
TestPrev:方法名称 与类名用 .隔开
?TenanId¶m1¶m2¶m3需要参数,必须是主表主字段有的参数或者是当前节点的data中有的参数,用 ? 与方法名隔开,不同的参数用 & 隔开

问题

  1. 工单进入结算后 相关的operations 是什么?开始结算,结算完毕?
  2. 工单/结算单 的所有状态码
  3. 流程引擎接入方案
  4. 单点登录系统接入方案

你可能感兴趣的:(AZ 结算,暂停,作废 方案)