Browse Source

feat: 添加资源管理,口岸管理,码头管理

luofeiyun 4 weeks ago
parent
commit
91222c603e
27 changed files with 1280 additions and 3 deletions
  1. 1 0
      pom.xml
  2. 24 0
      ship-module-resource/pom.xml
  3. 45 0
      ship-module-resource/ship-module-resource-api/pom.xml
  4. 12 0
      ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/enums/ErrorCodeConstants.java
  5. 121 0
      ship-module-resource/ship-module-resource-biz/pom.xml
  6. 110 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/dock/ResourceDockController.java
  7. 62 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/dock/vo/ResourceDockPageReqVO.java
  8. 87 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/dock/vo/ResourceDockRespVO.java
  9. 56 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/dock/vo/ResourceDockSaveReqVO.java
  10. 102 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/port/ResourcePortController.java
  11. 40 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/port/vo/ResourcePortPageReqVO.java
  12. 47 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/port/vo/ResourcePortRespVO.java
  13. 34 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/port/vo/ResourcePortSaveReqVO.java
  14. 87 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/dock/ResourceDockDO.java
  15. 56 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/port/ResourcePortDO.java
  16. 39 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/dock/ResourceDockMapper.java
  17. 37 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/port/ResourcePortMapper.java
  18. 24 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/framework/web/config/ResourceWebConfiguration.java
  19. 4 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/framework/web/package-info.java
  20. 55 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/dock/ResourceDockService.java
  21. 74 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/dock/ResourceDockServiceImpl.java
  22. 67 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/port/ResourcePortService.java
  23. 87 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/port/ResourcePortServiceImpl.java
  24. 5 0
      ship-server-web/pom.xml
  25. 2 2
      ship-server-web/src/main/java/com/yc/ship/server/ServerApplication.java
  26. 1 0
      ship-server-web/src/main/resources/application-local.yaml
  27. 1 1
      ship-server-web/src/main/resources/application.yaml

+ 1 - 0
pom.xml

@@ -13,6 +13,7 @@
         <module>ship-module-product</module>
         <module>ship-module-trade</module>
         <module>ship-server-web</module>
+        <module>ship-module-resource</module>
     </modules>
 
     <name>${project.artifactId}</name>

+ 24 - 0
ship-module-resource/pom.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ship-ota-server</artifactId>
+        <groupId>com.yc.ship</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ship-module-resource</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>ship-module-resource-api</module>
+        <module>ship-module-resource-biz</module>
+    </modules>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>

+ 45 - 0
ship-module-resource/ship-module-resource-api/pom.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ship-module-resource</artifactId>
+        <groupId>com.yc.ship</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+
+    <artifactId>ship-module-resource-api</artifactId>
+    <description>
+        资源 模块 API,暴露给其它模块调用
+    </description>
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <!-- 参数校验 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>2.2.20</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+</project>

+ 12 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/enums/ErrorCodeConstants.java

@@ -0,0 +1,12 @@
+package com.yc.ship.module.resource.enums;
+
+import com.yc.ship.framework.common.exception.ErrorCode;
+
+public interface ErrorCodeConstants {
+    /**
+     * 资源管理
+     */
+    ErrorCode PORT_NOT_EXISTS = new ErrorCode(1_003_000_001, "口岸不存在");
+
+    ErrorCode DOCK_NOT_EXISTS = new ErrorCode(1_003_000_001, "码头不存在");
+}

+ 121 - 0
ship-module-resource/ship-module-resource-biz/pom.xml

