diff --git a/pom.xml b/pom.xml
index 97a28af11c..1fe186c5ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,7 @@
yudao-module-system
yudao-module-infra
+ yudao-module-haoka
diff --git a/yudao-module-haoka/pom.xml b/yudao-module-haoka/pom.xml
new file mode 100644
index 0000000000..6028eac8d7
--- /dev/null
+++ b/yudao-module-haoka/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+ cn.iocoder.boot
+ yudao
+ ${revision}
+
+
+ yudao-module-haoka
+ pom
+ ${project.artifactId}
+
+ haoka 模块,主要实现 haoka 等功能。
+
+
+ yudao-module-haoka-api
+ yudao-module-haoka-biz
+
+
diff --git a/yudao-module-haoka/yudao-module-haoka-api/pom.xml b/yudao-module-haoka/yudao-module-haoka-api/pom.xml
new file mode 100644
index 0000000000..7ae586b522
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-api/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+
+ cn.iocoder.boot
+ yudao-module-haoka
+ ${revision}
+
+
+ yudao-module-haoka-api
+ jar
+
+ ${project.artifactId}
+
+ haoka api 模块 API,暴露给其它模块调用
+
+
+
+
+ cn.iocoder.boot
+ yudao-common
+
+
+
diff --git a/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/ErrorCodeConstants.java b/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/ErrorCodeConstants.java
new file mode 100644
index 0000000000..ad3b61cfbf
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/ErrorCodeConstants.java
@@ -0,0 +1,14 @@
+package cn.iocoder.yudao.module.haoka.enums;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+
+/**
+ * haoka 错误码枚举类
+ *
+ * haoka 系统,使用 1-910-000-000 段
+ */
+public interface ErrorCodeConstants {
+
+ // ========== Demo 1_910_001_000 ==========
+ ErrorCode DEMO_NOT_EXISTS = new ErrorCode(1_910_001_001, "好卡案例不存在");
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/pom.xml b/yudao-module-haoka/yudao-module-haoka-biz/pom.xml
new file mode 100644
index 0000000000..d392a36291
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/pom.xml
@@ -0,0 +1,52 @@
+
+
+ 4.0.0
+
+ cn.iocoder.boot
+ yudao-module-haoka
+ ${revision}
+
+ jar
+ yudao-module-haoka-biz
+ ${project.artifactId}
+
+ haoka biz 模块,主要实现haoka 等功能。
+
+
+
+
+ cn.iocoder.boot
+ yudao-module-haoka-api
+ ${revision}
+
+
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-web
+
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-security
+
+
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-mybatis
+
+
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-test
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-excel
+
+
+
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/DemoController.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/DemoController.java
new file mode 100644
index 0000000000..bb0bedd135
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/DemoController.java
@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.haoka.controller.admin.demo;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.haoka.controller.admin.demo.vo.DemoPageReqVO;
+import cn.iocoder.yudao.module.haoka.controller.admin.demo.vo.DemoRespVO;
+import cn.iocoder.yudao.module.haoka.controller.admin.demo.vo.DemoSaveReqVO;
+import cn.iocoder.yudao.module.haoka.dal.dataobject.demo.DemoDO;
+import cn.iocoder.yudao.module.haoka.service.demo.DemoService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 好卡案例")
+@RestController
+@RequestMapping("/haoka/demo")
+@Validated
+public class DemoController {
+
+ @Resource
+ private DemoService demoService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建好卡案例")
+ @PreAuthorize("@ss.hasPermission('haoka:demo:create')")
+ public CommonResult createDemo(@Valid @RequestBody DemoSaveReqVO createReqVO) {
+ return success(demoService.createDemo(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新好卡案例")
+ @PreAuthorize("@ss.hasPermission('haoka:demo:update')")
+ public CommonResult updateDemo(@Valid @RequestBody DemoSaveReqVO updateReqVO) {
+ demoService.updateDemo(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除好卡案例")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('haoka:demo:delete')")
+ public CommonResult deleteDemo(@RequestParam("id") Long id) {
+ demoService.deleteDemo(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得好卡案例")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('haoka:demo:query')")
+ public CommonResult getDemo(@RequestParam("id") Long id) {
+ DemoDO demo = demoService.getDemo(id);
+ return success(BeanUtils.toBean(demo, DemoRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得好卡案例分页")
+ @PreAuthorize("@ss.hasPermission('haoka:demo:query')")
+ public CommonResult> getDemoPage(@Valid DemoPageReqVO pageReqVO) {
+ PageResult pageResult = demoService.getDemoPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, DemoRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出好卡案例 Excel")
+ @PreAuthorize("@ss.hasPermission('haoka:demo:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportDemoExcel(@Valid DemoPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = demoService.getDemoPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "好卡案例.xls", "数据", DemoRespVO.class,
+ BeanUtils.toBean(list, DemoRespVO.class));
+ }
+
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoPageReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoPageReqVO.java
new file mode 100644
index 0000000000..32835cbdda
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoPageReqVO.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.haoka.controller.admin.demo.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.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 DemoPageReqVO extends PageParam {
+
+ @Schema(description = "名字", example = "芋艿")
+ private String name;
+
+ @Schema(description = "年龄")
+ private Integer age;
+
+ @Schema(description = "性别")
+ private Integer agent;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoRespVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoRespVO.java
new file mode 100644
index 0000000000..caf2772b98
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoRespVO.java
@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.haoka.controller.admin.demo.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 好卡案例 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DemoRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21448")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @ExcelProperty("名字")
+ private String name;
+
+ @Schema(description = "年龄", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("年龄")
+ private Integer age;
+
+ @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("性别")
+ private Integer agent;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoSaveReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoSaveReqVO.java
new file mode 100644
index 0000000000..d43422053b
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/demo/vo/DemoSaveReqVO.java
@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.haoka.controller.admin.demo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 好卡案例新增/修改 Request VO")
+@Data
+public class DemoSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21448")
+ private Long id;
+
+ @Schema(description = "名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @NotEmpty(message = "名字不能为空")
+ private String name;
+
+ @Schema(description = "年龄", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "年龄不能为空")
+ private Integer age;
+
+ @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "性别不能为空")
+ private Integer agent;
+
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/demo/DemoDO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/demo/DemoDO.java
new file mode 100644
index 0000000000..5f773fadd4
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/demo/DemoDO.java
@@ -0,0 +1,42 @@
+package cn.iocoder.yudao.module.haoka.dal.dataobject.demo;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 好卡案例 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("haoka_demo")
+@KeySequence("haoka_demo_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DemoDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 名字
+ */
+ private String name;
+ /**
+ * 年龄
+ */
+ private Integer age;
+ /**
+ * 性别
+ */
+ private Integer agent;
+
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/demo/DemoMapper.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/demo/DemoMapper.java
new file mode 100644
index 0000000000..c6c0a6c6d0
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/demo/DemoMapper.java
@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.haoka.dal.mysql.demo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.haoka.controller.admin.demo.vo.DemoPageReqVO;
+import cn.iocoder.yudao.module.haoka.dal.dataobject.demo.DemoDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 好卡案例 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface DemoMapper extends BaseMapperX {
+
+ default PageResult selectPage(DemoPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(DemoDO::getName, reqVO.getName())
+ .eqIfPresent(DemoDO::getAge, reqVO.getAge())
+ .eqIfPresent(DemoDO::getAgent, reqVO.getAgent())
+ .betweenIfPresent(DemoDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(DemoDO::getId));
+ }
+
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/package-info.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/package-info.java
new file mode 100644
index 0000000000..c92db1b327
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * haoka system
+ */
+package cn.iocoder.yudao.module.haoka;
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/demo/DemoService.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/demo/DemoService.java
new file mode 100644
index 0000000000..6049b7c769
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/demo/DemoService.java
@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.haoka.service.demo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.haoka.controller.admin.demo.vo.DemoPageReqVO;
+import cn.iocoder.yudao.module.haoka.controller.admin.demo.vo.DemoSaveReqVO;
+import cn.iocoder.yudao.module.haoka.dal.dataobject.demo.DemoDO;
+import jakarta.validation.Valid;
+
+/**
+ * 好卡案例 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface DemoService {
+
+ /**
+ * 创建好卡案例
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createDemo(@Valid DemoSaveReqVO createReqVO);
+
+ /**
+ * 更新好卡案例
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateDemo(@Valid DemoSaveReqVO updateReqVO);
+
+ /**
+ * 删除好卡案例
+ *
+ * @param id 编号
+ */
+ void deleteDemo(Long id);
+
+ /**
+ * 获得好卡案例
+ *
+ * @param id 编号
+ * @return 好卡案例
+ */
+ DemoDO getDemo(Long id);
+
+ /**
+ * 获得好卡案例分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 好卡案例分页
+ */
+ PageResult getDemoPage(DemoPageReqVO pageReqVO);
+
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/demo/DemoServiceImpl.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/demo/DemoServiceImpl.java
new file mode 100644
index 0000000000..03760dc1c5
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/demo/DemoServiceImpl.java
@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.module.haoka.service.demo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.haoka.controller.admin.demo.vo.DemoPageReqVO;
+import cn.iocoder.yudao.module.haoka.controller.admin.demo.vo.DemoSaveReqVO;
+import cn.iocoder.yudao.module.haoka.dal.dataobject.demo.DemoDO;
+import cn.iocoder.yudao.module.haoka.dal.mysql.demo.DemoMapper;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.DEMO_NOT_EXISTS;
+
+/**
+ * 好卡案例 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class DemoServiceImpl implements DemoService {
+
+ @Resource
+ private DemoMapper demoMapper;
+
+ @Override
+ public Long createDemo(DemoSaveReqVO createReqVO) {
+ // 插入
+ DemoDO demo = BeanUtils.toBean(createReqVO, DemoDO.class);
+ demoMapper.insert(demo);
+ // 返回
+ return demo.getId();
+ }
+
+ @Override
+ public void updateDemo(DemoSaveReqVO updateReqVO) {
+ // 校验存在
+ validateDemoExists(updateReqVO.getId());
+ // 更新
+ DemoDO updateObj = BeanUtils.toBean(updateReqVO, DemoDO.class);
+ demoMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteDemo(Long id) {
+ // 校验存在
+ validateDemoExists(id);
+ // 删除
+ demoMapper.deleteById(id);
+ }
+
+ private void validateDemoExists(Long id) {
+ if (demoMapper.selectById(id) == null) {
+ throw exception(DEMO_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public DemoDO getDemo(Long id) {
+ return demoMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getDemoPage(DemoPageReqVO pageReqVO) {
+ return demoMapper.selectPage(pageReqVO);
+ }
+
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/demo/DemoMapper.xml b/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/demo/DemoMapper.xml
new file mode 100644
index 0000000000..89d4314bad
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/demo/DemoMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yudao-server/pom.xml b/yudao-server/pom.xml
index efd53c84a5..cbcb7dbaa8 100644
--- a/yudao-server/pom.xml
+++ b/yudao-server/pom.xml
@@ -33,87 +33,94 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+ cn.iocoder.boot
+ yudao-module-haoka-biz
+ ${revision}
+