业务模型

案例1 - 合同起止日校验

需求

有业务模型contract_model如下

  • 只有一张主表contract_info和一张子表contract_data;

  • 两表通过contract_id关联

  • contract_info有合同起始日和合同终止日两个字段

../_images/eg_bizmodel_case1_contract_model.png

基于业务模型搭建业务明细表contract_tbl

../_images/eg_bizmodel_case1_contract_tbl.png

通过python校验合同终止日必须晚于合同起始日,并在校验不通过的时候阻止保存,并弹框提示用户 “合同终止日必须晚于合同起始日”

解决方案

代码

import pandas as pd


def main(p1, p2):
    rtn = {
        "success": True,
        "errors": [],
        "warnings": []
    }

    js = p2['saveParam']['formInfoJson']

    # 获取合同起止日,转化为日期类型
    start_date = pd.to_datetime(js['start_date']['value'])
    end_date = pd.to_datetime(js['end_date']['value'])

    # 判断日期大小
    if end_date < start_date:
        rtn['success'] = False
        rtn['errors'].append({
           "description": "合同终止日必须晚于合同起始日"
        })

    return rtn

效果展示

输入错误数据并且保存,效果如下:

../_images/eg_bizmodel_case1_result.png

案例2 - 合同保存时同步维度

需求

明细表保存后,需要将用户录入的合同作为维度成员加入contract维度中。其中,合同编号为维度成员编码,合同名称为维度成员的中文描述,合同起始日和合同结束日分别为维度的ud1和ud2。注意需要处理一下保存维度时的异常,如果在保存维度成员过程中报错,则需弹框提醒用户“contract维度成员生成失败,请重新保存或联系系统管理员查看。”

解决方案

代码

from deepfos.element.dimension import Dimension, DimMember


def main(p1, p2):
    rtn = {
        "success": True,
        "errors": [],
        "warnings": []
    }

    js = p2['saveParam']['formInfoJson']
    # 获取合同的相关参数
    contract_id = js['contract_id']
    contract_name = js['contract_name']['value']
    start_date = js['start_date']['value']
    end_date = js['end_date']['value']

    # 使用维度名实例化维度对象
    dim = Dimension('contract')

    # 增加维度成员
    dim.add_member(DimMember(
        name=contract_id,
        multilingual={'zh-cn': contract_name},
        ud1=start_date,
        ud2=end_date
    ))

    # 保存维度以及错误处理
    try:
        dim.save()
    except Exception as e:
        # 打印错误以便通过日志分析具体报错
        print(e)
        rtn['success'] = False
        rtn['errors'].append({
           "description": "contract维度成员生成失败,请重新保存或联系系统管理员查看。"
        })

    return rtn

效果展示

明细表填入数据,点击保存

../_images/eg_bizmodel_case2_contract_tbl.png

打开contract维度,应当能够看到维度已经成功更新

../_images/eg_bizmodel_case2_dimsync.png