设为首页 加入收藏

TOP

状态机的介绍和使用(五)
2023-08-06 07:49:48 】 浏览:91
Tags:
)+" is operating trans need bill "+ctx.getTransNeedId()+" from:"+from+" to:"+to+" on:"+event); if (from != None) { TransNeed transNeed = ctx.getTransNeed(); transNeed.setStatus(to.name()); transNeed.setUpdateTime(LocalDateTime.now()); transNeedService.update(transNeed); } eventBusService.invokeEvent(event, ctx); }; }

Event和EventBus简单Demo示例:

/**
 * @author marui116
 * @version 1.0.0
 * @className TransNeedAssignCarrierEvent
 * @description TODO
* @date 2023/3/28 11:08
 */
@Component
@EventAnnonation(event = TransNeedEventEnum.Assign_Carrier_Event)
@Slf4j
public class TransNeedAssignCarrierEvent implements EventComponent {

    @Override
    public void invokeEvent(Context context) {
        log.info("分配了服务商,给服务商发邮件和短信,让服务商安排");
    }
}





/**
 * @author marui116
 * @version 1.0.0
 * @className TransNeedAssignCarEvent
 * @description TODO
* @date 2023/3/28 11:05
 */
@Component
@EventAnnonation(event = TransNeedEventEnum.Assign_Car_Event)
@Slf4j
public class TransNeedAssignCarEvent implements EventComponent {
    @Override
    public void invokeEvent(Context context) {
        log.info("分配了车辆信息,给运单中心发送车辆信息");
    }
}





/**
 * @author marui116
 * @version 1.0.0
 * @className EventServiceImpl
 * @description TODO
* @date 2023/3/28 10:57
 */
@Service
public class EventBusServiceImpl implements EventBusService {
    @Resource
    private ApplicationContextUtil applicationContextUtil;

    private Map<TransNeedEventEnum, EventComponent> eventComponentMap = new ConcurrentHashMap<>();

    @PostConstruct
    private void init() {
        ApplicationContext context = applicationContextUtil.getApplicationContext();
        Map<String, EventComponent> eventBeanMap = context.getBeansOfType(EventComponent.class);
        eventBeanMap.values().forEach(event -> {
            if (event.getClass().isAnnotationPresent(EventAnnonation.class)) {
                EventAnnonation eventAnnonation = event.getClass().getAnnotation(EventAnnonation.class);
                eventComponentMap.put(eventAnnonation.event(), event);
            }
        });
    }

    @Override
    public void invokeEvent(TransNeedEventEnum eventEnum, Context context) {
        if (eventComponentMap.containsKey(eventEnum)) {
            eventComponentMap.get(eventEnum).invokeEvent(context);
        }
    }
}





4.2.3 状态机上下文

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Context {
    private String userName;
    private Long transNeedId;
    private TransNeed transNeed;
}





4.2.4 状态枚举

public enum TransNeedStatusEnum {
    /**
     * 开始状态
     */
    None,
    /**
     * 待分配陆运服务商
     */
    UN_ASSIGN_CARRIER,
    /**
     * 待分配车辆和司机
     */
    UN_ASSIGN_CAR,
    /**
     * 订单已处理,已安排司机提货
     */
    ASSIGNED_CAR,
    /**
     * 已完成提货
     */
    PICKUPED,
    /**
     * 运输中
     */
    IN_TRANSIT,
    /**
     * 已通过内地海关
     */
    PASS_CUSTOMS,
    /**
     * 您的货物部分妥投部分投递失败
     */
    PARTIAL_DELIVERIED,
    /**
     * 您的货物妥投
     */
    ALL_DELIVERIED,
    /**
     * 您的货物被拒收
     */
    ALL_REJECTED,
    /**
     * 委托订单被取消
     */
    CANCELED,
    /**
     * 单据结束归档
     */
    FINISH;

}





4.2.5 事件枚举

public enum TransNeedEventEnum {
        // 系统事件
        Create_Event,
        Normal_Update_Event,
        /**
         * 分配服务商事件
         */
        Assign_Carrier_Event,
        /**
         * 派车事件
         */
        Assign_Car_Event,

        // 车辆任务(trans_jbo)执行修改调度单(trans_task)状态的事件
        Trans_Job_Status_Change_Event,

        // 派送事件
        Partial_Delivery_Event,
        All_Delivery_Event,
        Partial_Reject_Event,
        All_Reject_Event,

        // 调度单中的任务单取消事件
        Order_Cancel_Ev
首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇注意!JAVA中的值传递 下一篇Sprint Boot学习路线2

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目