独立存储过程(m)
# 独立存储过程
本文档中的存储过程涉及到一部分业务逻辑以及对多个表的操作。
## modify_instrument_status(m(c))
修改[instruments](doc:nWaGoELh)表中instrument_status字段,如果@instrument_status被修改为2,则还要在[instrument_using_record](doc:oWyEOHZn)中加入一条关于@instrument_id的使用记录
|参数|类型|非空|其他信息|
|:---:|:---:|:---:|:---|
|order_id|IN int|是||
|instrument_id|IN int|是||
|instrument_status|IN int|是||
|return_code|OUT int|是||
## fetch_order_requests
获取@lab_id所对应的实验室的所有预约请求。
|参数|类型|非空|其他信息|
|:---:|:---:|:---:|:---|
|lab_id|IN int|是||
|record_count|OUT int|是||
|返回字段|类型|
|:---:|:---:|
|user_id|varchar(9)|
|user_type|int|
|use_date|date|
|use_time_range|char(11)|
|lab_usage|varchar(100)|
## create_order
创建实验室预约记录。需要在[lab_order_record](doc:MsFy087f)表中插入一条预约记录,然后根据`@instruments`修改`instruments表`中的相应的`instrument_status字段`,最后返回`lab_order_record表`生成的`order_id字段`。
参数instruments是一个可变长度的字符串,表示用户想要借用的所有实验仪器,其内容由许多个仪器的`instrument_serial字段`拼接而成,这个编号是学校数据库中的实验室资产编号,长度为12位或8位,后端会把所有8位的资产编号通过在编号前补`@`的方式来补足12位,于是拼接成一个长度为12的倍数的字符串,例如`YQ2014082321`、`@@@@028a1003`。使用`|`作为分隔符,为了便于使用sql分割,字符串末尾追加一个`|`,例如`YQ2014082321|YQ2014082322|@@@@028a1003|`表示了三个仪器编号。存储过程需要将`@instrument_series`分割成数个长度为12的字串,然后将字串作为`instrument_serial`去进行上文所说的添加记录或修改状态的操作。
|参数|类型|非空|其他信息|
|:---:|:---:|:---:|:---|
|user_id|IN varchar(9)|是||
|user_type|int|是||
|order_datetime|IN datetime|是||
|use_date|IN date|是||
|use_time_range|IN char(11)|是|(m)|
|lab_id|IN int|是||
|lab_usage|IN varchar(100)|是||
|instrument_series|IN varchar(260)|否|(m)|
|order_id|OUT int|否||
## cancel_order(m)
取消预约。将[lab_order_record](doc:MsFy087f)中的记录的`order_status字段`改为4,并将[instruments](doc:nWaGoELh)中的`instrument_status字段`改为0。如果修改之前`order_status字段`为2,还需要到[instrument_using_record](doc:oWyEOHZn)中删除仪器使用记录。
|参数|类型|非空|其他信息|
|:---:|:---:|:---:|:---|
|order_id|IN int|是||
|return_code|OUT tinyint|否||