@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ship-module-resource</artifactId>
+        <groupId>com.yc.ship</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ship-module-resource-biz</artifactId>
+    <description>
+        resource 模块下,我们放基础资源模块的业务代码。
+    </description>
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>ship-module-resource-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>module-infra-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
+        <!-- 业务组件 -->
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-biz-data-permission</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-biz-tenant</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-biz-ip</artifactId>
+        </dependency>
+
+        <!-- Web 相关 -->
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+        <!-- DB 相关 -->
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-mybatis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-redis</artifactId>
+        </dependency>
+
+        <!-- Job 定时任务相关 -->
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-job</artifactId>
+        </dependency>
+
+        <!-- 消息队列相关 -->
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-mq</artifactId>
+        </dependency>
+
+        <!-- Test 测试相关 -->
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- 工具类相关 -->
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>spring-boot-starter-excel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+        </dependency>
+
+        <!-- 三方云服务相关 -->
+        <dependency>
+            <groupId>me.zhyd.oauth</groupId>
+            <artifactId>JustAuth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) -->
+        </dependency>
+        <dependency>
+            <groupId>com.xkcoding.justauth</groupId>
+            <artifactId>justauth-spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>wx-java-mp-spring-boot-starter</artifactId> <!-- 微信登录(公众号) -->
+        </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>wx-java-miniapp-spring-boot-starter</artifactId>  <!-- 微信登录(小程序) -->
+        </dependency>
+
+        <dependency>
+            <groupId>com.anji-plus</groupId>
+            <artifactId>captcha-spring-boot-starter</artifactId> <!-- 验证码,一般用于登录使用 -->
+        </dependency>
+    </dependencies>
+
+</project>

+ 110 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/dock/ResourceDockController.java

