跳转至

BYSMS系统 API 接口 1.2 - 补充接口

获取账号profile

请求消息

GET  /api/etc?action=getmyprofile 

请求参数

响应消息

200 OK
Content-Type: application/json

响应内容

http 响应消息 body 中, 数据以json格式存储,

如果获取成功,返回如下

{
    "ret": 0,
    "profile": {
        "userid": 2,
        "username": "ws0001",
        "usertype": 8888,
        "realname": "车间工1",
        "avatar"  : "f2"
    }
}

其中, username 是登录时使用的登录名, 而 realname 是显示在界面上的用户名称(昵称)

avatar 是用户头像图片文件名, 后面加上 png 后缀 就是对应的头像图片。 如果该字段值为空,就使用缺省头像 default.png

头像图片在给学员的网盘下载资源目录中的 icons/avatars 目录中


如果失败,返回失败的原因,示例如下

{
    "ret": 1,    
    "msg":  "xxxx错误"
}

ret 不为 0 表示失败, msg字段描述失败的原因

退出登录

请求消息

GET  /api/signout  

请求参数

响应消息

200 OK
Content-Type: application/json

响应内容

http 响应消息 body 中, 数据以json格式存储,

如果退出登录成功,返回如下

{
    "ret": 0
}

ret 为 0 表示退出登录成功

如果退出登录失败,返回失败的原因,示例如下

{
    "ret": 1,    
    "msg":  "xxxx错误"
}

ret 不为 0 表示退出登录失败, msg字段描述失败的原因

药品送检工作流 1

该API接口 用来 进行药品送检发布流程 的处理。

药品送检流程定义如下:

{
    # 状态,开始状态名一定得是开始
    "开始": {
        # action 定义了该状态下,可以接受的 几种 操作
        # 如果action == None,表示该状态为 结束状态
        "actions": {

            '创建送样申请': { 
                # 谁可以执行该动作,目前支持
                # everyone  所有人
                # permission 需要拥有某种权限
                # creator  是否是流程发起者 True,False
                # usertype   必须是某种类型用户
                'whocan': {
                    'permission':'common.wf_medicine_exam_submit'
                },
                # 该动作需要提交的数据格式
                'submitdata': [
                    {
                        'name': '送样时间',  # 字段名称
                        'type': 'DateTimePicker',  # 字段类型
                    },
                    {
                        'name': '批号',  # 字段名称,    一轮生产测试
                        'type': 'LineEdit',  # 字段类型
                        'check_string_len': [2, 50],  # 字段输入值长度要求
                    },
                    {
                        'name': '送样编号',  # 字段名称 一批可以送给好几个QC组进行测试,测试目标不一样。
                        'type': 'LineEdit',  # 字段类型
                        'check_string_len': [2, 50],  # 字段输入值长度要求
                    },
                    {
                        'name': '组别',  # 字段名称     目标QC组 
                        'type': 'LineEdit',  # 字段类型
                        'check_string_len': [2, 30],  # 字段输入值长度要求
                    },
                    {
                        'name': '值班联系人、联系方式', # 字段名称   QC部门值班人员
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 200],  # 字段输入值长度要求
                    },
                    {
                        'name': '备注(淬灭后送样、大概含量等信息)',  # 字段名称 
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 10000],  # 字段输入值长度要求
                    },
                ],
                # 操作后,进入到 下一个状态名
                'next': "送样申请已创建",
            },
        }
    },

    # 状态
    "送样申请已创建": {
        "actions": {
            '中止流程': WF.action_admin_terminate,


            '开始空白/对照样工作': {
                'whocan': {
                    'permission':'common.wf_medicine_exam_handle'
                },
                'submitdata': [
                    {
                        'name': '备注',
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 50000],
                    },
                ],

                'next': "空白/对照样工作已开始",
            },


            '打回申请': {
                'whocan': {
                    'permission':'common.wf_medicine_exam_handle'
                },
                'submitdata': [
                    {
                        'name': '打回原因',
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 50000],
                    },
                ],
                'next': "中止",
            },

            '修改送样时间': { 
                'whocan': {
                    'permission':'common.wf_medicine_exam_submit'
                },
                'submitdata': [
                    {
                        'name': '新送样时间',  # 字段名称
                        'type': 'DateTimePicker',  # 字段类型
                    },
                    {
                        'name': '修改原因',
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 50000],
                    },
                ],
                'next': "送样申请已创建",
            },
        }
    },
    # 状态
    "空白/对照样工作已开始": {
        "actions": {
            '中止流程': WF.action_admin_terminate,

            '确认收到样品': {
                'whocan': {
                    'permission':'common.wf_medicine_exam_handle'
                },
                'submitdata': [
                    {
                        'name': '备注',
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 50000],
                    },
                ],
                'next': "等待IPC报告",
            },


            '确认修改送样时间': {
                'whocan': {
                    'permission':'common.wf_medicine_exam_handle'
                },
                'submitdata': [
                    {
                        'name': '备注',
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 50000],
                    },
                ],
                'next': "空白/对照样工作已开始",
            },

            '修改送样时间': {
                'whocan': {
                    'permission': 'common.wf_medicine_exam_submit'
                },
                'submitdata': [
                    {
                        'name': '新送样时间',  # 字段名称
                        'type': 'DateTimePicker',  # 字段类型
                    },
                    {
                        'name': '备注',
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 50000],
                    },
                ],
                'next': "空白/对照样工作已开始",
            },
        }
    },

    # 状态
    "等待IPC报告": {
        "actions": {
            '中止流程': WF.action_admin_terminate,

            '提交IPC报告': {
                'whocan': {
                    'permission':'common.wf_medicine_exam_handle'
                },
                'submitdata': [
                    {
                        'name': '报告内容',
                        'type': 'PlainTextEdit',
                        'check_string_len': [0, 10000],  # 字段输入值长度要求
                    },
                ],

                'next': '结束',
            }
        }
    },

    # 为None表示这是结束步骤,没有操作了
    "结束": None,

    # 为None表示这是结束步骤,没有操作了
    "中止": None
}

