From 88b04b7dacbe8160854ed5a935c14b05914f20a9 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Thu, 3 Sep 2026 03:30:57 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E5=A4=8D=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=202=E3=80=81=E4=BF=AE=E5=A4=8D=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/pojo/entity/RailwayStation.java | 4 +- .../system/pojo/entity/Region.java | 35 ++++++++ .../transport/pojo/entity/ContractManage.java | 7 ++ .../transport/pojo/vo/TransportPlanVO.java | 5 ++ .../system/controller/FeeItemController.java | 5 +- .../system/controller/RegionController.java | 5 +- .../excel/AirportMasterExportExcel.java | 13 +++ .../system/excel/FeeItemExportExcel.java | 62 ++++++++++++++ .../system/excel/PortTerminalExportExcel.java | 13 +++ .../system/excel/RailwayStationExcel.java | 2 +- .../excel/RailwayStationExportExcel.java | 2 +- .../springblade/system/excel/RegionExcel.java | 46 ++--------- .../system/excel/RegionExportExcel.java | 70 ++++++++++++++++ .../system/mapper/RegionMapper.java | 3 +- .../system/mapper/RegionMapper.xml | 62 +++++++++++--- .../system/service/IFeeItemService.java | 3 +- .../system/service/IRegionService.java | 3 +- .../impl/AirportMasterServiceImpl.java | 2 + .../service/impl/FeeItemServiceImpl.java | 14 +++- .../service/impl/PortTerminalServiceImpl.java | 2 + .../impl/RailwayStationServiceImpl.java | 14 ++-- .../service/impl/RegionServiceImpl.java | 62 ++++++++++++-- .../transport/excel/ContractManageExcel.java | 10 +++ .../transport/mapper/DriverMapper.xml | 4 + .../impl/ContractManageServiceImpl.java | 8 ++ .../impl/LoadingManageServiceImpl.java | 8 +- .../service/impl/MasterOrderServiceImpl.java | 8 +- .../impl/ShippingTemplateServiceImpl.java | 80 +++++++++++++++++-- .../impl/TransportPlanServiceImpl.java | 23 ++++++ .../service/impl/WaybillServiceImpl.java | 24 ++++-- .../support/TransportBusinessSupport.java | 18 +++++ .../transport/wrapper/WaybillWrapper.java | 2 + ...ract_manage_settlement_fields_20260902.sql | 4 + .../blade_project_contract_management.sql | 2 + .../blade_region_export_fields_20260903.sql | 79 ++++++++++++++++++ .../blade_region_level_patch_20260903.sql | 6 ++ doc/sql/transport/transport.sql | 8 +- 37 files changed, 615 insertions(+), 103 deletions(-) create mode 100644 blade-service/blade-system/src/main/java/org/springblade/system/excel/FeeItemExportExcel.java create mode 100644 blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExportExcel.java create mode 100644 doc/sql/transport/blade_contract_manage_settlement_fields_20260902.sql create mode 100644 doc/sql/transport/blade_region_export_fields_20260903.sql create mode 100644 doc/sql/transport/blade_region_level_patch_20260903.sql diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/RailwayStation.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/RailwayStation.java index ce72905..2afb375 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/RailwayStation.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/RailwayStation.java @@ -60,9 +60,9 @@ public class RailwayStation extends BaseEntity { @Schema(description = "TMIS国标编码") private String tmisCode; /** - * 电报码 + * 电报略码 */ - @Schema(description = "电报码") + @Schema(description = "电报略码") private String telegraphCode; /** * 车站名称 diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Region.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Region.java index 16e8255..ad8f530 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Region.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/Region.java @@ -34,6 +34,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.util.Date; /** * 行政区划表实体类 @@ -134,6 +135,40 @@ public class Region implements Serializable { */ @Schema(description = "备注") private String remark; + /** + * 数据来源 + */ + @Schema(description = "数据来源") + private String dataSource; + /** + * 创建人 + */ + @TableField("create_user") + @Schema(description = "创建人") + private Long createUser; + /** + * 创建时间 + */ + @TableField("create_time") + @Schema(description = "创建时间") + private Date createTime; + /** + * 更新人 + */ + @TableField("update_user") + @Schema(description = "更新人") + private Long updateUser; + /** + * 更新时间 + */ + @TableField("update_time") + @Schema(description = "更新时间") + private Date updateTime; + /** + * 状态:1启用,2停用 + */ + @Schema(description = "状态") + private Integer status; /** * 原区划编号 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 55325a5..6b5755e 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 @@ -112,6 +112,13 @@ public class ContractManage extends TenantEntity { @TableField(insertStrategy = FieldStrategy.ALWAYS, updateStrategy = FieldStrategy.ALWAYS) private Integer copyCount; + @Schema(description = "结算币种") + private String settlementCurrency; + + @Schema(description = "开票周期(天)") + @TableField(insertStrategy = FieldStrategy.ALWAYS, updateStrategy = FieldStrategy.ALWAYS) + private Integer invoiceCycle; + @Schema(description = "回款账期(天)") @TableField(insertStrategy = FieldStrategy.ALWAYS, updateStrategy = FieldStrategy.ALWAYS) private Integer paymentDays; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TransportPlanVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TransportPlanVO.java index ee70c42..a8d394d 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TransportPlanVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/TransportPlanVO.java @@ -59,6 +59,11 @@ public class TransportPlanVO extends TransportPlan { @TableField(exist = false) @Schema(description = "更新人姓名") private String updateUserName; + + @TableField(exist = false) + @Schema(description = "合同编号") + private String contractNo; + @TableField(exist = false) @Schema(description = "业务状态名称") private String businessStatusName; diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java index 76c802b..b8eae38 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/FeeItemController.java @@ -46,6 +46,7 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.system.excel.FeeItemExcel; +import org.springblade.system.excel.FeeItemExportExcel; import org.springblade.system.excel.FeeItemImportFailureExcel; import org.springblade.system.pojo.entity.FeeItem; import org.springblade.system.pojo.vo.FeeItemVO; @@ -155,8 +156,8 @@ public class FeeItemController extends BladeController { public void exportFeeItem(FeeItemVO feeItem, @RequestParam(required = false) String ids, HttpServletResponse response) { - List list = feeItemService.exportFeeItem(buildExportQuery(feeItem, ids)); - ExcelUtil.export(response, "费用项" + DateUtil.time(), "费用项表", list, FeeItemExcel.class); + List list = feeItemService.exportFeeItem(buildExportQuery(feeItem, ids)); + ExcelUtil.export(response, "费用项" + DateUtil.time(), "费用项表", list, FeeItemExportExcel.class); } /** diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java index 2ff8c72..0de1e68 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RegionController.java @@ -48,6 +48,7 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.system.pojo.entity.Region; import org.springblade.system.excel.RegionExcel; +import org.springblade.system.excel.RegionExportExcel; import org.springblade.system.excel.RegionImporter; import org.springblade.system.service.IRegionService; import org.springblade.system.pojo.vo.RegionVO; @@ -206,8 +207,8 @@ public class RegionController extends BladeController { @Operation(summary = "导出行政区划", description = "传入user") public void exportRegion(@Parameter(hidden = true) @RequestParam Map region, HttpServletResponse response) { QueryWrapper queryWrapper = Condition.getQueryWrapper(region, Region.class); - List list = regionService.exportRegion(queryWrapper); - ExcelUtil.export(response, "行政区划数据" + DateUtil.time(), "行政区划数据表", list, RegionExcel.class); + List list = regionService.exportRegion(queryWrapper); + ExcelUtil.export(response, "行政区划数据" + DateUtil.time(), "行政区划数据表", list, RegionExportExcel.class); } /** diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/AirportMasterExportExcel.java b/blade-service/blade-system/src/main/java/org/springblade/system/excel/AirportMasterExportExcel.java index aa56df5..e237be3 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/excel/AirportMasterExportExcel.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/excel/AirportMasterExportExcel.java @@ -27,6 +27,7 @@ package org.springblade.system.excel; import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelProperty; +import cn.idev.excel.annotation.format.DateTimeFormat; import cn.idev.excel.annotation.format.NumberFormat; import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ContentRowHeight; @@ -36,6 +37,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; +import java.util.Date; /** * 空港机场主数据导出 Excel @@ -100,6 +102,17 @@ public class AirportMasterExportExcel implements Serializable { @ExcelProperty("备注") private String remark; + @ExcelProperty("更新人") + private String updateUserName; + + @ExcelProperty("更新时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @ExcelProperty("创建时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date createTime; + @ExcelIgnore private String errorMessage; } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/FeeItemExportExcel.java b/blade-service/blade-system/src/main/java/org/springblade/system/excel/FeeItemExportExcel.java new file mode 100644 index 0000000..a87a46b --- /dev/null +++ b/blade-service/blade-system/src/main/java/org/springblade/system/excel/FeeItemExportExcel.java @@ -0,0 +1,62 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * This file is part of the TMS extension for BladeX. + */ +package org.springblade.system.excel; + +import cn.idev.excel.annotation.ExcelProperty; +import cn.idev.excel.annotation.format.DateTimeFormat; +import cn.idev.excel.annotation.write.style.ColumnWidth; +import cn.idev.excel.annotation.write.style.ContentRowHeight; +import cn.idev.excel.annotation.write.style.HeadRowHeight; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 费用项导出 Excel。 + * + *

该模型仅用于导出,避免导出字段变更影响导入模板。

+ */ +@Data +@ColumnWidth(22) +@HeadRowHeight(20) +@ContentRowHeight(18) +public class FeeItemExportExcel implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @ExcelProperty("费用类型") + private String feeCategory; + + @ExcelProperty("费用项代码") + private String englishName; + + @ExcelProperty("费用项") + private String name; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("组织") + private String createDeptName; + + @ExcelProperty("更新人") + private String updateUserName; + + @ExcelProperty("更新时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @ExcelProperty("创建时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @ExcelProperty("状态") + private String statusName; +} diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/PortTerminalExportExcel.java b/blade-service/blade-system/src/main/java/org/springblade/system/excel/PortTerminalExportExcel.java index f933bc8..44761ac 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/excel/PortTerminalExportExcel.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/excel/PortTerminalExportExcel.java @@ -2,6 +2,7 @@ package org.springblade.system.excel; import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelProperty; +import cn.idev.excel.annotation.format.DateTimeFormat; import cn.idev.excel.annotation.format.NumberFormat; import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ContentRowHeight; @@ -11,6 +12,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; +import java.util.Date; /** * 港口码头主数据导出 Excel @@ -75,6 +77,17 @@ public class PortTerminalExportExcel implements Serializable { @ExcelProperty("备注") private String remark; + @ExcelProperty("更新人") + private String updateUserName; + + @ExcelProperty("更新时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @ExcelProperty("创建时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date createTime; + @ExcelIgnore private String errorMessage; } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/RailwayStationExcel.java b/blade-service/blade-system/src/main/java/org/springblade/system/excel/RailwayStationExcel.java index 8702324..3da00ca 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/excel/RailwayStationExcel.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/excel/RailwayStationExcel.java @@ -54,7 +54,7 @@ public class RailwayStationExcel implements Serializable { @ExcelProperty("TMIS国标编码*") private String tmisCode; - @ExcelProperty("电报码*") + @ExcelProperty("电报略码*") private String telegraphCode; @ExcelProperty("车站名称*") diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/RailwayStationExportExcel.java b/blade-service/blade-system/src/main/java/org/springblade/system/excel/RailwayStationExportExcel.java index b74401e..b745a80 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/excel/RailwayStationExportExcel.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/excel/RailwayStationExportExcel.java @@ -56,7 +56,7 @@ public class RailwayStationExportExcel implements Serializable { @ExcelProperty("TMIS国标编码*") private String tmisCode; - @ExcelProperty("电报码*") + @ExcelProperty("电报略码*") private String telegraphCode; @ExcelProperty("车站名称*") diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java b/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java index 65e0a22..c86d947 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExcel.java @@ -48,54 +48,18 @@ public class RegionExcel implements Serializable { @Serial private static final long serialVersionUID = 1L; - @ExcelProperty("区划编号") + @ExcelProperty("区域编码") private String code; - @ExcelProperty("父区划编号") - private String parentCode; - - @ExcelProperty("祖区划编号") - private String ancestors; - - @ExcelProperty("区划名称") + @ExcelProperty("区域名称") private String name; - @ExcelProperty("省级区划编号") - private String provinceCode; + @ExcelProperty("父级编码") + private String parentCode; - @ExcelProperty("省级名称") - private String provinceName; - - @ExcelProperty("市级区划编号") - private String cityCode; - - @ExcelProperty("市级名称") - private String cityName; - - @ExcelProperty("区级区划编号") - private String districtCode; - - @ExcelProperty("区级名称") - private String districtName; - - @ExcelProperty("镇级区划编号") - private String townCode; - - @ExcelProperty("镇级名称") - private String townName; - - @ExcelProperty("村级区划编号") - private String villageCode; - - @ExcelProperty("村级名称") - private String villageName; - - @ExcelProperty("层级") + @ExcelProperty("区域层级") private Integer regionLevel; - @ExcelProperty("排序") - private Integer sort; - @ExcelProperty("备注") private String remark; diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExportExcel.java b/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExportExcel.java new file mode 100644 index 0000000..84553d2 --- /dev/null +++ b/blade-service/blade-system/src/main/java/org/springblade/system/excel/RegionExportExcel.java @@ -0,0 +1,70 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * This file is part of the TMS extension for BladeX. + */ +package org.springblade.system.excel; + +import cn.idev.excel.annotation.ExcelProperty; +import cn.idev.excel.annotation.format.DateTimeFormat; +import cn.idev.excel.annotation.write.style.ColumnWidth; +import cn.idev.excel.annotation.write.style.ContentRowHeight; +import cn.idev.excel.annotation.write.style.HeadRowHeight; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 行政区划数据导出 Excel。 + * + *

该模型仅用于导出,避免导入模板字段变更影响已有导入文件。

+ */ +@Data +@ColumnWidth(18) +@HeadRowHeight(20) +@ContentRowHeight(18) +public class RegionExportExcel implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + @ExcelProperty("序号") + private Integer serialNumber; + + @ExcelProperty("区域编码") + private String code; + + @ExcelProperty("区域名称") + private String name; + + @ExcelProperty("父级编码") + private String parentCode; + + @ExcelProperty("父级名称") + private String parentName; + + @ExcelProperty("区域层级") + private Integer regionLevel; + + @ExcelProperty("状态") + private String statusName; + + @ExcelProperty("数据来源") + private String dataSource; + + @ExcelProperty("更新人") + private String updateUserName; + + @ExcelProperty("更新时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @ExcelProperty("创建时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private Date createTime; +} diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java index f0f8fa9..0acd05e 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.java @@ -30,6 +30,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.springblade.system.pojo.entity.Region; import org.springblade.system.excel.RegionExcel; +import org.springblade.system.excel.RegionExportExcel; import org.springblade.system.pojo.vo.RegionVO; import java.util.List; @@ -66,6 +67,6 @@ public interface RegionMapper extends BaseMapper { * @param queryWrapper * @return */ - List exportRegion(@Param("ew") Wrapper queryWrapper); + List exportRegion(@Param("ew") Wrapper queryWrapper); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml index 4a800f0..21d2a62 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/RegionMapper.xml @@ -18,7 +18,7 @@ - + @@ -38,7 +38,7 @@ - + @@ -72,7 +72,13 @@ and region.name like concat(concat('%', #{param2.name}),'%') - and region.level = #{param2.regionLevel} + and region.region_level = #{param2.regionLevel} + + + and region.data_source = #{param2.dataSource} + + + and region.status = #{param2.status} ORDER BY region.sort ASC, region.code ASC @@ -92,21 +98,51 @@ and region.parent_code = #{param1} - - and region.code like concat(concat('%', #{param2.code}),'%') - - - and region.name like concat(concat('%', #{param2.name}),'%') - - - and region.level = #{param2.regionLevel} + + and exists ( + select 1 + from blade_region matched + where (matched.code = region.code or find_in_set(region.code, matched.ancestors) > 0) + + and matched.code like concat(concat('%', #{param2.code}),'%') + + + and matched.name like concat(concat('%', #{param2.name}),'%') + + + and matched.region_level = #{param2.regionLevel} + + + and matched.data_source = #{param2.dataSource} + + + and matched.status = #{param2.status} + + ) ORDER BY region.sort ASC, region.code ASC - + SELECT + region.code, + region.name, + region.parent_code, + CASE WHEN region.parent_code = '0' THEN '根节点' + ELSE (SELECT parent.name FROM blade_region parent WHERE parent.code = region.parent_code) + END AS parent_name, + region.region_level, + CASE region.status WHEN 1 THEN '启用' WHEN 2 THEN '停用' ELSE '' END AS status_name, + region.data_source, + COALESCE(updater.real_name, creator.real_name) AS update_user_name, + region.update_time, + region.create_time + FROM blade_region region + LEFT JOIN blade_user updater ON updater.id = region.update_user + LEFT JOIN blade_user creator ON creator.id = region.create_user + ${ew.customSqlSegment} + ORDER BY region.create_time DESC, region.code ASC diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/IFeeItemService.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/IFeeItemService.java index a0f018f..65b02d6 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/IFeeItemService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/IFeeItemService.java @@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.system.excel.FeeItemExcel; +import org.springblade.system.excel.FeeItemExportExcel; import org.springblade.system.excel.FeeItemImportFailureExcel; import org.springblade.system.pojo.entity.FeeItem; import org.springblade.system.pojo.vo.FeeItemVO; @@ -82,6 +83,6 @@ public interface IFeeItemService extends BaseService { * @param queryWrapper 查询条件 * @return 导出数据 */ - List exportFeeItem(Wrapper queryWrapper); + List exportFeeItem(Wrapper queryWrapper); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java index 339bc16..653f78c 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/IRegionService.java @@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService; import org.springblade.system.pojo.entity.Region; import org.springblade.system.excel.RegionExcel; +import org.springblade.system.excel.RegionExportExcel; import org.springblade.system.pojo.vo.RegionVO; import java.util.List; @@ -90,6 +91,6 @@ public interface IRegionService extends IService { * @param queryWrapper * @return */ - List exportRegion(Wrapper queryWrapper); + List exportRegion(Wrapper queryWrapper); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java index 656b2f0..c077730 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/AirportMasterServiceImpl.java @@ -34,6 +34,7 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.system.cache.UserCache; import org.springblade.system.excel.AirportMasterExcel; import org.springblade.system.excel.AirportMasterExportExcel; import org.springblade.system.mapper.AirportMasterMapper; @@ -319,6 +320,7 @@ public class AirportMasterServiceImpl extends BaseServiceImpl } @Override - public List exportFeeItem(Wrapper queryWrapper) { + public List exportFeeItem(Wrapper queryWrapper) { return list(queryWrapper).stream().map(this::toExcel).toList(); } @@ -193,9 +196,14 @@ public class FeeItemServiceImpl extends BaseServiceImpl return feeItem; } - private FeeItemExcel toExcel(FeeItem feeItem) { - FeeItemExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(feeItem, FeeItemExcel.class)); + private FeeItemExportExcel toExcel(FeeItem feeItem) { + FeeItemExportExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(feeItem, FeeItemExportExcel.class)); excel.setFeeCategory(formatFeeCategory(feeItem.getFeeCategory())); + excel.setCreateDeptName( + Func.isEmpty(feeItem.getCreateDept()) ? "" : SysCache.getDeptName(feeItem.getCreateDept()) + ); + excel.setUpdateUserName(UserCache.getUserRealName(feeItem.getUpdateUser())); + excel.setStatusName(Objects.equals(feeItem.getStatus(), STATUS_ENABLED) ? "启用" : "停用"); return excel; } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PortTerminalServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PortTerminalServiceImpl.java index 4057b9e..937973a 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PortTerminalServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/PortTerminalServiceImpl.java @@ -34,6 +34,7 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.system.cache.UserCache; import org.springblade.system.excel.PortTerminalExcel; import org.springblade.system.excel.PortTerminalExportExcel; import org.springblade.system.mapper.PortTerminalMapper; @@ -392,6 +393,7 @@ public class PortTerminalServiceImpl extends BaseServiceImpl 1) { - addValidationError(validationErrors, "电报码在本次导入中重复"); + addValidationError(validationErrors, "电报略码在本次导入中重复"); } - validateImportUnique(RailwayStation::getTelegraphCode, railwayStation.getTelegraphCode(), "电报码已存在", validationErrors); + validateImportUnique(RailwayStation::getTelegraphCode, railwayStation.getTelegraphCode(), "电报略码已存在", validationErrors); } if (Func.isEmpty(railwayStation.getName())) { addValidationError(validationErrors, "车站名称不能为空"); @@ -392,10 +392,10 @@ public class RailwayStationServiceImpl extends BaseServiceImpl impleme @Override public boolean submit(Region region) { + Date now = new Date(); + Long currentUserId = AuthUtil.getUserId(); + boolean isNew = StringUtil.isBlank(region.getOriginalCode()); + if (region.getStatus() == null) { + region.setStatus(1); + } + if (StringUtil.isBlank(region.getDataSource())) { + region.setDataSource("手动录入"); + } + if (isNew) { + region.setCreateUser(currentUserId); + region.setCreateTime(now); + } + region.setUpdateUser(currentUserId); + region.setUpdateTime(now); String regionCode = region.getCode(); String regionParentCode = region.getParentCode(); Integer level = region.getRegionLevel(); + validateRegionLevel(level); if (level != null && level == COUNTRY_LEVEL) { region.setParentCode(ROOT_PARENT_CODE); region.setAncestors(ROOT_PARENT_CODE); @@ -86,17 +105,29 @@ public class RegionServiceImpl extends ServiceImpl impleme region.setAncestors(ancestors); } else if (MAIN_CODE.equals(region.getParentCode())) { region.setAncestors(MAIN_CODE); + } else if (ROOT_PARENT_CODE.equals(region.getParentCode())) { + region.setAncestors(ROOT_PARENT_CODE); } - // 设置省、市、区、镇、村 + // 设置省、市、区、镇、村,并继承上级区划信息 String code = region.getCode(); String name = region.getName(); if (level == PROVINCE_LEVEL) { region.setProvinceCode(code); region.setProvinceName(name); } else if (level == CITY_LEVEL) { + if (Func.isNotEmpty(parent)) { + region.setProvinceCode(parent.getProvinceCode()); + region.setProvinceName(parent.getProvinceName()); + } region.setCityCode(code); region.setCityName(name); } else if (level == DISTRICT_LEVEL) { + if (Func.isNotEmpty(parent)) { + region.setProvinceCode(parent.getProvinceCode()); + region.setProvinceName(parent.getProvinceName()); + region.setCityCode(parent.getCityCode()); + region.setCityName(parent.getCityName()); + } region.setDistrictCode(code); region.setDistrictName(name); } else if (level == TOWN_LEVEL) { @@ -128,6 +159,12 @@ public class RegionServiceImpl extends ServiceImpl impleme } } + private void validateRegionLevel(Integer level) { + if (level != null && level > DISTRICT_LEVEL) { + throw new ServiceException("区划等级仅支持国家、省份/直辖市、地市、区县"); + } + } + @Override public boolean removeRegion(String id) { Long cnt = baseMapper.selectCount(Wrappers.query().lambda().eq(Region::getParentCode, id)); @@ -162,11 +199,18 @@ public class RegionServiceImpl extends ServiceImpl impleme RegionExcel excel = data.get(index); try { Region region = BeanUtil.copyProperties(excel, Region.class); - if (Boolean.TRUE.equals(isCovered)) { - cacheChanged = this.saveOrUpdate(region) || cacheChanged; - } else { - cacheChanged = this.save(region) || cacheChanged; + validateRegionLevel(region.getRegionLevel()); + region.setSort(index + 1); + if (region.getStatus() == null) { + region.setStatus(1); } + if (StringUtil.isBlank(region.getDataSource())) { + region.setDataSource("初始化导入"); + } + if (Boolean.TRUE.equals(isCovered) && this.getById(region.getCode()) != null) { + region.setOriginalCode(region.getCode()); + } + cacheChanged = this.submit(region) || cacheChanged; } catch (Exception exception) { excel.setErrorMessage(exception.getMessage()); errorList.add(excel); @@ -179,7 +223,11 @@ public class RegionServiceImpl extends ServiceImpl impleme } @Override - public List exportRegion(Wrapper queryWrapper) { - return baseMapper.exportRegion(queryWrapper); + public List exportRegion(Wrapper queryWrapper) { + List list = baseMapper.exportRegion(queryWrapper); + for (int index = 0; index < list.size(); index++) { + list.get(index).setSerialNumber(index + 1); + } + return list; } } 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 853fa58..2802c14 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 @@ -77,6 +77,16 @@ public class ContractManageExcel implements Serializable { private String contractStage; @ExcelProperty("审核状态") private String approvalStatus; + @ExcelProperty("结算币种") + private String settlementCurrency; + @ExcelProperty("结算方式") + private String settlementMode; + @ExcelProperty("开票周期(天)") + private Integer invoiceCycle; + @ExcelProperty("一式份数") + private Integer copyCount; + @ExcelProperty("回款账期(天)") + private Integer paymentDays; @ExcelProperty("当前节点") private String currentNode; @ExcelProperty("当前处理人") diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/DriverMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/DriverMapper.xml index b11fd95..da48c1d 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/DriverMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/DriverMapper.xml @@ -137,6 +137,10 @@ AND driver_name LIKE #{driverNameLike} + + + AND posts LIKE #{postsLike} + AND mobile LIKE #{mobileLike} 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 d6d1479..f572c84 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 @@ -222,6 +222,7 @@ public class ContractManageServiceImpl extends BaseServiceImpl implements IMasterOrderService { + private static final String CARRIER_SELF = "自运"; + private final IWaybillService waybillService; private final ITransportPlanService transportPlanService; private final IProjectApplyService projectApplyService; @@ -418,7 +420,9 @@ public class MasterOrderServiceImpl extends BaseServiceImpl quantityUnits = goods.stream() + .map(item -> item instanceof JSONObject ? ((JSONObject) item).getString("quantityUnit") : null) + .map(TransportBusinessSupport::trimToNull) + .filter(Objects::nonNull) + .distinct() + .toList(); + if (freightItems == null || (freightItems.size() != goods.size() && freightItems.size() != quantityUnits.size())) { + throw new ServiceException("公路运输的运费明细必须覆盖货物信息"); } + boolean groupedByQuantityUnit = freightItems.size() == quantityUnits.size() && freightItems.size() != goods.size(); BigDecimal totalFreightAmount = BigDecimal.ZERO; for (int index = 0; index < freightItems.size(); index++) { JSONObject freightItem = freightItems.getJSONObject(index); if (freightItem == null) { throw new ServiceException("第" + (index + 1) + "条运费明细格式不正确"); } + String quantityUnit = TransportBusinessSupport.trimToNull(freightItem.getString("quantityUnit")); + if (groupedByQuantityUnit) { + quantityUnit = quantityUnit == null && index < quantityUnits.size() ? quantityUnits.get(index) : quantityUnit; + } + JSONObject goodsItem = groupedByQuantityUnit ? null : goods.getJSONObject(index); + if (quantityUnit == null && goodsItem != null) { + quantityUnit = TransportBusinessSupport.trimToNull(goodsItem.getString("quantityUnit")); + } + if (quantityUnit == null) { + throw new ServiceException("第" + (index + 1) + "条运费明细数量单位不能为空"); + } + final String itemQuantityUnit = quantityUnit; + BigDecimal quantity = groupedByQuantityUnit + ? goods.stream() + .map(item -> item instanceof JSONObject ? (JSONObject) item : null) + .filter(item -> itemQuantityUnit.equals(TransportBusinessSupport.trimToNull(item.getString("quantityUnit")))) + .map(item -> amountValue(item.get("quantity"), "货物数量")) + .reduce(BigDecimal.ZERO, BigDecimal::add) + : amountValue(goodsItem == null ? null : goodsItem.get("quantity"), "第" + (index + 1) + "条货物数量"); BigDecimal unitPrice = amountValue(freightItem.get("unitPrice"), "第" + (index + 1) + "条货物单价"); String priceUnit = TransportBusinessSupport.trimToNull(freightItem.getString("priceUnit")); if (StringUtil.isBlank(priceUnit)) { throw new ServiceException("第" + (index + 1) + "条货物计价单位不能为空"); } - JSONObject goodsItem = goods.getJSONObject(index); - BigDecimal quantity = amountValue(goodsItem == null ? null : goodsItem.get("quantity"), "第" + (index + 1) + "条货物数量"); - BigDecimal freightAmount = unitPrice.multiply(quantity); + BigDecimal calculatedAmount = unitPrice.multiply(quantity); + Object inputAmount = freightItem.get("freightAmount"); + boolean autoCalculable = quantityUnits.size() == 1 && priceUnitMatchesQuantity(priceUnit, itemQuantityUnit) + && freightItem.get("unitPrice") != null && StringUtil.isNotBlank(String.valueOf(freightItem.get("unitPrice"))); + if (!autoCalculable && (inputAmount == null || StringUtil.isBlank(String.valueOf(inputAmount)))) { + throw new ServiceException("第" + (index + 1) + "条货物运费不能为空"); + } + boolean manualAmount = Boolean.TRUE.equals(freightItem.getBoolean("manualFreightAmount")) + || Boolean.TRUE.equals(freightItem.getBoolean("freightAmountManual")); + if (!manualAmount && inputAmount != null && StringUtil.isNotBlank(String.valueOf(inputAmount))) { + BigDecimal enteredAmount = amountValue(inputAmount, "第" + (index + 1) + "条货物运费"); + manualAmount = enteredAmount.compareTo(calculatedAmount) != 0; + } + BigDecimal freightAmount = manualAmount + ? amountValue(inputAmount, "第" + (index + 1) + "条货物运费") + : calculatedAmount; freightItem.put("cargoIndex", index); + freightItem.put("quantityUnit", quantityUnit); freightItem.put("unitPrice", decimalText(unitPrice)); freightItem.put("priceUnit", priceUnit); freightItem.put("quantity", decimalText(quantity)); freightItem.put("freightAmount", decimalText(freightAmount)); + freightItem.put("manualFreightAmount", manualAmount); totalFreightAmount = totalFreightAmount.add(freightAmount); } - freight.put("totalFreightAmount", decimalText(totalFreightAmount)); + BigDecimal otherFreightAmount = amountValue(freight.get("otherFreightAmount"), "其他运费合计"); + freight.put("totalFreightAmount", decimalText(totalFreightAmount.add(otherFreightAmount))); freight.remove("freightAmount"); freight.remove("quantity"); } else { @@ -371,9 +413,11 @@ public class ShippingTemplateServiceImpl extends BaseServiceImpl amountValue(item == null ? null : item.get("quantity"), "货物数量")) .reduce(BigDecimal.ZERO, BigDecimal::add); freight.put("quantity", decimalText(quantity)); - freight.put("freightAmount", amountText(freight.get("freightAmount"), "运费")); + String freightAmount = amountText(freight.get("freightAmount"), "运费"); + freight.put("freightAmount", freightAmount); + BigDecimal otherFreightAmount = amountValue(freight.get("otherFreightAmount"), "其他运费合计"); + freight.put("totalFreightAmount", decimalText(new BigDecimal(freightAmount).add(otherFreightAmount))); freight.remove("freightItems"); - freight.remove("totalFreightAmount"); } shippingTemplate.setFreightJson(freight.toJSONString()); } @@ -383,6 +427,26 @@ public class ShippingTemplateServiceImpl extends BaseServiceImpl implements ITransportPlanService { private final IWaybillService waybillService; + private final IContractManageService contractManageService; @Override public IPage selectTransportPlanPage(IPage page, TransportPlanVO transportPlan) { @@ -85,10 +88,30 @@ public class TransportPlanServiceImpl extends BaseServiceImpl query = new LambdaQueryWrapper() + .eq(ContractManage::getContractName, transportPlan.getContractName()); + if (Func.isNotEmpty(transportPlan.getProjectId())) { + query.eq(ContractManage::getProjectId, transportPlan.getProjectId()); + } + return contractManageService.getOne(query, false); + } + @Override @Transactional(rollbackFor = Exception.class) public boolean submit(TransportPlan transportPlan) { 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 0c98c6a..5497b7e 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 @@ -39,6 +39,7 @@ import org.springblade.transport.mapper.WaybillMapper; import org.springblade.transport.pojo.entity.LoadingManage; import org.springblade.transport.pojo.entity.ContractManage; import org.springblade.transport.pojo.entity.ProcessConfig; +import org.springblade.transport.pojo.entity.ProjectApply; import org.springblade.transport.pojo.entity.Waybill; import org.springblade.transport.pojo.dto.WaybillMileageRequest; import org.springblade.transport.pojo.vo.BusinessRemoveResultVO; @@ -46,6 +47,7 @@ import org.springblade.transport.pojo.vo.LoadingManageVO; import org.springblade.transport.pojo.vo.WaybillVO; import org.springblade.transport.service.ILoadingManageService; import org.springblade.transport.service.IProcessConfigService; +import org.springblade.transport.service.IProjectApplyService; import org.springblade.transport.service.IReceivablePayableDetailService; import org.springblade.transport.service.IContractManageService; import org.springblade.transport.service.IWaybillService; @@ -81,6 +83,9 @@ public class WaybillServiceImpl extends BaseServiceImpl @jakarta.annotation.Resource private IProcessConfigService processConfigService; + @jakarta.annotation.Resource + private IProjectApplyService projectApplyService; + @jakarta.annotation.Resource private IContractManageService contractManageService; @@ -135,11 +140,22 @@ public class WaybillServiceImpl extends BaseServiceImpl fillProjectProcessConfig(waybill); } prepare(waybill); + fillCustomerName(waybill); if (created && Func.isEmpty(waybill.getWaybillNo())) { waybill.setWaybillNo(nextCode()); } } + private void fillCustomerName(Waybill waybill) { + if (Func.isNotEmpty(waybill.getCustomerName()) || Func.isEmpty(waybill.getProjectId())) { + return; + } + ProjectApply project = projectApplyService.getById(waybill.getProjectId()); + if (project != null) { + waybill.setCustomerName(TransportBusinessSupport.trimToNull(project.getCustomerNames())); + } + } + private void fillProjectProcessConfig(Waybill waybill) { if (Func.isNotEmpty(waybill.getProcessJson()) || Func.isEmpty(waybill.getProjectId())) { return; @@ -605,7 +621,7 @@ public class WaybillServiceImpl extends BaseServiceImpl waybill.setTaskRemark(TransportBusinessSupport.trimToNull(waybill.getTaskRemark())); waybill.setOriginalNo(TransportBusinessSupport.trimToNull(waybill.getOriginalNo())); waybill.setBusinessStatus(TransportBusinessSupport.trimToNull(waybill.getBusinessStatus())); - waybill.setDataSource(TransportBusinessSupport.trimToNull(waybill.getDataSource())); + waybill.setDataSource(TransportBusinessSupport.normalizeWaybillDataSource(waybill.getDataSource())); waybill.setPlanName(TransportBusinessSupport.trimToNull(waybill.getPlanName())); waybill.setMasterNo(TransportBusinessSupport.trimToNull(waybill.getMasterNo())); waybill.setLoadingNo(TransportBusinessSupport.trimToNull(waybill.getLoadingNo())); @@ -652,12 +668,6 @@ public class WaybillServiceImpl extends BaseServiceImpl } else { TransportBusinessSupport.validateRequired(waybill.getDriverName(), "司机不能为空"); TransportBusinessSupport.validateRequired(waybill.getDriverPhone(), "司机手机号不能为空"); - TransportBusinessSupport.validateRequired(waybill.getTrailerVehicleNo(), "挂车车牌号不能为空"); - TransportBusinessSupport.validateRequired(waybill.getEscortName(), "押运人不能为空"); - TransportBusinessSupport.validateRequired(waybill.getEscortPhone(), "押运人手机号不能为空"); - if (Func.isEmpty(waybill.getMileage())) { - throw new ServiceException("里程不能为空"); - } } } TransportBusinessSupport.validateRequired(waybill.getCarrierJson(), "承运信息不能为空"); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/TransportBusinessSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/TransportBusinessSupport.java index 54bf8eb..1a6082e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/TransportBusinessSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/TransportBusinessSupport.java @@ -43,6 +43,7 @@ public final class TransportBusinessSupport { public static final String DATA_SOURCE_BATCH_IMPORT = "批量导入"; public static final String DATA_SOURCE_MANUAL = "手工创建"; + public static final String DATA_SOURCE_PLAN_DISPATCH = "计划调度"; public static final String DATA_SOURCE_EXTERNAL = "外部系统"; private static final Pattern PHONE_PATTERN = Pattern.compile("^(1\\d{10}|0\\d{2,3}-?\\d{7,8})$"); @@ -110,6 +111,23 @@ public final class TransportBusinessSupport { }; } + /** + * 归一化运单数据来源,保证列表只出现约定的三种来源。 + * + * @param value 原始数据来源 + * @return 批量导入、手工创建或计划调度 + */ + public static String normalizeWaybillDataSource(String value) { + String source = trimToNull(value); + if (DATA_SOURCE_BATCH_IMPORT.equals(source)) { + return DATA_SOURCE_BATCH_IMPORT; + } + if (DATA_SOURCE_PLAN_DISPATCH.equals(source) || "多联总单调度".equals(source)) { + return DATA_SOURCE_PLAN_DISPATCH; + } + return DATA_SOURCE_MANUAL; + } + public static void validateRequired(String value, String message) { if (Func.isEmpty(trimToNull(value))) { throw new ServiceException(message); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java index ce89125..ed06b57 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/wrapper/WaybillWrapper.java @@ -29,6 +29,7 @@ import org.springblade.core.tool.utils.Func; import org.springblade.system.cache.UserCache; import org.springblade.transport.pojo.entity.Waybill; import org.springblade.transport.pojo.vo.WaybillVO; +import org.springblade.transport.support.TransportBusinessSupport; import java.util.Objects; @@ -48,6 +49,7 @@ public class WaybillWrapper extends BaseEntityWrapper { WaybillVO waybillVO = Objects.requireNonNull(BeanUtil.copyProperties(waybill, WaybillVO.class)); waybillVO.setCreateUserName(UserCache.getUserRealName(waybill.getCreateUser())); waybillVO.setUpdateUserName(UserCache.getUserRealName(waybill.getUpdateUser())); + waybillVO.setDataSource(TransportBusinessSupport.normalizeWaybillDataSource(waybill.getDataSource())); Long currentDeptId = Func.firstLong(AuthUtil.getDeptId()); waybillVO.setReadonly(currentDeptId != null && !Objects.equals(waybill.getDeptId(), currentDeptId)); waybillVO.setBusinessStatusName(businessStatusName(waybill.getBusinessStatus())); diff --git a/doc/sql/transport/blade_contract_manage_settlement_fields_20260902.sql b/doc/sql/transport/blade_contract_manage_settlement_fields_20260902.sql new file mode 100644 index 0000000..71f60c7 --- /dev/null +++ b/doc/sql/transport/blade_contract_manage_settlement_fields_20260902.sql @@ -0,0 +1,4 @@ +-- 合同管理补充结算币种、开票周期字段 +ALTER TABLE `blade_contract_manage` + ADD COLUMN `settlement_currency` varchar(50) DEFAULT NULL COMMENT '结算币种' AFTER `copy_count`, + ADD COLUMN `invoice_cycle` int(11) DEFAULT NULL COMMENT '开票周期(天)' AFTER `settlement_currency`; diff --git a/doc/sql/transport/blade_project_contract_management.sql b/doc/sql/transport/blade_project_contract_management.sql index b8502c8..2b9b7b1 100644 --- a/doc/sql/transport/blade_project_contract_management.sql +++ b/doc/sql/transport/blade_project_contract_management.sql @@ -133,6 +133,8 @@ CREATE TABLE `blade_contract_manage` ( `contract_format` varchar(50) DEFAULT NULL COMMENT '合同格式', `legal_seal_flag` int(11) DEFAULT '0' COMMENT '是否需要加盖法人章', `copy_count` int(11) DEFAULT NULL COMMENT '一式份数', + `settlement_currency` varchar(50) DEFAULT NULL COMMENT '结算币种', + `invoice_cycle` int(11) DEFAULT NULL COMMENT '开票周期(天)', `payment_days` int(11) DEFAULT NULL COMMENT '回款账期(天)', `contract_stage` varchar(50) DEFAULT NULL COMMENT '合同阶段', `approval_status` varchar(50) DEFAULT NULL COMMENT '审核状态', diff --git a/doc/sql/transport/blade_region_export_fields_20260903.sql b/doc/sql/transport/blade_region_export_fields_20260903.sql new file mode 100644 index 0000000..eb52a1c --- /dev/null +++ b/doc/sql/transport/blade_region_export_fields_20260903.sql @@ -0,0 +1,79 @@ +-- 行政区划导出字段补充:支持状态、数据来源及审计信息。 +-- 可重复执行,字段已存在时不会重复添加。 + +SET @db_name = DATABASE(); + +SET @sql = IF( + EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = @db_name AND table_name = 'blade_region' AND column_name = 'data_source' + ), + 'SELECT 1', + 'ALTER TABLE `blade_region` ADD COLUMN `data_source` varchar(20) DEFAULT ''初始化导入'' COMMENT ''数据来源'' AFTER `remark`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @sql = IF( + EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = @db_name AND table_name = 'blade_region' AND column_name = 'create_user' + ), + 'SELECT 1', + 'ALTER TABLE `blade_region` ADD COLUMN `create_user` bigint(20) DEFAULT NULL COMMENT ''创建人'' AFTER `data_source`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @sql = IF( + EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = @db_name AND table_name = 'blade_region' AND column_name = 'create_time' + ), + 'SELECT 1', + 'ALTER TABLE `blade_region` ADD COLUMN `create_time` datetime DEFAULT NULL COMMENT ''创建时间'' AFTER `create_user`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @sql = IF( + EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = @db_name AND table_name = 'blade_region' AND column_name = 'update_user' + ), + 'SELECT 1', + 'ALTER TABLE `blade_region` ADD COLUMN `update_user` bigint(20) DEFAULT NULL COMMENT ''更新人'' AFTER `create_time`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @sql = IF( + EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = @db_name AND table_name = 'blade_region' AND column_name = 'update_time' + ), + 'SELECT 1', + 'ALTER TABLE `blade_region` ADD COLUMN `update_time` datetime DEFAULT NULL COMMENT ''更新时间'' AFTER `update_user`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @sql = IF( + EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = @db_name AND table_name = 'blade_region' AND column_name = 'status' + ), + 'SELECT 1', + 'ALTER TABLE `blade_region` ADD COLUMN `status` int(11) DEFAULT 1 COMMENT ''状态'' AFTER `update_time`' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +UPDATE `blade_region` SET `data_source` = '初始化导入' WHERE `data_source` IS NULL OR TRIM(`data_source`) = ''; +UPDATE `blade_region` SET `status` = 1 WHERE `status` IS NULL; diff --git a/doc/sql/transport/blade_region_level_patch_20260903.sql b/doc/sql/transport/blade_region_level_patch_20260903.sql new file mode 100644 index 0000000..7f569f3 --- /dev/null +++ b/doc/sql/transport/blade_region_level_patch_20260903.sql @@ -0,0 +1,6 @@ +-- 行政区划等级仅保留:国家、省份/直辖市、地市、区县。 +-- 删除乡镇(4)和村委(5)字典项;已有历史区域数据不做删除。 + +DELETE FROM `blade_dict` +WHERE `code` = 'region' + AND (`dict_key` IN ('4', '5') OR `dict_value` IN ('乡镇', '村委')); diff --git a/doc/sql/transport/transport.sql b/doc/sql/transport/transport.sql index 2218256..7209c9d 100644 --- a/doc/sql/transport/transport.sql +++ b/doc/sql/transport/transport.sql @@ -565,8 +565,6 @@ INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, ` INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_sealed`, `status`, `is_deleted`) VALUES (1123598814738777232, 1123598814738777230, 'region', '1', '省份/直辖市', 1, NULL, 0, 1, 0); INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_sealed`, `status`, `is_deleted`) VALUES (1123598814738777233, 1123598814738777230, 'region', '2', '地市', 2, NULL, 0, 1, 0); INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_sealed`, `status`, `is_deleted`) VALUES (1123598814738777234, 1123598814738777230, 'region', '3', '区县', 3, NULL, 0, 1, 0); -INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_sealed`, `status`, `is_deleted`) VALUES (1123598814738777235, 1123598814738777230, 'region', '4', '乡镇', 4, NULL, 0, 1, 0); -INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_sealed`, `status`, `is_deleted`) VALUES (1123598814738777236, 1123598814738777230, 'region', '5', '村委', 5, NULL, 0, 1, 0); INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_sealed`, `status`, `is_deleted`) VALUES (1123598814738778200, 0, 'user_type', '-1', '用户平台', 14, NULL, 0, 1, 0); INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_sealed`, `status`, `is_deleted`) VALUES (1123598814738778201, 1123598814738778200, 'user_type', '1', 'WEB', 1, NULL, 0, 1, 0); INSERT INTO `blade_dict` (`id`, `parent_id`, `code`, `dict_key`, `dict_value`, `sort`, `remark`, `is_sealed`, `status`, `is_deleted`) VALUES (1123598814738778202, 1123598814738778200, 'user_type', '2', 'APP', 2, NULL, 0, 1, 0); @@ -1581,6 +1579,12 @@ CREATE TABLE `blade_region` ( `region_level` int(11) DEFAULT NULL COMMENT '层级', `sort` int(11) DEFAULT NULL COMMENT '排序', `remark` varchar(255) DEFAULT NULL COMMENT '备注', + `data_source` varchar(20) DEFAULT '初始化导入' COMMENT '数据来源', + `create_user` bigint(20) DEFAULT NULL COMMENT '创建人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_user` bigint(20) DEFAULT NULL COMMENT '更新人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `status` int(11) DEFAULT '1' COMMENT '状态', PRIMARY KEY (`code`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='行政区划表';