1、调整基础配置模块
2、调整车船务模块
This commit is contained in:
@@ -172,6 +172,7 @@ public class AirportMasterController extends BladeController {
|
||||
airportMaster.remove("Blade-Auth");
|
||||
airportMaster.remove("Authorization");
|
||||
airportMaster.remove("access_token");
|
||||
normalizeRegionCodeCondition(airportMaster);
|
||||
QueryWrapper<AirportMaster> queryWrapper = Condition.getQueryWrapper(airportMaster, AirportMaster.class);
|
||||
if (Func.isNotEmpty(ids)) {
|
||||
queryWrapper.lambda().in(AirportMaster::getId, Func.toLongList(ids.toString()));
|
||||
@@ -207,4 +208,11 @@ public class AirportMasterController extends BladeController {
|
||||
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("Authorization");
|
||||
portTerminal.remove("access_token");
|
||||
normalizeRegionCodeCondition(portTerminal);
|
||||
QueryWrapper<PortTerminal> queryWrapper = Condition.getQueryWrapper(portTerminal, PortTerminal.class);
|
||||
applyDataSourceCondition(queryWrapper, dataSource);
|
||||
if (Func.isNotEmpty(ids)) {
|
||||
@@ -220,6 +221,13 @@ public class PortTerminalController extends BladeController {
|
||||
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) {
|
||||
String value = Func.toStrWithEmpty(dataSource, "");
|
||||
if (Func.isEmpty(value)) {
|
||||
|
||||
@@ -176,6 +176,7 @@ public class RailwayStationController extends BladeController {
|
||||
railwayStation.remove("Blade-Auth");
|
||||
railwayStation.remove("Authorization");
|
||||
railwayStation.remove("access_token");
|
||||
normalizeRegionCodeCondition(railwayStation);
|
||||
QueryWrapper<RailwayStation> queryWrapper = Condition.getQueryWrapper(railwayStation, RailwayStation.class);
|
||||
applyDataSourceCondition(queryWrapper, dataSource);
|
||||
if (Func.isNotEmpty(ids)) {
|
||||
@@ -212,6 +213,13 @@ public class RailwayStationController extends BladeController {
|
||||
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) {
|
||||
String value = Func.toStrWithEmpty(dataSource, "");
|
||||
if (Func.isEmpty(value)) {
|
||||
|
||||
@@ -133,7 +133,7 @@ public class RegionController extends BladeController {
|
||||
@ApiOperationSupport(order = 5)
|
||||
@Operation(summary = "新增", description = "传入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)
|
||||
@Operation(summary = "修改", description = "传入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)
|
||||
@Operation(summary = "下拉数据源", description = "传入tenant")
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -74,6 +74,9 @@ public class AirportMasterExcel implements Serializable {
|
||||
@ExcelProperty("所属城市")
|
||||
private String cityName;
|
||||
|
||||
@ExcelProperty("所属区县")
|
||||
private String districtName;
|
||||
|
||||
@ExcelProperty("行政区划")
|
||||
private String regionName;
|
||||
|
||||
|
||||
@@ -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.NumberFormat;
|
||||
import cn.idev.excel.annotation.write.style.ColumnWidth;
|
||||
import cn.idev.excel.annotation.write.style.ContentRowHeight;
|
||||
import cn.idev.excel.annotation.write.style.HeadRowHeight;
|
||||
@@ -73,6 +74,9 @@ public class PortTerminalExcel implements Serializable {
|
||||
@ExcelProperty("城市")
|
||||
private String city;
|
||||
|
||||
@ExcelProperty("区县")
|
||||
private String districtName;
|
||||
|
||||
@ExcelProperty("行政区划编码")
|
||||
private String regionCode;
|
||||
|
||||
@@ -80,9 +84,11 @@ public class PortTerminalExcel implements Serializable {
|
||||
private String detailAddress;
|
||||
|
||||
@ExcelProperty("经度")
|
||||
@NumberFormat("0.000000")
|
||||
private BigDecimal longitude;
|
||||
|
||||
@ExcelProperty("纬度")
|
||||
@NumberFormat("0.000000")
|
||||
private BigDecimal latitude;
|
||||
|
||||
@ExcelProperty("数据来源")
|
||||
|
||||
@@ -27,7 +27,6 @@ package org.springblade.system.excel;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnore;
|
||||
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.ContentRowHeight;
|
||||
import cn.idev.excel.annotation.write.style.HeadRowHeight;
|
||||
@@ -35,7 +34,6 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 铁路车站主数据 Excel
|
||||
@@ -74,6 +72,9 @@ public class RailwayStationExcel implements Serializable {
|
||||
@ExcelProperty("所属城市")
|
||||
private String cityName;
|
||||
|
||||
@ExcelProperty("所属区县")
|
||||
private String districtName;
|
||||
|
||||
@ExcelProperty("行政区划")
|
||||
private String regionName;
|
||||
|
||||
@@ -81,12 +82,10 @@ public class RailwayStationExcel implements Serializable {
|
||||
private String detailAddress;
|
||||
|
||||
@ExcelProperty("经度")
|
||||
@NumberFormat("0.000000")
|
||||
private BigDecimal longitude;
|
||||
private String longitude;
|
||||
|
||||
@ExcelProperty("纬度")
|
||||
@NumberFormat("0.000000")
|
||||
private BigDecimal latitude;
|
||||
private String latitude;
|
||||
|
||||
@ExcelProperty("数据来源")
|
||||
private String dataSource;
|
||||
|
||||
@@ -21,7 +21,9 @@
|
||||
<result column="province_name" property="provinceName"/>
|
||||
<result column="city_code" property="cityCode"/>
|
||||
<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="detail_address" property="detailAddress"/>
|
||||
<result column="longitude" property="longitude"/>
|
||||
@@ -50,7 +52,8 @@
|
||||
am.province_name,
|
||||
am.city_code,
|
||||
am.city_name,
|
||||
am.region_code,
|
||||
am.district_code,
|
||||
am.district_name,
|
||||
am.region_name,
|
||||
am.detail_address,
|
||||
am.longitude,
|
||||
@@ -77,7 +80,14 @@
|
||||
AND am.icao_code = #{airportMaster.icaoCode}
|
||||
</if>
|
||||
<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 test="airportMaster.regionName != null and airportMaster.regionName != ''">
|
||||
<bind name="regionNameLike" value="'%' + airportMaster.regionName + '%'"/>
|
||||
@@ -100,7 +110,7 @@
|
||||
<if test="airportMaster.status != null">
|
||||
AND am.status = #{airportMaster.status}
|
||||
</if>
|
||||
ORDER BY am.update_time DESC, am.create_time DESC
|
||||
ORDER BY am.create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
<if test="currency.updateTimeEnd != null">
|
||||
AND bc.update_time <= #{currency.updateTimeEnd}
|
||||
</if>
|
||||
ORDER BY bc.code ASC, bc.effective_date DESC, bc.create_time DESC
|
||||
ORDER BY bc.create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<if test="customerType.status != null">
|
||||
AND status = #{customerType.status}
|
||||
</if>
|
||||
ORDER BY update_time DESC, create_time DESC
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="status" property="status"/>
|
||||
<result column="is_deleted" property="isDeleted"/>
|
||||
<result column="fee_category" property="feeCategory"/>
|
||||
<result column="name" property="name"/>
|
||||
<result column="english_name" property="englishName"/>
|
||||
</resultMap>
|
||||
@@ -22,6 +23,9 @@
|
||||
blade_fee_item
|
||||
WHERE
|
||||
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 != ''">
|
||||
<bind name="nameLike" value="'%' + feeItem.name + '%'"/>
|
||||
AND name LIKE #{nameLike}
|
||||
@@ -33,7 +37,7 @@
|
||||
<if test="feeItem.status != null">
|
||||
AND status = #{feeItem.status}
|
||||
</if>
|
||||
ORDER BY update_time DESC, create_time DESC
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -20,7 +20,9 @@
|
||||
<result column="parent_name" property="parentName"/>
|
||||
<result column="country" property="country"/>
|
||||
<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="longitude" property="longitude"/>
|
||||
<result column="latitude" property="latitude"/>
|
||||
@@ -47,7 +49,8 @@
|
||||
pt.parent_name,
|
||||
pt.country,
|
||||
pt.city,
|
||||
pt.region_code,
|
||||
pt.district_code,
|
||||
pt.district_name,
|
||||
pt.detail_address,
|
||||
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,
|
||||
@@ -82,8 +85,15 @@
|
||||
<if test="portTerminal.city != null and portTerminal.city != ''">
|
||||
AND pt.city = #{portTerminal.city}
|
||||
</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 != ''">
|
||||
AND pt.region_code = #{portTerminal.regionCode}
|
||||
AND pt.district_code = #{portTerminal.regionCode}
|
||||
</if>
|
||||
<if test="portTerminal.detailAddress != null and portTerminal.detailAddress != ''">
|
||||
<bind name="detailAddressLike" value="'%' + portTerminal.detailAddress + '%'"/>
|
||||
@@ -95,7 +105,7 @@
|
||||
<if test="portTerminal.status != null">
|
||||
AND pt.status = #{portTerminal.status}
|
||||
</if>
|
||||
ORDER BY pt.update_time DESC, pt.create_time DESC
|
||||
ORDER BY pt.create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -21,7 +21,9 @@
|
||||
<result column="province_name" property="provinceName"/>
|
||||
<result column="city_code" property="cityCode"/>
|
||||
<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="detail_address" property="detailAddress"/>
|
||||
<result column="longitude" property="longitude"/>
|
||||
@@ -50,7 +52,8 @@
|
||||
rs.province_name,
|
||||
rs.city_code,
|
||||
rs.city_name,
|
||||
rs.region_code,
|
||||
rs.district_code,
|
||||
rs.district_name,
|
||||
rs.region_name,
|
||||
rs.detail_address,
|
||||
rs.longitude,
|
||||
@@ -82,7 +85,14 @@
|
||||
AND rs.telegraph_code = #{railwayStation.telegraphCode}
|
||||
</if>
|
||||
<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 test="railwayStation.regionName != null and railwayStation.regionName != ''">
|
||||
<bind name="regionNameLike" value="'%' + railwayStation.regionName + '%'"/>
|
||||
@@ -111,7 +121,7 @@
|
||||
<if test="railwayStation.status != null">
|
||||
AND rs.status = #{railwayStation.status}
|
||||
</if>
|
||||
ORDER BY rs.update_time DESC, rs.create_time DESC
|
||||
ORDER BY rs.create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
and region.name like concat(concat('%', #{param2.name}),'%')
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY region.sort ASC, region.code ASC
|
||||
</select>
|
||||
|
||||
<select id="lazyTree" resultType="java.util.HashMap">
|
||||
@@ -95,7 +96,7 @@
|
||||
and region.name like concat(concat('%', #{param2.name}),'%')
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY region.code
|
||||
ORDER BY region.sort ASC, region.code ASC
|
||||
</select>
|
||||
|
||||
<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.setCityCode(trimToNull(airportMaster.getCityCode()));
|
||||
airportMaster.setCityName(trimToNull(airportMaster.getCityName()));
|
||||
airportMaster.setDistrictCode(trimToNull(airportMaster.getDistrictCode()));
|
||||
airportMaster.setDistrictName(trimToNull(airportMaster.getDistrictName()));
|
||||
airportMaster.setRegionCode(trimToNull(airportMaster.getRegionCode()));
|
||||
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.setRemark(trimToNull(airportMaster.getRemark()));
|
||||
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.getProvinceName(), 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.getRegionName(), REGION_NAME_MAX_LENGTH, "行政区划不能超过128字");
|
||||
validateLength(airportMaster.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字");
|
||||
validateLength(airportMaster.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200字");
|
||||
if (Func.isEmpty(airportMaster.getProvinceCode()) || Func.isEmpty(airportMaster.getCityCode())) {
|
||||
throw new ServiceException("请选择省份和城市");
|
||||
if (Func.isEmpty(airportMaster.getProvinceCode()) || Func.isEmpty(airportMaster.getCityCode()) || Func.isEmpty(airportMaster.getDistrictCode())) {
|
||||
throw new ServiceException("请选择省份、城市和区县");
|
||||
}
|
||||
validateCoordinate(airportMaster.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度");
|
||||
validateCoordinate(airportMaster.getLatitude(), MIN_LATITUDE, MAX_LATITUDE, "纬度");
|
||||
@@ -254,8 +263,26 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
|
||||
airportMaster.setProvinceName(province.getName());
|
||||
airportMaster.setCityCode(city.getCode());
|
||||
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) {
|
||||
|
||||
@@ -81,6 +81,11 @@ public class CurrencyServiceImpl extends BaseServiceImpl<CurrencyMapper, Currenc
|
||||
prepare(currency, SOURCE_MANUAL);
|
||||
validate(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());
|
||||
if (oldCurrency != null && !Objects.equals(oldCurrency.getCode(), currency.getCode())) {
|
||||
rebuildEnabledValidity(oldCurrency.getCode());
|
||||
@@ -205,14 +210,13 @@ public class CurrencyServiceImpl extends BaseServiceImpl<CurrencyMapper, Currenc
|
||||
if (currency.getDecimalPlaces() < MIN_DECIMAL_PLACES || currency.getDecimalPlaces() > MAX_DECIMAL_PLACES) {
|
||||
throw new ServiceException("小数位数范围为0到8");
|
||||
}
|
||||
if (Func.isEmpty(currency.getExchangeRate())) {
|
||||
throw new ServiceException("汇率不能为空");
|
||||
}
|
||||
if (currency.getExchangeRate().compareTo(BigDecimal.ZERO) <= 0) {
|
||||
throw new ServiceException("汇率必须大于0");
|
||||
}
|
||||
if (currency.getExchangeRate().stripTrailingZeros().scale() > EXCHANGE_RATE_SCALE) {
|
||||
throw new ServiceException("汇率最多保留6位小数");
|
||||
if (Func.isNotEmpty(currency.getExchangeRate())) {
|
||||
if (currency.getExchangeRate().compareTo(BigDecimal.ZERO) <= 0) {
|
||||
throw new ServiceException("汇率必须大于0");
|
||||
}
|
||||
if (currency.getExchangeRate().stripTrailingZeros().scale() > EXCHANGE_RATE_SCALE) {
|
||||
throw new ServiceException("汇率最多保留6位小数");
|
||||
}
|
||||
}
|
||||
if (Func.isEmpty(currency.getEffectiveDate())) {
|
||||
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_DISABLED = 2;
|
||||
private static final int FEE_CATEGORY_MAX_LENGTH = 50;
|
||||
private static final int NAME_MAX_LENGTH = 50;
|
||||
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) {
|
||||
feeItem.setFeeCategory(trimToEmpty(feeItem.getFeeCategory()));
|
||||
feeItem.setName(trimToEmpty(feeItem.getName()));
|
||||
feeItem.setEnglishName(trimToNull(feeItem.getEnglishName()));
|
||||
if (Func.isEmpty(feeItem.getStatus())) {
|
||||
@@ -94,14 +96,20 @@ public class FeeItemServiceImpl extends BaseServiceImpl<FeeItemMapper, 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())) {
|
||||
throw new ServiceException("中文名称不能为空");
|
||||
throw new ServiceException("费用项不能为空");
|
||||
}
|
||||
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) {
|
||||
throw new ServiceException("英文名称不能超过100字");
|
||||
throw new ServiceException("费用项代码不能超过100字");
|
||||
}
|
||||
validateUniqueName(feeItem);
|
||||
}
|
||||
@@ -114,7 +122,7 @@ public class FeeItemServiceImpl extends BaseServiceImpl<FeeItemMapper, FeeItem>
|
||||
queryWrapper.ne(FeeItem::getId, feeItem.getId());
|
||||
}
|
||||
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.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springblade.core.log.exception.ServiceException;
|
||||
import org.springblade.core.mp.base.BaseServiceImpl;
|
||||
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.mapper.PortTerminalMapper;
|
||||
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.service.IPortTerminalService;
|
||||
import org.springblade.system.service.IRegionService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -55,6 +58,7 @@ import java.util.regex.Pattern;
|
||||
* @author Chill
|
||||
*/
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper, PortTerminal> implements IPortTerminalService {
|
||||
|
||||
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 TERMINAL_CODE_PATTERN = Pattern.compile("^[A-Z]{5}-[A-Z0-9]+$");
|
||||
|
||||
private final IRegionService regionService;
|
||||
|
||||
@Override
|
||||
public IPage<PortTerminalVO> selectPortTerminalPage(IPage<PortTerminalVO> page, PortTerminalVO portTerminal) {
|
||||
return page.setRecords(baseMapper.selectPortTerminalPage(page, portTerminal));
|
||||
@@ -152,6 +158,7 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
||||
List<PortTerminal> portTerminalList = list(queryWrapper);
|
||||
return portTerminalList.stream().map(portTerminal -> {
|
||||
PortTerminalExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(portTerminal, PortTerminalExcel.class));
|
||||
excel.setRegionCode(portTerminal.getDistrictCode());
|
||||
excel.setLongitude(scaleCoordinate(portTerminal.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE));
|
||||
excel.setLatitude(scaleCoordinate(portTerminal.getLatitude(), MIN_LATITUDE, MAX_LATITUDE));
|
||||
excel.setDataSource(normalizeDataSource(portTerminal.getDataSource()));
|
||||
@@ -173,7 +180,12 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
||||
portTerminal.setName(trimToEmpty(portTerminal.getName()));
|
||||
portTerminal.setCountry(trimToEmpty(portTerminal.getCountry()));
|
||||
portTerminal.setCity(trimToEmpty(portTerminal.getCity()));
|
||||
portTerminal.setDistrictCode(trimToNull(portTerminal.getDistrictCode()));
|
||||
portTerminal.setDistrictName(trimToNull(portTerminal.getDistrictName()));
|
||||
portTerminal.setRegionCode(trimToNull(portTerminal.getRegionCode()));
|
||||
if (Func.isEmpty(portTerminal.getDistrictCode()) && Func.isNotEmpty(portTerminal.getRegionCode())) {
|
||||
portTerminal.setDistrictCode(portTerminal.getRegionCode());
|
||||
}
|
||||
portTerminal.setDetailAddress(trimToNull(portTerminal.getDetailAddress()));
|
||||
portTerminal.setRemark(trimToNull(portTerminal.getRemark()));
|
||||
portTerminal.setDataSource(normalizeDataSource(Func.toStrWithEmpty(portTerminal.getDataSource(), defaultDataSource)));
|
||||
@@ -181,6 +193,7 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
||||
portTerminal.setStatus(STATUS_ENABLED);
|
||||
}
|
||||
if (CATEGORY_PORT.equals(portTerminal.getCategory())) {
|
||||
fillRegion(portTerminal);
|
||||
portTerminal.setParentId(null);
|
||||
portTerminal.setParentCode(null);
|
||||
portTerminal.setParentName(null);
|
||||
@@ -211,7 +224,50 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
||||
portTerminal.setParentName(parent.getName());
|
||||
portTerminal.setCountry(parent.getCountry());
|
||||
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) {
|
||||
@@ -228,6 +284,7 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
||||
validateLength(portTerminal.getName(), NAME_MAX_LENGTH, "港口/码头名称不能超过100字");
|
||||
validateLength(portTerminal.getCountry(), 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.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字");
|
||||
validateLength(portTerminal.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200个字");
|
||||
@@ -246,6 +303,9 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
||||
if (Func.isEmpty(portTerminal.getCity())) {
|
||||
throw new ServiceException("城市不能为空");
|
||||
}
|
||||
if (Func.isEmpty(portTerminal.getDistrictCode())) {
|
||||
throw new ServiceException("区县不能为空");
|
||||
}
|
||||
validateDataSource(portTerminal.getDataSource());
|
||||
validateStatus(portTerminal.getStatus());
|
||||
validateRange(portTerminal.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度范围为 -180 到 180");
|
||||
|
||||
@@ -131,6 +131,8 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
||||
RailwayStationExcel excel = data.get(index);
|
||||
try {
|
||||
RailwayStation railwayStation = Objects.requireNonNull(BeanUtil.copyProperties(excel, RailwayStation.class));
|
||||
railwayStation.setLongitude(parseCoordinate(excel.getLongitude(), "经度"));
|
||||
railwayStation.setLatitude(parseCoordinate(excel.getLatitude(), "纬度"));
|
||||
railwayStation.setDataSource(SOURCE_BATCH);
|
||||
railwayStation.setStatus(STATUS_ENABLED);
|
||||
prepare(railwayStation, SOURCE_BATCH);
|
||||
@@ -151,19 +153,31 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
||||
List<RailwayStation> railwayStationList = list(queryWrapper);
|
||||
return railwayStationList.stream().map(railwayStation -> {
|
||||
RailwayStationExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(railwayStation, RailwayStationExcel.class));
|
||||
excel.setLongitude(scaleCoordinate(railwayStation.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE));
|
||||
excel.setLatitude(scaleCoordinate(railwayStation.getLatitude(), MIN_LATITUDE, MAX_LATITUDE));
|
||||
excel.setLongitude(formatCoordinate(railwayStation.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE));
|
||||
excel.setLatitude(formatCoordinate(railwayStation.getLatitude(), MIN_LATITUDE, MAX_LATITUDE));
|
||||
excel.setDataSource(normalizeDataSource(railwayStation.getDataSource()));
|
||||
excel.setStatusName(Objects.equals(railwayStation.getStatus(), STATUS_ENABLED) ? "启用" : "停用");
|
||||
return excel;
|
||||
}).toList();
|
||||
}
|
||||
|
||||
private BigDecimal scaleCoordinate(BigDecimal value, BigDecimal min, BigDecimal max) {
|
||||
private String formatCoordinate(BigDecimal value, BigDecimal min, BigDecimal max) {
|
||||
if (Func.isEmpty(value)) {
|
||||
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) {
|
||||
@@ -176,8 +190,16 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
||||
railwayStation.setProvinceName(trimToNull(railwayStation.getProvinceName()));
|
||||
railwayStation.setCityCode(trimToNull(railwayStation.getCityCode()));
|
||||
railwayStation.setCityName(trimToNull(railwayStation.getCityName()));
|
||||
railwayStation.setDistrictCode(trimToNull(railwayStation.getDistrictCode()));
|
||||
railwayStation.setDistrictName(trimToNull(railwayStation.getDistrictName()));
|
||||
railwayStation.setRegionCode(trimToNull(railwayStation.getRegionCode()));
|
||||
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.setRemark(trimToNull(railwayStation.getRemark()));
|
||||
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.getProvinceName(), 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.getRegionName(), REGION_NAME_MAX_LENGTH, "行政区划不能超过128字");
|
||||
validateLength(railwayStation.getDetailAddress(), DETAIL_ADDRESS_MAX_LENGTH, "详细地址不能超过255字");
|
||||
validateLength(railwayStation.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200字");
|
||||
if (Func.isEmpty(railwayStation.getProvinceCode()) || Func.isEmpty(railwayStation.getCityCode())) {
|
||||
throw new ServiceException("请选择省份和城市");
|
||||
if (Func.isEmpty(railwayStation.getProvinceCode()) || Func.isEmpty(railwayStation.getCityCode()) || Func.isEmpty(railwayStation.getDistrictCode())) {
|
||||
throw new ServiceException("请选择省份、城市和区县");
|
||||
}
|
||||
validateCoordinate(railwayStation.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度");
|
||||
validateCoordinate(railwayStation.getLatitude(), MIN_LATITUDE, MAX_LATITUDE, "纬度");
|
||||
@@ -257,8 +280,26 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
||||
railwayStation.setProvinceName(province.getName());
|
||||
railwayStation.setCityCode(city.getCode());
|
||||
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) {
|
||||
|
||||
@@ -76,11 +76,7 @@ public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> impleme
|
||||
region.setCode(StringUtil.removePrefix(region.getCode(), MAIN_CODE));
|
||||
}
|
||||
}
|
||||
// 查询是否已存在
|
||||
Long cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getCode, region.getCode()));
|
||||
if (cnt > 0L) {
|
||||
return this.updateById(region);
|
||||
}
|
||||
validateUniqueCode(region);
|
||||
// 设置祖区划编号
|
||||
Region parent = getByCode(region.getParentCode());
|
||||
if (Func.isNotEmpty(parent) && Func.isNotEmpty(parent.getCode())) {
|
||||
@@ -110,7 +106,22 @@ public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> impleme
|
||||
region.setVillageCode(code);
|
||||
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
|
||||
|
||||
@@ -47,6 +47,7 @@ public class AirportMasterWrapper extends BaseEntityWrapper<AirportMaster, Airpo
|
||||
@Override
|
||||
public AirportMasterVO entityVO(AirportMaster airportMaster) {
|
||||
AirportMasterVO airportMasterVO = Objects.requireNonNull(BeanUtil.copyProperties(airportMaster, AirportMasterVO.class));
|
||||
airportMasterVO.setRegionCode(airportMaster.getDistrictCode());
|
||||
airportMasterVO.setUpdateUserName(UserCache.getUserRealName(airportMaster.getUpdateUser()));
|
||||
return airportMasterVO;
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ public class PortTerminalWrapper extends BaseEntityWrapper<PortTerminal, PortTer
|
||||
@Override
|
||||
public PortTerminalVO entityVO(PortTerminal portTerminal) {
|
||||
PortTerminalVO portTerminalVO = Objects.requireNonNull(BeanUtil.copyProperties(portTerminal, PortTerminalVO.class));
|
||||
portTerminalVO.setRegionCode(portTerminal.getDistrictCode());
|
||||
portTerminalVO.setUpdateUserName(UserCache.getUserRealName(portTerminal.getUpdateUser()));
|
||||
return portTerminalVO;
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ public class RailwayStationWrapper extends BaseEntityWrapper<RailwayStation, Rai
|
||||
@Override
|
||||
public RailwayStationVO entityVO(RailwayStation railwayStation) {
|
||||
RailwayStationVO railwayStationVO = Objects.requireNonNull(BeanUtil.copyProperties(railwayStation, RailwayStationVO.class));
|
||||
railwayStationVO.setRegionCode(railwayStation.getDistrictCode());
|
||||
railwayStationVO.setUpdateUserName(UserCache.getUserRealName(railwayStation.getUpdateUser()));
|
||||
return railwayStationVO;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnore;
|
||||
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.ContentRowHeight;
|
||||
import cn.idev.excel.annotation.write.style.HeadRowHeight;
|
||||
@@ -72,9 +73,11 @@ public class AccidentRecordExcel implements Serializable {
|
||||
private String accidentResponsibility;
|
||||
|
||||
@ExcelProperty("直接经济损失")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal directEconomicLoss;
|
||||
|
||||
@ExcelProperty("保险理赔金额")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal insuranceClaimAmount;
|
||||
|
||||
@ExcelProperty("事故原因及损坏情况")
|
||||
|
||||
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnore;
|
||||
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.ContentRowHeight;
|
||||
import cn.idev.excel.annotation.write.style.HeadRowHeight;
|
||||
@@ -75,6 +76,7 @@ public class MaintenancePlanExcel implements Serializable {
|
||||
private String maintenanceItem;
|
||||
|
||||
@ExcelProperty("费用")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal cost;
|
||||
|
||||
@ExcelProperty("店名")
|
||||
|
||||
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnore;
|
||||
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.ContentRowHeight;
|
||||
import cn.idev.excel.annotation.write.style.HeadRowHeight;
|
||||
@@ -72,6 +73,7 @@ public class MaintenanceRecordExcel implements Serializable {
|
||||
private String replacedPart;
|
||||
|
||||
@ExcelProperty("费用")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal cost;
|
||||
|
||||
@ExcelProperty("维修单位")
|
||||
@@ -87,6 +89,7 @@ public class MaintenanceRecordExcel implements Serializable {
|
||||
private LocalDateTime factoryTime;
|
||||
|
||||
@ExcelProperty("里程/航程数")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal mileage;
|
||||
|
||||
@ExcelProperty("里程单位")
|
||||
|
||||
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnore;
|
||||
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.ContentRowHeight;
|
||||
import cn.idev.excel.annotation.write.style.HeadRowHeight;
|
||||
@@ -59,15 +60,19 @@ public class MileageRecordExcel implements Serializable {
|
||||
private String vehicleNo;
|
||||
|
||||
@ExcelProperty("上月统计里程")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal previousMonthMileage;
|
||||
|
||||
@ExcelProperty("本月统计里程")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal currentMonthMileage;
|
||||
|
||||
@ExcelProperty("本月行驶里程")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal monthlyMileage;
|
||||
|
||||
@ExcelProperty("累计行驶里程")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal totalMileage;
|
||||
|
||||
@ExcelProperty("里程单位")
|
||||
|
||||
@@ -27,6 +27,7 @@ package org.springblade.transport.excel;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnore;
|
||||
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.ContentRowHeight;
|
||||
import cn.idev.excel.annotation.write.style.HeadRowHeight;
|
||||
@@ -69,6 +70,7 @@ public class TireReplacementRecordExcel implements Serializable {
|
||||
private Integer tireQuantity;
|
||||
|
||||
@ExcelProperty("换胎费用")
|
||||
@NumberFormat("0.00")
|
||||
private BigDecimal replacementCost;
|
||||
|
||||
@ExcelProperty("换胎说明")
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<bind name="etcCardNoLike" value="'%' + etcRecord.etcCardNo + '%'"/>
|
||||
AND etc_card_no LIKE #{etcCardNoLike}
|
||||
</if>
|
||||
ORDER BY exit_time DESC, create_time DESC
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
<if test="oilElectricRecord.createTimeEnd != null and oilElectricRecord.createTimeEnd != ''">
|
||||
AND create_time <= #{oilElectricRecord.createTimeEnd}
|
||||
</if>
|
||||
ORDER BY transaction_time DESC, create_time DESC
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<if test="otherExpenseRecord.createTimeEnd != null and otherExpenseRecord.createTimeEnd != ''">
|
||||
AND create_time <= #{otherExpenseRecord.createTimeEnd}
|
||||
</if>
|
||||
ORDER BY expense_date DESC, create_time DESC
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -40,6 +40,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@@ -96,7 +97,8 @@ public class MaintenanceRecordServiceImpl extends BaseServiceImpl<MaintenanceRec
|
||||
public List<MaintenanceRecordExcel> exportMaintenanceRecord(Wrapper<MaintenanceRecord> queryWrapper) {
|
||||
return list(queryWrapper).stream().map(maintenanceRecord -> {
|
||||
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())) {
|
||||
excel.setMileageUnit(defaultMileageUnit(maintenanceRecord.getVehicleType()));
|
||||
}
|
||||
@@ -167,6 +169,10 @@ public class MaintenanceRecordServiceImpl extends BaseServiceImpl<MaintenanceRec
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
private BigDecimal scaleAmount(BigDecimal value) {
|
||||
return Func.isEmpty(value) ? null : value.setScale(2, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
private String defaultMileageUnit(String vehicleType) {
|
||||
return "船舶".equals(vehicleType) ? "海里" : "公里";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user