diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Dept.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Dept.java index 18338ed0..c7d59b58 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Dept.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Dept.java @@ -144,6 +144,12 @@ public class Dept extends TenantEntity { @Schema(description = "金蝶部门代码") private String kingdeeDeptCode; + /** + * 合同编码前缀(合同编号:前缀(年份)三位流水号) + */ + @Schema(description = "合同编码前缀") + private String contractCodePrefix; + /** * 组织简称 */ diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/ContractManage.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/ContractManage.java index d56fec74..04f6a1b4 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/ContractManage.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/ContractManage.java @@ -61,10 +61,10 @@ public class ContractManage extends TenantEntity { @Schema(description = "所属项目") private String projectName; - @Schema(description = "所属组织ID") + @Schema(description = "合同负责部门ID") private Long organizationId; - @Schema(description = "所属组织") + @Schema(description = "合同负责部门") private String organizationName; @Schema(description = "合同类别") @@ -100,6 +100,9 @@ public class ContractManage extends TenantEntity { @Schema(description = "签订日期") private LocalDate signDate; + @Schema(description = "申请日期(提交正式合同时写入)") + private LocalDate applyDate; + @Schema(description = "结算方式") private String settlementMode; @@ -107,6 +110,7 @@ public class ContractManage extends TenantEntity { private String contractFormat; @Schema(description = "是否需要加盖法人章") + @TableField(insertStrategy = FieldStrategy.ALWAYS, updateStrategy = FieldStrategy.ALWAYS) private Integer legalSealFlag; @Schema(description = "一式份数") @@ -206,7 +210,10 @@ public class ContractManage extends TenantEntity { @Schema(description = "终止原因") private String terminateReason; - @Schema(description = "备注") + @Schema(description = "合同主要内容") + private String mainContent; + + @Schema(description = "其他事项说明") private String remark; } diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/Waybill.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/Waybill.java index dec1a0b5..d79f1502 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/Waybill.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/Waybill.java @@ -25,6 +25,8 @@ package org.springblade.transport.pojo.entity; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -82,6 +84,7 @@ public class Waybill extends TenantEntity { @Schema(description = "型号") private String model; + @JsonSerialize(nullsUsing = NullSerializer.class) @Schema(description = "数量") private BigDecimal quantity; @@ -183,6 +186,7 @@ public class Waybill extends TenantEntity { @Schema(description = "押运人手机号") private String escortPhone; + @JsonSerialize(nullsUsing = NullSerializer.class) @Schema(description = "里程") private BigDecimal mileage; @@ -195,12 +199,14 @@ public class Waybill extends TenantEntity { @Schema(description = "预计完成日期") private LocalDate estimatedEndTime; + @JsonSerialize(nullsUsing = NullSerializer.class) @Schema(description = "单价") private BigDecimal unitPrice; @Schema(description = "计价单位") private String priceUnit; + @JsonSerialize(nullsUsing = NullSerializer.class) @Schema(description = "其他费用合计") private BigDecimal otherFeeTotal; diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml index e125b43b..a2cb09de 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml @@ -13,6 +13,7 @@ + @@ -34,6 +35,7 @@ + diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ContractManageController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ContractManageController.java index b6d27107..3ff3eaf1 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ContractManageController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/ContractManageController.java @@ -177,8 +177,16 @@ public class ContractManageController extends BladeController { return R.data(contractManageService.expireStats(contractManage)); } - @GetMapping("/export-contract-manage") + @GetMapping("/next-contract-no") @ApiOperationSupport(order = 16) + @Operation(summary = "预览下一合同编号", description = "按合同负责部门编码前缀+年份+三位流水预览") + public R nextContractNo( + @Parameter(description = "合同负责部门ID", required = true) @RequestParam Long organizationId) { + return R.data(contractManageService.nextContractNo(organizationId)); + } + + @GetMapping("/export-contract-manage") + @ApiOperationSupport(order = 17) @Operation(summary = "导出合同管理") public void exportContractManage(ContractManageVO contractManage, @RequestParam(required = false) String ids, HttpServletResponse response) { List list = contractManageService.exportContractManage(contractManage, ids); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/ContractManageExcel.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/ContractManageExcel.java index fe30218e..2e9fdbc0 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/ContractManageExcel.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/excel/ContractManageExcel.java @@ -56,7 +56,7 @@ public class ContractManageExcel implements Serializable { private String contractName; @ExcelProperty("所属项目") private String projectName; - @ExcelProperty("所属组织") + @ExcelProperty("合同负责部门") private String organizationName; @ExcelProperty("合同类别") private String contractCategory; @@ -76,6 +76,10 @@ public class ContractManageExcel implements Serializable { private LocalDate temporaryEndDate; @ExcelProperty("经办人") private String handlerUserName; + @ExcelProperty("签订日期") + private LocalDate signDate; + @ExcelProperty("申请日期") + private LocalDate applyDate; @ExcelProperty("合同阶段") private String contractStage; @ExcelProperty("审核状态") @@ -105,7 +109,9 @@ public class ContractManageExcel implements Serializable { private String currentNode; @ExcelProperty("当前处理人") private String currentProcessor; - @ExcelProperty("备注") + @ExcelProperty("合同主要内容") + private String mainContent; + @ExcelProperty("其他事项说明") private String remark; @ExcelProperty("创建人") private String createUserName; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IContractManageService.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IContractManageService.java index 71fef30c..e43ebcc7 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IContractManageService.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/IContractManageService.java @@ -64,4 +64,12 @@ public interface IContractManageService extends BaseService { Map expireStats(ContractManageVO contractManage); List exportContractManage(ContractManageVO contractManage, String ids); + /** + * 预览下一合同编号(按合同负责部门前缀 + 年份 + 三位流水) + * + * @param organizationId 合同负责部门ID + * @return 预览编号 + */ + String nextContractNo(Long organizationId); + } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ContractManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ContractManageServiceImpl.java index 9d2c291f..4c6cd10f 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ContractManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ContractManageServiceImpl.java @@ -32,7 +32,9 @@ import org.springblade.core.tenant.annotation.TenantIgnore; import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.system.cache.SysCache; import org.springblade.system.cache.UserCache; +import org.springblade.system.pojo.entity.Dept; import org.springblade.transport.excel.ContractManageExcel; import org.springblade.transport.mapper.ContractManageMapper; import org.springblade.transport.pojo.entity.ContractManage; @@ -55,6 +57,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * 合同管理 服务实现类 @@ -190,6 +194,8 @@ public class ContractManageServiceImpl extends BaseServiceImpl latestList = list(Wrappers.lambdaQuery() + .select(ContractManage::getContractNo) + .eq(ContractManage::getIsDeleted, 0) + .eq(ContractManage::getOrganizationId, organizationId) + .likeRight(ContractManage::getContractNo, head) + .orderByDesc(ContractManage::getContractNo) + .last("LIMIT 50")); + Pattern pattern = Pattern.compile("^" + Pattern.quote(prefix) + "(" + year + ")(\\d{3})号$"); + int next = 1; + for (ContractManage item : latestList) { + String contractNo = TransportBusinessSupport.trimToNull(item.getContractNo()); + if (Func.isEmpty(contractNo)) { + continue; + } + Matcher matcher = pattern.matcher(contractNo); + if (!matcher.matches()) { + continue; + } + next = Integer.parseInt(matcher.group(1)) + 1; + break; + } + if (next > 999) { + throw new ServiceException("当前部门本年合同流水号已达上限999"); + } + return head + String.format("%03d", next) + "号"; + } + private void refreshArchiveStatusOnApprove(ContractManage contractManage) { if (hasSealArchiveFile(contractManage.getContractFileJson())) { contractManage.setArchiveStatus(ARCHIVE_STATUS_ARCHIVED); @@ -595,7 +644,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl> entry : originalApproved.entrySet()) { if (!requestKeys.contains(entry.getKey())) { - throw new ServiceException("已审核通过的合同文件不允许删除"); + throw new ServiceException("已审核通过的用印材料不允许删除"); } } return merged.isEmpty() ? null : JsonUtil.toJson(merged); @@ -671,7 +720,8 @@ public class ContractManageServiceImpl extends BaseServiceImpl dispatch) { return String.join("\u0000", string(dispatch, "segmentNo", ""), string(dispatch, "carrierType", ""), string(dispatch, "carrierContractId", ""), string(dispatch, "carrierName", ""), string(dispatch, "driverName", ""), string(dispatch, "driverPhone", ""), string(dispatch, "vehicleNo", ""), string(dispatch, "captainName", ""), string(dispatch, "containerNo", ""), string(dispatch, "cabinNo", "")); } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PreSettlementServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PreSettlementServiceImpl.java index 146581ca..86f5eafe 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PreSettlementServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PreSettlementServiceImpl.java @@ -319,7 +319,7 @@ public class PreSettlementServiceImpl extends BaseServiceImpllambdaQuery() .eq(PreSettlementSummaryFee::getPreSettlementId, settlement.getId())); } @@ -329,7 +329,7 @@ public class PreSettlementServiceImpl extends BaseServiceImpl 0) { + code = code.substring(0, separatorIndex).trim(); + } + if ("CNY".equals(code)) { + return LOCAL_CURRENCY; + } + return Func.isEmpty(code) ? LOCAL_CURRENCY : code; + } + private String resolveSettlementType(PreSettlementSaveRequest request, ContractManage contract) { if (Boolean.TRUE.equals(request.getAllowSourceMismatch()) && Func.isNotEmpty(request.getSettlementType())) { validateSettlementType(request.getSettlementType()); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java index 084f85dd..9edd897e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java @@ -80,6 +80,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -1468,7 +1469,7 @@ public class ReceivablePayableDetailServiceImpl detail.setMileage(normalizeGeneratedMileage(waybill.getMileage())); detail.setBatchNo(waybill.getBatchNo()); detail.setUnitPrice(unitPrice); - detail.setCurrency("RMB"); + detail.setCurrency(resolveCurrency(contract, waybill)); detail.setFreightAmount(freight); detail.setOtherFeeAmount(other); detail.setTotalAmount(total); @@ -2523,6 +2524,7 @@ public class ReceivablePayableDetailServiceImpl detail.setOtherFeeAmount(total.subtract(freight)); detail.setTotalAmount(total); detail.setUnitPrice(resolveContractUnitPrice(fees)); + detail.setCurrency(resolveCurrency(contract, waybill)); detail.setFeeItemsJson(aggregateFeeItemsJson(fees)); updateById(detail); } @@ -2554,6 +2556,7 @@ public class ReceivablePayableDetailServiceImpl detail.setOtherFeeAmount(total.subtract(freight)); detail.setTotalAmount(total); detail.setUnitPrice(resolveContractUnitPrice(fees)); + detail.setCurrency(resolveCurrency(contract, masterGoods.isEmpty() ? null : masterGoods.get(0))); detail.setFeeItemsJson(aggregateFeeItemsJson(fees)); updateById(detail); } @@ -2588,6 +2591,7 @@ public class ReceivablePayableDetailServiceImpl detail.setOtherFeeAmount(total.subtract(freight)); detail.setTotalAmount(total); detail.setUnitPrice(resolveContractUnitPrice(fees)); + detail.setCurrency(resolveCurrency(contract, waybills.get(0))); detail.setFeeItemsJson(aggregateFeeItemsJson(fees)); updateById(detail); } @@ -2886,6 +2890,43 @@ public class ReceivablePayableDetailServiceImpl return map; } + /** + * 结算币种优先取合同 settlementCurrency,其次运单 freightJson.currency,默认 RMB。 + */ + private String resolveCurrency(ContractManage contract, Waybill waybill) { + if (contract != null && Func.isNotEmpty(contract.getSettlementCurrency())) { + return normalizeCurrencyCode(contract.getSettlementCurrency()); + } + String freightCurrency = extractFreightCurrency(waybill); + if (Func.isNotEmpty(freightCurrency)) { + return normalizeCurrencyCode(freightCurrency); + } + return "RMB"; + } + + private String extractFreightCurrency(Waybill waybill) { + if (waybill == null || Func.isEmpty(waybill.getFreightJson())) { + return null; + } + Object currency = parseMap(waybill.getFreightJson()).get("currency"); + return currency == null ? null : String.valueOf(currency); + } + + private String normalizeCurrencyCode(String currency) { + if (Func.isEmpty(currency)) { + return "RMB"; + } + String code = currency.trim().toUpperCase(Locale.ROOT); + int separatorIndex = code.indexOf(" - "); + if (separatorIndex > 0) { + code = code.substring(0, separatorIndex).trim(); + } + if ("CNY".equals(code)) { + return "RMB"; + } + return code; + } + private Map parseMap(String json) { if (Func.isEmpty(json)) { return new LinkedHashMap<>(); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java index e9784671..16619068 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java @@ -1062,10 +1062,13 @@ public class WaybillServiceImpl extends BaseServiceImpl waybill.setMasterNo(null); waybill.setMileageRemark(null); } - // 新建若已带业务状态(如复制提交)则在过程校正后回写,保证与原运单一致 + // 新建若已带业务状态(如复制提交已完成)则在过程校正后回写,保证与原运单一致 String preservedBusinessStatus = created ? TransportBusinessSupport.trimToNull(waybill.getBusinessStatus()) : null; + if (isCompletedBusinessStatus(preservedBusinessStatus)) { + preservedBusinessStatus = "completed"; + } // 无过程快照时按项目回填;再按接单设置决定 pending / running fillProjectProcessConfig(waybill); prepare(waybill); @@ -1360,17 +1363,35 @@ public class WaybillServiceImpl extends BaseServiceImpl } /** - * 新建/复制运单若业务状态为已完成,按合同系统计费模式生成应收、应付明细。 - *

使用同事务入口,避免 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,