药品送检工作流 的API url路径均为 /api/wf_medicineexam

列出

用来列出系统中的我可以看到的药品送检工作流记录。

请求

  • 请求头
GET /api/wf_medicineexam?action=listbypage&pagenum=1&pagesize=50&keywords=
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action listbypage 必填项 必须为 listbypage
pagesize 1 必填项 分页的 每页获取多少条记录
pagenum 2 必填项 获取第几页的信息
keywords 白月 黑 可选项 搜索关键字,如果提供,表示工作流标题中包含的关键字。 多个关键字以空格隔开,表示工作流标题中同时包含的关键字词

响应

后端返回列出结果

  • 消息体
{
  "ret": 0,
  "items": [
    {
      "id": 15,
      "creator": 6,
      "creator__realname": "张飞",
      "title": "2024-12-01 22:01 - Lyrica - 纯度",
      "currentstate": "送样申请已创建",
      "createdate": "2024-12-01T16:01:25.968Z"
    },
    {
      "id": 12,
      "creator": 6,
      "creator__realname": "张飞",
      "title": "2024-12-01 22:32 - Lyrica - 硬度",
      "currentstate": "结束",
      "createdate": "2024-12-01T16:32:00.871Z"
    }
  ],
  "total": 2,
  "keywords": ""
}

ret 为 0 表示列出成功

total 总共有2条工作流记录

items 数组 里面包含了当前页中的工作流记录。

每条记录以如下格式存储

    {
      "id": 12,
      "creator": 6,
      "creator__realname": "张飞",
      "title": "2024-12-01 22:32 - Lyrica - 硬度",
      "currentstate": "结束",
      "createdate": "2024-12-01T16:32:00.871Z"
    }

其中:

title 是 工作流流记录的 标题

currentstate 是该工作流的当前状态

询问可否新建工作流

用来询问本账号是否有权限新建 送检工作流

只有 赋予权限的 账号才能创建

请求

  • 请求头
GET /api/wf_medicineexam?action=canicreatewf
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action canicreatewf 必填项 必须为 canicreatewf

响应

后端返回列出结果

  • 消息体
{
  "ret": 0,
  "permitted": true
}

ret 为 0 表示列出成功

permitted 为 true 表示有新建工作流的权限, 为 false 表示没有该权限

获取一个工作流信息

请求

  • 请求头
GET /api/wf_medicineexam?action=getone&wf_id=15&withwhatcanido=true
Cookie: sessionid=<sessionid数值>

其中 withwhatcanido=true 参数指明了 同时要返回 当前我可以 对这个工作流 进行的操作

id参数为对应的工作流id

