fix bug
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.springblade.auth.config;
|
package org.springblade.auth.config;
|
||||||
|
|
||||||
|
import org.springblade.auth.granter.IamAwareTokenGranterFactory;
|
||||||
import org.springblade.auth.handler.BladeAuthorizationHandler;
|
import org.springblade.auth.handler.BladeAuthorizationHandler;
|
||||||
import org.springblade.auth.handler.BladeLockHandler;
|
import org.springblade.auth.handler.BladeLockHandler;
|
||||||
import org.springblade.auth.handler.BladeLogHandler;
|
import org.springblade.auth.handler.BladeLogHandler;
|
||||||
@@ -37,6 +38,9 @@ import org.springblade.core.jwt.props.JwtProperties;
|
|||||||
import org.springblade.core.launch.props.BladeProperties;
|
import org.springblade.core.launch.props.BladeProperties;
|
||||||
import org.springblade.core.launch.server.ServerInfo;
|
import org.springblade.core.launch.server.ServerInfo;
|
||||||
import org.springblade.core.oauth2.config.OAuth2AutoConfiguration;
|
import org.springblade.core.oauth2.config.OAuth2AutoConfiguration;
|
||||||
|
import org.springblade.core.oauth2.granter.TokenGranter;
|
||||||
|
import org.springblade.core.oauth2.granter.TokenGranterEnhancer;
|
||||||
|
import org.springblade.core.oauth2.granter.TokenGranterFactory;
|
||||||
import org.springblade.core.oauth2.handler.AuthorizationHandler;
|
import org.springblade.core.oauth2.handler.AuthorizationHandler;
|
||||||
import org.springblade.core.oauth2.handler.PasswordHandler;
|
import org.springblade.core.oauth2.handler.PasswordHandler;
|
||||||
import org.springblade.core.oauth2.handler.TokenHandler;
|
import org.springblade.core.oauth2.handler.TokenHandler;
|
||||||
@@ -51,8 +55,11 @@ import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
|||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BladeAuthConfiguration
|
* BladeAuthConfiguration
|
||||||
*
|
*
|
||||||
@@ -101,4 +108,12 @@ public class BladeAuthConfiguration {
|
|||||||
return new BladeUserDetailService(userClient);
|
return new BladeUserDetailService(userClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Primary
|
||||||
|
@Bean("iamAwareTokenGranterFactory")
|
||||||
|
public TokenGranterFactory tokenGranterFactory(List<TokenGranter> tokenGranters,
|
||||||
|
List<TokenGranterEnhancer> tokenGranterEnhancers,
|
||||||
|
OAuth2Properties properties) {
|
||||||
|
return new IamAwareTokenGranterFactory(tokenGranters, tokenGranterEnhancers, properties);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OAuth2User user(OAuth2Request request) {
|
public OAuth2User user(OAuth2Request request) {
|
||||||
if (!isIamRequest(request)) {
|
if (!isIamRequest(request, true)) {
|
||||||
throw new UserInvalidException(OAuth2TokenConstant.TOKEN_NOT_CORRECT);
|
throw new UserInvalidException(OAuth2TokenConstant.TOKEN_NOT_CORRECT);
|
||||||
}
|
}
|
||||||
validateRequest(request);
|
validateRequest(request);
|
||||||
@@ -192,12 +192,16 @@ public class IamSsoTokenGranter extends AuthorizationCodeGranter {
|
|||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isIamRequest(OAuth2Request request) {
|
public boolean supports(OAuth2Request request) {
|
||||||
|
return isIamRequest(request, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isIamRequest(OAuth2Request request, boolean logMiss) {
|
||||||
String redirectUri = normalizeRedirectUri(request.getRedirectUri());
|
String redirectUri = normalizeRedirectUri(request.getRedirectUri());
|
||||||
boolean iamRequest = StringUtil.isNotBlank(properties.getRedirectUri())
|
boolean iamRequest = StringUtil.isNotBlank(properties.getRedirectUri())
|
||||||
&& StringUtil.isNotBlank(request.getCode())
|
&& StringUtil.isNotBlank(request.getCode())
|
||||||
&& StringUtil.equals(properties.getRedirectUri(), redirectUri);
|
&& StringUtil.equals(properties.getRedirectUri(), redirectUri);
|
||||||
if (!iamRequest) {
|
if (!iamRequest && logMiss) {
|
||||||
log.info("IAM统一身份认证请求未命中,configRedirectUri={}, requestRedirectUri={}, normalizedRedirectUri={}, code={}",
|
log.info("IAM统一身份认证请求未命中,configRedirectUri={}, requestRedirectUri={}, normalizedRedirectUri={}, code={}",
|
||||||
properties.getRedirectUri(), request.getRedirectUri(), redirectUri, request.getCode());
|
properties.getRedirectUri(), request.getRedirectUri(), redirectUri, request.getCode());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,6 +74,10 @@ import java.util.Map;
|
|||||||
@Tag(name = "空港机场主数据", description = "空港机场主数据")
|
@Tag(name = "空港机场主数据", description = "空港机场主数据")
|
||||||
public class AirportMasterController extends BladeController {
|
public class AirportMasterController extends BladeController {
|
||||||
|
|
||||||
|
private static final int DEFAULT_CURRENT = 1;
|
||||||
|
private static final int DEFAULT_SIZE = 10;
|
||||||
|
private static final int MAX_SIZE = 100;
|
||||||
|
|
||||||
private final IAirportMasterService airportMasterService;
|
private final IAirportMasterService airportMasterService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,7 +87,13 @@ public class AirportMasterController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 1)
|
@ApiOperationSupport(order = 1)
|
||||||
@Operation(summary = "详情", description = "传入airportMaster")
|
@Operation(summary = "详情", description = "传入airportMaster")
|
||||||
public R<AirportMasterVO> detail(AirportMaster airportMaster) {
|
public R<AirportMasterVO> detail(AirportMaster airportMaster) {
|
||||||
AirportMaster detail = airportMasterService.getOne(Condition.getQueryWrapper(airportMaster));
|
if (Func.isEmpty(airportMaster.getId())) {
|
||||||
|
return R.fail("主键不能为空");
|
||||||
|
}
|
||||||
|
AirportMaster detail = airportMasterService.getById(airportMaster.getId());
|
||||||
|
if (Func.isEmpty(detail)) {
|
||||||
|
return R.fail("空港机场不存在");
|
||||||
|
}
|
||||||
return R.data(AirportMasterWrapper.build().entityVO(detail));
|
return R.data(AirportMasterWrapper.build().entityVO(detail));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +104,7 @@ public class AirportMasterController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 2)
|
@ApiOperationSupport(order = 2)
|
||||||
@Operation(summary = "分页", description = "传入airportMaster")
|
@Operation(summary = "分页", description = "传入airportMaster")
|
||||||
public R<IPage<AirportMasterVO>> list(AirportMasterVO airportMaster, Query query) {
|
public R<IPage<AirportMasterVO>> list(AirportMasterVO airportMaster, Query query) {
|
||||||
IPage<AirportMasterVO> pages = airportMasterService.selectAirportMasterPage(Condition.getPage(query), airportMaster);
|
IPage<AirportMasterVO> pages = airportMasterService.selectAirportMasterPage(Condition.getPage(normalizeQuery(query)), airportMaster);
|
||||||
return R.data(pages);
|
return R.data(pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,6 +125,9 @@ public class AirportMasterController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 4)
|
@ApiOperationSupport(order = 4)
|
||||||
@Operation(summary = "逻辑删除", description = "传入ids")
|
@Operation(summary = "逻辑删除", description = "传入ids")
|
||||||
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
|
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
|
||||||
|
if (Func.isEmpty(ids)) {
|
||||||
|
return R.fail("主键不能为空");
|
||||||
|
}
|
||||||
return R.status(airportMasterService.deleteLogic(Func.toLongList(ids)));
|
return R.status(airportMasterService.deleteLogic(Func.toLongList(ids)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,6 +149,13 @@ public class AirportMasterController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 6)
|
@ApiOperationSupport(order = 6)
|
||||||
@Operation(summary = "导入空港机场主数据", description = "传入excel")
|
@Operation(summary = "导入空港机场主数据", description = "传入excel")
|
||||||
public R importAirportMaster(MultipartFile file) {
|
public R importAirportMaster(MultipartFile file) {
|
||||||
|
if (file == null || file.isEmpty()) {
|
||||||
|
return R.fail("上传文件不能为空");
|
||||||
|
}
|
||||||
|
String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase();
|
||||||
|
if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) {
|
||||||
|
return R.fail("请上传 .xls,.xlsx 标准格式文件");
|
||||||
|
}
|
||||||
AirportMasterImporter airportMasterImporter = new AirportMasterImporter(airportMasterService);
|
AirportMasterImporter airportMasterImporter = new AirportMasterImporter(airportMasterService);
|
||||||
ExcelUtil.save(file, airportMasterImporter, AirportMasterExcel.class);
|
ExcelUtil.save(file, airportMasterImporter, AirportMasterExcel.class);
|
||||||
return R.success("操作成功");
|
return R.success("操作成功");
|
||||||
@@ -149,6 +169,9 @@ public class AirportMasterController extends BladeController {
|
|||||||
@Operation(summary = "导出空港机场主数据")
|
@Operation(summary = "导出空港机场主数据")
|
||||||
public void exportAirportMaster(@Parameter(hidden = true) @RequestParam Map<String, Object> airportMaster, HttpServletResponse response) {
|
public void exportAirportMaster(@Parameter(hidden = true) @RequestParam Map<String, Object> airportMaster, HttpServletResponse response) {
|
||||||
Object ids = airportMaster.remove("ids");
|
Object ids = airportMaster.remove("ids");
|
||||||
|
airportMaster.remove("Blade-Auth");
|
||||||
|
airportMaster.remove("Authorization");
|
||||||
|
airportMaster.remove("access_token");
|
||||||
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()));
|
||||||
@@ -168,4 +191,20 @@ public class AirportMasterController extends BladeController {
|
|||||||
ExcelUtil.export(response, "空港机场主数据模板", "空港机场主数据表", list, AirportMasterExcel.class);
|
ExcelUtil.export(response, "空港机场主数据模板", "空港机场主数据表", list, AirportMasterExcel.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Query normalizeQuery(Query query) {
|
||||||
|
if (query == null) {
|
||||||
|
query = new Query();
|
||||||
|
}
|
||||||
|
if (query.getCurrent() == null || query.getCurrent() < DEFAULT_CURRENT) {
|
||||||
|
query.setCurrent(DEFAULT_CURRENT);
|
||||||
|
}
|
||||||
|
if (query.getSize() == null || query.getSize() <= 0) {
|
||||||
|
query.setSize(DEFAULT_SIZE);
|
||||||
|
}
|
||||||
|
if (query.getSize() > MAX_SIZE) {
|
||||||
|
query.setSize(MAX_SIZE);
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,6 +74,11 @@ import java.util.Map;
|
|||||||
@Tag(name = "港口码头主数据", description = "港口码头主数据")
|
@Tag(name = "港口码头主数据", description = "港口码头主数据")
|
||||||
public class PortTerminalController extends BladeController {
|
public class PortTerminalController extends BladeController {
|
||||||
|
|
||||||
|
private static final int DEFAULT_CURRENT = 1;
|
||||||
|
private static final int DEFAULT_SIZE = 10;
|
||||||
|
private static final int MAX_SIZE = 100;
|
||||||
|
private static final String SOURCE_INITIAL = "初始化导入";
|
||||||
|
|
||||||
private final IPortTerminalService portTerminalService;
|
private final IPortTerminalService portTerminalService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,7 +88,13 @@ public class PortTerminalController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 1)
|
@ApiOperationSupport(order = 1)
|
||||||
@Operation(summary = "详情", description = "传入portTerminal")
|
@Operation(summary = "详情", description = "传入portTerminal")
|
||||||
public R<PortTerminalVO> detail(PortTerminal portTerminal) {
|
public R<PortTerminalVO> detail(PortTerminal portTerminal) {
|
||||||
PortTerminal detail = portTerminalService.getOne(Condition.getQueryWrapper(portTerminal));
|
if (Func.isEmpty(portTerminal.getId())) {
|
||||||
|
return R.fail("主键不能为空");
|
||||||
|
}
|
||||||
|
PortTerminal detail = portTerminalService.getById(portTerminal.getId());
|
||||||
|
if (Func.isEmpty(detail)) {
|
||||||
|
return R.fail("港口码头不存在");
|
||||||
|
}
|
||||||
return R.data(PortTerminalWrapper.build().entityVO(detail));
|
return R.data(PortTerminalWrapper.build().entityVO(detail));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +105,7 @@ public class PortTerminalController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 2)
|
@ApiOperationSupport(order = 2)
|
||||||
@Operation(summary = "分页", description = "传入portTerminal")
|
@Operation(summary = "分页", description = "传入portTerminal")
|
||||||
public R<IPage<PortTerminalVO>> list(PortTerminalVO portTerminal, Query query) {
|
public R<IPage<PortTerminalVO>> list(PortTerminalVO portTerminal, Query query) {
|
||||||
IPage<PortTerminalVO> pages = portTerminalService.selectPortTerminalPage(Condition.getPage(query), portTerminal);
|
IPage<PortTerminalVO> pages = portTerminalService.selectPortTerminalPage(Condition.getPage(normalizeQuery(query)), portTerminal);
|
||||||
return R.data(pages);
|
return R.data(pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,6 +126,9 @@ public class PortTerminalController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 4)
|
@ApiOperationSupport(order = 4)
|
||||||
@Operation(summary = "逻辑删除", description = "传入ids")
|
@Operation(summary = "逻辑删除", description = "传入ids")
|
||||||
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
|
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
|
||||||
|
if (Func.isEmpty(ids)) {
|
||||||
|
return R.fail("主键不能为空");
|
||||||
|
}
|
||||||
return R.status(portTerminalService.deleteLogic(Func.toLongList(ids)));
|
return R.status(portTerminalService.deleteLogic(Func.toLongList(ids)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,6 +160,13 @@ public class PortTerminalController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 7)
|
@ApiOperationSupport(order = 7)
|
||||||
@Operation(summary = "导入港口码头主数据", description = "传入excel")
|
@Operation(summary = "导入港口码头主数据", description = "传入excel")
|
||||||
public R importPortTerminal(MultipartFile file) {
|
public R importPortTerminal(MultipartFile file) {
|
||||||
|
if (file == null || file.isEmpty()) {
|
||||||
|
return R.fail("上传文件不能为空");
|
||||||
|
}
|
||||||
|
String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase();
|
||||||
|
if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) {
|
||||||
|
return R.fail("请上传 .xls,.xlsx 标准格式文件");
|
||||||
|
}
|
||||||
PortTerminalImporter portTerminalImporter = new PortTerminalImporter(portTerminalService);
|
PortTerminalImporter portTerminalImporter = new PortTerminalImporter(portTerminalService);
|
||||||
ExcelUtil.save(file, portTerminalImporter, PortTerminalExcel.class);
|
ExcelUtil.save(file, portTerminalImporter, PortTerminalExcel.class);
|
||||||
return R.success("操作成功");
|
return R.success("操作成功");
|
||||||
@@ -159,7 +180,12 @@ public class PortTerminalController extends BladeController {
|
|||||||
@Operation(summary = "导出港口码头主数据")
|
@Operation(summary = "导出港口码头主数据")
|
||||||
public void exportPortTerminal(@Parameter(hidden = true) @RequestParam Map<String, Object> portTerminal, HttpServletResponse response) {
|
public void exportPortTerminal(@Parameter(hidden = true) @RequestParam Map<String, Object> portTerminal, HttpServletResponse response) {
|
||||||
Object ids = portTerminal.remove("ids");
|
Object ids = portTerminal.remove("ids");
|
||||||
|
Object dataSource = portTerminal.remove("dataSource");
|
||||||
|
portTerminal.remove("Blade-Auth");
|
||||||
|
portTerminal.remove("Authorization");
|
||||||
|
portTerminal.remove("access_token");
|
||||||
QueryWrapper<PortTerminal> queryWrapper = Condition.getQueryWrapper(portTerminal, PortTerminal.class);
|
QueryWrapper<PortTerminal> queryWrapper = Condition.getQueryWrapper(portTerminal, PortTerminal.class);
|
||||||
|
applyDataSourceCondition(queryWrapper, dataSource);
|
||||||
if (Func.isNotEmpty(ids)) {
|
if (Func.isNotEmpty(ids)) {
|
||||||
queryWrapper.lambda().in(PortTerminal::getId, Func.toLongList(ids.toString()));
|
queryWrapper.lambda().in(PortTerminal::getId, Func.toLongList(ids.toString()));
|
||||||
}
|
}
|
||||||
@@ -178,4 +204,32 @@ public class PortTerminalController extends BladeController {
|
|||||||
ExcelUtil.export(response, "港口码头主数据模板", "港口码头主数据表", list, PortTerminalExcel.class);
|
ExcelUtil.export(response, "港口码头主数据模板", "港口码头主数据表", list, PortTerminalExcel.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Query normalizeQuery(Query query) {
|
||||||
|
if (query == null) {
|
||||||
|
query = new Query();
|
||||||
|
}
|
||||||
|
if (query.getCurrent() == null || query.getCurrent() < DEFAULT_CURRENT) {
|
||||||
|
query.setCurrent(DEFAULT_CURRENT);
|
||||||
|
}
|
||||||
|
if (query.getSize() == null || query.getSize() <= 0) {
|
||||||
|
query.setSize(DEFAULT_SIZE);
|
||||||
|
}
|
||||||
|
if (query.getSize() > MAX_SIZE) {
|
||||||
|
query.setSize(MAX_SIZE);
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyDataSourceCondition(QueryWrapper<PortTerminal> queryWrapper, Object dataSource) {
|
||||||
|
String value = Func.toStrWithEmpty(dataSource, "");
|
||||||
|
if (Func.isEmpty(value)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (SOURCE_INITIAL.equals(value)) {
|
||||||
|
queryWrapper.in("data_source", SOURCE_INITIAL, "初始导入");
|
||||||
|
} else {
|
||||||
|
queryWrapper.eq("data_source", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,6 +74,13 @@ import java.util.Map;
|
|||||||
@Tag(name = "铁路车站主数据", description = "铁路车站主数据")
|
@Tag(name = "铁路车站主数据", description = "铁路车站主数据")
|
||||||
public class RailwayStationController extends BladeController {
|
public class RailwayStationController extends BladeController {
|
||||||
|
|
||||||
|
private static final int DEFAULT_CURRENT = 1;
|
||||||
|
private static final int DEFAULT_SIZE = 10;
|
||||||
|
private static final int MAX_SIZE = 100;
|
||||||
|
private static final String SOURCE_INITIAL = "初始化导入";
|
||||||
|
private static final String SOURCE_BATCH = "批量";
|
||||||
|
private static final String SOURCE_MANUAL = "手动";
|
||||||
|
|
||||||
private final IRailwayStationService railwayStationService;
|
private final IRailwayStationService railwayStationService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,7 +90,13 @@ public class RailwayStationController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 1)
|
@ApiOperationSupport(order = 1)
|
||||||
@Operation(summary = "详情", description = "传入railwayStation")
|
@Operation(summary = "详情", description = "传入railwayStation")
|
||||||
public R<RailwayStationVO> detail(RailwayStation railwayStation) {
|
public R<RailwayStationVO> detail(RailwayStation railwayStation) {
|
||||||
RailwayStation detail = railwayStationService.getOne(Condition.getQueryWrapper(railwayStation));
|
if (Func.isEmpty(railwayStation.getId())) {
|
||||||
|
return R.fail("主键不能为空");
|
||||||
|
}
|
||||||
|
RailwayStation detail = railwayStationService.getById(railwayStation.getId());
|
||||||
|
if (Func.isEmpty(detail)) {
|
||||||
|
return R.fail("铁路车站不存在");
|
||||||
|
}
|
||||||
return R.data(RailwayStationWrapper.build().entityVO(detail));
|
return R.data(RailwayStationWrapper.build().entityVO(detail));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +107,7 @@ public class RailwayStationController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 2)
|
@ApiOperationSupport(order = 2)
|
||||||
@Operation(summary = "分页", description = "传入railwayStation")
|
@Operation(summary = "分页", description = "传入railwayStation")
|
||||||
public R<IPage<RailwayStationVO>> list(RailwayStationVO railwayStation, Query query) {
|
public R<IPage<RailwayStationVO>> list(RailwayStationVO railwayStation, Query query) {
|
||||||
IPage<RailwayStationVO> pages = railwayStationService.selectRailwayStationPage(Condition.getPage(query), railwayStation);
|
IPage<RailwayStationVO> pages = railwayStationService.selectRailwayStationPage(Condition.getPage(normalizeQuery(query)), railwayStation);
|
||||||
return R.data(pages);
|
return R.data(pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,6 +128,9 @@ public class RailwayStationController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 4)
|
@ApiOperationSupport(order = 4)
|
||||||
@Operation(summary = "逻辑删除", description = "传入ids")
|
@Operation(summary = "逻辑删除", description = "传入ids")
|
||||||
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
|
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
|
||||||
|
if (Func.isEmpty(ids)) {
|
||||||
|
return R.fail("主键不能为空");
|
||||||
|
}
|
||||||
return R.status(railwayStationService.deleteLogic(Func.toLongList(ids)));
|
return R.status(railwayStationService.deleteLogic(Func.toLongList(ids)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,6 +152,13 @@ public class RailwayStationController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 6)
|
@ApiOperationSupport(order = 6)
|
||||||
@Operation(summary = "导入铁路车站主数据", description = "传入excel")
|
@Operation(summary = "导入铁路车站主数据", description = "传入excel")
|
||||||
public R importRailwayStation(MultipartFile file) {
|
public R importRailwayStation(MultipartFile file) {
|
||||||
|
if (file == null || file.isEmpty()) {
|
||||||
|
return R.fail("上传文件不能为空");
|
||||||
|
}
|
||||||
|
String fileName = Func.toStrWithEmpty(file.getOriginalFilename(), "").toLowerCase();
|
||||||
|
if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) {
|
||||||
|
return R.fail("请上传 .xls,.xlsx 标准格式文件");
|
||||||
|
}
|
||||||
RailwayStationImporter railwayStationImporter = new RailwayStationImporter(railwayStationService);
|
RailwayStationImporter railwayStationImporter = new RailwayStationImporter(railwayStationService);
|
||||||
ExcelUtil.save(file, railwayStationImporter, RailwayStationExcel.class);
|
ExcelUtil.save(file, railwayStationImporter, RailwayStationExcel.class);
|
||||||
return R.success("操作成功");
|
return R.success("操作成功");
|
||||||
@@ -149,7 +172,12 @@ public class RailwayStationController extends BladeController {
|
|||||||
@Operation(summary = "导出铁路车站主数据")
|
@Operation(summary = "导出铁路车站主数据")
|
||||||
public void exportRailwayStation(@Parameter(hidden = true) @RequestParam Map<String, Object> railwayStation, HttpServletResponse response) {
|
public void exportRailwayStation(@Parameter(hidden = true) @RequestParam Map<String, Object> railwayStation, HttpServletResponse response) {
|
||||||
Object ids = railwayStation.remove("ids");
|
Object ids = railwayStation.remove("ids");
|
||||||
|
Object dataSource = railwayStation.remove("dataSource");
|
||||||
|
railwayStation.remove("Blade-Auth");
|
||||||
|
railwayStation.remove("Authorization");
|
||||||
|
railwayStation.remove("access_token");
|
||||||
QueryWrapper<RailwayStation> queryWrapper = Condition.getQueryWrapper(railwayStation, RailwayStation.class);
|
QueryWrapper<RailwayStation> queryWrapper = Condition.getQueryWrapper(railwayStation, RailwayStation.class);
|
||||||
|
applyDataSourceCondition(queryWrapper, dataSource);
|
||||||
if (Func.isNotEmpty(ids)) {
|
if (Func.isNotEmpty(ids)) {
|
||||||
queryWrapper.lambda().in(RailwayStation::getId, Func.toLongList(ids.toString()));
|
queryWrapper.lambda().in(RailwayStation::getId, Func.toLongList(ids.toString()));
|
||||||
}
|
}
|
||||||
@@ -168,4 +196,36 @@ public class RailwayStationController extends BladeController {
|
|||||||
ExcelUtil.export(response, "铁路车站主数据模板", "铁路车站主数据表", list, RailwayStationExcel.class);
|
ExcelUtil.export(response, "铁路车站主数据模板", "铁路车站主数据表", list, RailwayStationExcel.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Query normalizeQuery(Query query) {
|
||||||
|
if (query == null) {
|
||||||
|
query = new Query();
|
||||||
|
}
|
||||||
|
if (query.getCurrent() == null || query.getCurrent() < DEFAULT_CURRENT) {
|
||||||
|
query.setCurrent(DEFAULT_CURRENT);
|
||||||
|
}
|
||||||
|
if (query.getSize() == null || query.getSize() <= 0) {
|
||||||
|
query.setSize(DEFAULT_SIZE);
|
||||||
|
}
|
||||||
|
if (query.getSize() > MAX_SIZE) {
|
||||||
|
query.setSize(MAX_SIZE);
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void applyDataSourceCondition(QueryWrapper<RailwayStation> queryWrapper, Object dataSource) {
|
||||||
|
String value = Func.toStrWithEmpty(dataSource, "");
|
||||||
|
if (Func.isEmpty(value)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (SOURCE_INITIAL.equals(value)) {
|
||||||
|
queryWrapper.in("data_source", SOURCE_INITIAL, "初始导入");
|
||||||
|
} else if (SOURCE_BATCH.equals(value)) {
|
||||||
|
queryWrapper.in("data_source", SOURCE_BATCH, "批量导入");
|
||||||
|
} else if (SOURCE_MANUAL.equals(value)) {
|
||||||
|
queryWrapper.in("data_source", SOURCE_MANUAL, "手动录入", "手工导入");
|
||||||
|
} else {
|
||||||
|
queryWrapper.eq("data_source", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class AirportMasterExcel implements Serializable {
|
|||||||
@ExcelProperty("数据来源")
|
@ExcelProperty("数据来源")
|
||||||
private String dataSource;
|
private String dataSource;
|
||||||
|
|
||||||
@ExcelProperty("状态")
|
@ExcelProperty("启停状态")
|
||||||
private String statusName;
|
private String statusName;
|
||||||
|
|
||||||
@ExcelProperty("备注")
|
@ExcelProperty("备注")
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class PortTerminalExcel implements Serializable {
|
|||||||
@ExcelProperty("数据来源")
|
@ExcelProperty("数据来源")
|
||||||
private String dataSource;
|
private String dataSource;
|
||||||
|
|
||||||
@ExcelProperty("状态")
|
@ExcelProperty("启停状态")
|
||||||
private String statusName;
|
private String statusName;
|
||||||
|
|
||||||
@ExcelProperty("备注")
|
@ExcelProperty("备注")
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class RailwayStationExcel implements Serializable {
|
|||||||
@ExcelProperty("数据来源")
|
@ExcelProperty("数据来源")
|
||||||
private String dataSource;
|
private String dataSource;
|
||||||
|
|
||||||
@ExcelProperty("状态")
|
@ExcelProperty("启停状态")
|
||||||
private String statusName;
|
private String statusName;
|
||||||
|
|
||||||
@ExcelProperty("备注")
|
@ExcelProperty("备注")
|
||||||
|
|||||||
@@ -28,7 +28,27 @@
|
|||||||
|
|
||||||
<select id="selectAirportMasterPage" resultMap="airportMasterResultMap">
|
<select id="selectAirportMasterPage" resultMap="airportMasterResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
*
|
id,
|
||||||
|
create_user,
|
||||||
|
create_dept,
|
||||||
|
create_time,
|
||||||
|
update_user,
|
||||||
|
update_time,
|
||||||
|
status,
|
||||||
|
is_deleted,
|
||||||
|
code,
|
||||||
|
iata_code,
|
||||||
|
icao_code,
|
||||||
|
name,
|
||||||
|
short_name,
|
||||||
|
province_code,
|
||||||
|
province_name,
|
||||||
|
city_code,
|
||||||
|
city_name,
|
||||||
|
longitude,
|
||||||
|
latitude,
|
||||||
|
CASE WHEN data_source = '手工导入' THEN '手动录入' ELSE data_source END AS data_source,
|
||||||
|
remark
|
||||||
FROM
|
FROM
|
||||||
blade_airport_master
|
blade_airport_master
|
||||||
WHERE
|
WHERE
|
||||||
@@ -41,8 +61,21 @@
|
|||||||
<bind name="nameLike" value="'%' + airportMaster.name + '%'"/>
|
<bind name="nameLike" value="'%' + airportMaster.name + '%'"/>
|
||||||
AND name LIKE #{nameLike}
|
AND name LIKE #{nameLike}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="airportMaster.iataCode != null and airportMaster.iataCode != ''">
|
||||||
|
AND iata_code = #{airportMaster.iataCode}
|
||||||
|
</if>
|
||||||
|
<if test="airportMaster.icaoCode != null and airportMaster.icaoCode != ''">
|
||||||
|
AND icao_code = #{airportMaster.icaoCode}
|
||||||
|
</if>
|
||||||
<if test="airportMaster.dataSource != null and airportMaster.dataSource != ''">
|
<if test="airportMaster.dataSource != null and airportMaster.dataSource != ''">
|
||||||
|
<choose>
|
||||||
|
<when test="airportMaster.dataSource == '手动录入'">
|
||||||
|
AND data_source IN ('手动录入', '手工导入')
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
AND data_source = #{airportMaster.dataSource}
|
AND data_source = #{airportMaster.dataSource}
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
</if>
|
</if>
|
||||||
<if test="airportMaster.status != null">
|
<if test="airportMaster.status != null">
|
||||||
AND status = #{airportMaster.status}
|
AND status = #{airportMaster.status}
|
||||||
|
|||||||
@@ -27,7 +27,26 @@
|
|||||||
|
|
||||||
<select id="selectPortTerminalPage" resultMap="portTerminalResultMap">
|
<select id="selectPortTerminalPage" resultMap="portTerminalResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
*
|
id,
|
||||||
|
create_user,
|
||||||
|
create_dept,
|
||||||
|
create_time,
|
||||||
|
update_user,
|
||||||
|
update_time,
|
||||||
|
status,
|
||||||
|
is_deleted,
|
||||||
|
code,
|
||||||
|
name,
|
||||||
|
category,
|
||||||
|
parent_id,
|
||||||
|
parent_code,
|
||||||
|
parent_name,
|
||||||
|
country,
|
||||||
|
city,
|
||||||
|
CASE WHEN longitude BETWEEN -180 AND 180 THEN longitude ELSE NULL END AS longitude,
|
||||||
|
CASE WHEN latitude BETWEEN -90 AND 90 THEN latitude ELSE NULL END AS latitude,
|
||||||
|
CASE WHEN data_source = '初始导入' THEN '初始化导入' ELSE data_source END AS data_source,
|
||||||
|
remark
|
||||||
FROM
|
FROM
|
||||||
blade_port_terminal
|
blade_port_terminal
|
||||||
WHERE
|
WHERE
|
||||||
@@ -44,7 +63,14 @@
|
|||||||
AND category = #{portTerminal.category}
|
AND category = #{portTerminal.category}
|
||||||
</if>
|
</if>
|
||||||
<if test="portTerminal.dataSource != null and portTerminal.dataSource != ''">
|
<if test="portTerminal.dataSource != null and portTerminal.dataSource != ''">
|
||||||
|
<choose>
|
||||||
|
<when test="portTerminal.dataSource == '初始化导入'">
|
||||||
|
AND data_source IN ('初始化导入', '初始导入')
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
AND data_source = #{portTerminal.dataSource}
|
AND data_source = #{portTerminal.dataSource}
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
</if>
|
</if>
|
||||||
<if test="portTerminal.city != null and portTerminal.city != ''">
|
<if test="portTerminal.city != null and portTerminal.city != ''">
|
||||||
AND city = #{portTerminal.city}
|
AND city = #{portTerminal.city}
|
||||||
|
|||||||
@@ -28,7 +28,32 @@
|
|||||||
|
|
||||||
<select id="selectRailwayStationPage" resultMap="railwayStationResultMap">
|
<select id="selectRailwayStationPage" resultMap="railwayStationResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
*
|
id,
|
||||||
|
create_user,
|
||||||
|
create_dept,
|
||||||
|
create_time,
|
||||||
|
update_user,
|
||||||
|
update_time,
|
||||||
|
status,
|
||||||
|
is_deleted,
|
||||||
|
code,
|
||||||
|
tmis_code,
|
||||||
|
telegraph_code,
|
||||||
|
name,
|
||||||
|
railway_line,
|
||||||
|
province_code,
|
||||||
|
province_name,
|
||||||
|
city_code,
|
||||||
|
city_name,
|
||||||
|
longitude,
|
||||||
|
latitude,
|
||||||
|
CASE
|
||||||
|
WHEN data_source = '初始导入' THEN '初始化导入'
|
||||||
|
WHEN data_source = '批量导入' THEN '批量'
|
||||||
|
WHEN data_source IN ('手工导入', '手动录入') THEN '手动'
|
||||||
|
ELSE data_source
|
||||||
|
END AS data_source,
|
||||||
|
remark
|
||||||
FROM
|
FROM
|
||||||
blade_railway_station
|
blade_railway_station
|
||||||
WHERE
|
WHERE
|
||||||
@@ -41,8 +66,27 @@
|
|||||||
<bind name="nameLike" value="'%' + railwayStation.name + '%'"/>
|
<bind name="nameLike" value="'%' + railwayStation.name + '%'"/>
|
||||||
AND name LIKE #{nameLike}
|
AND name LIKE #{nameLike}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="railwayStation.tmisCode != null and railwayStation.tmisCode != ''">
|
||||||
|
AND tmis_code = #{railwayStation.tmisCode}
|
||||||
|
</if>
|
||||||
|
<if test="railwayStation.telegraphCode != null and railwayStation.telegraphCode != ''">
|
||||||
|
AND telegraph_code = #{railwayStation.telegraphCode}
|
||||||
|
</if>
|
||||||
<if test="railwayStation.dataSource != null and railwayStation.dataSource != ''">
|
<if test="railwayStation.dataSource != null and railwayStation.dataSource != ''">
|
||||||
|
<choose>
|
||||||
|
<when test="railwayStation.dataSource == '初始化导入'">
|
||||||
|
AND data_source IN ('初始化导入', '初始导入')
|
||||||
|
</when>
|
||||||
|
<when test="railwayStation.dataSource == '批量'">
|
||||||
|
AND data_source IN ('批量', '批量导入')
|
||||||
|
</when>
|
||||||
|
<when test="railwayStation.dataSource == '手动'">
|
||||||
|
AND data_source IN ('手动', '手动录入', '手工导入')
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
AND data_source = #{railwayStation.dataSource}
|
AND data_source = #{railwayStation.dataSource}
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
</if>
|
</if>
|
||||||
<if test="railwayStation.status != null">
|
<if test="railwayStation.status != null">
|
||||||
AND status = #{railwayStation.status}
|
AND status = #{railwayStation.status}
|
||||||
|
|||||||
@@ -61,10 +61,16 @@ import java.util.regex.Pattern;
|
|||||||
public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMapper, AirportMaster> implements IAirportMasterService {
|
public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMapper, AirportMaster> implements IAirportMasterService {
|
||||||
|
|
||||||
private static final String CODE_PREFIX = "JC-";
|
private static final String CODE_PREFIX = "JC-";
|
||||||
|
private static final String SOURCE_INITIAL = "初始导入";
|
||||||
private static final String SOURCE_BATCH = "批量导入";
|
private static final String SOURCE_BATCH = "批量导入";
|
||||||
private static final String SOURCE_MANUAL = "手工导入";
|
private static final String SOURCE_MANUAL = "手动录入";
|
||||||
|
private static final String SOURCE_MANUAL_OLD = "手工导入";
|
||||||
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 CODE_MAX_LENGTH = 20;
|
||||||
|
private static final int NAME_MAX_LENGTH = 100;
|
||||||
|
private static final int SHORT_NAME_MAX_LENGTH = 100;
|
||||||
|
private static final int REGION_NAME_MAX_LENGTH = 128;
|
||||||
private static final int REMARK_MAX_LENGTH = 200;
|
private static final int REMARK_MAX_LENGTH = 200;
|
||||||
private static final Pattern IATA_CODE_PATTERN = Pattern.compile("^[A-Z]{3}$");
|
private static final Pattern IATA_CODE_PATTERN = Pattern.compile("^[A-Z]{3}$");
|
||||||
private static final Pattern ICAO_CODE_PATTERN = Pattern.compile("^[A-Z]{4}$");
|
private static final Pattern ICAO_CODE_PATTERN = Pattern.compile("^[A-Z]{4}$");
|
||||||
@@ -110,6 +116,9 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void importAirportMaster(List<AirportMasterExcel> data) {
|
public void importAirportMaster(List<AirportMasterExcel> data) {
|
||||||
|
if (Func.isEmpty(data)) {
|
||||||
|
throw new ServiceException("导入数据不能为空");
|
||||||
|
}
|
||||||
List<String> errorList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
||||||
for (int index = 0; index < data.size(); index++) {
|
for (int index = 0; index < data.size(); index++) {
|
||||||
AirportMasterExcel excel = data.get(index);
|
AirportMasterExcel excel = data.get(index);
|
||||||
@@ -135,6 +144,7 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
|
|||||||
List<AirportMaster> airportMasterList = list(queryWrapper);
|
List<AirportMaster> airportMasterList = list(queryWrapper);
|
||||||
return airportMasterList.stream().map(airportMaster -> {
|
return airportMasterList.stream().map(airportMaster -> {
|
||||||
AirportMasterExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(airportMaster, AirportMasterExcel.class));
|
AirportMasterExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(airportMaster, AirportMasterExcel.class));
|
||||||
|
excel.setDataSource(normalizeDataSource(airportMaster.getDataSource()));
|
||||||
excel.setStatusName(Objects.equals(airportMaster.getStatus(), STATUS_ENABLED) ? "启用" : "停用");
|
excel.setStatusName(Objects.equals(airportMaster.getStatus(), STATUS_ENABLED) ? "启用" : "停用");
|
||||||
return excel;
|
return excel;
|
||||||
}).toList();
|
}).toList();
|
||||||
@@ -151,7 +161,7 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
|
|||||||
airportMaster.setCityCode(trimToNull(airportMaster.getCityCode()));
|
airportMaster.setCityCode(trimToNull(airportMaster.getCityCode()));
|
||||||
airportMaster.setCityName(trimToNull(airportMaster.getCityName()));
|
airportMaster.setCityName(trimToNull(airportMaster.getCityName()));
|
||||||
airportMaster.setRemark(trimToNull(airportMaster.getRemark()));
|
airportMaster.setRemark(trimToNull(airportMaster.getRemark()));
|
||||||
airportMaster.setDataSource(Func.toStrWithEmpty(airportMaster.getDataSource(), defaultDataSource));
|
airportMaster.setDataSource(normalizeDataSource(Func.toStrWithEmpty(airportMaster.getDataSource(), defaultDataSource)));
|
||||||
if (Func.isEmpty(airportMaster.getStatus())) {
|
if (Func.isEmpty(airportMaster.getStatus())) {
|
||||||
airportMaster.setStatus(STATUS_ENABLED);
|
airportMaster.setStatus(STATUS_ENABLED);
|
||||||
}
|
}
|
||||||
@@ -174,14 +184,19 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
|
|||||||
if (Func.isEmpty(airportMaster.getName())) {
|
if (Func.isEmpty(airportMaster.getName())) {
|
||||||
throw new ServiceException("机场标准名称不能为空");
|
throw new ServiceException("机场标准名称不能为空");
|
||||||
}
|
}
|
||||||
|
validateLength(airportMaster.getCode(), CODE_MAX_LENGTH, "编码不能超过20字");
|
||||||
|
validateLength(airportMaster.getName(), NAME_MAX_LENGTH, "机场标准名称不能超过100字");
|
||||||
|
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.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200字");
|
||||||
if (Func.isEmpty(airportMaster.getProvinceCode()) || Func.isEmpty(airportMaster.getCityCode())) {
|
if (Func.isEmpty(airportMaster.getProvinceCode()) || Func.isEmpty(airportMaster.getCityCode())) {
|
||||||
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, "纬度");
|
||||||
if (Func.isNotEmpty(airportMaster.getRemark()) && airportMaster.getRemark().length() > REMARK_MAX_LENGTH) {
|
validateDataSource(airportMaster.getDataSource());
|
||||||
throw new ServiceException("备注不能超过200字");
|
validateStatus(airportMaster.getStatus());
|
||||||
}
|
|
||||||
validateUnique(airportMaster, AirportMaster::getIataCode, airportMaster.getIataCode(), "该IATA编码已存在");
|
validateUnique(airportMaster, AirportMaster::getIataCode, airportMaster.getIataCode(), "该IATA编码已存在");
|
||||||
validateUnique(airportMaster, AirportMaster::getIcaoCode, airportMaster.getIcaoCode(), "该ICAO代码已存在");
|
validateUnique(airportMaster, AirportMaster::getIcaoCode, airportMaster.getIcaoCode(), "该ICAO代码已存在");
|
||||||
validateUnique(airportMaster, AirportMaster::getCode, airportMaster.getCode(), "该编码已存在");
|
validateUnique(airportMaster, AirportMaster::getCode, airportMaster.getCode(), "该编码已存在");
|
||||||
@@ -227,7 +242,25 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value.compareTo(min) < 0 || value.compareTo(max) > 0) {
|
if (value.compareTo(min) < 0 || value.compareTo(max) > 0) {
|
||||||
throw new ServiceException(name + "范围不正确");
|
throw new ServiceException(name + ("经度".equals(name) ? "范围为 -180 到 180" : "范围为 -90 到 90"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateDataSource(String dataSource) {
|
||||||
|
if (!SOURCE_INITIAL.equals(dataSource) && !SOURCE_BATCH.equals(dataSource) && !SOURCE_MANUAL.equals(dataSource)) {
|
||||||
|
throw new ServiceException("数据来源不正确");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateStatus(Integer status) {
|
||||||
|
if (!Objects.equals(status, STATUS_ENABLED) && !Objects.equals(status, STATUS_DISABLED)) {
|
||||||
|
throw new ServiceException("启停状态不正确");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateLength(String value, int maxLength, String message) {
|
||||||
|
if (Func.isNotEmpty(value) && value.length() > maxLength) {
|
||||||
|
throw new ServiceException(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,4 +285,9 @@ public class AirportMasterServiceImpl extends BaseServiceImpl<AirportMasterMappe
|
|||||||
return trimValue.isEmpty() ? null : trimValue;
|
return trimValue.isEmpty() ? null : trimValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String normalizeDataSource(String dataSource) {
|
||||||
|
String value = trimToEmpty(dataSource);
|
||||||
|
return SOURCE_MANUAL_OLD.equals(value) ? SOURCE_MANUAL : value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import org.springblade.system.service.IPortTerminalService;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -57,11 +58,20 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
|||||||
|
|
||||||
private static final String CATEGORY_PORT = "港口";
|
private static final String CATEGORY_PORT = "港口";
|
||||||
private static final String CATEGORY_TERMINAL = "码头";
|
private static final String CATEGORY_TERMINAL = "码头";
|
||||||
private static final String SOURCE_INITIAL = "初始导入";
|
private static final String SOURCE_INITIAL = "初始化导入";
|
||||||
|
private static final String SOURCE_INITIAL_OLD = "初始导入";
|
||||||
private static final String SOURCE_BATCH = "批量导入";
|
private static final String SOURCE_BATCH = "批量导入";
|
||||||
private static final String SOURCE_MANUAL = "手工导入";
|
private static final String SOURCE_MANUAL = "手工导入";
|
||||||
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 CODE_MAX_LENGTH = 30;
|
||||||
|
private static final int NAME_MAX_LENGTH = 100;
|
||||||
|
private static final int REGION_MAX_LENGTH = 50;
|
||||||
|
private static final int REMARK_MAX_LENGTH = 200;
|
||||||
|
private static final BigDecimal MIN_LONGITUDE = new BigDecimal("-180");
|
||||||
|
private static final BigDecimal MAX_LONGITUDE = new BigDecimal("180");
|
||||||
|
private static final BigDecimal MIN_LATITUDE = new BigDecimal("-90");
|
||||||
|
private static final BigDecimal MAX_LATITUDE = new BigDecimal("90");
|
||||||
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]+$");
|
||||||
|
|
||||||
@@ -111,6 +121,9 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void importPortTerminal(List<PortTerminalExcel> data) {
|
public void importPortTerminal(List<PortTerminalExcel> data) {
|
||||||
|
if (Func.isEmpty(data)) {
|
||||||
|
throw new ServiceException("导入数据不能为空");
|
||||||
|
}
|
||||||
List<String> errorList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
||||||
for (int index = 0; index < data.size(); index++) {
|
for (int index = 0; index < data.size(); index++) {
|
||||||
PortTerminalExcel excel = data.get(index);
|
PortTerminalExcel excel = data.get(index);
|
||||||
@@ -136,6 +149,9 @@ 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.setLongitude(validRange(portTerminal.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE) ? portTerminal.getLongitude() : null);
|
||||||
|
excel.setLatitude(validRange(portTerminal.getLatitude(), MIN_LATITUDE, MAX_LATITUDE) ? portTerminal.getLatitude() : null);
|
||||||
|
excel.setDataSource(normalizeDataSource(portTerminal.getDataSource()));
|
||||||
excel.setStatusName(Objects.equals(portTerminal.getStatus(), STATUS_ENABLED) ? "启用" : "停用");
|
excel.setStatusName(Objects.equals(portTerminal.getStatus(), STATUS_ENABLED) ? "启用" : "停用");
|
||||||
return excel;
|
return excel;
|
||||||
}).toList();
|
}).toList();
|
||||||
@@ -145,7 +161,10 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
|||||||
portTerminal.setCode(trimToEmpty(portTerminal.getCode()).toUpperCase(Locale.ROOT));
|
portTerminal.setCode(trimToEmpty(portTerminal.getCode()).toUpperCase(Locale.ROOT));
|
||||||
portTerminal.setCategory(trimToEmpty(portTerminal.getCategory()));
|
portTerminal.setCategory(trimToEmpty(portTerminal.getCategory()));
|
||||||
portTerminal.setName(trimToEmpty(portTerminal.getName()));
|
portTerminal.setName(trimToEmpty(portTerminal.getName()));
|
||||||
portTerminal.setDataSource(Func.toStrWithEmpty(portTerminal.getDataSource(), defaultDataSource));
|
portTerminal.setCountry(trimToEmpty(portTerminal.getCountry()));
|
||||||
|
portTerminal.setCity(trimToEmpty(portTerminal.getCity()));
|
||||||
|
portTerminal.setRemark(trimToNull(portTerminal.getRemark()));
|
||||||
|
portTerminal.setDataSource(normalizeDataSource(Func.toStrWithEmpty(portTerminal.getDataSource(), defaultDataSource)));
|
||||||
if (Func.isEmpty(portTerminal.getStatus())) {
|
if (Func.isEmpty(portTerminal.getStatus())) {
|
||||||
portTerminal.setStatus(STATUS_ENABLED);
|
portTerminal.setStatus(STATUS_ENABLED);
|
||||||
}
|
}
|
||||||
@@ -189,6 +208,14 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
|||||||
if (Func.isEmpty(portTerminal.getCode())) {
|
if (Func.isEmpty(portTerminal.getCode())) {
|
||||||
throw new ServiceException("编码不能为空");
|
throw new ServiceException("编码不能为空");
|
||||||
}
|
}
|
||||||
|
if (Func.isEmpty(portTerminal.getName())) {
|
||||||
|
throw new ServiceException("港口/码头名称不能为空");
|
||||||
|
}
|
||||||
|
validateLength(portTerminal.getCode(), CODE_MAX_LENGTH, "编码不能超过30字");
|
||||||
|
validateLength(portTerminal.getName(), NAME_MAX_LENGTH, "港口/码头名称不能超过100字");
|
||||||
|
validateLength(portTerminal.getCountry(), REGION_MAX_LENGTH, "国家不能超过50字");
|
||||||
|
validateLength(portTerminal.getCity(), REGION_MAX_LENGTH, "城市不能超过50字");
|
||||||
|
validateLength(portTerminal.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200个字");
|
||||||
if (CATEGORY_PORT.equals(portTerminal.getCategory()) && !PORT_CODE_PATTERN.matcher(portTerminal.getCode()).matches()) {
|
if (CATEGORY_PORT.equals(portTerminal.getCategory()) && !PORT_CODE_PATTERN.matcher(portTerminal.getCode()).matches()) {
|
||||||
throw new ServiceException("港口编码为5位大写字母");
|
throw new ServiceException("港口编码为5位大写字母");
|
||||||
}
|
}
|
||||||
@@ -198,6 +225,16 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
|||||||
if (CATEGORY_TERMINAL.equals(portTerminal.getCategory()) && !portTerminal.getCode().startsWith(portTerminal.getParentCode() + "-")) {
|
if (CATEGORY_TERMINAL.equals(portTerminal.getCategory()) && !portTerminal.getCode().startsWith(portTerminal.getParentCode() + "-")) {
|
||||||
throw new ServiceException("码头编码必须以所属港口编码开头");
|
throw new ServiceException("码头编码必须以所属港口编码开头");
|
||||||
}
|
}
|
||||||
|
if (Func.isEmpty(portTerminal.getCountry())) {
|
||||||
|
throw new ServiceException("国家不能为空");
|
||||||
|
}
|
||||||
|
if (Func.isEmpty(portTerminal.getCity())) {
|
||||||
|
throw new ServiceException("城市不能为空");
|
||||||
|
}
|
||||||
|
validateDataSource(portTerminal.getDataSource());
|
||||||
|
validateStatus(portTerminal.getStatus());
|
||||||
|
validateRange(portTerminal.getLongitude(), MIN_LONGITUDE, MAX_LONGITUDE, "经度范围为 -180 到 180");
|
||||||
|
validateRange(portTerminal.getLatitude(), MIN_LATITUDE, MAX_LATITUDE, "纬度范围为 -90 到 90");
|
||||||
validateUniqueCode(portTerminal);
|
validateUniqueCode(portTerminal);
|
||||||
if (Objects.equals(portTerminal.getStatus(), STATUS_DISABLED) && CATEGORY_PORT.equals(portTerminal.getCategory())) {
|
if (Objects.equals(portTerminal.getStatus(), STATUS_DISABLED) && CATEGORY_PORT.equals(portTerminal.getCategory())) {
|
||||||
validateEnabledTerminal(portTerminal.getId());
|
validateEnabledTerminal(portTerminal.getId());
|
||||||
@@ -216,6 +253,39 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateDataSource(String dataSource) {
|
||||||
|
if (!SOURCE_INITIAL.equals(dataSource) && !SOURCE_BATCH.equals(dataSource) && !SOURCE_MANUAL.equals(dataSource)) {
|
||||||
|
throw new ServiceException("数据来源不正确");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateStatus(Integer status) {
|
||||||
|
if (!Objects.equals(status, STATUS_ENABLED) && !Objects.equals(status, STATUS_DISABLED)) {
|
||||||
|
throw new ServiceException("启停状态不正确");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateLength(String value, int maxLength, String message) {
|
||||||
|
if (Func.isNotEmpty(value) && value.length() > maxLength) {
|
||||||
|
throw new ServiceException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateRange(BigDecimal value, BigDecimal min, BigDecimal max, String message) {
|
||||||
|
if (Func.isNotEmpty(value) && !validRange(value, min, max)) {
|
||||||
|
throw new ServiceException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean validRange(BigDecimal value, BigDecimal min, BigDecimal max) {
|
||||||
|
return Func.isEmpty(value) || (value.compareTo(min) >= 0 && value.compareTo(max) <= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String normalizeDataSource(String dataSource) {
|
||||||
|
String value = trimToEmpty(dataSource);
|
||||||
|
return SOURCE_INITIAL_OLD.equals(value) ? SOURCE_INITIAL : value;
|
||||||
|
}
|
||||||
|
|
||||||
private void validateEnabledTerminal(Long parentId) {
|
private void validateEnabledTerminal(Long parentId) {
|
||||||
if (Func.isEmpty(parentId)) {
|
if (Func.isEmpty(parentId)) {
|
||||||
return;
|
return;
|
||||||
@@ -234,4 +304,9 @@ public class PortTerminalServiceImpl extends BaseServiceImpl<PortTerminalMapper,
|
|||||||
return value == null ? "" : value.trim();
|
return value == null ? "" : value.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String trimToNull(String value) {
|
||||||
|
String trimValue = trimToEmpty(value);
|
||||||
|
return trimValue.isEmpty() ? null : trimValue;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,10 +61,19 @@ import java.util.regex.Pattern;
|
|||||||
public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMapper, RailwayStation> implements IRailwayStationService {
|
public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMapper, RailwayStation> implements IRailwayStationService {
|
||||||
|
|
||||||
private static final String CODE_PREFIX = "TL";
|
private static final String CODE_PREFIX = "TL";
|
||||||
private static final String SOURCE_BATCH = "批量导入";
|
private static final String SOURCE_INITIAL = "初始化导入";
|
||||||
private static final String SOURCE_MANUAL = "手工导入";
|
private static final String SOURCE_INITIAL_OLD = "初始导入";
|
||||||
|
private static final String SOURCE_BATCH = "批量";
|
||||||
|
private static final String SOURCE_BATCH_OLD = "批量导入";
|
||||||
|
private static final String SOURCE_MANUAL = "手动";
|
||||||
|
private static final String SOURCE_MANUAL_RECORD = "手动录入";
|
||||||
|
private static final String SOURCE_MANUAL_OLD = "手工导入";
|
||||||
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 CODE_MAX_LENGTH = 20;
|
||||||
|
private static final int NAME_MAX_LENGTH = 100;
|
||||||
|
private static final int RAILWAY_LINE_MAX_LENGTH = 100;
|
||||||
|
private static final int REGION_NAME_MAX_LENGTH = 128;
|
||||||
private static final int REMARK_MAX_LENGTH = 200;
|
private static final int REMARK_MAX_LENGTH = 200;
|
||||||
private static final Pattern TMIS_CODE_PATTERN = Pattern.compile("^\\d{5}$");
|
private static final Pattern TMIS_CODE_PATTERN = Pattern.compile("^\\d{5}$");
|
||||||
private static final Pattern TELEGRAPH_CODE_PATTERN = Pattern.compile("^[A-Z]{3}$");
|
private static final Pattern TELEGRAPH_CODE_PATTERN = Pattern.compile("^[A-Z]{3}$");
|
||||||
@@ -110,6 +119,9 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void importRailwayStation(List<RailwayStationExcel> data) {
|
public void importRailwayStation(List<RailwayStationExcel> data) {
|
||||||
|
if (Func.isEmpty(data)) {
|
||||||
|
throw new ServiceException("导入数据不能为空");
|
||||||
|
}
|
||||||
List<String> errorList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
||||||
for (int index = 0; index < data.size(); index++) {
|
for (int index = 0; index < data.size(); index++) {
|
||||||
RailwayStationExcel excel = data.get(index);
|
RailwayStationExcel excel = data.get(index);
|
||||||
@@ -135,6 +147,7 @@ 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.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();
|
||||||
@@ -151,7 +164,7 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
|||||||
railwayStation.setCityCode(trimToNull(railwayStation.getCityCode()));
|
railwayStation.setCityCode(trimToNull(railwayStation.getCityCode()));
|
||||||
railwayStation.setCityName(trimToNull(railwayStation.getCityName()));
|
railwayStation.setCityName(trimToNull(railwayStation.getCityName()));
|
||||||
railwayStation.setRemark(trimToNull(railwayStation.getRemark()));
|
railwayStation.setRemark(trimToNull(railwayStation.getRemark()));
|
||||||
railwayStation.setDataSource(Func.toStrWithEmpty(railwayStation.getDataSource(), defaultDataSource));
|
railwayStation.setDataSource(normalizeDataSource(Func.toStrWithEmpty(railwayStation.getDataSource(), defaultDataSource)));
|
||||||
if (Func.isEmpty(railwayStation.getStatus())) {
|
if (Func.isEmpty(railwayStation.getStatus())) {
|
||||||
railwayStation.setStatus(STATUS_ENABLED);
|
railwayStation.setStatus(STATUS_ENABLED);
|
||||||
}
|
}
|
||||||
@@ -174,14 +187,19 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
|||||||
if (Func.isEmpty(railwayStation.getName())) {
|
if (Func.isEmpty(railwayStation.getName())) {
|
||||||
throw new ServiceException("车站名称不能为空");
|
throw new ServiceException("车站名称不能为空");
|
||||||
}
|
}
|
||||||
|
validateLength(railwayStation.getCode(), CODE_MAX_LENGTH, "编码不能超过20字");
|
||||||
|
validateLength(railwayStation.getName(), NAME_MAX_LENGTH, "车站名称不能超过100字");
|
||||||
|
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.getRemark(), REMARK_MAX_LENGTH, "备注不能超过200字");
|
||||||
if (Func.isEmpty(railwayStation.getProvinceCode()) || Func.isEmpty(railwayStation.getCityCode())) {
|
if (Func.isEmpty(railwayStation.getProvinceCode()) || Func.isEmpty(railwayStation.getCityCode())) {
|
||||||
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, "纬度");
|
||||||
if (Func.isNotEmpty(railwayStation.getRemark()) && railwayStation.getRemark().length() > REMARK_MAX_LENGTH) {
|
validateDataSource(railwayStation.getDataSource());
|
||||||
throw new ServiceException("备注不能超过200字");
|
validateStatus(railwayStation.getStatus());
|
||||||
}
|
|
||||||
validateUnique(railwayStation, RailwayStation::getTmisCode, railwayStation.getTmisCode(), "该TMIS编码已存在");
|
validateUnique(railwayStation, RailwayStation::getTmisCode, railwayStation.getTmisCode(), "该TMIS编码已存在");
|
||||||
validateUnique(railwayStation, RailwayStation::getTelegraphCode, railwayStation.getTelegraphCode(), "该电报码已存在");
|
validateUnique(railwayStation, RailwayStation::getTelegraphCode, railwayStation.getTelegraphCode(), "该电报码已存在");
|
||||||
validateUnique(railwayStation, RailwayStation::getCode, railwayStation.getCode(), "该编码已存在");
|
validateUnique(railwayStation, RailwayStation::getCode, railwayStation.getCode(), "该编码已存在");
|
||||||
@@ -227,7 +245,25 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value.compareTo(min) < 0 || value.compareTo(max) > 0) {
|
if (value.compareTo(min) < 0 || value.compareTo(max) > 0) {
|
||||||
throw new ServiceException(name + "范围不正确");
|
throw new ServiceException(name + ("经度".equals(name) ? "范围为 -180 到 180" : "范围为 -90 到 90"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateDataSource(String dataSource) {
|
||||||
|
if (!SOURCE_INITIAL.equals(dataSource) && !SOURCE_BATCH.equals(dataSource) && !SOURCE_MANUAL.equals(dataSource)) {
|
||||||
|
throw new ServiceException("数据来源不正确");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateStatus(Integer status) {
|
||||||
|
if (!Objects.equals(status, STATUS_ENABLED) && !Objects.equals(status, STATUS_DISABLED)) {
|
||||||
|
throw new ServiceException("启停状态不正确");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateLength(String value, int maxLength, String message) {
|
||||||
|
if (Func.isNotEmpty(value) && value.length() > maxLength) {
|
||||||
|
throw new ServiceException(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,4 +288,18 @@ public class RailwayStationServiceImpl extends BaseServiceImpl<RailwayStationMap
|
|||||||
return trimValue.isEmpty() ? null : trimValue;
|
return trimValue.isEmpty() ? null : trimValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String normalizeDataSource(String dataSource) {
|
||||||
|
String value = trimToEmpty(dataSource);
|
||||||
|
if (SOURCE_INITIAL_OLD.equals(value)) {
|
||||||
|
return SOURCE_INITIAL;
|
||||||
|
}
|
||||||
|
if (SOURCE_BATCH_OLD.equals(value)) {
|
||||||
|
return SOURCE_BATCH;
|
||||||
|
}
|
||||||
|
if (SOURCE_MANUAL_OLD.equals(value) || SOURCE_MANUAL_RECORD.equals(value)) {
|
||||||
|
return SOURCE_MANUAL;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,10 @@
|
|||||||
<groupId>org.springblade</groupId>
|
<groupId>org.springblade</groupId>
|
||||||
<artifactId>blade-core-boot</artifactId>
|
<artifactId>blade-core-boot</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springblade</groupId>
|
||||||
|
<artifactId>blade-starter-excel</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springblade</groupId>
|
<groupId>org.springblade</groupId>
|
||||||
<artifactId>blade-starter-swagger</artifactId>
|
<artifactId>blade-starter-swagger</artifactId>
|
||||||
|
|||||||
@@ -25,19 +25,26 @@
|
|||||||
*/
|
*/
|
||||||
package org.springblade.transport.controller;
|
package org.springblade.transport.controller;
|
||||||
|
|
||||||
|
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.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import org.springblade.core.boot.ctrl.BladeController;
|
import org.springblade.core.boot.ctrl.BladeController;
|
||||||
|
import org.springblade.core.excel.util.ExcelUtil;
|
||||||
import org.springblade.core.mp.support.Condition;
|
import org.springblade.core.mp.support.Condition;
|
||||||
import org.springblade.core.mp.support.Query;
|
import org.springblade.core.mp.support.Query;
|
||||||
import org.springblade.core.secure.annotation.PreAuth;
|
import org.springblade.core.secure.annotation.PreAuth;
|
||||||
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.api.R;
|
||||||
|
import org.springblade.core.tool.utils.DateUtil;
|
||||||
import org.springblade.core.tool.utils.Func;
|
import org.springblade.core.tool.utils.Func;
|
||||||
|
import org.springblade.transport.excel.MaintenancePlanExcel;
|
||||||
|
import org.springblade.transport.excel.MaintenancePlanImporter;
|
||||||
import org.springblade.transport.pojo.entity.MaintenancePlan;
|
import org.springblade.transport.pojo.entity.MaintenancePlan;
|
||||||
import org.springblade.transport.pojo.vo.MaintenancePlanVO;
|
import org.springblade.transport.pojo.vo.MaintenancePlanVO;
|
||||||
import org.springblade.transport.service.IMaintenancePlanService;
|
import org.springblade.transport.service.IMaintenancePlanService;
|
||||||
@@ -48,6 +55,10 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 车辆保养计划 控制器
|
* 车辆保养计划 控制器
|
||||||
@@ -61,6 +72,10 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@Tag(name = "车辆保养计划", description = "车辆保养计划")
|
@Tag(name = "车辆保养计划", description = "车辆保养计划")
|
||||||
public class MaintenancePlanController extends BladeController {
|
public class MaintenancePlanController extends BladeController {
|
||||||
|
|
||||||
|
private static final int DEFAULT_CURRENT = 1;
|
||||||
|
private static final int DEFAULT_SIZE = 10;
|
||||||
|
private static final int MAX_SIZE = 100;
|
||||||
|
|
||||||
private final IMaintenancePlanService maintenancePlanService;
|
private final IMaintenancePlanService maintenancePlanService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -81,7 +96,7 @@ public class MaintenancePlanController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 2)
|
@ApiOperationSupport(order = 2)
|
||||||
@Operation(summary = "分页", description = "传入maintenancePlan")
|
@Operation(summary = "分页", description = "传入maintenancePlan")
|
||||||
public R<IPage<MaintenancePlanVO>> list(MaintenancePlanVO maintenancePlan, Query query) {
|
public R<IPage<MaintenancePlanVO>> list(MaintenancePlanVO maintenancePlan, Query query) {
|
||||||
IPage<MaintenancePlanVO> pages = maintenancePlanService.selectMaintenancePlanPage(Condition.getPage(query), maintenancePlan);
|
IPage<MaintenancePlanVO> pages = maintenancePlanService.selectMaintenancePlanPage(Condition.getPage(normalizeQuery(query)), maintenancePlan);
|
||||||
return R.data(pages);
|
return R.data(pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,10 +107,7 @@ public class MaintenancePlanController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 3)
|
@ApiOperationSupport(order = 3)
|
||||||
@Operation(summary = "新增或修改", description = "传入maintenancePlan")
|
@Operation(summary = "新增或修改", description = "传入maintenancePlan")
|
||||||
public R submit(@Valid @RequestBody MaintenancePlan maintenancePlan) {
|
public R submit(@Valid @RequestBody MaintenancePlan maintenancePlan) {
|
||||||
if (Func.isEmpty(maintenancePlan.getMileageUnit())) {
|
return R.status(maintenancePlanService.submit(maintenancePlan));
|
||||||
maintenancePlan.setMileageUnit("船舶".equals(maintenancePlan.getVehicleType()) ? "海里" : "公里");
|
|
||||||
}
|
|
||||||
return R.status(maintenancePlanService.saveOrUpdate(maintenancePlan));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -108,4 +120,81 @@ public class MaintenancePlanController extends BladeController {
|
|||||||
return R.status(maintenancePlanService.deleteLogic(Func.toLongList(ids)));
|
return R.status(maintenancePlanService.deleteLogic(Func.toLongList(ids)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入保养记录
|
||||||
|
*/
|
||||||
|
@PostMapping("/import-maintenance-plan")
|
||||||
|
@ApiOperationSupport(order = 5)
|
||||||
|
@Operation(summary = "导入保养记录", description = "传入excel")
|
||||||
|
public R importMaintenancePlan(MultipartFile file) {
|
||||||
|
MaintenancePlanImporter maintenancePlanImporter = new MaintenancePlanImporter(maintenancePlanService);
|
||||||
|
ExcelUtil.save(file, maintenancePlanImporter, MaintenancePlanExcel.class);
|
||||||
|
return R.success("操作成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出保养记录
|
||||||
|
*/
|
||||||
|
@GetMapping("/export-maintenance-plan")
|
||||||
|
@ApiOperationSupport(order = 6)
|
||||||
|
@Operation(summary = "导出保养记录")
|
||||||
|
public void exportMaintenancePlan(MaintenancePlanVO maintenancePlan,
|
||||||
|
@RequestParam(required = false) String ids,
|
||||||
|
HttpServletResponse response) {
|
||||||
|
List<MaintenancePlanExcel> list = maintenancePlanService.exportMaintenancePlan(buildExportQuery(maintenancePlan, ids));
|
||||||
|
ExcelUtil.export(response, "保养记录" + DateUtil.time(), "保养记录表", list, MaintenancePlanExcel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出模板
|
||||||
|
*/
|
||||||
|
@GetMapping("/export-template")
|
||||||
|
@ApiOperationSupport(order = 7)
|
||||||
|
@Operation(summary = "导出模板")
|
||||||
|
public void exportTemplate(HttpServletResponse response) {
|
||||||
|
List<MaintenancePlanExcel> list = new ArrayList<>();
|
||||||
|
ExcelUtil.export(response, "保养记录模板", "保养记录表", list, MaintenancePlanExcel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Query normalizeQuery(Query query) {
|
||||||
|
if (query == null) {
|
||||||
|
query = new Query();
|
||||||
|
}
|
||||||
|
if (query.getCurrent() == null || query.getCurrent() < DEFAULT_CURRENT) {
|
||||||
|
query.setCurrent(DEFAULT_CURRENT);
|
||||||
|
}
|
||||||
|
if (query.getSize() == null || query.getSize() <= 0) {
|
||||||
|
query.setSize(DEFAULT_SIZE);
|
||||||
|
}
|
||||||
|
if (query.getSize() > MAX_SIZE) {
|
||||||
|
query.setSize(MAX_SIZE);
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<MaintenancePlan> buildExportQuery(MaintenancePlanVO maintenancePlan, String ids) {
|
||||||
|
LambdaQueryWrapper<MaintenancePlan> queryWrapper = Wrappers.<MaintenancePlan>lambdaQuery()
|
||||||
|
.eq(MaintenancePlan::getIsDeleted, 0)
|
||||||
|
.orderByDesc(MaintenancePlan::getCreateTime);
|
||||||
|
if (Func.isNotEmpty(ids)) {
|
||||||
|
queryWrapper.in(MaintenancePlan::getId, Func.toLongList(ids));
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenancePlan.getCreateDept())) {
|
||||||
|
queryWrapper.eq(MaintenancePlan::getCreateDept, maintenancePlan.getCreateDept());
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenancePlan.getVehicleType())) {
|
||||||
|
queryWrapper.eq(MaintenancePlan::getVehicleType, maintenancePlan.getVehicleType());
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenancePlan.getVehicleNo())) {
|
||||||
|
queryWrapper.like(MaintenancePlan::getVehicleNo, maintenancePlan.getVehicleNo());
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenancePlan.getCreateTimeStart())) {
|
||||||
|
queryWrapper.ge(MaintenancePlan::getCreateTime, maintenancePlan.getCreateTimeStart());
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenancePlan.getCreateTimeEnd())) {
|
||||||
|
queryWrapper.le(MaintenancePlan::getCreateTime, maintenancePlan.getCreateTimeEnd());
|
||||||
|
}
|
||||||
|
return queryWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,19 +25,26 @@
|
|||||||
*/
|
*/
|
||||||
package org.springblade.transport.controller;
|
package org.springblade.transport.controller;
|
||||||
|
|
||||||
|
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.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import org.springblade.core.boot.ctrl.BladeController;
|
import org.springblade.core.boot.ctrl.BladeController;
|
||||||
|
import org.springblade.core.excel.util.ExcelUtil;
|
||||||
import org.springblade.core.mp.support.Condition;
|
import org.springblade.core.mp.support.Condition;
|
||||||
import org.springblade.core.mp.support.Query;
|
import org.springblade.core.mp.support.Query;
|
||||||
import org.springblade.core.secure.annotation.PreAuth;
|
import org.springblade.core.secure.annotation.PreAuth;
|
||||||
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.api.R;
|
||||||
|
import org.springblade.core.tool.utils.DateUtil;
|
||||||
import org.springblade.core.tool.utils.Func;
|
import org.springblade.core.tool.utils.Func;
|
||||||
|
import org.springblade.transport.excel.MaintenanceRecordExcel;
|
||||||
|
import org.springblade.transport.excel.MaintenanceRecordImporter;
|
||||||
import org.springblade.transport.pojo.entity.MaintenanceRecord;
|
import org.springblade.transport.pojo.entity.MaintenanceRecord;
|
||||||
import org.springblade.transport.pojo.vo.MaintenanceRecordVO;
|
import org.springblade.transport.pojo.vo.MaintenanceRecordVO;
|
||||||
import org.springblade.transport.service.IMaintenanceRecordService;
|
import org.springblade.transport.service.IMaintenanceRecordService;
|
||||||
@@ -48,6 +55,10 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 车辆维修记录 控制器
|
* 车辆维修记录 控制器
|
||||||
@@ -61,6 +72,10 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@Tag(name = "车辆维修记录", description = "车辆维修记录")
|
@Tag(name = "车辆维修记录", description = "车辆维修记录")
|
||||||
public class MaintenanceRecordController extends BladeController {
|
public class MaintenanceRecordController extends BladeController {
|
||||||
|
|
||||||
|
private static final int DEFAULT_CURRENT = 1;
|
||||||
|
private static final int DEFAULT_SIZE = 10;
|
||||||
|
private static final int MAX_SIZE = 100;
|
||||||
|
|
||||||
private final IMaintenanceRecordService maintenanceRecordService;
|
private final IMaintenanceRecordService maintenanceRecordService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -81,7 +96,7 @@ public class MaintenanceRecordController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 2)
|
@ApiOperationSupport(order = 2)
|
||||||
@Operation(summary = "分页", description = "传入maintenanceRecord")
|
@Operation(summary = "分页", description = "传入maintenanceRecord")
|
||||||
public R<IPage<MaintenanceRecordVO>> list(MaintenanceRecordVO maintenanceRecord, Query query) {
|
public R<IPage<MaintenanceRecordVO>> list(MaintenanceRecordVO maintenanceRecord, Query query) {
|
||||||
IPage<MaintenanceRecordVO> pages = maintenanceRecordService.selectMaintenanceRecordPage(Condition.getPage(query), maintenanceRecord);
|
IPage<MaintenanceRecordVO> pages = maintenanceRecordService.selectMaintenanceRecordPage(Condition.getPage(normalizeQuery(query)), maintenanceRecord);
|
||||||
return R.data(pages);
|
return R.data(pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,10 +107,7 @@ public class MaintenanceRecordController extends BladeController {
|
|||||||
@ApiOperationSupport(order = 3)
|
@ApiOperationSupport(order = 3)
|
||||||
@Operation(summary = "新增或修改", description = "传入maintenanceRecord")
|
@Operation(summary = "新增或修改", description = "传入maintenanceRecord")
|
||||||
public R submit(@Valid @RequestBody MaintenanceRecord maintenanceRecord) {
|
public R submit(@Valid @RequestBody MaintenanceRecord maintenanceRecord) {
|
||||||
if (Func.isEmpty(maintenanceRecord.getMileageUnit())) {
|
return R.status(maintenanceRecordService.submit(maintenanceRecord));
|
||||||
maintenanceRecord.setMileageUnit("船舶".equals(maintenanceRecord.getVehicleType()) ? "海里" : "公里");
|
|
||||||
}
|
|
||||||
return R.status(maintenanceRecordService.saveOrUpdate(maintenanceRecord));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -108,4 +120,81 @@ public class MaintenanceRecordController extends BladeController {
|
|||||||
return R.status(maintenanceRecordService.deleteLogic(Func.toLongList(ids)));
|
return R.status(maintenanceRecordService.deleteLogic(Func.toLongList(ids)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入维修记录
|
||||||
|
*/
|
||||||
|
@PostMapping("/import-maintenance-record")
|
||||||
|
@ApiOperationSupport(order = 5)
|
||||||
|
@Operation(summary = "导入维修记录", description = "传入excel")
|
||||||
|
public R importMaintenanceRecord(MultipartFile file) {
|
||||||
|
MaintenanceRecordImporter maintenanceRecordImporter = new MaintenanceRecordImporter(maintenanceRecordService);
|
||||||
|
ExcelUtil.save(file, maintenanceRecordImporter, MaintenanceRecordExcel.class);
|
||||||
|
return R.success("操作成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出维修记录
|
||||||
|
*/
|
||||||
|
@GetMapping("/export-maintenance-record")
|
||||||
|
@ApiOperationSupport(order = 6)
|
||||||
|
@Operation(summary = "导出维修记录")
|
||||||
|
public void exportMaintenanceRecord(MaintenanceRecordVO maintenanceRecord,
|
||||||
|
@RequestParam(required = false) String ids,
|
||||||
|
HttpServletResponse response) {
|
||||||
|
List<MaintenanceRecordExcel> list = maintenanceRecordService.exportMaintenanceRecord(buildExportQuery(maintenanceRecord, ids));
|
||||||
|
ExcelUtil.export(response, "维修记录" + DateUtil.time(), "维修记录表", list, MaintenanceRecordExcel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出模板
|
||||||
|
*/
|
||||||
|
@GetMapping("/export-template")
|
||||||
|
@ApiOperationSupport(order = 7)
|
||||||
|
@Operation(summary = "导出模板")
|
||||||
|
public void exportTemplate(HttpServletResponse response) {
|
||||||
|
List<MaintenanceRecordExcel> list = new ArrayList<>();
|
||||||
|
ExcelUtil.export(response, "维修记录模板", "维修记录表", list, MaintenanceRecordExcel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Query normalizeQuery(Query query) {
|
||||||
|
if (query == null) {
|
||||||
|
query = new Query();
|
||||||
|
}
|
||||||
|
if (query.getCurrent() == null || query.getCurrent() < DEFAULT_CURRENT) {
|
||||||
|
query.setCurrent(DEFAULT_CURRENT);
|
||||||
|
}
|
||||||
|
if (query.getSize() == null || query.getSize() <= 0) {
|
||||||
|
query.setSize(DEFAULT_SIZE);
|
||||||
|
}
|
||||||
|
if (query.getSize() > MAX_SIZE) {
|
||||||
|
query.setSize(MAX_SIZE);
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<MaintenanceRecord> buildExportQuery(MaintenanceRecordVO maintenanceRecord, String ids) {
|
||||||
|
LambdaQueryWrapper<MaintenanceRecord> queryWrapper = Wrappers.<MaintenanceRecord>lambdaQuery()
|
||||||
|
.eq(MaintenanceRecord::getIsDeleted, 0)
|
||||||
|
.orderByDesc(MaintenanceRecord::getCreateTime);
|
||||||
|
if (Func.isNotEmpty(ids)) {
|
||||||
|
queryWrapper.in(MaintenanceRecord::getId, Func.toLongList(ids));
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenanceRecord.getCreateDept())) {
|
||||||
|
queryWrapper.eq(MaintenanceRecord::getCreateDept, maintenanceRecord.getCreateDept());
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenanceRecord.getVehicleType())) {
|
||||||
|
queryWrapper.eq(MaintenanceRecord::getVehicleType, maintenanceRecord.getVehicleType());
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenanceRecord.getVehicleNo())) {
|
||||||
|
queryWrapper.like(MaintenanceRecord::getVehicleNo, maintenanceRecord.getVehicleNo());
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenanceRecord.getCreateTimeStart())) {
|
||||||
|
queryWrapper.ge(MaintenanceRecord::getCreateTime, maintenanceRecord.getCreateTimeStart());
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(maintenanceRecord.getCreateTimeEnd())) {
|
||||||
|
queryWrapper.le(MaintenanceRecord::getCreateTime, maintenanceRecord.getCreateTimeEnd());
|
||||||
|
}
|
||||||
|
return queryWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ package org.springblade.transport.mapper;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springblade.transport.pojo.entity.MaintenancePlan;
|
import org.springblade.transport.pojo.entity.MaintenancePlan;
|
||||||
import org.springblade.transport.pojo.vo.MaintenancePlanVO;
|
import org.springblade.transport.pojo.vo.MaintenancePlanVO;
|
||||||
|
|
||||||
@@ -46,6 +47,6 @@ public interface MaintenancePlanMapper extends BaseMapper<MaintenancePlan> {
|
|||||||
* @param maintenancePlan 查询参数
|
* @param maintenancePlan 查询参数
|
||||||
* @return 保养计划列表
|
* @return 保养计划列表
|
||||||
*/
|
*/
|
||||||
List<MaintenancePlanVO> selectMaintenancePlanPage(IPage<MaintenancePlanVO> page, MaintenancePlanVO maintenancePlan);
|
List<MaintenancePlanVO> selectMaintenancePlanPage(IPage<MaintenancePlanVO> page, @Param("maintenancePlan") MaintenancePlanVO maintenancePlan);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,11 +31,37 @@
|
|||||||
|
|
||||||
<select id="selectMaintenancePlanPage" resultMap="maintenancePlanResultMap">
|
<select id="selectMaintenancePlanPage" resultMap="maintenancePlanResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
*
|
id,
|
||||||
|
tenant_id,
|
||||||
|
create_user,
|
||||||
|
create_dept,
|
||||||
|
create_time,
|
||||||
|
update_user,
|
||||||
|
update_time,
|
||||||
|
status,
|
||||||
|
is_deleted,
|
||||||
|
vehicle_type,
|
||||||
|
vehicle_no,
|
||||||
|
maintainer,
|
||||||
|
maintenance_time,
|
||||||
|
CASE WHEN mileage < 0 THEN 0 ELSE mileage END AS mileage,
|
||||||
|
mileage_unit,
|
||||||
|
maintenance_item,
|
||||||
|
cost,
|
||||||
|
store_name,
|
||||||
|
contact_phone,
|
||||||
|
address,
|
||||||
|
next_maintenance_time,
|
||||||
|
CASE WHEN next_maintenance_mileage < 0 THEN 0 ELSE next_maintenance_mileage END AS next_maintenance_mileage,
|
||||||
|
attachments,
|
||||||
|
remark
|
||||||
FROM
|
FROM
|
||||||
blade_vehicle_maintenance_plan
|
blade_vehicle_maintenance_plan
|
||||||
WHERE
|
WHERE
|
||||||
is_deleted = 0
|
is_deleted = 0
|
||||||
|
<if test="maintenancePlan.createDept != null">
|
||||||
|
AND create_dept = #{maintenancePlan.createDept}
|
||||||
|
</if>
|
||||||
<if test="maintenancePlan.vehicleType != null and maintenancePlan.vehicleType != ''">
|
<if test="maintenancePlan.vehicleType != null and maintenancePlan.vehicleType != ''">
|
||||||
AND vehicle_type = #{maintenancePlan.vehicleType}
|
AND vehicle_type = #{maintenancePlan.vehicleType}
|
||||||
</if>
|
</if>
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ package org.springblade.transport.mapper;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springblade.transport.pojo.entity.MaintenanceRecord;
|
import org.springblade.transport.pojo.entity.MaintenanceRecord;
|
||||||
import org.springblade.transport.pojo.vo.MaintenanceRecordVO;
|
import org.springblade.transport.pojo.vo.MaintenanceRecordVO;
|
||||||
|
|
||||||
@@ -46,6 +47,6 @@ public interface MaintenanceRecordMapper extends BaseMapper<MaintenanceRecord> {
|
|||||||
* @param maintenanceRecord 查询参数
|
* @param maintenanceRecord 查询参数
|
||||||
* @return 维修记录列表
|
* @return 维修记录列表
|
||||||
*/
|
*/
|
||||||
List<MaintenanceRecordVO> selectMaintenanceRecordPage(IPage<MaintenanceRecordVO> page, MaintenanceRecordVO maintenanceRecord);
|
List<MaintenanceRecordVO> selectMaintenanceRecordPage(IPage<MaintenanceRecordVO> page, @Param("maintenanceRecord") MaintenanceRecordVO maintenanceRecord);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,11 +31,37 @@
|
|||||||
|
|
||||||
<select id="selectMaintenanceRecordPage" resultMap="maintenanceRecordResultMap">
|
<select id="selectMaintenanceRecordPage" resultMap="maintenanceRecordResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
*
|
id,
|
||||||
|
tenant_id,
|
||||||
|
create_user,
|
||||||
|
create_dept,
|
||||||
|
create_time,
|
||||||
|
update_user,
|
||||||
|
update_time,
|
||||||
|
status,
|
||||||
|
is_deleted,
|
||||||
|
vehicle_type,
|
||||||
|
vehicle_no,
|
||||||
|
maintainer,
|
||||||
|
maintenance_time,
|
||||||
|
location,
|
||||||
|
replaced_part,
|
||||||
|
cost,
|
||||||
|
company,
|
||||||
|
contact,
|
||||||
|
address,
|
||||||
|
factory_time,
|
||||||
|
CASE WHEN mileage < 0 THEN 0 ELSE mileage END AS mileage,
|
||||||
|
mileage_unit,
|
||||||
|
attachments,
|
||||||
|
remark
|
||||||
FROM
|
FROM
|
||||||
blade_vehicle_maintenance_record
|
blade_vehicle_maintenance_record
|
||||||
WHERE
|
WHERE
|
||||||
is_deleted = 0
|
is_deleted = 0
|
||||||
|
<if test="maintenanceRecord.createDept != null">
|
||||||
|
AND create_dept = #{maintenanceRecord.createDept}
|
||||||
|
</if>
|
||||||
<if test="maintenanceRecord.vehicleType != null and maintenanceRecord.vehicleType != ''">
|
<if test="maintenanceRecord.vehicleType != null and maintenanceRecord.vehicleType != ''">
|
||||||
AND vehicle_type = #{maintenanceRecord.vehicleType}
|
AND vehicle_type = #{maintenanceRecord.vehicleType}
|
||||||
</if>
|
</if>
|
||||||
|
|||||||
@@ -25,11 +25,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.springblade.transport.service;
|
package org.springblade.transport.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.springblade.core.mp.base.BaseService;
|
import org.springblade.core.mp.base.BaseService;
|
||||||
|
import org.springblade.transport.excel.MaintenancePlanExcel;
|
||||||
import org.springblade.transport.pojo.entity.MaintenancePlan;
|
import org.springblade.transport.pojo.entity.MaintenancePlan;
|
||||||
import org.springblade.transport.pojo.vo.MaintenancePlanVO;
|
import org.springblade.transport.pojo.vo.MaintenancePlanVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 车辆保养计划 服务类
|
* 车辆保养计划 服务类
|
||||||
*
|
*
|
||||||
@@ -46,4 +50,27 @@ public interface IMaintenancePlanService extends BaseService<MaintenancePlan> {
|
|||||||
*/
|
*/
|
||||||
IPage<MaintenancePlanVO> selectMaintenancePlanPage(IPage<MaintenancePlanVO> page, MaintenancePlanVO maintenancePlan);
|
IPage<MaintenancePlanVO> selectMaintenancePlanPage(IPage<MaintenancePlanVO> page, MaintenancePlanVO maintenancePlan);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增或修改保养记录
|
||||||
|
*
|
||||||
|
* @param maintenancePlan 保养记录
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
boolean submit(MaintenancePlan maintenancePlan);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入保养记录
|
||||||
|
*
|
||||||
|
* @param data 导入数据
|
||||||
|
*/
|
||||||
|
void importMaintenancePlan(List<MaintenancePlanExcel> data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出保养记录
|
||||||
|
*
|
||||||
|
* @param queryWrapper 查询条件
|
||||||
|
* @return 导出数据
|
||||||
|
*/
|
||||||
|
List<MaintenancePlanExcel> exportMaintenancePlan(Wrapper<MaintenancePlan> queryWrapper);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,11 +25,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.springblade.transport.service;
|
package org.springblade.transport.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.springblade.core.mp.base.BaseService;
|
import org.springblade.core.mp.base.BaseService;
|
||||||
|
import org.springblade.transport.excel.MaintenanceRecordExcel;
|
||||||
import org.springblade.transport.pojo.entity.MaintenanceRecord;
|
import org.springblade.transport.pojo.entity.MaintenanceRecord;
|
||||||
import org.springblade.transport.pojo.vo.MaintenanceRecordVO;
|
import org.springblade.transport.pojo.vo.MaintenanceRecordVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 车辆维修记录 服务类
|
* 车辆维修记录 服务类
|
||||||
*
|
*
|
||||||
@@ -46,4 +50,27 @@ public interface IMaintenanceRecordService extends BaseService<MaintenanceRecord
|
|||||||
*/
|
*/
|
||||||
IPage<MaintenanceRecordVO> selectMaintenanceRecordPage(IPage<MaintenanceRecordVO> page, MaintenanceRecordVO maintenanceRecord);
|
IPage<MaintenanceRecordVO> selectMaintenanceRecordPage(IPage<MaintenanceRecordVO> page, MaintenanceRecordVO maintenanceRecord);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增或修改维修记录
|
||||||
|
*
|
||||||
|
* @param maintenanceRecord 维修记录
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
boolean submit(MaintenanceRecord maintenanceRecord);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入维修记录
|
||||||
|
*
|
||||||
|
* @param data 导入数据
|
||||||
|
*/
|
||||||
|
void importMaintenanceRecord(List<MaintenanceRecordExcel> data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出维修记录
|
||||||
|
*
|
||||||
|
* @param queryWrapper 查询条件
|
||||||
|
* @return 导出数据
|
||||||
|
*/
|
||||||
|
List<MaintenanceRecordExcel> exportMaintenanceRecord(Wrapper<MaintenanceRecord> queryWrapper);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,13 +25,24 @@
|
|||||||
*/
|
*/
|
||||||
package org.springblade.transport.service.impl;
|
package org.springblade.transport.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
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.Func;
|
||||||
|
import org.springblade.transport.excel.MaintenancePlanExcel;
|
||||||
import org.springblade.transport.mapper.MaintenancePlanMapper;
|
import org.springblade.transport.mapper.MaintenancePlanMapper;
|
||||||
import org.springblade.transport.pojo.entity.MaintenancePlan;
|
import org.springblade.transport.pojo.entity.MaintenancePlan;
|
||||||
import org.springblade.transport.pojo.vo.MaintenancePlanVO;
|
import org.springblade.transport.pojo.vo.MaintenancePlanVO;
|
||||||
import org.springblade.transport.service.IMaintenancePlanService;
|
import org.springblade.transport.service.IMaintenancePlanService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 车辆保养计划 服务实现类
|
* 车辆保养计划 服务实现类
|
||||||
@@ -41,9 +52,131 @@ import org.springframework.stereotype.Service;
|
|||||||
@Service
|
@Service
|
||||||
public class MaintenancePlanServiceImpl extends BaseServiceImpl<MaintenancePlanMapper, MaintenancePlan> implements IMaintenancePlanService {
|
public class MaintenancePlanServiceImpl extends BaseServiceImpl<MaintenancePlanMapper, MaintenancePlan> implements IMaintenancePlanService {
|
||||||
|
|
||||||
|
private static final int VEHICLE_NO_MAX_LENGTH = 30;
|
||||||
|
private static final int MAINTAINER_MAX_LENGTH = 20;
|
||||||
|
private static final int MAINTENANCE_ITEM_MAX_LENGTH = 100;
|
||||||
|
private static final int ADDRESS_MAX_LENGTH = 100;
|
||||||
|
private static final int REMARK_MAX_LENGTH = 500;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<MaintenancePlanVO> selectMaintenancePlanPage(IPage<MaintenancePlanVO> page, MaintenancePlanVO maintenancePlan) {
|
public IPage<MaintenancePlanVO> selectMaintenancePlanPage(IPage<MaintenancePlanVO> page, MaintenancePlanVO maintenancePlan) {
|
||||||
return page.setRecords(baseMapper.selectMaintenancePlanPage(page, maintenancePlan));
|
return page.setRecords(baseMapper.selectMaintenancePlanPage(page, maintenancePlan));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean submit(MaintenancePlan maintenancePlan) {
|
||||||
|
prepare(maintenancePlan);
|
||||||
|
validate(maintenancePlan);
|
||||||
|
return saveOrUpdate(maintenancePlan);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void importMaintenancePlan(List<MaintenancePlanExcel> data) {
|
||||||
|
if (Func.isEmpty(data)) {
|
||||||
|
throw new ServiceException("导入数据不能为空");
|
||||||
|
}
|
||||||
|
List<String> errorList = new ArrayList<>();
|
||||||
|
for (int index = 0; index < data.size(); index++) {
|
||||||
|
try {
|
||||||
|
MaintenancePlan maintenancePlan = Objects.requireNonNull(BeanUtil.copyProperties(data.get(index), MaintenancePlan.class));
|
||||||
|
submit(maintenancePlan);
|
||||||
|
} catch (Exception exception) {
|
||||||
|
errorList.add("第" + (index + 2) + "行:" + exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(errorList)) {
|
||||||
|
throw new ServiceException(String.join(";", errorList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MaintenancePlanExcel> exportMaintenancePlan(Wrapper<MaintenancePlan> queryWrapper) {
|
||||||
|
return list(queryWrapper).stream().map(maintenancePlan -> {
|
||||||
|
MaintenancePlanExcel excel = Objects.requireNonNull(BeanUtil.copyProperties(maintenancePlan, MaintenancePlanExcel.class));
|
||||||
|
excel.setMileage(nonNegative(maintenancePlan.getMileage()));
|
||||||
|
excel.setNextMaintenanceMileage(nonNegative(maintenancePlan.getNextMaintenanceMileage()));
|
||||||
|
if (Func.isEmpty(excel.getMileageUnit())) {
|
||||||
|
excel.setMileageUnit(defaultMileageUnit(maintenancePlan.getVehicleType()));
|
||||||
|
}
|
||||||
|
return excel;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void prepare(MaintenancePlan maintenancePlan) {
|
||||||
|
maintenancePlan.setVehicleType(trimToEmpty(maintenancePlan.getVehicleType()));
|
||||||
|
maintenancePlan.setVehicleNo(trimToEmpty(maintenancePlan.getVehicleNo()));
|
||||||
|
maintenancePlan.setMaintainer(trimToNull(maintenancePlan.getMaintainer()));
|
||||||
|
maintenancePlan.setMaintenanceItem(trimToNull(maintenancePlan.getMaintenanceItem()));
|
||||||
|
maintenancePlan.setStoreName(trimToNull(maintenancePlan.getStoreName()));
|
||||||
|
maintenancePlan.setContactPhone(trimToNull(maintenancePlan.getContactPhone()));
|
||||||
|
maintenancePlan.setAddress(trimToNull(maintenancePlan.getAddress()));
|
||||||
|
maintenancePlan.setRemark(trimToNull(maintenancePlan.getRemark()));
|
||||||
|
if (Func.isEmpty(maintenancePlan.getMileageUnit())) {
|
||||||
|
maintenancePlan.setMileageUnit(defaultMileageUnit(maintenancePlan.getVehicleType()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validate(MaintenancePlan maintenancePlan) {
|
||||||
|
if (Func.isEmpty(maintenancePlan.getVehicleType())) {
|
||||||
|
throw new ServiceException("车船类型不能为空");
|
||||||
|
}
|
||||||
|
if (!"车辆".equals(maintenancePlan.getVehicleType()) && !"船舶".equals(maintenancePlan.getVehicleType())) {
|
||||||
|
throw new ServiceException("车船类型不正确");
|
||||||
|
}
|
||||||
|
if (Func.isEmpty(maintenancePlan.getVehicleNo())) {
|
||||||
|
throw new ServiceException("车牌号/船号不能为空");
|
||||||
|
}
|
||||||
|
validateLength(maintenancePlan.getVehicleNo(), VEHICLE_NO_MAX_LENGTH, "车牌号/船号不能超过30字");
|
||||||
|
validateLength(maintenancePlan.getMaintainer(), MAINTAINER_MAX_LENGTH, "保养人不能超过20字");
|
||||||
|
validateLength(maintenancePlan.getMaintenanceItem(), MAINTENANCE_ITEM_MAX_LENGTH, "保养项目不能超过100字");
|
||||||
|
validateLength(maintenancePlan.getAddress(), ADDRESS_MAX_LENGTH, "地址不能超过100字");
|
||||||
|
validateLength(maintenancePlan.getRemark(), REMARK_MAX_LENGTH, "备注不能超过500字");
|
||||||
|
if (Func.isEmpty(maintenancePlan.getMaintenanceTime())) {
|
||||||
|
throw new ServiceException("保养时间不能为空");
|
||||||
|
}
|
||||||
|
if (Func.isEmpty(maintenancePlan.getCost())) {
|
||||||
|
throw new ServiceException("费用不能为空");
|
||||||
|
}
|
||||||
|
validateNonNegative(maintenancePlan.getCost(), "费用不能小于0");
|
||||||
|
validateNonNegative(maintenancePlan.getMileage(), "里程/航程数不能小于0");
|
||||||
|
validateNonNegative(maintenancePlan.getNextMaintenanceMileage(), "下次保养里程/航程不能小于0");
|
||||||
|
if (Func.isNotEmpty(maintenancePlan.getNextMaintenanceTime()) && maintenancePlan.getNextMaintenanceTime().isBefore(maintenancePlan.getMaintenanceTime())) {
|
||||||
|
throw new ServiceException("下次保养时间不能早于保养时间");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateLength(String value, int maxLength, String message) {
|
||||||
|
if (Func.isNotEmpty(value) && value.length() > maxLength) {
|
||||||
|
throw new ServiceException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateNonNegative(BigDecimal value, String message) {
|
||||||
|
if (Func.isNotEmpty(value) && value.compareTo(BigDecimal.ZERO) < 0) {
|
||||||
|
throw new ServiceException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal nonNegative(BigDecimal value) {
|
||||||
|
if (Func.isEmpty(value) || value.compareTo(BigDecimal.ZERO) >= 0) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String defaultMileageUnit(String vehicleType) {
|
||||||
|
return "船舶".equals(vehicleType) ? "海里" : "公里";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String trimToEmpty(String value) {
|
||||||
|
return value == null ? "" : value.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String trimToNull(String value) {
|
||||||
|
String trimValue = trimToEmpty(value);
|
||||||
|
return trimValue.isEmpty() ? null : trimValue;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,13 +25,24 @@
|
|||||||
*/
|
*/
|
||||||
package org.springblade.transport.service.impl;
|
package org.springblade.transport.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
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.Func;
|
||||||
|
import org.springblade.transport.excel.MaintenanceRecordExcel;
|
||||||
import org.springblade.transport.mapper.MaintenanceRecordMapper;
|
import org.springblade.transport.mapper.MaintenanceRecordMapper;
|
||||||
import org.springblade.transport.pojo.entity.MaintenanceRecord;
|
import org.springblade.transport.pojo.entity.MaintenanceRecord;
|
||||||
import org.springblade.transport.pojo.vo.MaintenanceRecordVO;
|
import org.springblade.transport.pojo.vo.MaintenanceRecordVO;
|
||||||
import org.springblade.transport.service.IMaintenanceRecordService;
|
import org.springblade.transport.service.IMaintenanceRecordService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 车辆维修记录 服务实现类
|
* 车辆维修记录 服务实现类
|
||||||
@@ -41,9 +52,132 @@ import org.springframework.stereotype.Service;
|
|||||||
@Service
|
@Service
|
||||||
public class MaintenanceRecordServiceImpl extends BaseServiceImpl<MaintenanceRecordMapper, MaintenanceRecord> implements IMaintenanceRecordService {
|
public class MaintenanceRecordServiceImpl extends BaseServiceImpl<MaintenanceRecordMapper, MaintenanceRecord> implements IMaintenanceRecordService {
|
||||||
|
|
||||||
|
private static final int VEHICLE_NO_MAX_LENGTH = 30;
|
||||||
|
private static final int MAINTAINER_MAX_LENGTH = 20;
|
||||||
|
private static final int LOCATION_MAX_LENGTH = 100;
|
||||||
|
private static final int REPLACED_PART_MAX_LENGTH = 200;
|
||||||
|
private static final int ADDRESS_MAX_LENGTH = 100;
|
||||||
|
private static final int REMARK_MAX_LENGTH = 500;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<MaintenanceRecordVO> selectMaintenanceRecordPage(IPage<MaintenanceRecordVO> page, MaintenanceRecordVO maintenanceRecord) {
|
public IPage<MaintenanceRecordVO> selectMaintenanceRecordPage(IPage<MaintenanceRecordVO> page, MaintenanceRecordVO maintenanceRecord) {
|
||||||
return page.setRecords(baseMapper.selectMaintenanceRecordPage(page, maintenanceRecord));
|
return page.setRecords(baseMapper.selectMaintenanceRecordPage(page, maintenanceRecord));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean submit(MaintenanceRecord maintenanceRecord) {
|
||||||
|
prepare(maintenanceRecord);
|
||||||
|
validate(maintenanceRecord);
|
||||||
|
return saveOrUpdate(maintenanceRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void importMaintenanceRecord(List<MaintenanceRecordExcel> data) {
|
||||||
|
if (Func.isEmpty(data)) {
|
||||||
|
throw new ServiceException("导入数据不能为空");
|
||||||
|
}
|
||||||
|
List<String> errorList = new ArrayList<>();
|
||||||
|
for (int index = 0; index < data.size(); index++) {
|
||||||
|
try {
|
||||||
|
MaintenanceRecord maintenanceRecord = Objects.requireNonNull(BeanUtil.copyProperties(data.get(index), MaintenanceRecord.class));
|
||||||
|
submit(maintenanceRecord);
|
||||||
|
} catch (Exception exception) {
|
||||||
|
errorList.add("第" + (index + 2) + "行:" + exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Func.isNotEmpty(errorList)) {
|
||||||
|
throw new ServiceException(String.join(";", errorList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
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()));
|
||||||
|
if (Func.isEmpty(excel.getMileageUnit())) {
|
||||||
|
excel.setMileageUnit(defaultMileageUnit(maintenanceRecord.getVehicleType()));
|
||||||
|
}
|
||||||
|
return excel;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void prepare(MaintenanceRecord maintenanceRecord) {
|
||||||
|
maintenanceRecord.setVehicleType(trimToEmpty(maintenanceRecord.getVehicleType()));
|
||||||
|
maintenanceRecord.setVehicleNo(trimToEmpty(maintenanceRecord.getVehicleNo()));
|
||||||
|
maintenanceRecord.setMaintainer(trimToNull(maintenanceRecord.getMaintainer()));
|
||||||
|
maintenanceRecord.setLocation(trimToNull(maintenanceRecord.getLocation()));
|
||||||
|
maintenanceRecord.setReplacedPart(trimToNull(maintenanceRecord.getReplacedPart()));
|
||||||
|
maintenanceRecord.setCompany(trimToNull(maintenanceRecord.getCompany()));
|
||||||
|
maintenanceRecord.setContact(trimToNull(maintenanceRecord.getContact()));
|
||||||
|
maintenanceRecord.setAddress(trimToNull(maintenanceRecord.getAddress()));
|
||||||
|
maintenanceRecord.setRemark(trimToNull(maintenanceRecord.getRemark()));
|
||||||
|
if (Func.isEmpty(maintenanceRecord.getMileageUnit())) {
|
||||||
|
maintenanceRecord.setMileageUnit(defaultMileageUnit(maintenanceRecord.getVehicleType()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validate(MaintenanceRecord maintenanceRecord) {
|
||||||
|
if (Func.isEmpty(maintenanceRecord.getVehicleType())) {
|
||||||
|
throw new ServiceException("车船类型不能为空");
|
||||||
|
}
|
||||||
|
if (!"车辆".equals(maintenanceRecord.getVehicleType()) && !"船舶".equals(maintenanceRecord.getVehicleType())) {
|
||||||
|
throw new ServiceException("车船类型不正确");
|
||||||
|
}
|
||||||
|
if (Func.isEmpty(maintenanceRecord.getVehicleNo())) {
|
||||||
|
throw new ServiceException("车牌号/船号不能为空");
|
||||||
|
}
|
||||||
|
validateLength(maintenanceRecord.getVehicleNo(), VEHICLE_NO_MAX_LENGTH, "车牌号/船号不能超过30字");
|
||||||
|
validateLength(maintenanceRecord.getMaintainer(), MAINTAINER_MAX_LENGTH, "维修人不能超过20字");
|
||||||
|
validateLength(maintenanceRecord.getLocation(), LOCATION_MAX_LENGTH, "维修位置不能超过100字");
|
||||||
|
validateLength(maintenanceRecord.getReplacedPart(), REPLACED_PART_MAX_LENGTH, "更换零件不能超过200字");
|
||||||
|
validateLength(maintenanceRecord.getAddress(), ADDRESS_MAX_LENGTH, "地址不能超过100字");
|
||||||
|
validateLength(maintenanceRecord.getRemark(), REMARK_MAX_LENGTH, "备注不能超过500字");
|
||||||
|
if (Func.isEmpty(maintenanceRecord.getMaintenanceTime())) {
|
||||||
|
throw new ServiceException("维修时间不能为空");
|
||||||
|
}
|
||||||
|
if (Func.isEmpty(maintenanceRecord.getCost())) {
|
||||||
|
throw new ServiceException("费用不能为空");
|
||||||
|
}
|
||||||
|
validateNonNegative(maintenanceRecord.getCost(), "费用不能小于0");
|
||||||
|
validateNonNegative(maintenanceRecord.getMileage(), "里程/航程数不能小于0");
|
||||||
|
if (Func.isNotEmpty(maintenanceRecord.getFactoryTime()) && maintenanceRecord.getFactoryTime().isBefore(maintenanceRecord.getMaintenanceTime())) {
|
||||||
|
throw new ServiceException("出厂时间不能早于维修时间");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateLength(String value, int maxLength, String message) {
|
||||||
|
if (Func.isNotEmpty(value) && value.length() > maxLength) {
|
||||||
|
throw new ServiceException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateNonNegative(BigDecimal value, String message) {
|
||||||
|
if (Func.isNotEmpty(value) && value.compareTo(BigDecimal.ZERO) < 0) {
|
||||||
|
throw new ServiceException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal nonNegative(BigDecimal value) {
|
||||||
|
if (Func.isEmpty(value) || value.compareTo(BigDecimal.ZERO) >= 0) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String defaultMileageUnit(String vehicleType) {
|
||||||
|
return "船舶".equals(vehicleType) ? "海里" : "公里";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String trimToEmpty(String value) {
|
||||||
|
return value == null ? "" : value.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String trimToNull(String value) {
|
||||||
|
String trimValue = trimToEmpty(value);
|
||||||
|
return trimValue.isEmpty() ? null : trimValue;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1397,7 +1397,7 @@ CREATE TABLE `blade_vehicle_maintenance_plan` (
|
|||||||
`next_maintenance_time` datetime NULL DEFAULT NULL COMMENT '下次保养时间',
|
`next_maintenance_time` datetime NULL DEFAULT NULL COMMENT '下次保养时间',
|
||||||
`next_maintenance_mileage` decimal(18,2) NULL DEFAULT NULL COMMENT '下次保养里程/航程',
|
`next_maintenance_mileage` decimal(18,2) NULL DEFAULT NULL COMMENT '下次保养里程/航程',
|
||||||
`attachments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '附件',
|
`attachments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '附件',
|
||||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建时间',
|
||||||
@@ -1454,11 +1454,17 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
|
|||||||
(1980000000000000004, 1980000000000000002, 'maintenance_plan_edit', '修改', 'edit', '/vehicle/maintenance-plan/edit', 'form', 2, 2, 2, 1, '', NULL, 0),
|
(1980000000000000004, 1980000000000000002, 'maintenance_plan_edit', '修改', 'edit', '/vehicle/maintenance-plan/edit', 'form', 2, 2, 2, 1, '', NULL, 0),
|
||||||
(1980000000000000005, 1980000000000000002, 'maintenance_plan_delete', '删除', 'delete', '/api/blade-transport/maintenance-plan/remove', 'delete', 3, 2, 3, 1, '', NULL, 0),
|
(1980000000000000005, 1980000000000000002, 'maintenance_plan_delete', '删除', 'delete', '/api/blade-transport/maintenance-plan/remove', 'delete', 3, 2, 3, 1, '', NULL, 0),
|
||||||
(1980000000000000006, 1980000000000000002, 'maintenance_plan_view', '查看', 'view', '/vehicle/maintenance-plan/view', 'file-text', 4, 2, 2, 1, '', NULL, 0),
|
(1980000000000000006, 1980000000000000002, 'maintenance_plan_view', '查看', 'view', '/vehicle/maintenance-plan/view', 'file-text', 4, 2, 2, 1, '', NULL, 0),
|
||||||
|
(1980000000000000007, 1980000000000000002, 'maintenance_plan_import', '批量导入', 'import', '', 'upload', 5, 2, 0, 1, '', NULL, 0),
|
||||||
|
(1980000000000000008, 1980000000000000002, 'maintenance_plan_template', '下载模板', 'template', '', 'download', 6, 2, 0, 1, '', NULL, 0),
|
||||||
|
(1980000000000000009, 1980000000000000002, 'maintenance_plan_export', '批量导出', 'export', '', 'download', 7, 2, 0, 1, '', NULL, 0),
|
||||||
(1980000000000000010, 1980000000000000001, 'maintenance_record', '维修记录', 'menu', '/vehicle/maintenance-record', 'iconfont icon-weixiu', 2, 1, 0, 1, '', NULL, 0),
|
(1980000000000000010, 1980000000000000001, 'maintenance_record', '维修记录', 'menu', '/vehicle/maintenance-record', 'iconfont icon-weixiu', 2, 1, 0, 1, '', NULL, 0),
|
||||||
(1980000000000000011, 1980000000000000010, 'maintenance_record_add', '新增', 'add', '/vehicle/maintenance-record/add', 'plus', 1, 2, 1, 1, '', NULL, 0),
|
(1980000000000000011, 1980000000000000010, 'maintenance_record_add', '新增', 'add', '/vehicle/maintenance-record/add', 'plus', 1, 2, 1, 1, '', NULL, 0),
|
||||||
(1980000000000000012, 1980000000000000010, 'maintenance_record_edit', '修改', 'edit', '/vehicle/maintenance-record/edit', 'form', 2, 2, 2, 1, '', NULL, 0),
|
(1980000000000000012, 1980000000000000010, 'maintenance_record_edit', '修改', 'edit', '/vehicle/maintenance-record/edit', 'form', 2, 2, 2, 1, '', NULL, 0),
|
||||||
(1980000000000000013, 1980000000000000010, 'maintenance_record_delete', '删除', 'delete', '/api/blade-transport/maintenance-record/remove', 'delete', 3, 2, 3, 1, '', NULL, 0),
|
(1980000000000000013, 1980000000000000010, 'maintenance_record_delete', '删除', 'delete', '/api/blade-transport/maintenance-record/remove', 'delete', 3, 2, 3, 1, '', NULL, 0),
|
||||||
(1980000000000000014, 1980000000000000010, 'maintenance_record_view', '查看', 'view', '/vehicle/maintenance-record/view', 'file-text', 4, 2, 2, 1, '', NULL, 0);
|
(1980000000000000014, 1980000000000000010, 'maintenance_record_view', '查看', 'view', '/vehicle/maintenance-record/view', 'file-text', 4, 2, 2, 1, '', NULL, 0),
|
||||||
|
(1980000000000000015, 1980000000000000010, 'maintenance_record_import', '批量导入', 'import', '', 'upload', 5, 2, 0, 1, '', NULL, 0),
|
||||||
|
(1980000000000000016, 1980000000000000010, 'maintenance_record_template', '下载模板', 'template', '', 'download', 6, 2, 0, 1, '', NULL, 0),
|
||||||
|
(1980000000000000017, 1980000000000000010, 'maintenance_record_export', '批量导出', 'export', '', 'download', 7, 2, 0, 1, '', NULL, 0);
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for blade_port_terminal
|
-- Table structure for blade_port_terminal
|
||||||
@@ -1477,7 +1483,7 @@ CREATE TABLE `blade_port_terminal` (
|
|||||||
`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 '数据来源',
|
||||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建时间',
|
||||||
@@ -1523,7 +1529,7 @@ CREATE TABLE `blade_railway_station` (
|
|||||||
`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 '所属城市',
|
||||||
`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 '数据来源',
|
||||||
`remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建部门',
|
||||||
@@ -1571,7 +1577,7 @@ CREATE TABLE `blade_airport_master` (
|
|||||||
`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 '所属城市',
|
||||||
`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 '数据来源',
|
||||||
`remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建部门',
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ CREATE TABLE `blade_airport_master` (
|
|||||||
`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 '所属城市',
|
||||||
`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 '数据来源',
|
||||||
`remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建部门',
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ CREATE TABLE `blade_port_terminal` (
|
|||||||
`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 '数据来源',
|
||||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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,7 +15,7 @@ CREATE TABLE `blade_railway_station` (
|
|||||||
`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 '所属城市',
|
||||||
`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 '数据来源',
|
||||||
`remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建部门',
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ CREATE TABLE `blade_airport_master` (
|
|||||||
`city_name` varchar(128) DEFAULT NULL COMMENT '所属城市',
|
`city_name` varchar(128) 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 '纬度',
|
||||||
`data_source` varchar(20) DEFAULT '手工导入' COMMENT '数据来源',
|
`data_source` varchar(20) DEFAULT '手动录入' COMMENT '数据来源',
|
||||||
`remark` varchar(200) DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建部门',
|
||||||
@@ -55,7 +55,7 @@ CREATE TABLE `blade_airport_master` (
|
|||||||
-- Records of blade_airport_master
|
-- Records of blade_airport_master
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO `blade_airport_master` (`id`, `code`, `iata_code`, `icao_code`, `name`, `short_name`, `province_code`, `province_name`, `city_code`, `city_name`, `longitude`, `latitude`, `data_source`, `remark`, `create_user`, `create_dept`, `create_time`, `update_user`, `update_time`, `status`, `is_deleted`) VALUES (2075435793608843266, 'JC-ASD', 'ASD', 'ASDA', '桂林两江国际机场', NULL, '45', '广西壮族自治区', '4503', '桂林市', NULL, NULL, '手工导入', NULL, 1123598821738675201, 1123598813738675201, '2026-07-10 12:23:48', 1123598821738675201, '2026-07-10 12:23:48', 1, 0);
|
INSERT INTO `blade_airport_master` (`id`, `code`, `iata_code`, `icao_code`, `name`, `short_name`, `province_code`, `province_name`, `city_code`, `city_name`, `longitude`, `latitude`, `data_source`, `remark`, `create_user`, `create_dept`, `create_time`, `update_user`, `update_time`, `status`, `is_deleted`) VALUES (2075435793608843266, 'JC-ASD', 'ASD', 'ASDA', '桂林两江国际机场', NULL, '45', '广西壮族自治区', '4503', '桂林市', NULL, NULL, '手动录入', NULL, 1123598821738675201, 1123598813738675201, '2026-07-10 12:23:48', 1123598821738675201, '2026-07-10 12:23:48', 1, 0);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
@@ -1023,10 +1023,16 @@ INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `s
|
|||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437465437446146, 2075437237678350338, 'maintenance_plan_add', '新增', 'maintenance_plan_add', '', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437465437446146, 2075437237678350338, 'maintenance_plan_add', '新增', 'maintenance_plan_add', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437512807915521, 2075437237678350338, 'maintenance_plan_view', '查看', 'maintenance_plan_view', '', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437512807915521, 2075437237678350338, 'maintenance_plan_view', '查看', 'maintenance_plan_view', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437589123276801, 2075437237678350338, 'maintenance_plan_edit', '编辑', 'maintenance_plan_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437589123276801, 2075437237678350338, 'maintenance_plan_edit', '编辑', 'maintenance_plan_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437589123276802, 2075437237678350338, 'maintenance_plan_import', '批量导入', 'maintenance_plan_import', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437589123276803, 2075437237678350338, 'maintenance_plan_template', '下载模板', 'maintenance_plan_template', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437589123276804, 2075437237678350338, 'maintenance_plan_export', '批量导出', 'maintenance_plan_export', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437679531499522, 2075437082342301697, 'maintenance_record_add', '新增', 'maintenance_record_add', '', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075437679531499522, 2075437082342301697, 'maintenance_record_add', '新增', 'maintenance_record_add', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438117404254210, 2075437082342301697, 'maintenance_record_view', '查看', 'maintenance_record_view', '', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438117404254210, 2075437082342301697, 'maintenance_record_view', '查看', 'maintenance_record_view', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438156335783937, 2075437082342301697, 'maintenance_record_delete', '删除', 'maintenance_record_delete', '', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438156335783937, 2075437082342301697, 'maintenance_record_delete', '删除', 'maintenance_record_delete', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438207636316162, 2075437082342301697, 'maintenance_record_edit', '编辑', 'maintenance_record_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438207636316162, 2075437082342301697, 'maintenance_record_edit', '编辑', 'maintenance_record_edit', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438207636316163, 2075437082342301697, 'maintenance_record_import', '批量导入', 'maintenance_record_import', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438207636316164, 2075437082342301697, 'maintenance_record_template', '下载模板', 'maintenance_record_template', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075438207636316165, 2075437082342301697, 'maintenance_record_export', '批量导出', 'maintenance_record_export', '', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075444068651868162, 2075437082342301697, 'maintenance_record_list', '列表', 'maintenance_record_list', '/blade-transport/maintenance-record/list', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075444068651868162, 2075437082342301697, 'maintenance_record_list', '列表', 'maintenance_record_list', '/blade-transport/maintenance-record/list', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075444261606629377, 2075437237678350338, 'maintenance_plan_list', '列表', 'maintenance_plan_list', '/blade-transport/maintenance-plan/list', '', 1, 2, 0, 1, NULL, '', 0);
|
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `component`, `remark`, `is_deleted`) VALUES (2075444261606629377, 2075437237678350338, 'maintenance_plan_list', '列表', 'maintenance_plan_list', '/blade-transport/maintenance-plan/list', '', 1, 2, 0, 1, NULL, '', 0);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
@@ -1211,7 +1217,7 @@ CREATE TABLE `blade_port_terminal` (
|
|||||||
`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 '纬度',
|
||||||
`data_source` varchar(20) DEFAULT '手工导入' COMMENT '数据来源',
|
`data_source` varchar(20) DEFAULT '手工导入' COMMENT '数据来源',
|
||||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建时间',
|
||||||
@@ -1315,7 +1321,7 @@ CREATE TABLE `blade_railway_station` (
|
|||||||
`city_name` varchar(128) DEFAULT NULL COMMENT '所属城市',
|
`city_name` varchar(128) 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 '纬度',
|
||||||
`data_source` varchar(20) DEFAULT '手工导入' COMMENT '数据来源',
|
`data_source` varchar(20) DEFAULT '手动' COMMENT '数据来源',
|
||||||
`remark` varchar(200) DEFAULT NULL COMMENT '备注',
|
`remark` varchar(200) 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 '创建部门',
|
||||||
@@ -1336,7 +1342,7 @@ CREATE TABLE `blade_railway_station` (
|
|||||||
-- Records of blade_railway_station
|
-- Records of blade_railway_station
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO `blade_railway_station` (`id`, `code`, `tmis_code`, `telegraph_code`, `name`, `railway_line`, `province_code`, `province_name`, `city_code`, `city_name`, `longitude`, `latitude`, `data_source`, `remark`, `create_user`, `create_dept`, `create_time`, `update_user`, `update_time`, `status`, `is_deleted`) VALUES (2075435204602732545, 'TL12312', '12312', 'ASD', '南宁站', NULL, '45', '广西壮族自治区', '4501', '南宁市', NULL, NULL, '手工导入', NULL, 1123598821738675201, 1123598813738675201, '2026-07-10 12:21:27', 1123598821738675201, '2026-07-10 12:21:36', 1, 0);
|
INSERT INTO `blade_railway_station` (`id`, `code`, `tmis_code`, `telegraph_code`, `name`, `railway_line`, `province_code`, `province_name`, `city_code`, `city_name`, `longitude`, `latitude`, `data_source`, `remark`, `create_user`, `create_dept`, `create_time`, `update_user`, `update_time`, `status`, `is_deleted`) VALUES (2075435204602732545, 'TL12312', '12312', 'ASD', '南宁站', NULL, '45', '广西壮族自治区', '4501', '南宁市', NULL, NULL, '手动', NULL, 1123598821738675201, 1123598813738675201, '2026-07-10 12:21:27', 1123598821738675201, '2026-07-10 12:21:36', 1, 0);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user