squirrel-foundation 使用简单记录

news/2024/7/5 2:30:34
一,系统介绍
这是一个运力系统,用于把车辆从工厂运往经销商,运输方式是司机开过去。大概经过以下几个步骤,以此说明操作场景以及对应运单状态,如下
1.运单创建,上游下发数据生成运单,初始状态【未指派】
2.车队长把运单指派给司机或者司机自己扫码,与运单建立关系,状态变为【已指派】
3.司机拿到车后,在app操作发运按钮,运单进入【执行中】状态
4.司机到达目的后,完成交车动作,在app操作交车按钮,运单进入【已完成】状态
5.关于取消,前置状态未指派/已指派/取消(幂等),在pc后台可取消运单,状态变为【已取消】

状态
状态流如下
【未指派】- 【已指派】- 【执行中】 - 【已完成】- 【已取消】
状态变更前置
【未指派】- 【未指派】
【未指派】- 【已指派】
【已指派】- 【执行中】
【执行中】- 【已完成】
【未指派】- 【已取消】
【已指派】- 【已取消】
【已取消】- 【已取消】
取消有多个前置条件

事件
创建 - 指派 - 发运 - 交车完成 - 取消

二,如何使用状态机实现以上需求
<dependency>
    <groupId>org.squirrelframework</groupId>
    <artifactId>squirrel-foundation</artifactId>
    <version>0.3.8</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>
设计方案
触发点:操作某个步骤,入参:事件,当前状态,业务参数,就可以进入对应的状态机,触发执行方法
业务执行逻辑:进入状态机后,具体业务逻辑怎么执行,根据当前状态/目的状态/事件/其他业务入参,可进入相应的方法
幂等:对应同一个运单,状态变更时,无法进行多次操作的,需要分布式锁控制
通用的校验-前置校验:对于所有状态变更场景,有统一校验逻辑,状态机可实现
通用的业务逻辑:可实现通用的逻辑校验

DPStateMachine - 状态机


http://lihuaxi.xjx100.cn/news/1319502.html

相关文章

unity相机视角平移一段距离

using System.Collections; using System.Collections.Generic; using UnityEngine;public class ControlCamera : MonoBehaviour {//相机视角焦点平移一段距离//需求 相机视角 内的3D对象A 在视角内平移到屏幕C点 public Vector3 InitCameraPos;// Start is called be…

基于springboot图书个性化推荐系统的设计与实现【附ppt和万字文档(Lun文)和搭建文档】

主要功能 前台登录&#xff1a; ①首页&#xff1a;图书名称查询、图书信息推荐、好书推荐、图书信息展示 ②图书信息&#xff1a;图书类别、图书名称、名称类别作者查询、图书详情、收藏、点赞、评论 ③好书推荐&#xff1a;图书展示、点击查看 ④留言反馈&#xff1a;用户可…

争夺数据黑匣子市场,谁将接盘这家Tier1的被动安全业务

在相继卖掉智驾软件算法资产&#xff08;高通收购&#xff09;、主动安全传感器及系统业务&#xff08;麦格纳收购&#xff09;后&#xff0c;Veoneer最后剩余的被动安全系统业务&#xff08;主要是安全气囊ECU&#xff09;也在寻找产业买家。 本周&#xff0c;美国私募股权公司…

【动态规划算法】第八题:931.下降路径最小和

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法\&#x1f384; 如 果 你…

【代码随想录day4】两两交换链表中的节点

题目 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1,4,3] 示例 2&#xff1a; …

论文学习——U-Net: Convolutional Networks for Biomedical Image Segmentation

UNet的特点 采用端到端的结构&#xff0c;通过FCN&#xff08;最后一层仍然是通过卷积完成&#xff09;&#xff0c;最后输出图像。通过编码&#xff08;下采样&#xff09;-解码&#xff08;上采样&#xff09;形成一个“U”型结构。每次下采样时&#xff0c;先进行两次卷积&…

VUE项目打包成apk

在我们的开发需求中&#xff0c;可能会遇到需要将vue项目中的H5代码打包成一个安卓的app&#xff0c;那么我为大家介绍一套保姆级的解决方案&#xff0c;看完你就会。 VUE HBuilder 1.准备工作&#xff1a; 需要下载一个HBuilder X编辑器&#xff0c;不过我相信大家身为前端…

代码随想录算法训练营第59天 | 503.下一个更大元素 II + 42.接雨水

今日任务 目录 503.下一个更大元素 II - Medium 42.接雨水 - Hard 503.下一个更大元素 II - Medium 题目链接&#xff1a;力扣-503. 下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nu…