响应

  • 消息体
{
  "ret": 0,
  "rec": {
    "id": 4,
    "creatorname": "车间工1",
    "title": "2024-11-30 03:00 - 普瑞巴林(Lyrica)提纯 第6期 - 室温稳定观察",
    "currentstate": "空白/对照样工作已开始",
    "createdate": "2024-11-30T01:38:28.056Z",
    "steps": [
      {
        "id": 10,
        "operator_id": 2,
        "operator__realname": "车间工1",
        "operator__avatar": "m2",
        "actiondate": "2024-11-30T01:38:28.056Z",
        "actionname": "创建送样申请",
        "nextstate": "送样申请已创建"
      },
      {
        "id": 11,
        "operator_id": 2,
        "operator__realname": "车间工1",
        "operator__avatar": "m2",
        "actiondate": "2024-11-30T01:43:56.899Z",
        "actionname": "修改送样时间",
        "nextstate": "送样申请已创建"
      },
      {
        "id": 12,
        "operator_id": 3,
        "operator__realname": "质检工1",
        "operator__avatar": "f2",
        "actiondate": "2024-11-30T01:45:00.262Z",
        "actionname": "开始空白/对照样工作",
        "nextstate": "空白/对照样工作已开始"
      },
      {
        "id": 13,
        "operator_id": 2,
        "operator__realname": "车间工1",
        "operator__avatar": "m2",
        "actiondate": "2024-11-30T01:46:17.693Z",
        "actionname": "修改送样时间",
        "nextstate": "空白/对照样工作已开始"
      },
      {
        "id": 14,
        "operator_id": 3,
        "operator__realname": "质检工1",
        "operator__avatar": "f2",
        "actiondate": "2024-11-30T01:50:16.278Z",
        "actionname": "确知修改送样时间",
        "nextstate": "空白/对照样工作已开始"
      }
    ]
  },
  "whaticando": [
    {
      "name": "确认收到样品",
      "submitdata": [
        {
          "name": "备注",
          "type": "PlainTextEdit",
          "check_string_len": [
            0,
            50000
          ]
        }
      ]
    },
    {
      "name": "确知修改送样时间",
      "submitdata": [
        {
          "name": "备注",
          "type": "PlainTextEdit",
          "check_string_len": [
            0,
            50000
          ]
        }
      ]
    }
  ],
  "wf_name": "药品送检"
}

其中:

rec 里面记录了工作流的信息,包括

id: 工作流的id,

creatorname: 工作流的创建者姓名,

title: 药品送检的标题,

currentstate: 工作流的当前状态,

createdate: 工作流的创建时间, ISO时间格式的字符串。

steps: 工作流的步骤

里面的依次列出每个步骤的id,操作者名字,操作时间,操作名称、操作完进入什么状态


如果请求要获取的工作流的id为-1,表示要创建一个新工作流记录,服务端应该返回如下

{
  "ret": 0,
  "wf_name": "药品送检",
  "rec": {
    "id": -1,
    "creatorname": "",
    "title": "",
    "currentstate": "",
    "createdate": ""
  },
  "whaticando": [
    {
      "name": "创建送样申请",
      "submitdata": [
        {
          "name": "送样时间",
          "type": "DateTimePicker"
        },
        {
          "name": "批号",
          "type": "LineEdit",
          "check_string_len": [
            2,
            50
          ]
        },
        {
          "name": "送样编号",
          "type": "LineEdit",
          "check_string_len": [
            2,
            50
          ]
        },
        {
          "name": "组别",
          "type": "LineEdit",
          "check_string_len": [
            2,
            30
          ]
        },
        {
          "name": "值班联系人、联系方式",
          "type": "PlainTextEdit",
          "check_string_len": [
            0,
            200
          ]
        },
        {
          "name": "备注(淬灭后送样、大概含量等信息)",
          "type": "PlainTextEdit",
          "check_string_len": [
            0,
            10000
          ]
        }
      ]
    }
  ]
}


whaticando 里面是当前状态下,我可以进行的操作,每个可行操作的格式如下

   {
      "name": "驳回主题",
      "submitdata": [
        {
          "name": "驳回原因",
          "type": "textarea",
          "check_string_len": [
            0,
            10000
          ]
        }
      ],
      "whocan": 4,
      "next": "主题被驳回",
      "key": "reject_topic"
    }

name 为操作名

key 为执行该操作,对应的 api 中 key字段的名称

submitdata 为该操作需要提交的参数数据,其中

name 是参数名

type 是参数类型,目前有4种

int: 整数,