@@ -0,0 +1,110 @@
+package com.yc.ship.module.resource.controller.admin.dock;
+
+import com.yc.ship.framework.common.util.collection.CollectionUtils;
+import com.yc.ship.module.resource.dal.dataobject.port.ResourcePortDO;
+import com.yc.ship.module.resource.service.port.ResourcePortService;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.yc.ship.module.resource.controller.admin.dock.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.dock.ResourceDockDO;
+import com.yc.ship.module.resource.service.dock.ResourceDockService;
+
+@Tag(name = "管理后台 - 资源管理-口岸码头管理")
+@RestController
+@RequestMapping("/resource/dock")
+@Validated
+public class ResourceDockController {
+
+    @Resource
+    private ResourceDockService dockService;
+
+    @Resource
+    private ResourcePortService portService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建资源管理-口岸码头管理")
+    @PreAuthorize("@ss.hasPermission('resource:dock:create')")
+    public CommonResult<Long> createDock(@Valid @RequestBody ResourceDockSaveReqVO createReqVO) {
+        return success(dockService.createDock(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新资源管理-口岸码头管理")
+    @PreAuthorize("@ss.hasPermission('resource:dock:update')")
+    public CommonResult<Boolean> updateDock(@Valid @RequestBody ResourceDockSaveReqVO updateReqVO) {
+        dockService.updateDock(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除资源管理-口岸码头管理")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('resource:dock:delete')")
+    public CommonResult<Boolean> deleteDock(@RequestParam("id") Long id) {
+        dockService.deleteDock(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得资源管理-口岸码头管理")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('resource:dock:query')")
+    public CommonResult<ResourceDockRespVO> getDock(@RequestParam("id") Long id) {
+        ResourceDockDO dock = dockService.getDock(id);
+        return success(BeanUtils.toBean(dock, ResourceDockRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得资源管理-口岸码头管理分页")
+    @PreAuthorize("@ss.hasPermission('resource:dock:query')")
+    public CommonResult<PageResult<ResourceDockRespVO>> getDockPage(@Valid ResourceDockPageReqVO pageReqVO) {
+        PageResult<ResourceDockDO> pageResult = dockService.getDockPage(pageReqVO);
+        PageResult<ResourceDockRespVO> page = BeanUtils.toBean(pageResult, ResourceDockRespVO.class);
+        List<ResourceDockRespVO> list = page.getList();
+        List<Long> portIds = CollectionUtils.convertList(list, ResourceDockRespVO::getPortId);
+        List<ResourcePortDO> portList = portService.getList(portIds);
+        Map<Long, ResourcePortDO> longResourcePortDOMap = CollectionUtils.convertMap(portList, ResourcePortDO::getId);
+        list.stream().forEach(item -> {
+            item.setPortName(longResourcePortDOMap.get(item.getPortId()).getName());
+            item.setArea(item.getProvinceName()+item.getCityName()+item.getCountyName());
+        });
+        return success(page);
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出资源管理-口岸码头管理 Excel")
+    @PreAuthorize("@ss.hasPermission('resource:dock:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportDockExcel(@Valid ResourceDockPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ResourceDockDO> list = dockService.getDockPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "资源管理-口岸码头管理.xls", "数据", ResourceDockRespVO.class,
+                        BeanUtils.toBean(list, ResourceDockRespVO.class));
+    }
+
+}

+ 62 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/dock/vo/ResourceDockPageReqVO.java

@@ -0,0 +1,62 @@
+package com.yc.ship.module.resource.controller.admin.dock.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.yc.ship.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 资源管理-口岸码头管理分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ResourceDockPageReqVO extends PageParam {
+
+    @Schema(description = "码头名称", example = "赵六")
+    private String name;
+
+    @Schema(description = "经度")
+    private BigDecimal longitude;
+
+    @Schema(description = "纬度")
+    private BigDecimal latitude;
+
+    @Schema(description = "省份ID", example = "32550")
+    private Integer provinceId;
+
+    @Schema(description = "省份名称", example = "芋艿")
+    private String provinceName;
+
+    @Schema(description = "城市ID", example = "32155")
+    private Integer cityId;
+
+    @Schema(description = "城市名称", example = "王五")
+    private String cityName;
+
+    @Schema(description = "区县ID", example = "26907")
+    private Integer countyId;
+
+    @Schema(description = "区县名称", example = "芋艿")
+    private String countyName;
+
+    @Schema(description = "详细地址")
+    private String address;
+
+    @Schema(description = "所属口岸", example = "17721")
+    private Long portId;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "状态", example = "2")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 87 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/dock/vo/ResourceDockRespVO.java

@@ -0,0 +1,87 @@
+package com.yc.ship.module.resource.controller.admin.dock.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+import com.yc.ship.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+
+@Schema(description = "管理后台 - 资源管理-口岸码头管理 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ResourceDockRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31588")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "码头名称", example = "赵六")
+    @ExcelProperty("码头名称")
+    private String name;
+
+    @Schema(description = "经度")
+    @ExcelProperty("经度")
+    private BigDecimal longitude;
+
+    @Schema(description = "纬度")
+    @ExcelProperty("纬度")
+    private BigDecimal latitude;
+
+    @Schema(description = "省份ID", example = "32550")
+    @ExcelProperty("省份ID")
+    private Integer provinceId;
+
+    @Schema(description = "省份名称", example = "芋艿")
+    @ExcelProperty("省份名称")
+    private String provinceName;
+
+    @Schema(description = "城市ID", example = "32155")
+    @ExcelProperty("城市ID")
+    private Integer cityId;
+
+    @Schema(description = "城市名称", example = "王五")
+    @ExcelProperty("城市名称")
+    private String cityName;
+
+    @Schema(description = "区县ID", example = "26907")
+    @ExcelProperty("区县ID")
+    private Integer countyId;
+
+    @Schema(description = "区县名称", example = "芋艿")
+    @ExcelProperty("区县名称")
+    private String countyName;
+
+    @Schema(description = "所属城市")
+    @ExcelProperty("所属城市")
+    private String area;
+
+    @Schema(description = "所在位置")
+    @ExcelProperty("所在位置")
+    private String address;
+
+    @Schema(description = "所属口岸", example = "17721")
+    @ExcelProperty("所属口岸")
+    private Long portId;
+
+    @Schema(description = "所属口岸名称", example = "赵六")
+    @ExcelProperty("所属口岸名称")
+    private String portName;
+
+    @Schema(description = "备注", example = "你猜")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 56 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/dock/vo/ResourceDockSaveReqVO.java

@@ -0,0 +1,56 @@
+package com.yc.ship.module.resource.controller.admin.dock.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 资源管理-口岸码头管理新增/修改 Request VO")
+@Data
+public class ResourceDockSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31588")
+    private Long id;
+
+    @Schema(description = "码头名称", example = "赵六")
+    private String name;
+
+    @Schema(description = "经度")
+    private BigDecimal longitude;
+
+    @Schema(description = "纬度")
+    private BigDecimal latitude;
+
+    @Schema(description = "省份ID", example = "32550")
+    private Integer provinceId;
+
+    @Schema(description = "省份名称", example = "芋艿")
+    private String provinceName;
+
+    @Schema(description = "城市ID", example = "32155")
+    private Integer cityId;
+
+    @Schema(description = "城市名称", example = "王五")
+    private String cityName;
+
+    @Schema(description = "区县ID", example = "26907")
+    private Integer countyId;
+
+    @Schema(description = "区县名称", example = "芋艿")
+    private String countyName;
+
+    @Schema(description = "详细地址")
+    private String address;
+
+    @Schema(description = "所属口岸", example = "17721")
+    private Long portId;
+
+    @Schema(description = "备注", example = "你猜")
+    private String remark;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+}

+ 102 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/port/ResourcePortController.java

@@ -0,0 +1,102 @@
+package com.yc.ship.module.resource.controller.admin.port;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.yc.ship.module.resource.controller.admin.port.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.port.ResourcePortDO;
+import com.yc.ship.module.resource.service.port.ResourcePortService;
+
+@Tag(name = "管理后台 - 资源管理-口岸管理")
+@RestController
+@RequestMapping("/resource/port")
+@Validated
+public class ResourcePortController {
+
+    @Resource
+    private ResourcePortService portService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建资源管理-口岸管理")
+    @PreAuthorize("@ss.hasPermission('resource:port:create')")
+    public CommonResult<Long> createPort(@Valid @RequestBody ResourcePortSaveReqVO createReqVO) {
+        return success(portService.createPort(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新资源管理-口岸管理")
+    @PreAuthorize("@ss.hasPermission('resource:port:update')")
+    public CommonResult<Boolean> updatePort(@Valid @RequestBody ResourcePortSaveReqVO updateReqVO) {
+        portService.updatePort(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除资源管理-口岸管理")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('resource:port:delete')")
+    public CommonResult<Boolean> deletePort(@RequestParam("id") Long id) {
+        portService.deletePort(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得资源管理-口岸管理")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('resource:port:query')")
+    public CommonResult<ResourcePortRespVO> getPort(@RequestParam("id") Long id) {
+        ResourcePortDO port = portService.getPort(id);
+        return success(BeanUtils.toBean(port, ResourcePortRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得资源管理-口岸管理分页")
+    @PreAuthorize("@ss.hasPermission('resource:port:query')")
+    public CommonResult<PageResult<ResourcePortRespVO>> getPortPage(@Valid ResourcePortPageReqVO pageReqVO) {
+        PageResult<ResourcePortDO> pageResult = portService.getPortPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ResourcePortRespVO.class));
+    }
+
+    @GetMapping("/enableList")
+    @Operation(summary = "获得启用的口岸列表")
+    public CommonResult<List<ResourcePortRespVO>> enableList() {
+        List<ResourcePortDO> list = portService.enableList();
+        return success(BeanUtils.toBean(list, ResourcePortRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出资源管理-口岸管理 Excel")
+    @PreAuthorize("@ss.hasPermission('resource:port:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportPortExcel(@Valid ResourcePortPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ResourcePortDO> list = portService.getPortPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "资源管理-口岸管理.xls", "数据", ResourcePortRespVO.class,
+                        BeanUtils.toBean(list, ResourcePortRespVO.class));
+    }
+
+}

+ 40 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/port/vo/ResourcePortPageReqVO.java

@@ -0,0 +1,40 @@
+package com.yc.ship.module.resource.controller.admin.port.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.yc.ship.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 资源管理-口岸管理分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ResourcePortPageReqVO extends PageParam {
+
+    @Schema(description = "口岸名称", example = "芋艿")
+    private String name;
+
+    @Schema(description = "地理位置")
+    private String address;
+
+    @Schema(description = "省份ID", example = "790")
+    private Integer provinceId;
+
+    @Schema(description = "省份名称", example = "赵六")
+    private String provinceName;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+    @Schema(description = "状态", example = "2")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 47 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/port/vo/ResourcePortRespVO.java

@@ -0,0 +1,47 @@
+package com.yc.ship.module.resource.controller.admin.port.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 资源管理-口岸管理 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ResourcePortRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10116")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "口岸名称", example = "芋艿")
+    @ExcelProperty("口岸名称")
+    private String name;
+
+    @Schema(description = "地理位置")
+    @ExcelProperty("地理位置")
+    private String address;
+
+    @Schema(description = "省份ID", example = "790")
+    @ExcelProperty("省份ID")
+    private Integer provinceId;
+
+    @Schema(description = "省份名称", example = "赵六")
+    @ExcelProperty("省份名称")
+    private String provinceName;
+
+    @Schema(description = "备注", example = "你说的对")
+    @ExcelProperty("备注")
+    private String remark;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("状态")
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 34 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/port/vo/ResourcePortSaveReqVO.java

@@ -0,0 +1,34 @@
+package com.yc.ship.module.resource.controller.admin.port.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 资源管理-口岸管理新增/修改 Request VO")
+@Data
+public class ResourcePortSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10116")
+    private Long id;
+
+    @Schema(description = "口岸名称", example = "芋艿")
+    private String name;
+
+    @Schema(description = "地理位置")
+    private String address;
+
+    @Schema(description = "省份ID", example = "790")
+    private Integer provinceId;
+
+    @Schema(description = "省份名称", example = "赵六")
+    private String provinceName;
+
+    @Schema(description = "备注", example = "你说的对")
+    private String remark;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+}

+ 87 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/dock/ResourceDockDO.java

@@ -0,0 +1,87 @@
+package com.yc.ship.module.resource.dal.dataobject.dock;
+
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 资源管理-口岸码头管理 DO
+ *
+ * @author flycloud
+ */
+@TableName("resource_dock")
+@KeySequence("resource_dock_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResourceDockDO extends BaseDO {
+
+    /**
+     * ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 码头名称
+     */
+    private String name;
+    /**
+     * 经度
+     */
+    private BigDecimal longitude;
+    /**
+     * 纬度
+     */
+    private BigDecimal latitude;
+    /**
+     * 省份ID
+     */
+    private Integer provinceId;
+    /**
+     * 省份名称
+     */
+    private String provinceName;
+    /**
+     * 城市ID
+     */
+    private Integer cityId;
+    /**
+     * 城市名称
+     */
+    private String cityName;
+    /**
+     * 区县ID
+     */
+    private Integer countyId;
+    /**
+     * 区县名称
+     */
+    private String countyName;
+    /**
+     * 详细地址
+     */
+    private String address;
+    /**
+     * 所属口岸
+     */
+    private Long portId;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 状态
+     *
+     * 枚举 {@link TODO common_status 对应的类}
+     */
+    private Integer status;
+
+}

+ 56 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/port/ResourcePortDO.java

@@ -0,0 +1,56 @@
+package com.yc.ship.module.resource.dal.dataobject.port;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 资源管理-口岸管理 DO
+ *
+ * @author flycloud
+ */
+@TableName("resource_port")
+@KeySequence("resource_port_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResourcePortDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 口岸名称
+     */
+    private String name;
+    /**
+     * 地理位置
+     */
+    private String address;
+    /**
+     * 省份ID
+     */
+    private Integer provinceId;
+    /**
+     * 省份名称
+     */
+    private String provinceName;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 状态
+     */
+    private Integer status;
+
+}

+ 39 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/dock/ResourceDockMapper.java

@@ -0,0 +1,39 @@
+package com.yc.ship.module.resource.dal.mysql.dock;
+
+import java.util.*;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.resource.dal.dataobject.dock.ResourceDockDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.yc.ship.module.resource.controller.admin.dock.vo.*;
+
+/**
+ * 资源管理-口岸码头管理 Mapper
+ *
+ * @author flycloud
+ */
+@Mapper
+public interface ResourceDockMapper extends BaseMapperX<ResourceDockDO> {
+
+    default PageResult<ResourceDockDO> selectPage(ResourceDockPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ResourceDockDO>()
+                .likeIfPresent(ResourceDockDO::getName, reqVO.getName())
+                .eqIfPresent(ResourceDockDO::getLongitude, reqVO.getLongitude())
+                .eqIfPresent(ResourceDockDO::getLatitude, reqVO.getLatitude())
+                .eqIfPresent(ResourceDockDO::getProvinceId, reqVO.getProvinceId())
+                .likeIfPresent(ResourceDockDO::getProvinceName, reqVO.getProvinceName())
+                .eqIfPresent(ResourceDockDO::getCityId, reqVO.getCityId())
+                .likeIfPresent(ResourceDockDO::getCityName, reqVO.getCityName())
+                .eqIfPresent(ResourceDockDO::getCountyId, reqVO.getCountyId())
+                .likeIfPresent(ResourceDockDO::getCountyName, reqVO.getCountyName())
+                .eqIfPresent(ResourceDockDO::getAddress, reqVO.getAddress())
+                .eqIfPresent(ResourceDockDO::getPortId, reqVO.getPortId())
+                .eqIfPresent(ResourceDockDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(ResourceDockDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(ResourceDockDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ResourceDockDO::getId));
+    }
+
+}

+ 37 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/port/ResourcePortMapper.java

@@ -0,0 +1,37 @@
+package com.yc.ship.module.resource.dal.mysql.port;
+
+import java.util.*;
+
+import com.yc.ship.framework.common.enums.CommonStatusEnum;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.resource.dal.dataobject.port.ResourcePortDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.yc.ship.module.resource.controller.admin.port.vo.*;
+
+/**
+ * 资源管理-口岸管理 Mapper
+ *
+ * @author flycloud
+ */
+@Mapper
+public interface ResourcePortMapper extends BaseMapperX<ResourcePortDO> {
+
+    default PageResult<ResourcePortDO> selectPage(ResourcePortPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ResourcePortDO>()
+                .likeIfPresent(ResourcePortDO::getName, reqVO.getName())
+                .eqIfPresent(ResourcePortDO::getAddress, reqVO.getAddress())
+                .eqIfPresent(ResourcePortDO::getProvinceId, reqVO.getProvinceId())
+                .likeIfPresent(ResourcePortDO::getProvinceName, reqVO.getProvinceName())
+                .eqIfPresent(ResourcePortDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(ResourcePortDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(ResourcePortDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ResourcePortDO::getId));
+    }
+
+    default List<ResourcePortDO> selectEnableList() {
+        return selectList(new LambdaQueryWrapperX<ResourcePortDO>()
+                .eq(ResourcePortDO::getStatus, CommonStatusEnum.ENABLE.getStatus()));
+    }
+}

+ 24 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/framework/web/config/ResourceWebConfiguration.java

@@ -0,0 +1,24 @@
+package com.yc.ship.module.resource.framework.web.config;
+
+import com.yc.ship.framework.swagger.config.YudaoSwaggerAutoConfiguration;
+import org.springdoc.core.GroupedOpenApi;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * resource 模块的 web 组件的 Configuration
+ *
+ * @author 豪华游轮
+ */
+@Configuration(proxyBeanMethods = false)
+public class ResourceWebConfiguration {
+
+    /**
+     * resource 模块的 API 分组
+     */
+    @Bean
+    public GroupedOpenApi resourceGroupedOpenApi() {
+        return YudaoSwaggerAutoConfiguration.buildGroupedOpenApi("基础资源");
+    }
+
+}

+ 4 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/framework/web/package-info.java

@@ -0,0 +1,4 @@
+/**
+ * system 模块的 web 配置
+ */
+package com.yc.ship.module.resource.framework.web;

+ 55 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/dock/ResourceDockService.java

@@ -0,0 +1,55 @@
+package com.yc.ship.module.resource.service.dock;
+
+import java.util.*;
+import javax.validation.*;
+import com.yc.ship.module.resource.controller.admin.dock.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.dock.ResourceDockDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+
+/**
+ * 资源管理-口岸码头管理 Service 接口
+ *
+ * @author flycloud
+ */
+public interface ResourceDockService {
+
+    /**
+     * 创建资源管理-口岸码头管理
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createDock(@Valid ResourceDockSaveReqVO createReqVO);
+
+    /**
+     * 更新资源管理-口岸码头管理
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateDock(@Valid ResourceDockSaveReqVO updateReqVO);
+
+    /**
+     * 删除资源管理-口岸码头管理
+     *
+     * @param id 编号
+     */
+    void deleteDock(Long id);
+
+    /**
+     * 获得资源管理-口岸码头管理
+     *
+     * @param id 编号
+     * @return 资源管理-口岸码头管理
+     */
+    ResourceDockDO getDock(Long id);
+
+    /**
+     * 获得资源管理-口岸码头管理分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 资源管理-口岸码头管理分页
+     */
+    PageResult<ResourceDockDO> getDockPage(ResourceDockPageReqVO pageReqVO);
+
+}

+ 74 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/dock/ResourceDockServiceImpl.java

@@ -0,0 +1,74 @@
+package com.yc.ship.module.resource.service.dock;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.yc.ship.module.resource.controller.admin.dock.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.dock.ResourceDockDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import com.yc.ship.module.resource.dal.mysql.dock.ResourceDockMapper;
+
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.yc.ship.module.resource.enums.ErrorCodeConstants.*;
+
+/**
+ * 资源管理-口岸码头管理 Service 实现类
+ *
+ * @author flycloud
+ */
+@Service
+@Validated
+public class ResourceDockServiceImpl implements ResourceDockService {
+
+    @Resource
+    private ResourceDockMapper dockMapper;
+
+    @Override
+    public Long createDock(ResourceDockSaveReqVO createReqVO) {
+        // 插入
+        ResourceDockDO dock = BeanUtils.toBean(createReqVO, ResourceDockDO.class);
+        dockMapper.insert(dock);
+        // 返回
+        return dock.getId();
+    }
+
+    @Override
+    public void updateDock(ResourceDockSaveReqVO updateReqVO) {
+        // 校验存在
+        validateDockExists(updateReqVO.getId());
+        // 更新
+        ResourceDockDO updateObj = BeanUtils.toBean(updateReqVO, ResourceDockDO.class);
+        dockMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteDock(Long id) {
+        // 校验存在
+        validateDockExists(id);
+        // 删除
+        dockMapper.deleteById(id);
+    }
+
+    private void validateDockExists(Long id) {
+        if (dockMapper.selectById(id) == null) {
+            throw exception(DOCK_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ResourceDockDO getDock(Long id) {
+        return dockMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ResourceDockDO> getDockPage(ResourceDockPageReqVO pageReqVO) {
+        return dockMapper.selectPage(pageReqVO);
+    }
+
+}

+ 67 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/port/ResourcePortService.java

@@ -0,0 +1,67 @@
+package com.yc.ship.module.resource.service.port;
+
+import java.util.*;
+import javax.validation.*;
+import com.yc.ship.module.resource.controller.admin.port.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.port.ResourcePortDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+
+/**
+ * 资源管理-口岸管理 Service 接口
+ *
+ * @author flycloud
+ */
+public interface ResourcePortService {
+
+    /**
+     * 创建资源管理-口岸管理
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createPort(@Valid ResourcePortSaveReqVO createReqVO);
+
+    /**
+     * 更新资源管理-口岸管理
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updatePort(@Valid ResourcePortSaveReqVO updateReqVO);
+
+    /**
+     * 删除资源管理-口岸管理
+     *
+     * @param id 编号
+     */
+    void deletePort(Long id);
+
+    /**
+     * 获得资源管理-口岸管理
+     *
+     * @param id 编号
+     * @return 资源管理-口岸管理
+     */
+    ResourcePortDO getPort(Long id);
+
+    /**
+     * 获得资源管理-口岸管理分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 资源管理-口岸管理分页
+     */
+    PageResult<ResourcePortDO> getPortPage(ResourcePortPageReqVO pageReqVO);
+
+    /**
+     * 获取启用的口岸
+     * @return
+     */
+    List<ResourcePortDO> enableList();
+
+    /**
+     * 获取所有列表
+     * @param ids
+     * @return
+     */
+    List<ResourcePortDO> getList(List<Long> ids);
+}

+ 87 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/port/ResourcePortServiceImpl.java

@@ -0,0 +1,87 @@
+package com.yc.ship.module.resource.service.port;
+
+import com.yc.ship.framework.ip.core.utils.AreaUtils;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.yc.ship.module.resource.controller.admin.port.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.port.ResourcePortDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import com.yc.ship.module.resource.dal.mysql.port.ResourcePortMapper;
+
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.yc.ship.module.resource.enums.ErrorCodeConstants.*;
+
+/**
+ * 资源管理-口岸管理 Service 实现类
+ *
+ * @author flycloud
+ */
+@Service
+@Validated
+public class ResourcePortServiceImpl implements ResourcePortService {
+
+    @Resource
+    private ResourcePortMapper portMapper;
+
+    @Override
+    public Long createPort(ResourcePortSaveReqVO createReqVO) {
+        // 插入
+        ResourcePortDO port = BeanUtils.toBean(createReqVO, ResourcePortDO.class);
+        port.setProvinceName(AreaUtils.format2Str(port.getProvinceId()));
+        portMapper.insert(port);
+        // 返回
+        return port.getId();
+    }
+
+    @Override
+    public void updatePort(ResourcePortSaveReqVO updateReqVO) {
+        // 校验存在
+        validatePortExists(updateReqVO.getId());
+        // 更新
+        ResourcePortDO updateObj = BeanUtils.toBean(updateReqVO, ResourcePortDO.class);
+        updateObj.setProvinceName(AreaUtils.format2Str(updateObj.getProvinceId()));
+        portMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deletePort(Long id) {
+        // 校验存在
+        validatePortExists(id);
+        // 删除
+        portMapper.deleteById(id);
+    }
+
+    private void validatePortExists(Long id) {
+        if (portMapper.selectById(id) == null) {
+            throw exception(PORT_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ResourcePortDO getPort(Long id) {
+        return portMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ResourcePortDO> getPortPage(ResourcePortPageReqVO pageReqVO) {
+        return portMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public List<ResourcePortDO> enableList() {
+        return portMapper.selectEnableList();
+    }
+
+    @Override
+    public List<ResourcePortDO> getList(List<Long> ids) {
+        return portMapper.selectByIds(ids);
+    }
+
+}

+ 5 - 0
ship-server-web/pom.xml

@@ -53,6 +53,11 @@
             <artifactId>ship-module-trade-biz</artifactId>
             <version>${revision}</version>
         </dependency>
+        <dependency>
+            <groupId>com.yc.ship</groupId>
+            <artifactId>ship-module-resource-biz</artifactId>
+            <version>${revision}</version>
+        </dependency>
 
         <!-- 业务组件 -->
         <dependency>

+ 2 - 2
ship-server-web/src/main/java/com/yc/ship/server/ServerApplication.java

@@ -9,11 +9,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
  */
 @SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package}
 @SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}.server", "${yudao.info.base-package}.module"})
-public class ServerApplication {
+public class OtaServerApplication {
 
     public static void main(String[] args) {
 
-        SpringApplication.run(ServerApplication.class, args);
+        SpringApplication.run(OtaServerApplication.class, args);
     }
 
 }

+ 1 - 0
ship-server-web/src/main/resources/application-local.yaml

@@ -171,6 +171,7 @@ logging:
     com.yc.ship.module.ota.dal.mysql: debug
     com.yc.ship.module.product.dal.mysql: debug
     com.yc.ship.module.otc.dal.mysql: debug
+    com.yc.ship.module.resource.dal.mysql: debug
     org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
 
 debug: false

+ 1 - 1
ship-server-web/src/main/resources/application.yaml

@@ -69,7 +69,7 @@ mybatis-plus:
     map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
   global-config:
     db-config:
-      id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。
+      id-type: ASSIGN_ID # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。
 #      id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库
 #      id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库
 #      id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解