1、调整基础配置模块

2、调整车船务模块
This commit is contained in:
2026-07-24 14:33:50 +08:00
parent af8c9ac2e6
commit fd98744b46
52 changed files with 451 additions and 86 deletions
+8 -1
View File
@@ -195,6 +195,7 @@ Entity 基类的选择**直接决定** Service 和 ServiceImpl 的继承方式
- 简单查询使用 `LambdaQueryWrapper`,复杂查询写在 Mapper XML 中 - 简单查询使用 `LambdaQueryWrapper`,复杂查询写在 Mapper XML 中
- Mapper XML 与接口**同包**放置(`src/main/java` 下) - Mapper XML 与接口**同包**放置(`src/main/java` 下)
- 分页统一使用 `Condition.getPage(query)` + `Condition.getQueryWrapper()` - 分页统一使用 `Condition.getPage(query)` + `Condition.getQueryWrapper()`
- 表格的排序默认按照创建时间降序;后端分页 SQL 或 QueryWrapper 应默认使用 `create_time DESC` / `orderByDesc(Xxx::getCreateTime)`,除非用户明确要求业务字段优先排序。
- 禁止 JDBC 直连查询 - 禁止 JDBC 直连查询
### 6.9 审计字段展示 ### 6.9 审计字段展示
@@ -204,7 +205,13 @@ Entity 基类的选择**直接决定** Service 和 ServiceImpl 的继承方式
- Entity → VO 转换统一在 `XxxWrapper` 中完成;审计人姓名通过 `UserCache.getUserRealName(userId)` 获取,优先返回用户真实姓名,缓存未命中时兜底返回用户 ID。 - Entity → VO 转换统一在 `XxxWrapper` 中完成;审计人姓名通过 `UserCache.getUserRealName(userId)` 获取,优先返回用户真实姓名,缓存未命中时兜底返回用户 ID。
- Controller 不应在列表、详情方法中重复编写审计人翻译逻辑,避免各模块显示规则不一致。 - Controller 不应在列表、详情方法中重复编写审计人翻译逻辑,避免各模块显示规则不一致。
### 6.10 日志 ### 6.10 导出数据格式
- 导出 Excel、CSV 等文件时,金额类字段必须保留 2 位小数;即使原始数据为整数,也应导出为 `0.00` 形式。
- 导出经度、纬度字段时必须保留 6 位小数;导出前仍需遵守经度 `-180 ~ 180`、纬度 `-90 ~ 90` 的有效范围约束。
- 精度格式化应在导出 DTO/Excel 模型、导出组装逻辑或专用格式化工具中完成,禁止只依赖前端展示格式。
### 6.11 日志
- 使用 `@Slf4j`,占位符传参(禁止字符串拼接) - 使用 `@Slf4j`,占位符传参(禁止字符串拼接)
- 包含关键业务标识,异常必须携带堆栈,禁止打印敏感信息 - 包含关键业务标识,异常必须携带堆栈,禁止打印敏感信息
@@ -25,6 +25,7 @@
*/ */
package org.springblade.system.pojo.entity; package org.springblade.system.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -93,9 +94,20 @@ public class AirportMaster extends BaseEntity {
*/ */
@Schema(description = "所属城市") @Schema(description = "所属城市")
private String cityName; private String cityName;
/**
* 所属区县编码
*/
@Schema(description = "所属区县编码")
private String districtCode;
/**
* 所属区县
*/
@Schema(description = "所属区县")
private String districtName;
/** /**
* 行政区划编码 * 行政区划编码
*/ */
@TableField(exist = false)
@Schema(description = "行政区划编码") @Schema(description = "行政区划编码")
private String regionCode; private String regionCode;
/** /**
@@ -95,6 +95,7 @@ public class Currency extends BaseEntity {
/** /**
* 是否本位币 * 是否本位币
*/ */
@TableField("is_base_currency")
@Schema(description = "是否本位币") @Schema(description = "是否本位币")
private Integer baseCurrency; private Integer baseCurrency;
/** /**
@@ -48,14 +48,19 @@ public class FeeItem extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* 中文名称 * 费用类型
*/ */
@Schema(description = "中文名称") @Schema(description = "费用类型")
private String feeCategory;
/**
* 费用项
*/
@Schema(description = "费用项")
private String name; private String name;
/** /**
* 英文名称 * 费用项代码
*/ */
@Schema(description = "英文名称") @Schema(description = "费用项代码")
private String englishName; private String englishName;
} }
@@ -25,6 +25,7 @@
*/ */
package org.springblade.system.pojo.entity; package org.springblade.system.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -88,9 +89,20 @@ public class PortTerminal extends BaseEntity {
*/ */
@Schema(description = "城市") @Schema(description = "城市")
private String city; private String city;
/**
* 区县编码
*/
@Schema(description = "区县编码")
private String districtCode;
/**
* 区县
*/
@Schema(description = "区县")
private String districtName;
/** /**
* 行政区划编码 * 行政区划编码
*/ */
@TableField(exist = false)
@Schema(description = "行政区划编码") @Schema(description = "行政区划编码")
private String regionCode; private String regionCode;
/** /**
@@ -25,6 +25,7 @@
*/ */
package org.springblade.system.pojo.entity; package org.springblade.system.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -93,9 +94,20 @@ public class RailwayStation extends BaseEntity {
*/ */
@Schema(description = "所属城市") @Schema(description = "所属城市")
private String cityName; private String cityName;
/**
* 所属区县编码
*/
@Schema(description = "所属区县编码")
private String districtCode;
/**
* 所属区县
*/
@Schema(description = "所属区县")
private String districtName;
/** /**
* 行政区划编码 * 行政区划编码
*/ */
@TableField(exist = false)
@Schema(description = "行政区划编码") @Schema(description = "行政区划编码")
private String regionCode; private String regionCode;
/** /**
@@ -27,6 +27,7 @@ package org.springblade.system.pojo.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -134,5 +135,12 @@ public class Region implements Serializable {
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
/**
* 原区划编号
*/
@TableField(exist = false)
@Schema(description = "原区划编号")
private String originalCode;
} }
@@ -172,6 +172,7 @@ public class AirportMasterController extends BladeController {
airportMaster.remove("Blade-Auth"); airportMaster.remove("Blade-Auth");
airportMaster.remove("Authorization"); airportMaster.remove("Authorization");
airportMaster.remove("access_token"); airportMaster.remove("access_token");
normalizeRegionCodeCondition(airportMaster);
QueryWrapper<AirportMaster> queryWrapper = Condition.getQueryWrapper(airportMaster, AirportMaster.class); QueryWrapper<AirportMaster> queryWrapper = Condition.getQueryWrapper(airportMaster, AirportMaster.class);
if (Func.isNotEmpty(ids)) { if (Func.isNotEmpty(ids)) {
queryWrapper.lambda().in(AirportMaster::getId, Func.toLongList(ids.toString())); queryWrapper.lambda().in(AirportMaster::getId, Func.toLongList(ids.toString()));
@@ -207,4 +208,11 @@ public class AirportMasterController extends BladeController {
return query; return query;
} }
private void normalizeRegionCodeCondition(Map<String, Object> params) {
Object regionCode = params.remove("regionCode");
if (Func.isNotEmpty(regionCode) && Func.isEmpty(params.get("districtCode"))) {
params.put("districtCode", regionCode);
}
}
} }
@@ -184,6 +184,7 @@ public class PortTerminalController extends BladeController {
portTerminal.remove("Blade-Auth"); portTerminal.remove("Blade-Auth");
portTerminal.remove("Authorization"); portTerminal.remove("Authorization");
portTerminal.remove("access_token"); portTerminal.remove("access_token");
normalizeRegionCodeCondition(portTerminal);
QueryWrapper<PortTerminal> queryWrapper = Condition.getQueryWrapper(portTerminal, PortTerminal.class); QueryWrapper<PortTerminal> queryWrapper = Condition.getQueryWrapper(portTerminal, PortTerminal.class);
applyDataSourceCondition(queryWrapper, dataSource); applyDataSourceCondition(queryWrapper, dataSource);
if (Func.isNotEmpty(ids)) { if (Func.isNotEmpty(ids)) {
@@ -220,6 +221,13 @@ public class PortTerminalController extends BladeController {
return query; return query;
} }
private void normalizeRegionCodeCondition(Map<String, Object> params) {
Object regionCode = params.remove("regionCode");
if (Func.isNotEmpty(regionCode) && Func.isEmpty(params.get("districtCode"))) {
params.put("districtCode", regionCode);
}
}
private void applyDataSourceCondition(QueryWrapper<PortTerminal> queryWrapper, Object dataSource) { private void applyDataSourceCondition(QueryWrapper<PortTerminal> queryWrapper, Object dataSource) {
String value = Func.toStrWithEmpty(dataSource, ""); String value = Func.toStrWithEmpty(dataSource, "");
if (Func.isEmpty(value)) { if (Func.isEmpty(value)) {
@@ -176,6 +176,7 @@ public class RailwayStationController extends BladeController {
railwayStation.remove("Blade-Auth"); railwayStation.remove("Blade-Auth");
railwayStation.remove("Authorization"); railwayStation.remove("Authorization");
railwayStation.remove("access_token"); railwayStation.remove("access_token");
normalizeRegionCodeCondition(railwayStation);
QueryWrapper<RailwayStation> queryWrapper = Condition.getQueryWrapper(railwayStation, RailwayStation.class); QueryWrapper<RailwayStation> queryWrapper = Condition.getQueryWrapper(railwayStation, RailwayStation.class);
applyDataSourceCondition(queryWrapper, dataSource); applyDataSourceCondition(queryWrapper, dataSource);
if (Func.isNotEmpty(ids)) { if (Func.isNotEmpty(ids)) {
@@ -212,6 +213,13 @@ public class RailwayStationController extends BladeController {
return query; return query;
} }
private void normalizeRegionCodeCondition(Map<String, Object> params) {
Object regionCode = params.remove("regionCode");
if (Func.isNotEmpty(regionCode) && Func.isEmpty(params.get("districtCode"))) {
params.put("districtCode", regionCode);
}
}
private void applyDataSourceCondition(QueryWrapper<RailwayStation> queryWrapper, Object dataSource) { private void applyDataSourceCondition(QueryWrapper<RailwayStation> queryWrapper, Object dataSource) {
String value = Func.toStrWithEmpty(dataSource, ""); String value = Func.toStrWithEmpty(dataSource, "");
if (Func.isEmpty(value)) { if (Func.isEmpty(value)) {
@@ -133,7 +133,7 @@ public class RegionController extends BladeController {
@ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
@Operation(summary = "新增", description = "传入region") @Operation(summary = "新增", description = "传入region")
public R save(@Valid @RequestBody Region region) { public R save(@Valid @RequestBody Region region) {
return R.status(regionService.save(region)); return R.status(regionService.submit(region));
} }
/** /**
@@ -143,7 +143,8 @@ public class RegionController extends BladeController {
@ApiOperationSupport(order = 6) @ApiOperationSupport(order = 6)
@Operation(summary = "修改", description = "传入region") @Operation(summary = "修改", description = "传入region")
public R update(@Valid @RequestBody Region region) { public R update(@Valid @RequestBody Region region) {
return R.status(regionService.updateById(region)); region.setOriginalCode(region.getCode());
return R.status(regionService.submit(region));
} }
/** /**
@@ -174,7 +175,10 @@ public class RegionController extends BladeController {
@ApiOperationSupport(order = 9) @ApiOperationSupport(order = 9)
@Operation(summary = "下拉数据源", description = "传入tenant") @Operation(summary = "下拉数据源", description = "传入tenant")
public R<List<Region>> select(@RequestParam(required = false, defaultValue = "+86") String code) { public R<List<Region>> select(@RequestParam(required = false, defaultValue = "+86") String code) {
List<Region> list = regionService.list(Wrappers.<Region>query().lambda().eq(Region::getParentCode, code)); List<Region> list = regionService.list(Wrappers.<Region>lambdaQuery()
.eq(Region::getParentCode, code)
.orderByAsc(Region::getSort)
.orderByAsc(Region::getCode));
return R.data(list); return R.data(list);
} }
@@ -74,6 +74,9 @@ public class AirportMasterExcel implements Serializable {
@ExcelProperty("所属城市") @ExcelProperty("所属城市")
private String cityName; private String cityName;
@ExcelProperty("所属区县")
private String districtName;
@ExcelProperty("行政区划") @ExcelProperty("行政区划")
private String regionName; private String regionName;
@@ -27,6 +27,7 @@ package org.springblade.system.excel;
import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.format.NumberFormat;
import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight; import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight; import cn.idev.excel.annotation.write.style.HeadRowHeight;
@@ -73,6 +74,9 @@ public class PortTerminalExcel implements Serializable {
@ExcelProperty("城市") @ExcelProperty("城市")
private String city; private String city;
@ExcelProperty("区县")
private String districtName;
@ExcelProperty("行政区划编码") @ExcelProperty("行政区划编码")
private String regionCode; private String regionCode;
@@ -80,9 +84,11 @@ public class PortTerminalExcel implements Serializable {
private String detailAddress; private String detailAddress;
@ExcelProperty("经度") @ExcelProperty("经度")
@NumberFormat("0.000000")
private BigDecimal longitude; private BigDecimal longitude;
@ExcelProperty("纬度") @ExcelProperty("纬度")
@NumberFormat("0.000000")
private BigDecimal latitude; private BigDecimal latitude;
@ExcelProperty("数据来源") @ExcelProperty("数据来源")
@@ -27,7 +27,6 @@ package org.springblade.system.excel;
import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.format.NumberFormat;
import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight; import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight; import cn.idev.excel.annotation.write.style.HeadRowHeight;
@@ -35,7 +34,6 @@ import lombok.Data;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* 铁路车站主数据 Excel * 铁路车站主数据 Excel
@@ -74,6 +72,9 @@ public class RailwayStationExcel implements Serializable {
@ExcelProperty("所属城市") @ExcelProperty("所属城市")
private String cityName; private String cityName;
@ExcelProperty("所属区县")
private String districtName;
@ExcelProperty("行政区划") @ExcelProperty("行政区划")
private String regionName; private String regionName;
@@ -81,12 +82,10 @@ public class RailwayStationExcel implements Serializable {
private String detailAddress; private String detailAddress;
@ExcelProperty("经度") @ExcelProperty("经度")
@NumberFormat("0.000000") private String longitude;
private BigDecimal longitude;
@ExcelProperty("纬度") @ExcelProperty("纬度")
@NumberFormat("0.000000") private String latitude;
private BigDecimal latitude;
@ExcelProperty("数据来源") @ExcelProperty("数据来源")
private String dataSource; private String dataSource;
@@ -21,7 +21,9 @@
<result column="province_name" property="provinceName"/> <result column="province_name" property="provinceName"/>
<result column="city_code" property="cityCode"/> <result column="city_code" property="cityCode"/>
<result column="city_name" property="cityName"/> <result column="city_name" property="cityName"/>
<result column="region_code" property="regionCode"/> <result column="district_code" property="districtCode"/>
<result column="district_name" property="districtName"/>
<result column="district_code" property="regionCode"/>
<result column="region_name" property="regionName"/> <result column="region_name" property="regionName"/>
<result column="detail_address" property="detailAddress"/> <result column="detail_address" property="detailAddress"/>
<result column="longitude" property="longitude"/> <result column="longitude" property="longitude"/>
@@ -50,7 +52,8 @@
am.province_name, am.province_name,
am.city_code, am.city_code,
am.city_name, am.city_name,
am.region_code, am.district_code,
am.district_name,
am.region_name, am.region_name,
am.detail_address, am.detail_address,
am.longitude, am.longitude,
@@ -77,7 +80,14 @@
AND am.icao_code = #{airportMaster.icaoCode} AND am.icao_code = #{airportMaster.icaoCode}
</if> </if>
<if test="airportMaster.regionCode != null and airportMaster.regionCode != ''"> <if test="airportMaster.regionCode != null and airportMaster.regionCode != ''">
AND am.region_code = #{airportMaster.regionCode} AND am.district_code = #{airportMaster.regionCode}
</if>
<if test="airportMaster.districtCode != null and airportMaster.districtCode != ''">
AND am.district_code = #{airportMaster.districtCode}
</if>
<if test="airportMaster.districtName != null and airportMaster.districtName != ''">
<bind name="districtNameLike" value="'%' + airportMaster.districtName + '%'"/>
AND am.district_name LIKE #{districtNameLike}
</if> </if>
<if test="airportMaster.regionName != null and airportMaster.regionName != ''"> <if test="airportMaster.regionName != null and airportMaster.regionName != ''">
<bind name="regionNameLike" value="'%' + airportMaster.regionName + '%'"/> <bind name="regionNameLike" value="'%' + airportMaster.regionName + '%'"/>
@@ -100,7 +110,7 @@
<if test="airportMaster.status != null"> <if test="airportMaster.status != null">
AND am.status = #{airportMaster.status} AND am.status = #{airportMaster.status}
</if> </if>
ORDER BY am.update_time DESC, am.create_time DESC ORDER BY am.create_time DESC
</select> </select>
</mapper> </mapper>
@@ -91,7 +91,7 @@
<if test="currency.updateTimeEnd != null"> <if test="currency.updateTimeEnd != null">
AND bc.update_time &lt;= #{currency.updateTimeEnd} AND bc.update_time &lt;= #{currency.updateTimeEnd}
</if> </if>
ORDER BY bc.code ASC, bc.effective_date DESC, bc.create_time DESC ORDER BY bc.create_time DESC
</select> </select>
</mapper> </mapper>
@@ -33,7 +33,7 @@
<if test="customerType.status != null"> <if test="customerType.status != null">
AND status = #{customerType.status} AND status = #{customerType.status}
</if> </if>
ORDER BY update_time DESC, create_time DESC ORDER BY create_time DESC
</select> </select>
</mapper> </mapper>
@@ -11,6 +11,7 @@
<result column="update_time" property="updateTime"/> <result column="update_time" property="updateTime"/>
<result column="status" property="status"/> <result column="status" property="status"/>
<result column="is_deleted" property="isDeleted"/> <result column="is_deleted" property="isDeleted"/>
<result column="fee_category" property="feeCategory"/>
<result column="name" property="name"/> <result column="name" property="name"/>
<result column="english_name" property="englishName"/> <result column="english_name" property="englishName"/>
</resultMap> </resultMap>
@@ -22,6 +23,9 @@
blade_fee_item blade_fee_item
WHERE WHERE
is_deleted = 0 is_deleted = 0
<if test="feeItem.feeCategory != null and feeItem.feeCategory != ''">
AND fee_category = #{feeItem.feeCategory}
</if>
<if test="feeItem.name != null and feeItem.name != ''"> <if test="feeItem.name != null and feeItem.name != ''">
<bind name="nameLike" value="'%' + feeItem.name + '%'"/> <bind name="nameLike" value="'%' + feeItem.name + '%'"/>
AND name LIKE #{nameLike} AND name LIKE #{nameLike}
@@ -33,7 +37,7 @@
<if test="feeItem.status != null"> <if test="feeItem.status != null">
AND status = #{feeItem.status} AND status = #{feeItem.status}
</if> </if>
ORDER BY update_time DESC, create_time DESC ORDER BY create_time DESC
</select> </select>
</mapper> </mapper>
@@ -20,7 +20,9 @@
<result column="parent_name" property="parentName"/> <result column="parent_name" property="parentName"/>
<result column="country" property="country"/> <result column="country" property="country"/>
<result column="city" property="city"/> <result column="city" property="city"/>
<result column="region_code" property="regionCode"/> <result column="district_code" property="districtCode"/>
<result column="district_name" property="districtName"/>
<result column="district_code" property="regionCode"/>
<result column="detail_address" property="detailAddress"/> <result column="detail_address" property="detailAddress"/>
<result column="longitude" property="longitude"/> <result column="longitude" property="longitude"/>
<result column="latitude" property="latitude"/> <result column="latitude" property="latitude"/>
@@ -47,7 +49,8 @@
pt.parent_name, pt.parent_name,
pt.country, pt.country,
pt.city, pt.city,
pt.region_code, pt.district_code,
pt.district_name,
pt.detail_address, pt.detail_address,
CASE WHEN pt.longitude BETWEEN -180 AND 180 THEN pt.longitude ELSE NULL END AS longitude, CASE WHEN pt.longitude BETWEEN -180 AND 180 THEN pt.longitude ELSE NULL END AS longitude,
CASE WHEN pt.latitude BETWEEN -90 AND 90 THEN pt.latitude ELSE NULL END AS latitude, CASE WHEN pt.latitude BETWEEN -90 AND 90 THEN pt.latitude ELSE NULL END AS latitude,
@@ -82,8 +85,15 @@
<if test="portTerminal.city != null and portTerminal.city != ''"> <if test="portTerminal.city != null and portTerminal.city != ''">
AND pt.city = #{portTerminal.city} AND pt.city = #{portTerminal.city}
</if> </if>
<if test="portTerminal.districtCode != null and portTerminal.districtCode != ''">
AND pt.district_code = #{portTerminal.districtCode}
</if>
<if test="portTerminal.districtName != null and portTerminal.districtName != ''">
<bind name="districtNameLike" value="'%' + portTerminal.districtName + '%'"/>
AND pt.district_name LIKE #{districtNameLike}
</if>
<if test="portTerminal.regionCode != null and portTerminal.regionCode != ''"> <if test="portTerminal.regionCode != null and portTerminal.regionCode != ''">
AND pt.region_code = #{portTerminal.regionCode} AND pt.district_code = #{portTerminal.regionCode}
</if> </if>
<if test="portTerminal.detailAddress != null and portTerminal.detailAddress != ''"> <if test="portTerminal.detailAddress != null and portTerminal.detailAddress != ''">
<bind name="detailAddressLike" value="'%' + portTerminal.detailAddress + '%'"/> <bind name="detailAddressLike" value="'%' + portTerminal.detailAddress + '%'"/>
@@ -95,7 +105,7 @@
<if test="portTerminal.status != null"> <if test="portTerminal.status != null">
AND pt.status = #{portTerminal.status} AND pt.status = #{portTerminal.status}
</if> </if>
ORDER BY pt.update_time DESC, pt.create_time DESC ORDER BY pt.create_time DESC
</select> </select>
</mapper> </mapper>
@@ -21,7 +21,9 @@
<result column="province_name" property="provinceName"/> <result column="province_name" property="provinceName"/>
<result column="city_code" property="cityCode"/> <result column="city_code" property="cityCode"/>
<result column="city_name" property="cityName"/> <result column="city_name" property="cityName"/>
<result column="region_code" property="regionCode"/> <result column="district_code" property="districtCode"/>
<result column="district_name" property="districtName"/>
<result column="district_code" property="regionCode"/>
<result column="region_name" property="regionName"/> <result column="region_name" property="regionName"/>
<result column="detail_address" property="detailAddress"/> <result column="detail_address" property="detailAddress"/>
<result column="longitude" property="longitude"/> <result column="longitude" property="longitude"/>
@@ -50,7 +52,8 @@
rs.province_name, rs.province_name,
rs.city_code, rs.city_code,
rs.city_name, rs.city_name,
rs.region_code, rs.district_code,
rs.district_name,
rs.region_name, rs.region_name,
rs.detail_address, rs.detail_address,
rs.longitude, rs.longitude,
@@ -82,7 +85,14 @@
AND rs.telegraph_code = #{railwayStation.telegraphCode} AND rs.telegraph_code = #{railwayStation.telegraphCode}
</if> </if>
<if test="railwayStation.regionCode != null and railwayStation.regionCode != ''"> <if test="railwayStation.regionCode != null and railwayStation.regionCode != ''">
AND rs.region_code = #{railwayStation.regionCode} AND rs.district_code = #{railwayStation.regionCode}
</if>
<if test="railwayStation.districtCode != null and railwayStation.districtCode != ''">
AND rs.district_code = #{railwayStation.districtCode}
</if>
<if test="railwayStation.districtName != null and railwayStation.districtName != ''">
<bind name="districtNameLike" value="'%' + railwayStation.districtName + '%'"/>
AND rs.district_name LIKE #{districtNameLike}
</if> </if>
<if test="railwayStation.regionName != null and railwayStation.regionName != ''"> <if test="railwayStation.regionName != null and railwayStation.regionName != ''">
<bind name="regionNameLike" value="'%' + railwayStation.regionName + '%'"/> <bind name="regionNameLike" value="'%' + railwayStation.regionName + '%'"/>
@@ -111,7 +121,7 @@
<if test="railwayStation.status != null"> <if test="railwayStation.status != null">
AND rs.status = #{railwayStation.status} AND rs.status = #{railwayStation.status}
</if> </if>
ORDER BY rs.update_time DESC, rs.create_time DESC ORDER BY rs.create_time DESC
</select> </select>
</mapper> </mapper>
@@ -72,6 +72,7 @@
and region.name like concat(concat('%', #{param2.name}),'%') and region.name like concat(concat('%', #{param2.name}),'%')
</if> </if>
</where> </where>
ORDER BY region.sort ASC, region.code ASC
</select> </select>
<select id="lazyTree" resultType="java.util.HashMap"> <select id="lazyTree" resultType="java.util.HashMap">
@@ -95,7 +96,7 @@
and region.name like concat(concat('%', #{param2.name}),'%') and region.name like concat(concat('%', #{param2.name}),'%')
</if> </if>
</where> </where>
ORDER BY region.code ORDER BY region.sort ASC, region.code ASC
</select> </select>
<select id="exportRegion" resultType="org.springblade.system.excel.RegionExcel"> <select id="exportRegion" resultType="org.springblade.system.excel.RegionExcel">
@@ -173,8 +173,16 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
airportMaster.setProvinceName(trimToNull(airportMaster.getProvinceName())); airportMaster.setProvinceName(trimToNull(airportMaster.getProvinceName()));
airportMaster.setCityCode(trimToNull(airportMaster.getCityCode())); airportMaster.setCityCode(trimToNull(airportMaster.getCityCode()));
airportMaster.setCityName(trimToNull(airportMaster.getCityName())); airportMaster.setCityName(trimToNull(airportMaster.getCityName()));
airportMaster.setDistrictCode(trimToNull(airportMaster.getDistrictCode()));
airportMaster.setDistrictName(trimToNull(airportMaster.getDistrictName()));
airportMaster.setRegionCode(trimToNull(airportMaster.getRegionCode())); airportMaster.setRegionCode(trimToNull(airportMaster.getRegionCode()));
airportMaster.setRegionName(trimToNull(airportMaster.getRegionName())); airportMaster.setRegionName(trimToNull(airportMaster.getRegionName()));
if (Func.isEmpty(airportMaster.getDistrictCode()) && Func.isNotEmpty(airportMaster.getRegionCode())) {
airportMaster.setDistrictCode(airportMaster.getRegionCode());
}
if (Func.isEmpty(airportMaster.getDistrictName()) && Func.isNotEmpty(airportMaster.getRegionName())) {
airportMaster.setDistrictName(airportMaster.getRegionName());
}
airportMaster.setDetailAddress(trimToNull(airportMaster.getDetailAddress())); airportMaster.setDetailAddress(trimToNull(airportMaster.getDetailAddress()));
airportMaster.setRemark(trimToNull(airportMaster.getRemark())); airportMaster.setRemark(trimToNull(airportMaster.getRemark()));
airportMaster.setDataSource(normalizeDataSource(Func.toStrWithEmpty(airportMaster.getDataSource(), defaultDataSource))); airportMaster.setDataSource(normalizeDataSource(Func.toStrWithEmpty(airportMaster.getDataSource(), defaultDataSource)));
@@ -205,12 +213,13 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
validateLength(airportMaster.getShortName(), SHORT_NAME_MAX_LENGTH, "机场简称不能超过100字"); validateLength(airportMaster.getShortName(), SHORT_NAME_MAX_LENGTH, "机场简称不能超过100字");
validateLength(airportMaster.getProvinceName(), REGION_NAME_MAX_LENGTH, "所属省份不能超过128字"); validateLength(airportMaster.getProvinceName(), REGION_NAME_MAX_LENGTH, "所属省份不能超过128字");
validateLength(airportMaster.getCityName(), REGION_NAME_MAX_LENGTH, "所属城市不能超过128字"); validateLength(airportMaster.getCityName(), REGION_NAME_MAX_LENGTH, "所属城市不能超过128字");
validateLength(airportMaster.getDistrictName(), REGION_NAME_MAX_LENGTH, "所属区县不能超过128字");
validateLength(airportMaster.getRegionCode(), REGION_CODE_MAX_LENGTH, "行政区划编码不能超过32字"); validateLength(airportMaster.getRegionCode(), REGION_CODE_MAX_LENGTH, "行政区划编码不能超过32字");
validateLength(airportMaster.getRegionName(), REGION_NAME_MAX_LENGTH, "行政区划不能超过128字"); validateLength(airportMaster.getRegionName(), REGION_NAME_MAX_LENGTH, "行政区划不能超过128字");
validateLength(airportMaster.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字"); validateLength(airportMaster.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字");
validateLength(airportMaster.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200字"); validateLength(airportMaster.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200字");
if (Func.isEmpty(airportMaster.getProvinceCode()) || Func.isEmpty(airportMaster.getCityCode())) { if (Func.isEmpty(airportMaster.getProvinceCode()) || Func.isEmpty(airportMaster.getCityCode()) || Func.isEmpty(airportMaster.getDistrictCode())) {
throw new ServiceException("请选择省份城市"); throw new ServiceException("请选择省份城市和区县");
} }
validateCoordinate(airportMaster.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度"); validateCoordinate(airportMaster.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度");
validateCoordinate(airportMaster.getLatitude(), MIN_LATITUDE, MAX_LATITUDE, "纬度"); validateCoordinate(airportMaster.getLatitude(), MIN_LATITUDE, MAX_LATITUDE, "纬度");
@@ -254,8 +263,26 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
airportMaster.setProvinceName(province.getName()); airportMaster.setProvinceName(province.getName());
airportMaster.setCityCode(city.getCode()); airportMaster.setCityCode(city.getCode());
airportMaster.setCityName(city.getName()); airportMaster.setCityName(city.getName());
airportMaster.setRegionCode(city.getCode());
airportMaster.setRegionName(city.getName()); Region district = null;
if (Func.isNotEmpty(airportMaster.getDistrictCode())) {
district = regionService.getById(airportMaster.getDistrictCode());
}
if (Func.isEmpty(district) && Func.isNotEmpty(airportMaster.getDistrictName())) {
district = regionService.getOne(Wrappers.<Region>lambdaQuery()
.eq(Region::getParentCode, city.getCode())
.eq(Region::getName, airportMaster.getDistrictName()), false);
}
if (Func.isEmpty(district)) {
throw new ServiceException("请选择区县");
}
if (!Objects.equals(district.getParentCode(), city.getCode())) {
throw new ServiceException("所属区县与所属城市不匹配");
}
airportMaster.setDistrictCode(district.getCode());
airportMaster.setDistrictName(district.getName());
airportMaster.setRegionCode(district.getCode());
airportMaster.setRegionName(district.getName());
} }
private void validateCoordinate(BigDecimal value, BigDecimal min, BigDecimal max, String name) { private void validateCoordinate(BigDecimal value, BigDecimal min, BigDecimal max, String name) {
@@ -81,6 +81,11 @@ public class CurrencyServiceImpl extends BaseServiceImpl<CurrencyMapper, Currenc
prepare(currency, SOURCE_MANUAL); prepare(currency, SOURCE_MANUAL);
validate(currency); validate(currency);
boolean result = saveOrUpdate(currency); boolean result = saveOrUpdate(currency);
if (Func.isNotEmpty(currency.getId()) && Func.isEmpty(currency.getExchangeRate())) {
update(Wrappers.<Currency>lambdaUpdate()
.set(Currency::getExchangeRate, null)
.eq(Currency::getId, currency.getId()));
}
rebuildEnabledValidity(currency.getCode()); rebuildEnabledValidity(currency.getCode());
if (oldCurrency != null && !Objects.equals(oldCurrency.getCode(), currency.getCode())) { if (oldCurrency != null && !Objects.equals(oldCurrency.getCode(), currency.getCode())) {
rebuildEnabledValidity(oldCurrency.getCode()); rebuildEnabledValidity(oldCurrency.getCode());
@@ -205,15 +210,14 @@ public class CurrencyServiceImpl extends BaseServiceImpl<CurrencyMapper, Currenc
if (currency.getDecimalPlaces() < MIN_DECIMAL_PLACES || currency.getDecimalPlaces() > MAX_DECIMAL_PLACES) { if (currency.getDecimalPlaces() < MIN_DECIMAL_PLACES || currency.getDecimalPlaces() > MAX_DECIMAL_PLACES) {
throw new ServiceException("小数位数范围为0到8"); throw new ServiceException("小数位数范围为0到8");
} }
if (Func.isEmpty(currency.getExchangeRate())) { if (Func.isNotEmpty(currency.getExchangeRate())) {
throw new ServiceException("汇率不能为空");
}
if (currency.getExchangeRate().compareTo(BigDecimal.ZERO) <= 0) { if (currency.getExchangeRate().compareTo(BigDecimal.ZERO) <= 0) {
throw new ServiceException("汇率必须大于0"); throw new ServiceException("汇率必须大于0");
} }
if (currency.getExchangeRate().stripTrailingZeros().scale() > EXCHANGE_RATE_SCALE) { if (currency.getExchangeRate().stripTrailingZeros().scale() > EXCHANGE_RATE_SCALE) {
throw new ServiceException("汇率最多保留6位小数"); throw new ServiceException("汇率最多保留6位小数");
} }
}
if (Func.isEmpty(currency.getEffectiveDate())) { if (Func.isEmpty(currency.getEffectiveDate())) {
throw new ServiceException("生效日期不能为空"); throw new ServiceException("生效日期不能为空");
} }
@@ -50,6 +50,7 @@ public class FeeItemServiceImpl extends BaseServiceImpl<FeeItemMapper, FeeItem>
private static final int STATUS_ENABLED = 1; private static final int STATUS_ENABLED = 1;
private static final int STATUS_DISABLED = 2; private static final int STATUS_DISABLED = 2;
private static final int FEE_CATEGORY_MAX_LENGTH = 50;
private static final int NAME_MAX_LENGTH = 50; private static final int NAME_MAX_LENGTH = 50;
private static final int ENGLISH_NAME_MAX_LENGTH = 100; private static final int ENGLISH_NAME_MAX_LENGTH = 100;
@@ -86,6 +87,7 @@ public class FeeItemServiceImpl extends BaseServiceImpl<FeeItemMapper, FeeItem>
} }
private void prepare(FeeItem feeItem) { private void prepare(FeeItem feeItem) {
feeItem.setFeeCategory(trimToEmpty(feeItem.getFeeCategory()));
feeItem.setName(trimToEmpty(feeItem.getName())); feeItem.setName(trimToEmpty(feeItem.getName()));
feeItem.setEnglishName(trimToNull(feeItem.getEnglishName())); feeItem.setEnglishName(trimToNull(feeItem.getEnglishName()));
if (Func.isEmpty(feeItem.getStatus())) { if (Func.isEmpty(feeItem.getStatus())) {
@@ -94,14 +96,20 @@ public class FeeItemServiceImpl extends BaseServiceImpl<FeeItemMapper, FeeItem>
} }
private void validate(FeeItem feeItem) { private void validate(FeeItem feeItem) {
if (Func.isEmpty(feeItem.getFeeCategory())) {
throw new ServiceException("费用类型不能为空");
}
if (feeItem.getFeeCategory().length() > FEE_CATEGORY_MAX_LENGTH) {
throw new ServiceException("费用类型不能超过50字");
}
if (Func.isEmpty(feeItem.getName())) { if (Func.isEmpty(feeItem.getName())) {
throw new ServiceException("中文名称不能为空"); throw new ServiceException("费用项不能为空");
} }
if (feeItem.getName().length() > NAME_MAX_LENGTH) { if (feeItem.getName().length() > NAME_MAX_LENGTH) {
throw new ServiceException("中文名称不能超过50字"); throw new ServiceException("费用项不能超过50字");
} }
if (Func.isNotEmpty(feeItem.getEnglishName()) && feeItem.getEnglishName().length() > ENGLISH_NAME_MAX_LENGTH) { if (Func.isNotEmpty(feeItem.getEnglishName()) && feeItem.getEnglishName().length() > ENGLISH_NAME_MAX_LENGTH) {
throw new ServiceException("英文名称不能超过100字"); throw new ServiceException("费用项代码不能超过100字");
} }
validateUniqueName(feeItem); validateUniqueName(feeItem);
} }
@@ -114,7 +122,7 @@ public class FeeItemServiceImpl extends BaseServiceImpl<FeeItemMapper, FeeItem>
queryWrapper.ne(FeeItem::getId, feeItem.getId()); queryWrapper.ne(FeeItem::getId, feeItem.getId());
} }
if (count(queryWrapper) > 0L) { if (count(queryWrapper) > 0L) {
throw new ServiceException("中文名称已存在"); throw new ServiceException("费用项已存在");
} }
} }
@@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import org.springblade.core.log.exception.ServiceException; import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.BeanUtil;
@@ -36,8 +37,10 @@ import org.springblade.core.tool.utils.Func;
import org.springblade.system.excel.PortTerminalExcel; import org.springblade.system.excel.PortTerminalExcel;
import org.springblade.system.mapper.PortTerminalMapper; import org.springblade.system.mapper.PortTerminalMapper;
import org.springblade.system.pojo.entity.PortTerminal; import org.springblade.system.pojo.entity.PortTerminal;
import org.springblade.system.pojo.entity.Region;
import org.springblade.system.pojo.vo.PortTerminalVO; import org.springblade.system.pojo.vo.PortTerminalVO;
import org.springblade.system.service.IPortTerminalService; import org.springblade.system.service.IPortTerminalService;
import org.springblade.system.service.IRegionService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -55,6 +58,7 @@ import java.util.regex.Pattern;
* @author Chill * @author Chill
*/ */
@Service @Service
@AllArgsConstructor
public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper, PortTerminal> implements IPortTerminalService { public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper, PortTerminal> implements IPortTerminalService {
private static final String CATEGORY_PORT = "港口"; private static final String CATEGORY_PORT = "港口";
@@ -78,6 +82,8 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
private static final Pattern PORT_CODE_PATTERN = Pattern.compile("^[A-Z]{5}$"); private static final Pattern PORT_CODE_PATTERN = Pattern.compile("^[A-Z]{5}$");
private static final Pattern TERMINAL_CODE_PATTERN = Pattern.compile("^[A-Z]{5}-[A-Z0-9]+$"); private static final Pattern TERMINAL_CODE_PATTERN = Pattern.compile("^[A-Z]{5}-[A-Z0-9]+$");
private final IRegionService regionService;
@Override @Override
public IPage<PortTerminalVO> selectPortTerminalPage(IPage<PortTerminalVO> page, PortTerminalVO portTerminal) { public IPage<PortTerminalVO> selectPortTerminalPage(IPage<PortTerminalVO> page, PortTerminalVO portTerminal) {
return page.setRecords(baseMapper.selectPortTerminalPage(page, portTerminal)); return page.setRecords(baseMapper.selectPortTerminalPage(page, portTerminal));
@@ -152,6 +158,7 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
List<PortTerminal> portTerminalList = list(queryWrapper); List<PortTerminal> portTerminalList = list(queryWrapper);
return portTerminalList.stream().map(portTerminal -> { return portTerminalList.stream().map(portTerminal -> {
PortTerminalExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(portTerminal, PortTerminalExcel.class)); PortTerminalExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(portTerminal, PortTerminalExcel.class));
excel.setRegionCode(portTerminal.getDistrictCode());
excel.setLongitude(scaleCoordinate(portTerminal.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE)); excel.setLongitude(scaleCoordinate(portTerminal.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE));
excel.setLatitude(scaleCoordinate(portTerminal.getLatitude(), MIN_LATITUDE, MAX_LATITUDE)); excel.setLatitude(scaleCoordinate(portTerminal.getLatitude(), MIN_LATITUDE, MAX_LATITUDE));
excel.setDataSource(normalizeDataSource(portTerminal.getDataSource())); excel.setDataSource(normalizeDataSource(portTerminal.getDataSource()));
@@ -173,7 +180,12 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
portTerminal.setName(trimToEmpty(portTerminal.getName())); portTerminal.setName(trimToEmpty(portTerminal.getName()));
portTerminal.setCountry(trimToEmpty(portTerminal.getCountry())); portTerminal.setCountry(trimToEmpty(portTerminal.getCountry()));
portTerminal.setCity(trimToEmpty(portTerminal.getCity())); portTerminal.setCity(trimToEmpty(portTerminal.getCity()));
portTerminal.setDistrictCode(trimToNull(portTerminal.getDistrictCode()));
portTerminal.setDistrictName(trimToNull(portTerminal.getDistrictName()));
portTerminal.setRegionCode(trimToNull(portTerminal.getRegionCode())); portTerminal.setRegionCode(trimToNull(portTerminal.getRegionCode()));
if (Func.isEmpty(portTerminal.getDistrictCode()) && Func.isNotEmpty(portTerminal.getRegionCode())) {
portTerminal.setDistrictCode(portTerminal.getRegionCode());
}
portTerminal.setDetailAddress(trimToNull(portTerminal.getDetailAddress())); portTerminal.setDetailAddress(trimToNull(portTerminal.getDetailAddress()));
portTerminal.setRemark(trimToNull(portTerminal.getRemark())); portTerminal.setRemark(trimToNull(portTerminal.getRemark()));
portTerminal.setDataSource(normalizeDataSource(Func.toStrWithEmpty(portTerminal.getDataSource(), defaultDataSource))); portTerminal.setDataSource(normalizeDataSource(Func.toStrWithEmpty(portTerminal.getDataSource(), defaultDataSource)));
@@ -181,6 +193,7 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
portTerminal.setStatus(STATUS_ENABLED); portTerminal.setStatus(STATUS_ENABLED);
} }
if (CATEGORY_PORT.equals(portTerminal.getCategory())) { if (CATEGORY_PORT.equals(portTerminal.getCategory())) {
fillRegion(portTerminal);
portTerminal.setParentId(null); portTerminal.setParentId(null);
portTerminal.setParentCode(null); portTerminal.setParentCode(null);
portTerminal.setParentName(null); portTerminal.setParentName(null);
@@ -211,7 +224,50 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
portTerminal.setParentName(parent.getName()); portTerminal.setParentName(parent.getName());
portTerminal.setCountry(parent.getCountry()); portTerminal.setCountry(parent.getCountry());
portTerminal.setCity(parent.getCity()); portTerminal.setCity(parent.getCity());
portTerminal.setRegionCode(parent.getRegionCode()); portTerminal.setDistrictCode(parent.getDistrictCode());
portTerminal.setDistrictName(parent.getDistrictName());
portTerminal.setRegionCode(parent.getDistrictCode());
}
private void fillRegion(PortTerminal portTerminal) {
Region district = null;
if (Func.isNotEmpty(portTerminal.getDistrictCode())) {
district = regionService.getById(portTerminal.getDistrictCode());
}
if (Func.isEmpty(district) && Func.isNotEmpty(portTerminal.getDistrictName())) {
if (Func.isNotEmpty(portTerminal.getCity())) {
List<Region> cityList = regionService.list(Wrappers.<Region>lambdaQuery()
.eq(Region::getName, portTerminal.getCity())
.eq(Region::getRegionLevel, 2));
for (Region city : cityList) {
district = regionService.getOne(Wrappers.<Region>lambdaQuery()
.eq(Region::getParentCode, city.getCode())
.eq(Region::getName, portTerminal.getDistrictName()), false);
if (Func.isNotEmpty(district)) {
break;
}
}
}
if (Func.isEmpty(district)) {
district = regionService.getOne(Wrappers.<Region>lambdaQuery()
.eq(Region::getName, portTerminal.getDistrictName())
.eq(Region::getRegionLevel, 3), false);
}
}
if (Func.isEmpty(district)) {
throw new ServiceException("请选择区县");
}
Region city = regionService.getById(district.getParentCode());
if (Func.isEmpty(city)) {
throw new ServiceException("区县所属城市不存在");
}
if (Func.isNotEmpty(portTerminal.getCity()) && !Objects.equals(portTerminal.getCity(), city.getName())) {
throw new ServiceException("区县与城市不匹配");
}
portTerminal.setCity(city.getName());
portTerminal.setDistrictCode(district.getCode());
portTerminal.setDistrictName(district.getName());
portTerminal.setRegionCode(district.getCode());
} }
private void validate(PortTerminal portTerminal) { private void validate(PortTerminal portTerminal) {
@@ -228,6 +284,7 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
validateLength(portTerminal.getName(), NAME_MAX_LENGTH, "港口/码头名称不能超过100字"); validateLength(portTerminal.getName(), NAME_MAX_LENGTH, "港口/码头名称不能超过100字");
validateLength(portTerminal.getCountry(), REGION_MAX_LENGTH, "国家不能超过50字"); validateLength(portTerminal.getCountry(), REGION_MAX_LENGTH, "国家不能超过50字");
validateLength(portTerminal.getCity(), REGION_MAX_LENGTH, "城市不能超过50字"); validateLength(portTerminal.getCity(), REGION_MAX_LENGTH, "城市不能超过50字");
validateLength(portTerminal.getDistrictName(), REGION_MAX_LENGTH, "区县不能超过50字");
validateLength(portTerminal.getRegionCode(), REGION_CODE_MAX_LENGTH, "行政区划编码不能超过32字"); validateLength(portTerminal.getRegionCode(), REGION_CODE_MAX_LENGTH, "行政区划编码不能超过32字");
validateLength(portTerminal.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字"); validateLength(portTerminal.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字");
validateLength(portTerminal.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200个字"); validateLength(portTerminal.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200个字");
@@ -246,6 +303,9 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
if (Func.isEmpty(portTerminal.getCity())) { if (Func.isEmpty(portTerminal.getCity())) {
throw new ServiceException("城市不能为空"); throw new ServiceException("城市不能为空");
} }
if (Func.isEmpty(portTerminal.getDistrictCode())) {
throw new ServiceException("区县不能为空");
}
validateDataSource(portTerminal.getDataSource()); validateDataSource(portTerminal.getDataSource());
validateStatus(portTerminal.getStatus()); validateStatus(portTerminal.getStatus());
validateRange(portTerminal.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度范围为 -180 到 180"); validateRange(portTerminal.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度范围为 -180 到 180");
@@ -131,6 +131,8 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
RailwayStationExcel excel = data.get(index); RailwayStationExcel excel = data.get(index);
try { try {
RailwayStation railwayStation = Objects.requireNonNull(BeanUtil.copyProperties(excel, RailwayStation.class)); RailwayStation railwayStation = Objects.requireNonNull(BeanUtil.copyProperties(excel, RailwayStation.class));
railwayStation.setLongitude(parseCoordinate(excel.getLongitude(), "经度"));
railwayStation.setLatitude(parseCoordinate(excel.getLatitude(), "纬度"));
railwayStation.setDataSource(SOURCE_BATCH); railwayStation.setDataSource(SOURCE_BATCH);
railwayStation.setStatus(STATUS_ENABLED); railwayStation.setStatus(STATUS_ENABLED);
prepare(railwayStation, SOURCE_BATCH); prepare(railwayStation, SOURCE_BATCH);
@@ -151,19 +153,31 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
List<RailwayStation> railwayStationList = list(queryWrapper); List<RailwayStation> railwayStationList = list(queryWrapper);
return railwayStationList.stream().map(railwayStation -> { return railwayStationList.stream().map(railwayStation -> {
RailwayStationExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(railwayStation, RailwayStationExcel.class)); RailwayStationExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(railwayStation, RailwayStationExcel.class));
excel.setLongitude(scaleCoordinate(railwayStation.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE)); excel.setLongitude(formatCoordinate(railwayStation.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE));
excel.setLatitude(scaleCoordinate(railwayStation.getLatitude(), MIN_LATITUDE, MAX_LATITUDE)); excel.setLatitude(formatCoordinate(railwayStation.getLatitude(), MIN_LATITUDE, MAX_LATITUDE));
excel.setDataSource(normalizeDataSource(railwayStation.getDataSource())); excel.setDataSource(normalizeDataSource(railwayStation.getDataSource()));
excel.setStatusName(Objects.equals(railwayStation.getStatus(), STATUS_ENABLED) ? "启用" : "停用"); excel.setStatusName(Objects.equals(railwayStation.getStatus(), STATUS_ENABLED) ? "启用" : "停用");
return excel; return excel;
}).toList(); }).toList();
} }
private BigDecimal scaleCoordinate(BigDecimal value, BigDecimal min, BigDecimal max) { private String formatCoordinate(BigDecimal value, BigDecimal min, BigDecimal max) {
if (Func.isEmpty(value)) { if (Func.isEmpty(value)) {
return null; return null;
} }
return validRange(value, min, max) ? value.setScale(6, RoundingMode.HALF_UP) : null; return validRange(value, min, max) ? value.setScale(6, RoundingMode.HALF_UP).toPlainString() : null;
}
private BigDecimal parseCoordinate(String value, String name) {
String trimValue = trimToEmpty(value);
if (trimValue.isEmpty()) {
return null;
}
try {
return new BigDecimal(trimValue);
} catch (NumberFormatException exception) {
throw new ServiceException(name + "格式不正确");
}
} }
private void prepare(RailwayStation railwayStation, String defaultDataSource) { private void prepare(RailwayStation railwayStation, String defaultDataSource) {
@@ -176,8 +190,16 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
railwayStation.setProvinceName(trimToNull(railwayStation.getProvinceName())); railwayStation.setProvinceName(trimToNull(railwayStation.getProvinceName()));
railwayStation.setCityCode(trimToNull(railwayStation.getCityCode())); railwayStation.setCityCode(trimToNull(railwayStation.getCityCode()));
railwayStation.setCityName(trimToNull(railwayStation.getCityName())); railwayStation.setCityName(trimToNull(railwayStation.getCityName()));
railwayStation.setDistrictCode(trimToNull(railwayStation.getDistrictCode()));
railwayStation.setDistrictName(trimToNull(railwayStation.getDistrictName()));
railwayStation.setRegionCode(trimToNull(railwayStation.getRegionCode())); railwayStation.setRegionCode(trimToNull(railwayStation.getRegionCode()));
railwayStation.setRegionName(trimToNull(railwayStation.getRegionName())); railwayStation.setRegionName(trimToNull(railwayStation.getRegionName()));
if (Func.isEmpty(railwayStation.getDistrictCode()) && Func.isNotEmpty(railwayStation.getRegionCode())) {
railwayStation.setDistrictCode(railwayStation.getRegionCode());
}
if (Func.isEmpty(railwayStation.getDistrictName()) && Func.isNotEmpty(railwayStation.getRegionName())) {
railwayStation.setDistrictName(railwayStation.getRegionName());
}
railwayStation.setDetailAddress(trimToNull(railwayStation.getDetailAddress())); railwayStation.setDetailAddress(trimToNull(railwayStation.getDetailAddress()));
railwayStation.setRemark(trimToNull(railwayStation.getRemark())); railwayStation.setRemark(trimToNull(railwayStation.getRemark()));
railwayStation.setDataSource(normalizeDataSource(Func.toStrWithEmpty(railwayStation.getDataSource(), defaultDataSource))); railwayStation.setDataSource(normalizeDataSource(Func.toStrWithEmpty(railwayStation.getDataSource(), defaultDataSource)));
@@ -208,12 +230,13 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
// validateLength(railwayStation.getRailwayLine(), RAILWAY_LINE_MAX_LENGTH, "所属铁路线路不能超过100字"); // validateLength(railwayStation.getRailwayLine(), RAILWAY_LINE_MAX_LENGTH, "所属铁路线路不能超过100字");
validateLength(railwayStation.getProvinceName(), REGION_NAME_MAX_LENGTH, "所属省份不能超过128字"); validateLength(railwayStation.getProvinceName(), REGION_NAME_MAX_LENGTH, "所属省份不能超过128字");
validateLength(railwayStation.getCityName(), REGION_NAME_MAX_LENGTH, "所属城市不能超过128字"); validateLength(railwayStation.getCityName(), REGION_NAME_MAX_LENGTH, "所属城市不能超过128字");
validateLength(railwayStation.getDistrictName(), REGION_NAME_MAX_LENGTH, "所属区县不能超过128字");
validateLength(railwayStation.getRegionCode(), REGION_CODE_MAX_LENGTH, "行政区划编码不能超过32字"); validateLength(railwayStation.getRegionCode(), REGION_CODE_MAX_LENGTH, "行政区划编码不能超过32字");
validateLength(railwayStation.getRegionName(), REGION_NAME_MAX_LENGTH, "行政区划不能超过128字"); validateLength(railwayStation.getRegionName(), REGION_NAME_MAX_LENGTH, "行政区划不能超过128字");
validateLength(railwayStation.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字"); validateLength(railwayStation.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字");
validateLength(railwayStation.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200字"); validateLength(railwayStation.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200字");
if (Func.isEmpty(railwayStation.getProvinceCode()) || Func.isEmpty(railwayStation.getCityCode())) { if (Func.isEmpty(railwayStation.getProvinceCode()) || Func.isEmpty(railwayStation.getCityCode()) || Func.isEmpty(railwayStation.getDistrictCode())) {
throw new ServiceException("请选择省份城市"); throw new ServiceException("请选择省份城市和区县");
} }
validateCoordinate(railwayStation.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度"); validateCoordinate(railwayStation.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度");
validateCoordinate(railwayStation.getLatitude(), MIN_LATITUDE, MAX_LATITUDE, "纬度"); validateCoordinate(railwayStation.getLatitude(), MIN_LATITUDE, MAX_LATITUDE, "纬度");
@@ -257,8 +280,26 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
railwayStation.setProvinceName(province.getName()); railwayStation.setProvinceName(province.getName());
railwayStation.setCityCode(city.getCode()); railwayStation.setCityCode(city.getCode());
railwayStation.setCityName(city.getName()); railwayStation.setCityName(city.getName());
railwayStation.setRegionCode(city.getCode());
railwayStation.setRegionName(city.getName()); Region district = null;
if (Func.isNotEmpty(railwayStation.getDistrictCode())) {
district = regionService.getById(railwayStation.getDistrictCode());
}
if (Func.isEmpty(district) && Func.isNotEmpty(railwayStation.getDistrictName())) {
district = regionService.getOne(Wrappers.<Region>lambdaQuery()
.eq(Region::getParentCode, city.getCode())
.eq(Region::getName, railwayStation.getDistrictName()), false);
}
if (Func.isEmpty(district)) {
throw new ServiceException("请选择区县");
}
if (!Objects.equals(district.getParentCode(), city.getCode())) {
throw new ServiceException("所属区县与所属城市不匹配");
}
railwayStation.setDistrictCode(district.getCode());
railwayStation.setDistrictName(district.getName());
railwayStation.setRegionCode(district.getCode());
railwayStation.setRegionName(district.getName());
} }
private void validateCoordinate(BigDecimal value, BigDecimal min, BigDecimal max, String name) { private void validateCoordinate(BigDecimal value, BigDecimal min, BigDecimal max, String name) {
@@ -76,11 +76,7 @@ public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> impleme
region.setCode(StringUtil.removePrefix(region.getCode(), MAIN_CODE)); region.setCode(StringUtil.removePrefix(region.getCode(), MAIN_CODE));
} }
} }
// 查询是否已存在 validateUniqueCode(region);
Long cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getCode, region.getCode()));
if (cnt > 0L) {
return this.updateById(region);
}
// 设置祖区划编号 // 设置祖区划编号
Region parent = getByCode(region.getParentCode()); Region parent = getByCode(region.getParentCode());
if (Func.isNotEmpty(parent) && Func.isNotEmpty(parent.getCode())) { if (Func.isNotEmpty(parent) && Func.isNotEmpty(parent.getCode())) {
@@ -110,7 +106,22 @@ public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> impleme
region.setVillageCode(code); region.setVillageCode(code);
region.setVillageName(name); region.setVillageName(name);
} }
return this.save(region); return StringUtil.isNotBlank(region.getOriginalCode()) ? this.updateById(region) : this.save(region);
}
private void validateUniqueCode(Region region) {
String originalCode = region.getOriginalCode();
String code = region.getCode();
Region existRegion = this.getById(code);
if (Func.isEmpty(existRegion)) {
if (StringUtil.isNotBlank(originalCode) && !StringUtil.equals(code, originalCode)) {
throw new ServiceException("区划编号不允许修改");
}
return;
}
if (StringUtil.isBlank(originalCode) || !StringUtil.equals(code, originalCode)) {
throw new ServiceException("该区划编号已存在");
}
} }
@Override @Override
@@ -47,6 +47,7 @@ public class AirportMasterWrapper extends BaseEntityWrapper<AirportMaster, Airpo
@Override @Override
public AirportMasterVO entityVO(AirportMaster airportMaster) { public AirportMasterVO entityVO(AirportMaster airportMaster) {
AirportMasterVO airportMasterVO = Objects.requireNonNull(BeanUtil.copyProperties(airportMaster, AirportMasterVO.class)); AirportMasterVO airportMasterVO = Objects.requireNonNull(BeanUtil.copyProperties(airportMaster, AirportMasterVO.class));
airportMasterVO.setRegionCode(airportMaster.getDistrictCode());
airportMasterVO.setUpdateUserName(UserCache.getUserRealName(airportMaster.getUpdateUser())); airportMasterVO.setUpdateUserName(UserCache.getUserRealName(airportMaster.getUpdateUser()));
return airportMasterVO; return airportMasterVO;
} }
@@ -47,6 +47,7 @@ public class PortTerminalWrapper extends BaseEntityWrapper<PortTerminal, PortTer
@Override @Override
public PortTerminalVO entityVO(PortTerminal portTerminal) { public PortTerminalVO entityVO(PortTerminal portTerminal) {
PortTerminalVO portTerminalVO = Objects.requireNonNull(BeanUtil.copyProperties(portTerminal, PortTerminalVO.class)); PortTerminalVO portTerminalVO = Objects.requireNonNull(BeanUtil.copyProperties(portTerminal, PortTerminalVO.class));
portTerminalVO.setRegionCode(portTerminal.getDistrictCode());
portTerminalVO.setUpdateUserName(UserCache.getUserRealName(portTerminal.getUpdateUser())); portTerminalVO.setUpdateUserName(UserCache.getUserRealName(portTerminal.getUpdateUser()));
return portTerminalVO; return portTerminalVO;
} }
@@ -47,6 +47,7 @@ public class RailwayStationWrapper extends BaseEntityWrapper<RailwayStation, Rai
@Override @Override
public RailwayStationVO entityVO(RailwayStation railwayStation) { public RailwayStationVO entityVO(RailwayStation railwayStation) {
RailwayStationVO railwayStationVO = Objects.requireNonNull(BeanUtil.copyProperties(railwayStation, RailwayStationVO.class)); RailwayStationVO railwayStationVO = Objects.requireNonNull(BeanUtil.copyProperties(railwayStation, RailwayStationVO.class));
railwayStationVO.setRegionCode(railwayStation.getDistrictCode());
railwayStationVO.setUpdateUserName(UserCache.getUserRealName(railwayStation.getUpdateUser())); railwayStationVO.setUpdateUserName(UserCache.getUserRealName(railwayStation.getUpdateUser()));
return railwayStationVO; return railwayStationVO;
} }
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.format.NumberFormat;
import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight; import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight; import cn.idev.excel.annotation.write.style.HeadRowHeight;
@@ -72,9 +73,11 @@ public class AccidentRecordExcel implements Serializable {
private String accidentResponsibility; private String accidentResponsibility;
@ExcelProperty("直接经济损失") @ExcelProperty("直接经济损失")
@NumberFormat("0.00")
private BigDecimal directEconomicLoss; private BigDecimal directEconomicLoss;
@ExcelProperty("保险理赔金额") @ExcelProperty("保险理赔金额")
@NumberFormat("0.00")
private BigDecimal insuranceClaimAmount; private BigDecimal insuranceClaimAmount;
@ExcelProperty("事故原因及损坏情况") @ExcelProperty("事故原因及损坏情况")
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.format.NumberFormat;
import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight; import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight; import cn.idev.excel.annotation.write.style.HeadRowHeight;
@@ -75,6 +76,7 @@ public class MaintenancePlanExcel implements Serializable {
private String maintenanceItem; private String maintenanceItem;
@ExcelProperty("费用") @ExcelProperty("费用")
@NumberFormat("0.00")
private BigDecimal cost; private BigDecimal cost;
@ExcelProperty("店名") @ExcelProperty("店名")
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.format.NumberFormat;
import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight; import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight; import cn.idev.excel.annotation.write.style.HeadRowHeight;
@@ -72,6 +73,7 @@ public class MaintenanceRecordExcel implements Serializable {
private String replacedPart; private String replacedPart;
@ExcelProperty("费用") @ExcelProperty("费用")
@NumberFormat("0.00")
private BigDecimal cost; private BigDecimal cost;
@ExcelProperty("维修单位") @ExcelProperty("维修单位")
@@ -87,6 +89,7 @@ public class MaintenanceRecordExcel implements Serializable {
private LocalDateTime factoryTime; private LocalDateTime factoryTime;
@ExcelProperty("里程/航程数") @ExcelProperty("里程/航程数")
@NumberFormat("0.00")
private BigDecimal mileage; private BigDecimal mileage;
@ExcelProperty("里程单位") @ExcelProperty("里程单位")
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.format.NumberFormat;
import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight; import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight; import cn.idev.excel.annotation.write.style.HeadRowHeight;
@@ -59,15 +60,19 @@ public class MileageRecordExcel implements Serializable {
private String vehicleNo; private String vehicleNo;
@ExcelProperty("上月统计里程") @ExcelProperty("上月统计里程")
@NumberFormat("0.00")
private BigDecimal previousMonthMileage; private BigDecimal previousMonthMileage;
@ExcelProperty("本月统计里程") @ExcelProperty("本月统计里程")
@NumberFormat("0.00")
private BigDecimal currentMonthMileage; private BigDecimal currentMonthMileage;
@ExcelProperty("本月行驶里程") @ExcelProperty("本月行驶里程")
@NumberFormat("0.00")
private BigDecimal monthlyMileage; private BigDecimal monthlyMileage;
@ExcelProperty("累计行驶里程") @ExcelProperty("累计行驶里程")
@NumberFormat("0.00")
private BigDecimal totalMileage; private BigDecimal totalMileage;
@ExcelProperty("里程单位") @ExcelProperty("里程单位")
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.format.NumberFormat;
import cn.idev.excel.annotation.write.style.ColumnWidth; import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.ContentRowHeight; import cn.idev.excel.annotation.write.style.ContentRowHeight;
import cn.idev.excel.annotation.write.style.HeadRowHeight; import cn.idev.excel.annotation.write.style.HeadRowHeight;
@@ -69,6 +70,7 @@ public class TireReplacementRecordExcel implements Serializable {
private Integer tireQuantity; private Integer tireQuantity;
@ExcelProperty("换胎费用") @ExcelProperty("换胎费用")
@NumberFormat("0.00")
private BigDecimal replacementCost; private BigDecimal replacementCost;
@ExcelProperty("换胎说明") @ExcelProperty("换胎说明")
@@ -60,7 +60,7 @@
<bind name="etcCardNoLike" value="'%' + etcRecord.etcCardNo + '%'"/> <bind name="etcCardNoLike" value="'%' + etcRecord.etcCardNo + '%'"/>
AND etc_card_no LIKE #{etcCardNoLike} AND etc_card_no LIKE #{etcCardNoLike}
</if> </if>
ORDER BY exit_time DESC, create_time DESC ORDER BY create_time DESC
</select> </select>
</mapper> </mapper>
@@ -90,7 +90,7 @@
<if test="oilElectricRecord.createTimeEnd != null and oilElectricRecord.createTimeEnd != ''"> <if test="oilElectricRecord.createTimeEnd != null and oilElectricRecord.createTimeEnd != ''">
AND create_time &lt;= #{oilElectricRecord.createTimeEnd} AND create_time &lt;= #{oilElectricRecord.createTimeEnd}
</if> </if>
ORDER BY transaction_time DESC, create_time DESC ORDER BY create_time DESC
</select> </select>
</mapper> </mapper>
@@ -70,7 +70,7 @@
<if test="otherExpenseRecord.createTimeEnd != null and otherExpenseRecord.createTimeEnd != ''"> <if test="otherExpenseRecord.createTimeEnd != null and otherExpenseRecord.createTimeEnd != ''">
AND create_time &lt;= #{otherExpenseRecord.createTimeEnd} AND create_time &lt;= #{otherExpenseRecord.createTimeEnd}
</if> </if>
ORDER BY expense_date DESC, create_time DESC ORDER BY create_time DESC
</select> </select>
</mapper> </mapper>
@@ -40,6 +40,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -96,7 +97,8 @@ public class MaintenanceRecordServiceImpl extends BaseServiceImpl<MaintenanceRec
public List<MaintenanceRecordExcel> exportMaintenanceRecord(Wrapper<MaintenanceRecord> queryWrapper) { public List<MaintenanceRecordExcel> exportMaintenanceRecord(Wrapper<MaintenanceRecord> queryWrapper) {
return list(queryWrapper).stream().map(maintenanceRecord -> { return list(queryWrapper).stream().map(maintenanceRecord -> {
MaintenanceRecordExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(maintenanceRecord, MaintenanceRecordExcel.class)); MaintenanceRecordExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(maintenanceRecord, MaintenanceRecordExcel.class));
excel.setMileage(nonNegative(maintenanceRecord.getMileage())); excel.setCost(scaleAmount(maintenanceRecord.getCost()));
excel.setMileage(scaleAmount(nonNegative(maintenanceRecord.getMileage())));
if (Func.isEmpty(excel.getMileageUnit())) { if (Func.isEmpty(excel.getMileageUnit())) {
excel.setMileageUnit(defaultMileageUnit(maintenanceRecord.getVehicleType())); excel.setMileageUnit(defaultMileageUnit(maintenanceRecord.getVehicleType()));
} }
@@ -167,6 +169,10 @@ public class MaintenanceRecordServiceImpl extends BaseServiceImpl<MaintenanceRec
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
private BigDecimal scaleAmount(BigDecimal value) {
return Func.isEmpty(value) ? null : value.setScale(2, RoundingMode.HALF_UP);
}
private String defaultMileageUnit(String vehicleType) { private String defaultMileageUnit(String vehicleType) {
return "船舶".equals(vehicleType) ? "海里" : "公里"; return "船舶".equals(vehicleType) ? "海里" : "公里";
} }
@@ -2413,7 +2413,8 @@ CREATE TABLE "blade_port_terminal" (
"parent_name" varchar(100), "parent_name" varchar(100),
"country" varchar(50), "country" varchar(50),
"city" varchar(50), "city" varchar(50),
"region_code" varchar(32), "district_code" varchar(12),
"district_name" varchar(50),
"detail_address" varchar(255), "detail_address" varchar(255),
"longitude" numeric(12,6), "longitude" numeric(12,6),
"latitude" numeric(12,6), "latitude" numeric(12,6),
@@ -2448,6 +2449,9 @@ CREATE TABLE "blade_railway_station" (
"province_name" varchar(128), "province_name" varchar(128),
"city_code" varchar(12), "city_code" varchar(12),
"city_name" varchar(128), "city_name" varchar(128),
"district_code" varchar(12),
"district_name" varchar(128),
"region_name" varchar(128),
"longitude" numeric(12,6), "longitude" numeric(12,6),
"latitude" numeric(12,6), "latitude" numeric(12,6),
"data_source" varchar(20) DEFAULT '手工导入', "data_source" varchar(20) DEFAULT '手工导入',
@@ -2482,6 +2486,9 @@ CREATE TABLE "blade_airport_master" (
"province_name" varchar(128), "province_name" varchar(128),
"city_code" varchar(12), "city_code" varchar(12),
"city_name" varchar(128), "city_name" varchar(128),
"district_code" varchar(12),
"district_name" varchar(128),
"region_name" varchar(128),
"longitude" numeric(12,6), "longitude" numeric(12,6),
"latitude" numeric(12,6), "latitude" numeric(12,6),
"data_source" varchar(20) DEFAULT '手工导入', "data_source" varchar(20) DEFAULT '手工导入',
+8 -1
View File
@@ -1481,7 +1481,8 @@ CREATE TABLE `blade_port_terminal` (
`parent_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上级港口名称', `parent_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上级港口名称',
`country` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '国家', `country` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '国家',
`city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '城市', `city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '城市',
`region_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '行政区划编码', `district_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '区县编码',
`district_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '区县',
`detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址', `detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址',
`longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度',
`latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度', `latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度',
@@ -1530,6 +1531,9 @@ CREATE TABLE `blade_railway_station` (
`province_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份', `province_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份',
`city_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市编码', `city_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市编码',
`city_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市', `city_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市',
`district_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属区县编码',
`district_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属区县',
`region_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '行政区划',
`longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度',
`latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度', `latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度',
`data_source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '手动' COMMENT '数据来源', `data_source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '手动' COMMENT '数据来源',
@@ -1578,6 +1582,9 @@ CREATE TABLE `blade_airport_master` (
`province_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份', `province_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份',
`city_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市编码', `city_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市编码',
`city_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市', `city_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市',
`district_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属区县编码',
`district_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属区县',
`region_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '行政区划',
`longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度',
`latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度', `latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度',
`data_source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '手动录入' COMMENT '数据来源', `data_source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '手动录入' COMMENT '数据来源',
@@ -2413,7 +2413,8 @@ CREATE TABLE "blade_port_terminal" (
"parent_name" varchar(100), "parent_name" varchar(100),
"country" varchar(50), "country" varchar(50),
"city" varchar(50), "city" varchar(50),
"region_code" varchar(32), "district_code" varchar(12),
"district_name" varchar(50),
"detail_address" varchar(255), "detail_address" varchar(255),
"longitude" numeric(12,6), "longitude" numeric(12,6),
"latitude" numeric(12,6), "latitude" numeric(12,6),
@@ -2448,6 +2449,9 @@ CREATE TABLE "blade_railway_station" (
"province_name" varchar(128), "province_name" varchar(128),
"city_code" varchar(12), "city_code" varchar(12),
"city_name" varchar(128), "city_name" varchar(128),
"district_code" varchar(12),
"district_name" varchar(128),
"region_name" varchar(128),
"longitude" numeric(12,6), "longitude" numeric(12,6),
"latitude" numeric(12,6), "latitude" numeric(12,6),
"data_source" varchar(20) DEFAULT '手工导入', "data_source" varchar(20) DEFAULT '手工导入',
@@ -2482,6 +2486,9 @@ CREATE TABLE "blade_airport_master" (
"province_name" varchar(128), "province_name" varchar(128),
"city_code" varchar(12), "city_code" varchar(12),
"city_name" varchar(128), "city_name" varchar(128),
"district_code" varchar(12),
"district_name" varchar(128),
"region_name" varchar(128),
"longitude" numeric(12,6), "longitude" numeric(12,6),
"latitude" numeric(12,6), "latitude" numeric(12,6),
"data_source" varchar(20) DEFAULT '手工导入', "data_source" varchar(20) DEFAULT '手工导入',
@@ -7558,7 +7558,8 @@ CREATE TABLE [dbo].[blade_port_terminal] (
[parent_name] nvarchar(100) NULL, [parent_name] nvarchar(100) NULL,
[country] nvarchar(50) NULL, [country] nvarchar(50) NULL,
[city] nvarchar(50) NULL, [city] nvarchar(50) NULL,
[region_code] nvarchar(32) NULL, [district_code] nvarchar(12) NULL,
[district_name] nvarchar(50) NULL,
[detail_address] nvarchar(255) NULL, [detail_address] nvarchar(255) NULL,
[longitude] decimal(12,6) NULL, [longitude] decimal(12,6) NULL,
[latitude] decimal(12,6) NULL, [latitude] decimal(12,6) NULL,
@@ -7598,6 +7599,9 @@ CREATE TABLE [dbo].[blade_railway_station] (
[province_name] nvarchar(128) NULL, [province_name] nvarchar(128) NULL,
[city_code] nvarchar(12) NULL, [city_code] nvarchar(12) NULL,
[city_name] nvarchar(128) NULL, [city_name] nvarchar(128) NULL,
[district_code] nvarchar(12) NULL,
[district_name] nvarchar(128) NULL,
[region_name] nvarchar(128) NULL,
[longitude] decimal(12,6) NULL, [longitude] decimal(12,6) NULL,
[latitude] decimal(12,6) NULL, [latitude] decimal(12,6) NULL,
[data_source] nvarchar(20) DEFAULT '手工导入' NULL, [data_source] nvarchar(20) DEFAULT '手工导入' NULL,
@@ -7636,6 +7640,9 @@ CREATE TABLE [dbo].[blade_airport_master] (
[province_name] nvarchar(128) NULL, [province_name] nvarchar(128) NULL,
[city_code] nvarchar(12) NULL, [city_code] nvarchar(12) NULL,
[city_name] nvarchar(128) NULL, [city_name] nvarchar(128) NULL,
[district_code] nvarchar(12) NULL,
[district_name] nvarchar(128) NULL,
[region_name] nvarchar(128) NULL,
[longitude] decimal(12,6) NULL, [longitude] decimal(12,6) NULL,
[latitude] decimal(12,6) NULL, [latitude] decimal(12,6) NULL,
[data_source] nvarchar(20) DEFAULT '手工导入' NULL, [data_source] nvarchar(20) DEFAULT '手工导入' NULL,
@@ -13,6 +13,10 @@ CREATE TABLE `blade_airport_master` (
`province_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份', `province_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份',
`city_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市编码', `city_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市编码',
`city_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市', `city_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市',
`district_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属区县编码',
`district_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属区县',
`region_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '行政区划',
`detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址',
`longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度',
`latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度', `latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度',
`data_source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '手动录入' COMMENT '数据来源', `data_source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '手动录入' COMMENT '数据来源',
+4 -2
View File
@@ -4,8 +4,9 @@
DROP TABLE IF EXISTS `blade_fee_item`; DROP TABLE IF EXISTS `blade_fee_item`;
CREATE TABLE `blade_fee_item` ( CREATE TABLE `blade_fee_item` (
`id` bigint NOT NULL COMMENT '主键', `id` bigint NOT NULL COMMENT '主键',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '中文名称', `fee_category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '费用类型',
`english_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '英文名称', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '费用项',
`english_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '费用项代码',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人', `create_user` bigint NULL DEFAULT NULL COMMENT '创建人',
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门', `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
@@ -15,6 +16,7 @@ CREATE TABLE `blade_fee_item` (
`is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除', `is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_fee_item_name`(`name`) USING BTREE, UNIQUE INDEX `uk_fee_item_name`(`name`) USING BTREE,
INDEX `idx_fee_item_category`(`fee_category`) USING BTREE,
INDEX `idx_fee_item_status`(`status`) USING BTREE INDEX `idx_fee_item_status`(`status`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '费用项'; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '费用项';
@@ -0,0 +1,7 @@
-- 费用项补充费用类型字段
-- 执行前请先备份数据库;如字段已存在,请跳过对应 ALTER。
ALTER TABLE `blade_fee_item`
ADD COLUMN `fee_category` varchar(50) DEFAULT NULL COMMENT '费用类型' AFTER `id`;
CREATE INDEX `idx_fee_item_category` ON `blade_fee_item` (`fee_category`);
+2 -1
View File
@@ -12,7 +12,8 @@ CREATE TABLE `blade_port_terminal` (
`parent_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上级港口名称', `parent_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '上级港口名称',
`country` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '国家', `country` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '国家',
`city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '城市', `city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '城市',
`region_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '行政区划编码', `district_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '区县编码',
`district_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '区县',
`detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址', `detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址',
`longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度',
`latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度', `latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度',
@@ -1,6 +1,5 @@
-- 港口码头主数据补充行政区划编码与详细地址字段 -- 港口码头主数据补充详细地址字段
-- 执行前请先备份数据库;如字段已存在,请跳过对应 ALTER。 -- 执行前请先备份数据库;如字段已存在,请跳过对应 ALTER。
ALTER TABLE `blade_port_terminal` ALTER TABLE `blade_port_terminal`
ADD COLUMN `region_code` varchar(32) DEFAULT NULL COMMENT '行政区划编码' AFTER `city`, ADD COLUMN `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址' AFTER `district_name`;
ADD COLUMN `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址' AFTER `region_code`;
@@ -13,6 +13,10 @@ CREATE TABLE `blade_railway_station` (
`province_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份', `province_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属省份',
`city_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市编码', `city_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市编码',
`city_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市', `city_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属城市',
`district_code` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属区县编码',
`district_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属区县',
`region_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '行政区划',
`detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址',
`longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) NULL DEFAULT NULL COMMENT '经度',
`latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度', `latitude` decimal(12,6) NULL DEFAULT NULL COMMENT '纬度',
`data_source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '手动' COMMENT '数据来源', `data_source` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '手动' COMMENT '数据来源',
@@ -0,0 +1,14 @@
-- 基础资料区县字段补充
-- 执行前请先备份数据库;如字段已存在,请跳过对应 ALTER。
ALTER TABLE `blade_airport_master`
ADD COLUMN `district_code` varchar(12) DEFAULT NULL COMMENT '所属区县编码' AFTER `city_name`,
ADD COLUMN `district_name` varchar(128) DEFAULT NULL COMMENT '所属区县' AFTER `district_code`;
ALTER TABLE `blade_railway_station`
ADD COLUMN `district_code` varchar(12) DEFAULT NULL COMMENT '所属区县编码' AFTER `city_name`,
ADD COLUMN `district_name` varchar(128) DEFAULT NULL COMMENT '所属区县' AFTER `district_code`;
ALTER TABLE `blade_port_terminal`
ADD COLUMN `district_code` varchar(12) DEFAULT NULL COMMENT '区县编码' AFTER `city`,
ADD COLUMN `district_name` varchar(50) DEFAULT NULL COMMENT '区县' AFTER `district_code`;
@@ -1,12 +1,10 @@
-- 铁路车站、空港机场补充行政区划与详细地址字段 -- 铁路车站、空港机场补充行政区划名称与详细地址字段
-- 执行前请先备份数据库;如字段已存在,请跳过对应 ALTER。 -- 执行前请先备份数据库;如字段已存在,请跳过对应 ALTER。
ALTER TABLE `blade_railway_station` ALTER TABLE `blade_railway_station`
ADD COLUMN `region_code` varchar(32) DEFAULT NULL COMMENT '行政区划编码' AFTER `city_name`, ADD COLUMN `region_name` varchar(128) DEFAULT NULL COMMENT '行政区划' AFTER `district_name`,
ADD COLUMN `region_name` varchar(128) DEFAULT NULL COMMENT '行政区划' AFTER `region_code`,
ADD COLUMN `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址' AFTER `region_name`; ADD COLUMN `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址' AFTER `region_name`;
ALTER TABLE `blade_airport_master` ALTER TABLE `blade_airport_master`
ADD COLUMN `region_code` varchar(32) DEFAULT NULL COMMENT '行政区划编码' AFTER `city_name`, ADD COLUMN `region_name` varchar(128) DEFAULT NULL COMMENT '行政区划' AFTER `district_name`,
ADD COLUMN `region_name` varchar(128) DEFAULT NULL COMMENT '行政区划' AFTER `region_code`,
ADD COLUMN `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址' AFTER `region_name`; ADD COLUMN `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址' AFTER `region_name`;
+10 -5
View File
@@ -32,7 +32,8 @@ CREATE TABLE `blade_airport_master` (
`province_name` varchar(128) DEFAULT NULL COMMENT '所属省份', `province_name` varchar(128) DEFAULT NULL COMMENT '所属省份',
`city_code` varchar(12) DEFAULT NULL COMMENT '所属城市编码', `city_code` varchar(12) DEFAULT NULL COMMENT '所属城市编码',
`city_name` varchar(128) DEFAULT NULL COMMENT '所属城市', `city_name` varchar(128) DEFAULT NULL COMMENT '所属城市',
`region_code` varchar(32) DEFAULT NULL COMMENT '行政区划编码', `district_code` varchar(12) DEFAULT NULL COMMENT '所属区县编码',
`district_name` varchar(128) DEFAULT NULL COMMENT '所属区县',
`region_name` varchar(128) DEFAULT NULL COMMENT '行政区划', `region_name` varchar(128) DEFAULT NULL COMMENT '行政区划',
`detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址', `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址',
`longitude` decimal(12,6) DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) DEFAULT NULL COMMENT '经度',
@@ -130,8 +131,9 @@ COMMIT;
DROP TABLE IF EXISTS `blade_fee_item`; DROP TABLE IF EXISTS `blade_fee_item`;
CREATE TABLE `blade_fee_item` ( CREATE TABLE `blade_fee_item` (
`id` bigint(20) NOT NULL COMMENT '主键', `id` bigint(20) NOT NULL COMMENT '主键',
`name` varchar(50) NOT NULL COMMENT '中文名称', `fee_category` varchar(50) NOT NULL COMMENT '费用类型',
`english_name` varchar(100) DEFAULT NULL COMMENT '英文名称', `name` varchar(50) NOT NULL COMMENT '费用项',
`english_name` varchar(100) DEFAULT NULL COMMENT '费用项代码',
`create_user` bigint(20) DEFAULT NULL COMMENT '创建人', `create_user` bigint(20) DEFAULT NULL COMMENT '创建人',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间',
@@ -141,6 +143,7 @@ CREATE TABLE `blade_fee_item` (
`is_deleted` int(11) DEFAULT '0' COMMENT '是否已删除', `is_deleted` int(11) DEFAULT '0' COMMENT '是否已删除',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_fee_item_name` (`name`) USING BTREE, UNIQUE KEY `uk_fee_item_name` (`name`) USING BTREE,
KEY `idx_fee_item_category` (`fee_category`) USING BTREE,
KEY `idx_fee_item_status` (`status`) USING BTREE KEY `idx_fee_item_status` (`status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='费用项'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='费用项';
@@ -1312,7 +1315,8 @@ CREATE TABLE `blade_port_terminal` (
`parent_name` varchar(100) DEFAULT NULL COMMENT '上级港口名称', `parent_name` varchar(100) DEFAULT NULL COMMENT '上级港口名称',
`country` varchar(50) DEFAULT NULL COMMENT '国家', `country` varchar(50) DEFAULT NULL COMMENT '国家',
`city` varchar(50) DEFAULT NULL COMMENT '城市', `city` varchar(50) DEFAULT NULL COMMENT '城市',
`region_code` varchar(32) DEFAULT NULL COMMENT '行政区划编码', `district_code` varchar(12) DEFAULT NULL COMMENT '区县编码',
`district_name` varchar(50) DEFAULT NULL COMMENT '区县',
`detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址', `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址',
`longitude` decimal(12,6) DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) DEFAULT NULL COMMENT '经度',
`latitude` decimal(12,6) DEFAULT NULL COMMENT '纬度', `latitude` decimal(12,6) DEFAULT NULL COMMENT '纬度',
@@ -1419,7 +1423,8 @@ CREATE TABLE `blade_railway_station` (
`province_name` varchar(128) DEFAULT NULL COMMENT '所属省份', `province_name` varchar(128) DEFAULT NULL COMMENT '所属省份',
`city_code` varchar(12) DEFAULT NULL COMMENT '所属城市编码', `city_code` varchar(12) DEFAULT NULL COMMENT '所属城市编码',
`city_name` varchar(128) DEFAULT NULL COMMENT '所属城市', `city_name` varchar(128) DEFAULT NULL COMMENT '所属城市',
`region_code` varchar(32) DEFAULT NULL COMMENT '行政区划编码', `district_code` varchar(12) DEFAULT NULL COMMENT '所属区县编码',
`district_name` varchar(128) DEFAULT NULL COMMENT '所属区县',
`region_name` varchar(128) DEFAULT NULL COMMENT '行政区划', `region_name` varchar(128) DEFAULT NULL COMMENT '行政区划',
`detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址', `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址',
`longitude` decimal(12,6) DEFAULT NULL COMMENT '经度', `longitude` decimal(12,6) DEFAULT NULL COMMENT '经度',