text: 单行文本

textarea : 多行文本

richtext: 多行富文本,内容可以包含图片等

另外还可能有检查机制,目前主要有

check_int_range: 检查输入整数范围

check_string_len: 检查字符串长度范围


每个状态下,可以进行的操作,这里没有一一记录。请大家运行下载包,F12浏览器查看消息记录,根据实际的接口消息,编写后端代码。

执行一个工作流操作步骤

请求

  • 请求头
POST /api/wf_medicineexam

content-type: application/json
  • 消息体
{
  "action": "stepaction",
  "name": "创建送样申请",
  "wf_id": -1,
  "submitdata": [
    {
      "name": "送样时间",
      "type": "DateTimePicker",
      "value": "2024-11-27T15:27:00.000Z"
    },
    {
      "name": "批号",
      "type": "LineEdit",
      "value": "B32"
    },
    {
      "name": "送样编号",
      "type": "LineEdit",
      "value": "QC3-21"
    },
    {
      "name": "组别",
      "type": "LineEdit",
      "value": "QC3"
    },
    {
      "name": "值班联系人、联系方式",
      "type": "PlainTextEdit",
      "value": "王常陆 13998765"
    },
    {
      "name": "备注(淬灭后送样、大概含量等信息)",
      "type": "PlainTextEdit",
      "value": "淬灭后送样、大概含量等信息"
    }
  ]
}

其中:

action 固定为stepaction

key 为操作名

wf_id 为操作的工作流id, -1 表示系统还没有该工作量记录,是新建的工作流

submitdata 为提交的操作数据

响应

服务端,应该对该操作进行鉴权,如果通过,存储操作数据到数据库中,并且返回响应。

注意,每个操作,服务端需要存储起来,并为其分配一个单独的id,对应这个操作,方便前端将来查询这个操作的具体submitdata数据信息。

  • 消息体
{"ret": 0, "wf_id": 15}

获取一个工作流操作步骤信息

大家可以发现,获取一个工作流信息时,里面的每个步骤并不包含submitdata。

因为 submitdata数据量可能很大。

当使用者要查看一个操作的具体 submitdata 数据的时候,前端发出此API请求获取该操作的 submitdata。

请求

  • 请求头
GET /api/wf_medicineexam?action=getstepactiondata&step_id=24
Cookie: sessionid=<sessionid数值>

其中 step_id 参数为操作步骤id

响应

  • 消息体

格式示例如下:

{
  "ret": 0,
  "data": [
    {
      "name": "送样时间",
      "type": "DateTimePicker",
      "value": "2024-11-27T15:27:00.000Z"
    },
    {
      "name": "批号",
      "type": "LineEdit",
      "value": "B32"
    },
    {
      "name": "送样编号",
      "type": "LineEdit",
      "value": "QC3-21"
    },
    {
      "name": "组别",
      "type": "LineEdit",
      "value": "QC3"
    },
    {
      "name": "值班联系人、联系方式",
      "type": "PlainTextEdit",
      "value": "王常陆 13998765"
    },
    {
      "name": "备注(淬灭后送样、大概含量等信息)",
      "type": "PlainTextEdit",
      "value": "淬灭后送样、大概含量等信息"
    }
  ]
}

其中 data里面存储了该操作步骤的 submitdata数据。

药品送检工作流 2

该工作流和 药品送检工作流 1 几乎一模一样,除了有些 纯文本的 PlainTextEdit 替换为 富文本的 RichTextEdit

另外一个区别就是api接口中 /api/wf_medicineexam 改为 /api/wf_medicineexam2

定义如下:

{
        'name' : '药品送检2',

        'rule' :  {
            # 状态,开始状态名一定得是开始
            "开始": {
                # action 定义了该状态下,可以接受的 几种 操作
                # 如果action == None,表示该状态为 结束状态
                "actions": {

                    '创建送样申请': { 
                        # 谁可以执行该动作,目前支持
                        # everyone  所有人
                        # permission 需要拥有某种权限
                        # creator  是否是流程发起者 True,False
                        # usertype   必须是某种类型用户
                        'whocan': {
                            'permission':'common.wf_medicine_exam_submit'
                        },
                        # 该动作需要提交的数据格式
                        'submitdata': [
                            {
                                'name': '送样时间', 
                                'type': 'DateTimePicker',
                            },
                            {
                                'name': '批号', 
                                'type': 'LineEdit', 
                                'check_string_len': [2, 50], 
                            },
                            {
                                'name': '送样编号',  
                                'type': 'LineEdit', 
                                'check_string_len': [2, 50], 
                            },
                            {
                                'name': '组别',  
                                'type': 'LineEdit',
                                'check_string_len': [2, 30], 
                            },
                            {
                                'name': '值班联系人、联系方式', 
                                'type': 'PlainTextEdit',
                                'check_string_len': [0, 200], 
                            },
                            {
                                'name': '备注(淬灭后送样、大概含量等信息)', 
                                'type': 'RichTextEdit',
                                'check_string_len': [0, 10000],
                            },
                        ],

                        # 操作后,进入到 下一个状态名
                        'next': "送样申请已创建",
                    },
                }
            },

            # 状态
            "送样申请已创建": {
                "actions": {
                    '中止流程': WF.action_admin_terminate,


                    '开始空白/对照样工作': { 
                        'whocan': {
                            'permission':'common.wf_medicine_exam_handle'
                        },
                        'submitdata': [
                            {
                                'name': '备注',
                                'type': 'RichTextEdit',
                                'check_string_len': [0, 50000],
                            },
                        ],

                        'next': "空白/对照样工作已开始",
                    },


                    '打回申请': {
                        'whocan': {
                            'permission':'common.wf_medicine_exam_handle'
                        },
                        'submitdata': [
                            {
                                'name': '打回原因',
                                'type': 'RichTextEdit',
                                'check_string_len': [0, 50000],
                            },
                        ],

                        'next': "中止",
                    },

                    '修改送样时间': { 
                        'whocan': {
                            'permission':'common.wf_medicine_exam_submit'
                        },
                        'submitdata': [
                            {
                                'name': '新送样时间', 
                                'type': 'DateTimePicker', 
                            },
                            {
                                'name': '修改原因',
                                'type': 'RichTextEdit',
                                'check_string_len': [0, 50000],
                            },
                        ],

                        'next': "送样申请已创建",
                    },
                }
            },
            # 状态
            "空白/对照样工作已开始": {
                "actions": {
                    '中止流程': WF.action_admin_terminate,

                    '确认收到样品': {
                        'whocan': {
                            'permission':'common.wf_medicine_exam_handle'
                        },
                        'submitdata': [
                            {
                                'name': '备注',
                                'type': 'RichTextEdit',
                                'check_string_len': [0, 50000],
                            },
                        ],
                        'next': "等待IPC报告",
                    },


                    '确认修改送样时间': {
                        'whocan': {
                            'permission':'common.wf_medicine_exam_handle'
                        },
                        'submitdata': [
                            {
                                'name': '备注',
                                'type': 'RichTextEdit',
                                'check_string_len': [0, 50000],
                            },
                        ],
                        'next': "空白/对照样工作已开始",
                    },

                    '修改送样时间': {
                        'whocan': {
                            'permission': 'common.wf_medicine_exam_submit'
                        },
                        'submitdata': [
                            {
                                'name': '新送样时间', 
                                'type': 'DateTimePicker', 
                            },
                            {
                                'name': '备注',
                                'type': 'RichTextEdit',
                                'check_string_len': [0, 50000],
                            },
                        ],

                        'next': "空白/对照样工作已开始",
                    },
                }
            },

            # 状态
            "等待IPC报告": {
                "actions": {
                    '中止流程': WF.action_admin_terminate,

                    '提交IPC报告': {
                        'whocan': {
                            'permission':'common.wf_medicine_exam_handle'
                        },
                        'submitdata': [
                            {
                                'name': '报告内容',
                                'type': 'RichTextEdit',
                                'check_string_len': [0, 10000], 
                            },
                        ],

                        'next': '结束',
                    }
                }
            },

            # 为None表示这是结束步骤,没有操作了
            "结束": None,

            # 为None表示这是结束步骤,没有操作了
            "中止": None
        }

    }

上传图片接口

请求

  • 请求头
POST /api/upload?file_name=<文件名称>

content-type: image/image

file_name 值为文件名, 目前只支持 jpg 或者 png 扩展名的文件

响应

  • 消息体
{
  "ret": 0, 
  "url": "/upload/4_20241228095558_584964.png"
}

ret 为 0 表示列出成功

url 字段表示服务端该图片的url地址


ret 不为 0 表示失败, msg字段描述失败的原因

{
  "ret": 302, 
  "msg": "未登录"
}