1. 订单初始化

    订单初始化包含在启动流程中,bfm路径:com.ztesoft.zsmart.bfm.busi.service.OrderService#startOrderFlow
    String coBefore = OrderMessageContext.getBeforeMessage(rootAccessName);
    Response resPrepare = this.ruleCallInternal(coBefore, inputs);
    image.png

    找到CO_BEFORE事件,执行InitOrder(OnInitialize即为CO_BEFORE):
    image.png

    根据不同事件、渠道、serv_type等匹配rule,order entry最常见的就是匹配到最后一个条件,执行3个rule:
    image.png

    第一个是initOrder,找到这个rule:
    image.png

    到BO上找到boMethod:initOrder
    image.png
    用来初始化custOrder及其子订单,对应类:com.ztesoft.zsmart.bss.cc.service.rule.InitOrder,根据inputList调用BC-bd.cc.sales.InitOrder,BC详情如下:
    image.png
    image.png
    其中第二个FC-InitializeOrderItem较复杂,会再次调用2个BC:bd.cc.sales.InitializeOrderItemExtend,bd.cc.sales.InitOrderItemExtend,其中
    bd.cc.sales.InitializeOrderItemExtend包含了24个FC:
    image.png

    bd.cc.sales.InitOrderItemExtend是个扩展BC,有对应类:**com.ztesoft.zsmart.bss.cc.fc.sales.orderinitextend.OrderInitializeExtend
    image.png

    1. 执行规则

    image.png
    image.png

    1. 执行流程

    com.ztesoft.zsmart.bfm.busi.service.OrderService#startOrderFlow
    String coWizard = OrderMessageContext.getWizad(rootAccessName);
    res = this.processCall(coWizard, inputs);
    根据CO_WIZARD找到流程:
    select * from BFM_SYSTEM_MESSAGE t where t.SYSTEM_MESSAGE = ‘CO_WIZARD’;
    image.png
    对应界面上就是Service order wizard
    image.png
    根据不同事件、渠道、serv_type等匹配到流程:
    image.png

    比如马来定制化开户的流程
    image.png

    1. 订单校验

      在流程界面点击next时,预埋了订单校验,通过页面的needRuleValid来设置是否需要校验。
      image.png
      rule内部分别针对custOrder和orderItem调用2个BC:bd.cc.sales.CustOrderValidation、bd.cc.sales.OrderItemValidation,
      对应类:com.ztesoft.zsmart.bss.coc.um.cc.bc.orderdatavalidation.UmCustOrderValidation,com.ztesoft.zsmart.bss.cc.bc.orderdatavalidation.OrderItemValidation,
      bd.cc.sales.OrderItemValidation实际上还是执行的配置在里边的fc:
      a) 先得到注解为OrderExtendRuleGroup的类BasicOrderItemRuleGroup,根据code(实际为bc名字)找到所有的fc,再过滤得到有OrderRuleCondition
      注解的fc(com/ztesoft/zsmart/bss/cc/rule/core/OrderRulesFactory.java)。 想要知道某个事件走了哪些注解,靠代码比较困难,有个界面可以查询(url:crm/modules/orderrule/views/OrderRuleView):
      image.png