:fix: 合同特批附件归口佐证材料区校验并更新特批附件文案
This commit is contained in:
+20
-8
@@ -161,7 +161,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
|
||||
prepare(contractManage);
|
||||
validateDraft(contractManage);
|
||||
validateTemporary(contractManage);
|
||||
// 高风险/黑名单客商管控:必须上传特批说明附件(外部客商,内部组织默认无风险)
|
||||
// 高风险/黑名单客商管控:必须上传特批附件(外部客商,内部组织默认无风险)
|
||||
validateSpecExplanationOnSubmit(contractManage);
|
||||
if (Func.isNotEmpty(contractManage.getId())) {
|
||||
validateContractPartyCombinationUnique(contractManage);
|
||||
@@ -185,7 +185,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
|
||||
throw new ServiceException("仅草稿或已撤回/已驳回的临时合同允许提交临时合同审批");
|
||||
}
|
||||
validateTemporary(contractManage);
|
||||
// 高风险/黑名单客商管控:必须上传特批说明附件(外部客商,内部组织默认无风险)
|
||||
// 高风险/黑名单客商管控:必须上传特批附件(外部客商,内部组织默认无风险)
|
||||
validateSpecExplanationOnSubmit(contractManage);
|
||||
// 临时放开新增合同从草稿转临时合同时的组合重复校验。
|
||||
// validateContractPartyCombinationUnique(contractManage);
|
||||
@@ -205,7 +205,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
|
||||
throw new ServiceException("仅临时合同或已撤回/已驳回的正式合同允许提交正式合同审批");
|
||||
}
|
||||
validateFormal(contractManage);
|
||||
// 高风险/黑名单客商管控:必须上传特批说明附件(外部客商,内部组织默认无风险)
|
||||
// 高风险/黑名单客商管控:必须上传特批附件(外部客商,内部组织默认无风险)
|
||||
validateSpecExplanationOnSubmit(contractManage);
|
||||
// 临时放开新增合同从临时转正式合同时的组合重复校验。
|
||||
// validateContractPartyCombinationUnique(contractManage);
|
||||
@@ -1118,7 +1118,8 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
|
||||
|
||||
/**
|
||||
* 高风险/黑名单客商提交校验:甲/乙方为外部客商且高风险(C101-1 风险等级=2)或黑名单时,
|
||||
* 必须已上传「特批说明」类型附件(fileType=特批说明,业务字典 contract_attachment_type);内部组织类型客商默认无风险
|
||||
* 必须已上传「特批附件」类型附件(fileType=特批附件,业务字典 contract_supporting_attachment_type),
|
||||
* 归口「附件(佐证材料等)」(attachmentsJson)区上传;用印材料(contractFileJson)历史已传行兼容放行;内部组织类型客商默认无风险
|
||||
*
|
||||
* @param contractManage 合同单
|
||||
*/
|
||||
@@ -1127,14 +1128,25 @@ public class ContractManageServiceImpl extends BaseServiceImpl<ContractManageMap
|
||||
if (!risky) {
|
||||
return;
|
||||
}
|
||||
boolean hasSpecExplanation = parseJsonArray(contractManage.getAttachmentsJson()).stream()
|
||||
boolean hasSpecExplanation = this.hasSpecAttachment(contractManage.getAttachmentsJson())
|
||||
|| this.hasSpecAttachment(contractManage.getContractFileJson());
|
||||
if (!hasSpecExplanation) {
|
||||
throw new ServiceException("合同相对方存在高风险/黑名单客商,必须上传「特批附件」类型附件后再提交审批");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 附件 JSON 中是否已存在特批附件(fileType=特批附件)
|
||||
*
|
||||
* @param attachmentsJson 附件元数据 JSON 数组
|
||||
* @return 是否存在特批附件
|
||||
*/
|
||||
private boolean hasSpecAttachment(String attachmentsJson) {
|
||||
return parseJsonArray(attachmentsJson).stream()
|
||||
.filter(Map.class::isInstance)
|
||||
.map(Map.class::cast)
|
||||
.anyMatch(attachment -> HcsSyncConstant.ATTACHMENT_TYPE_SPEC_EXPLANATION
|
||||
.equals(Objects.toString(attachment.get(HcsSyncConstant.ATTACHMENT_TYPE_FIELD), null)));
|
||||
if (!hasSpecExplanation) {
|
||||
throw new ServiceException("合同相对方存在高风险/黑名单客商,必须上传「特批说明」类型附件后再提交审批");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
-- 特批附件归口「附件(佐证材料等)」区上传(产品口径 2026-10-17)。
|
||||
-- ① 下架用印材料字典 contract_attachment_type 中的特批附件(隐藏,逻辑删除,幂等);
|
||||
-- ② 新建佐证材料附件类型字典 contract_supporting_attachment_type:特批附件/其他文件。
|
||||
-- 佐证材料区此前取不到字典时前端走兜底选项,落库后各环境与前端兜底保持一致。
|
||||
|
||||
-- ① 用印材料字典下架特批附件
|
||||
UPDATE blade_dict_biz
|
||||
SET is_deleted = 1
|
||||
WHERE code = 'contract_attachment_type' AND dict_key = '特批附件' AND tenant_id = '000000' AND is_deleted = 0;
|
||||
|
||||
-- ② 佐证材料附件类型字典父项
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT 2099700000000000001, '000000', 0, 'contract_supporting_attachment_type', '-1', '佐证材料附件类型', 1, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'contract_supporting_attachment_type' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ③ 子项:特批附件(高风险/黑名单客商合同必传,fileType=特批附件)
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT 2099700000000000002, '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'contract_supporting_attachment_type' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'contract_supporting_attachment_type', '特批附件', '特批附件', 1, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'contract_supporting_attachment_type' AND dict_key = '特批附件' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
|
||||
-- ④ 子项:其他文件(佐证材料历史唯一类型)
|
||||
INSERT INTO blade_dict_biz (id, tenant_id, parent_id, code, dict_key, dict_value, sort, remark, is_sealed, status, is_deleted)
|
||||
SELECT 2099700000000000003, '000000',
|
||||
(SELECT id FROM blade_dict_biz WHERE code = 'contract_supporting_attachment_type' AND dict_key = '-1' AND tenant_id = '000000' AND is_deleted = 0 LIMIT 1),
|
||||
'contract_supporting_attachment_type', '其他文件', '其他文件', 2, NULL, 0, 1, 0
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM blade_dict_biz
|
||||
WHERE code = 'contract_supporting_attachment_type' AND dict_key = '其他文件' AND tenant_id = '000000' AND is_deleted = 0
|
||||
);
|
||||
Reference in New Issue
Block a user