使用同事务入口,避免 REQUIRES_NEW 读不到尚未提交的新运单。
+ * 新建/复制运单若业务状态为已完成,按与「完成运单」相同的合同系统计费规则生成应收、应付明细。 + *使用同事务入口 {@link IReceivablePayableDetailService#generateForImportedWaybills}, + * 避免 {@code generateForCompletedWaybills} 的 REQUIRES_NEW 读不到尚未提交的新运单。
*/ private void generateReceivablePayableIfCompleted(Waybill waybill) { if (waybill == null || Func.isEmpty(waybill.getId())) { return; } - if (!"completed".equals(waybill.getBusinessStatus())) { + Waybill saved = getById(waybill.getId()); + if (saved == null || Objects.equals(saved.getIsDeleted(), 1)) { return; } - receivablePayableDetailService.generateForImportedWaybills(List.of(waybill)); + String businessStatus = TransportBusinessSupport.trimToNull(saved.getBusinessStatus()); + if (Func.isEmpty(businessStatus)) { + businessStatus = TransportBusinessSupport.trimToNull(waybill.getBusinessStatus()); + } + if (!isCompletedBusinessStatus(businessStatus)) { + return; + } + // 统一落库英文状态码,与完成运单、列表展示口径一致 + if (!"completed".equals(businessStatus)) { + saved.setBusinessStatus("completed"); + updateById(saved); + } + receivablePayableDetailService.generateForImportedWaybills(List.of(saved)); + } + + private static boolean isCompletedBusinessStatus(String businessStatus) { + return "completed".equals(businessStatus) || "已完成".equals(businessStatus); } @Override diff --git a/doc/sql/bladex/bladex.mysql.all.create.sql b/doc/sql/bladex/bladex.mysql.all.create.sql index 33d15e60..8a7cb64e 100644 --- a/doc/sql/bladex/bladex.mysql.all.create.sql +++ b/doc/sql/bladex/bladex.mysql.all.create.sql @@ -304,6 +304,7 @@ CREATE TABLE `blade_dept` ( `full_name` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门全称', `dept_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组织编码', `kingdee_dept_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '金蝶部门代码', + `contract_code_prefix` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '合同编码前缀', `short_name` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组织简称', `pinyin_mnemonic` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '拼音助记码', `mnemonic_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '助记码', diff --git a/doc/sql/transport/blade_contract_manage_apply_date_20261009.sql b/doc/sql/transport/blade_contract_manage_apply_date_20261009.sql new file mode 100644 index 00000000..8ebe38ed --- /dev/null +++ b/doc/sql/transport/blade_contract_manage_apply_date_20261009.sql @@ -0,0 +1,3 @@ +-- 合同管理新增申请日期:正式合同提交时写入当天日期 +ALTER TABLE `blade_contract_manage` + ADD COLUMN `apply_date` date DEFAULT NULL COMMENT '申请日期(提交正式合同时写入)' AFTER `sign_date`; diff --git a/doc/sql/transport/blade_contract_manage_main_content_20261009.sql b/doc/sql/transport/blade_contract_manage_main_content_20261009.sql new file mode 100644 index 00000000..ae0d144c --- /dev/null +++ b/doc/sql/transport/blade_contract_manage_main_content_20261009.sql @@ -0,0 +1,3 @@ +-- 合同管理新增合同主要内容(非必填,最多1000字) +ALTER TABLE `blade_contract_manage` + ADD COLUMN `main_content` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '合同主要内容' AFTER `terminate_reason`; diff --git a/doc/sql/transport/blade_dept_contract_code_prefix_20261009.sql b/doc/sql/transport/blade_dept_contract_code_prefix_20261009.sql new file mode 100644 index 00000000..781b00b1 --- /dev/null +++ b/doc/sql/transport/blade_dept_contract_code_prefix_20261009.sql @@ -0,0 +1,3 @@ +-- 组织机构新增合同编码前缀:合同编号 = 前缀(年份)三位流水号,流水按部门独立 +ALTER TABLE `blade_dept` + ADD COLUMN `contract_code_prefix` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '合同编码前缀' AFTER `kingdee_dept_code`; diff --git a/doc/sql/transport/blade_dict_biz_contract_attachment_type_seal_material_20261009.sql b/doc/sql/transport/blade_dict_biz_contract_attachment_type_seal_material_20261009.sql new file mode 100644 index 00000000..a9a03e6c --- /dev/null +++ b/doc/sql/transport/blade_dict_biz_contract_attachment_type_seal_material_20261009.sql @@ -0,0 +1,9 @@ +-- 合同附件类型字典:合同文件 → 用印材料 +-- 业务字典 code = contract_attachment_type + +UPDATE blade_dict_biz +SET dict_key = '用印材料', + dict_value = '用印材料' +WHERE code = 'contract_attachment_type' + AND is_deleted = 0 + AND (dict_key = '合同文件' OR dict_value = '合同文件'); diff --git a/doc/sql/transport/blade_project_contract_management.sql b/doc/sql/transport/blade_project_contract_management.sql index 2d720698..b2208fbf 100644 --- a/doc/sql/transport/blade_project_contract_management.sql +++ b/doc/sql/transport/blade_project_contract_management.sql @@ -119,8 +119,8 @@ CREATE TABLE `blade_contract_manage` ( `contract_name` varchar(100) DEFAULT NULL COMMENT '合同名称', `project_id` bigint(20) DEFAULT NULL COMMENT '所属项目ID', `project_name` varchar(100) DEFAULT NULL COMMENT '所属项目', - `organization_id` bigint(20) DEFAULT NULL COMMENT '所属组织ID', - `organization_name` varchar(100) DEFAULT NULL COMMENT '所属组织', + `organization_id` bigint(20) DEFAULT NULL COMMENT '合同负责部门ID', + `organization_name` varchar(100) DEFAULT NULL COMMENT '合同负责部门', `contract_category` varchar(50) DEFAULT NULL COMMENT '合同类别', `sign_type` varchar(50) DEFAULT NULL COMMENT '签约类型', `party_a` varchar(200) DEFAULT NULL COMMENT '甲方', @@ -132,6 +132,7 @@ CREATE TABLE `blade_contract_manage` ( `handler_user_id` bigint(20) DEFAULT NULL COMMENT '经办人ID', `handler_user_name` varchar(100) DEFAULT NULL COMMENT '经办人', `sign_date` date DEFAULT NULL COMMENT '签订日期', + `apply_date` date DEFAULT NULL COMMENT '申请日期(提交正式合同时写入)', `settlement_mode` varchar(100) DEFAULT NULL COMMENT '结算方式', `contract_format` varchar(50) DEFAULT NULL COMMENT '合同格式', `legal_seal_flag` int(11) DEFAULT '0' COMMENT '是否需要加盖法人章', @@ -160,6 +161,7 @@ CREATE TABLE `blade_contract_manage` ( `change_reason` varchar(500) DEFAULT NULL COMMENT '变更原因', `change_attachments_json` text DEFAULT NULL COMMENT '待审批变更附件JSON', `terminate_reason` varchar(500) DEFAULT NULL COMMENT '终止原因', + `main_content` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '合同主要内容', `remark` varchar(2000) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) USING BTREE, KEY `idx_contract_project` (`project_id`) USING BTREE,