批量保存合同详情
接口:/corp/contract/save
Method:POST
数据格式:JSON
请求参数:
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
contractId | String | Y | 合同编号 |
businessCode | String | N | 合同单据号 |
contractName | String | Y | 合同名称 |
totalAmount | BigDecimal | N | 合同总金额(当合同的类型为控制金额的和同时,需要填入一个大于0的数值) |
fulfillAmount | BigDecimal | N | 已履行金额 |
applicantUserEmployeeId | String | Y | 申请人工号 |
agentUserEmployeeIds | array | Y | 责任人工号 |
agentDepartmentBizCodes | array | N | 责任部门 |
supplierBizCode | String | Y | 供应商业务编码 |
departmentBizCode | String | Y | 申请人部门编码 |
subsidiaryBizCode | String | Y | 业务实体编码 |
formSubTypeBizCode | String | Y | 单据类型编码(合同的单据类型) |
externalLink | String | Y | 外部链接,可含有参数{employeeId},将替换成员工工号 |
freezeBudget | boolean | Y | 是否占用预算(当合同的类型为不控制金额的合同时,不能占预算,值必须为false) |
budgetExecutingForms | List<BudgetExecutingForm> | N | 占用预算的请求对象(当需要占预算的时候才填入这部分信息) |
customFormValues | CustomFormValue数组 | 自定义表单内容 | |
currency | String | N | 合同币种(默认业务实体币种),如:CNY、USD |
attachmentDtoList | AttachmentDto数组 | N | 附件数据 |
submitAt | long | N | 传时间戳,精确到毫秒,不能超过当前时间(不传该字段,默认当前时间) |
contractType | String | N | 合同类型(normal -普通合同(默认);append- 附加合同) |
mainContractBizCode | String | N | 关联主合同编码(若合同类型为附加合同则必填) |
contractDeadline | long | N | 合同到期日 |
BudgetExecutingForm结构
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
budgetaryAccountBizCode | String | Y | 预算三级科目业务编码 |
budgetEntryTargetType | String | Y | 目标预算类型,可选值为:SUBSIDIARY - 业务实体预算, DEPARTMENT - 部门预算, AUX_ACCOUNTING - 项目预算, PERSONAL - 个人预算 |
budgetAttributionDate | Date | Y | 预算归属日期 |
auxAccountingBizCode | String | N | 项目预算的项目编码,当目标预算类型为AUX_ACCOUNTING时,需要传入此参数 |
employeeId | String | N | 个人预算的员工工号,当目标预算类型为PERSONAL时,需要传入此参数 |
departmentBizCode | String | N | 部门预算的部门编码,当目标预算类型为DEPARTMENT时, 需要传入此参数,当使用部门预算时,如果预算业务实体编码为空, 使用不带业务实体的部门预算,如果有值则使用带业务实体的部门预算 |
subsidiaryBizCode | String | N | 业务实体预算的业务实体编码,当需要占业务实体预算或者是带有业务实体的部门预算 的时候需要传入此参数,并且值应该与合同的业务实体一致 |
amount | BigDecimal | Y | 冻结的预算金额,所有冻结明细的总金额不允许超出合同的总金额 |
CustomFormValue 结构(详细说明请参考-自定义字段参数说明)
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
identifier | string | Y | 字段占位符 |
value | string | 字段内容 | |
detailFieldValues | List<Map<String,String>> | 明细类型字段 | |
installmentFieldValues | List<Map<String,String>> | 分期付款类型字段 |
AttachmentDto结构
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
fileName | string | Y | 文件名 |
fileUrl | string | N | 有效文件url |
base64 | string | N | 文件base64 |
注:fileUrl 与 base64 二选一必填一个,fileUrl优先
该接口采用单条失败的处理方式,即整批数据中,如果只有其中的几条因为各种原因失败,那么只有那几条数据不会被保存;其它的数据仍然会被正常处理;错误数据的位置会被放在errorData里面errorData为结构体,包含出错记录位置, 以及与之对应的出错信息; 类似 {"请检查第1条数据": "供应商编码不正确"}; 具体参见失败实例;
请求示例:包含分期付款组件导入
installmentFieldValues 参数
参数 | 类型 | 描述 |
---|---|---|
installmentFieldValues | List<Map<String,String>> | 分期付款类型字段 |
fieldXX-1 | 付款金额 | |
fieldXX-2 | 支付状态(PAID-已支付)(UNPAID-未支付) | |
fieldXX-3 | 付款日期 | |
componentDataCode | 更新付款计划对应期数编码(不传表示新增,原先未支付对应的期数会删除) | |
customRowNo | 若用户系统维护了合同付款计划期数行ID,可传该参数与每刻期数行ID(componentDataCode)映射 |
- 请求示例:
{
"data":[
{
"contractId":"22",
"businessCode":"MK-001",
"contractName":"openApi导入分期合同名字",
"totalAmount":999,
"applicantUserEmployeeId":"200070",
"agentUserEmployeeIds":[
"200070"
],
"supplierBizCode":"FW00001900",
"departmentBizCode":"www",
"subsidiaryBizCode":"test",
"formSubTypeBizCode":"PLC2112281HR4V7NK",
"externalLink":"",
"freezeBudget":false,
"contractType":"append",
"mainContractBizCode":"MK822036121",
"attachmentDtoList":[
{
"fileName":"picture1.png",
"fileUrl":"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202105%2F29%2F20210529001057_aSeLB.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1661331430&t=4ccd64b1b51c96f6d8cb8e73851072ab"
},
{
"fileName":"picture1.png",
"base64":"UEsDBBQACAgIAEZYpVQAAAAAAAAAAAAAAAAJAAAAZG9jUHJvcHMvAwBQSwc..."
}
],
"customFormValues":[
{
"identifier":"field10",
"value":"",
"installmentFieldValues":[
{
"field10-1":100,
"field10-2":"2021-03-29",
"field10-3":"PAID",
"customRowNo":""
},
{
"field10-1":200,
"field10-2":"2021-03-30",
"field10-3":"UNPAID",
"customRowNo":""
}
]
}
]
}
]
}
- 请求示例1:不控制金额的合同(不能占用预算)
{
"timestamp": "1488522206",
"data": [
{
"contractId": "AA0044",
"contractName": "不控金额示例合同",
"totalAmount": "",//可以是任意数值
"fulfillAmount": 0,
"applicantUserEmployeeId": "EM10001",
"agentUserEmployeeIds": [
"EM10000",
"EM10002"
],
"supplierBizCode": "1231",
"externalLink": "www.test.com/AA0044",
"subsidiaryBizCode": "EM-SUB1",
"departmentBizCode": "EM-DEP1",
"formSubTypeBizCode": "EM-FORM",
"freezeBudget": false//必须为false
}
]
}
- 请求示例2:控制金额但不占预算的合同
{
"timestamp": "1488522206",
"data": [
{
"contractId": "AA0044",
"contractName": "控制金额不占预算示例合同",
"totalAmount": "100",
"fulfillAmount": 0,
"applicantUserEmployeeId": "EM10001",
"agentUserEmployeeIds": [
"EM10000",
"EM10002"
],
"supplierBizCode": "1231",
"externalLink": "www.test.com/AA0044",
"subsidiaryBizCode": "EM-SUB1",
"departmentBizCode": "EM-DEP1",
"formSubTypeBizCode": "EM-FORM",
"freezeBudget": false
}
]
}
- 请求示例1:控制金额并且占预算的合同
{
"timestamp": "1488522206",
"data": [
{
"contractId": "AA0044",
"contractName": "占预算示例合同",
"totalAmount": "100",
"fulfillAmount": 0,
"applicantUserEmployeeId": "EM10001",
"agentUserEmployeeIds": [
"EM10000",
"EM10002"
],
"supplierBizCode": "1231",
"externalLink": "www.test.com/AA0044",
"subsidiaryBizCode": "EM-SUB1",
"departmentBizCode": "EM-DEP1",
"formSubTypeBizCode": "EM-FORM",
"freezeBudget": true,
"budgetExecutingForms": [{
"budgetaryAccountBizCode": "EM-BA1",
"budgetEntryTargetType": "SUBSIDIARY",
"budgetAttributionDate": "2018-06-15",
"departmentBizCode": "111",
"auxAccountingBizCode": "",
"subsidiaryBizCode": "SUB1",
"employeeId": ""
}]
}
]
}
- 返回示例:上传成功的返回
{
"code": "ACK",
"message": "",
"data": {},
"args": null,
"linkDetail": false,
"nonBizError": false
}
- 返回示例2:上传失败的返回
{
"code": "NACK",
"message": null,
"data": {
"请检查第1条数据": "该合同已经存在"
},
"args": null,
"linkDetail": false,
"errorData": {
"请检查第1条数据": "该合同已经存在"
},
"nonBizError": false
}
合同单据类型的详情页面:
有一个开关---根据合同金额对关联对公支付单的支付金额进行控制
1、开关打开,合同控制金额,接口传入该类型的合同:合同金额必填,值大于0,可以占用预算;
2、当开关关闭时,合同不控制金额,接口传入该类型的合同:合同金额不必填(可以填写任意数值),不可以占预算(即"freezeBudget"字段的值必须为false )