# hw-portal 抽离迁移指导（SpringBoot2/JDK8 -> SpringBoot3.5.8/JDK17）

## 1. 目标与约束
- 目标：将 hw-portal 从原微服务形态抽离为当前单体工程中的独立业务模块。
- 硬约束：数据库表结构与 SQL 不变；Mapper 接口与 XML 语句逻辑不变；Service/Controller 方法业务逻辑不允许改变。
- 允许改动范围：仅限框架兼容性改造（包名、注解、依赖、配置接入方式），不改变业务分支和返回语义。

## 2. 模块现状盘点（hw-portal）
- Controller: 14 个
- Service 接口: 13 个
- Service 实现: 13 个
- Domain: 15 个
- Mapper 接口: 13 个
- Mapper XML: 13 个
- 关键特点：存在 *1 平行模型（HwWeb/HwWeb1、HwWebMenu/HwWebMenu1、对应 Controller/Service/Mapper/XML）。

## 3. 接口总表（URL + 方法 + 调用链）
| Controller | HTTP | URL | 返回 | 方法 | Service 调用 |
|---|---|---|---|---|---|
| HwAboutUsInfoController | POST | /aboutUsInfo | AjaxResult | add | hwAboutUsInfoService.insertHwAboutUsInfo |
| HwAboutUsInfoController | PUT | /aboutUsInfo | AjaxResult | edit | hwAboutUsInfoService.updateHwAboutUsInfo |
| HwAboutUsInfoController | GET | /aboutUsInfo/{aboutUsInfoId} | AjaxResult | getInfo | hwAboutUsInfoService.selectHwAboutUsInfoByAboutUsInfoId |
| HwAboutUsInfoController | DELETE | /aboutUsInfo/{aboutUsInfoIds} | AjaxResult | remove | hwAboutUsInfoService.deleteHwAboutUsInfoByAboutUsInfoIds |
| HwAboutUsInfoController | POST | /aboutUsInfo/export | void | export | hwAboutUsInfoService.selectHwAboutUsInfoList |
| HwAboutUsInfoController | GET | /aboutUsInfo/list | TableDataInfo | list | hwAboutUsInfoService.selectHwAboutUsInfoList |
| HwAboutUsInfoDetailController | POST | /aboutUsInfoDetail | AjaxResult | add | hwAboutUsInfoDetailService.insertHwAboutUsInfoDetail |
| HwAboutUsInfoDetailController | PUT | /aboutUsInfoDetail | AjaxResult | edit | hwAboutUsInfoDetailService.updateHwAboutUsInfoDetail |
| HwAboutUsInfoDetailController | GET | /aboutUsInfoDetail/{usInfoDetailId} | AjaxResult | getInfo | hwAboutUsInfoDetailService.selectHwAboutUsInfoDetailByUsInfoDetailId |
| HwAboutUsInfoDetailController | DELETE | /aboutUsInfoDetail/{usInfoDetailIds} | AjaxResult | remove | hwAboutUsInfoDetailService.deleteHwAboutUsInfoDetailByUsInfoDetailIds |
| HwAboutUsInfoDetailController | POST | /aboutUsInfoDetail/export | void | export | hwAboutUsInfoDetailService.selectHwAboutUsInfoDetailList |
| HwAboutUsInfoDetailController | GET | /aboutUsInfoDetail/list | TableDataInfo | list | hwAboutUsInfoDetailService.selectHwAboutUsInfoDetailList |
| HwContactUsInfoController | POST | /contactUsInfo | AjaxResult | add | hwContactUsInfoService.insertHwContactUsInfo |
| HwContactUsInfoController | PUT | /contactUsInfo | AjaxResult | edit | hwContactUsInfoService.updateHwContactUsInfo |
| HwContactUsInfoController | GET | /contactUsInfo/{contactUsInfoId} | AjaxResult | getInfo | hwContactUsInfoService.selectHwContactUsInfoByContactUsInfoId |
| HwContactUsInfoController | DELETE | /contactUsInfo/{contactUsInfoIds} | AjaxResult | remove | hwContactUsInfoService.deleteHwContactUsInfoByContactUsInfoIds |
| HwContactUsInfoController | POST | /contactUsInfo/export | void | export | hwContactUsInfoService.selectHwContactUsInfoList |
| HwContactUsInfoController | GET | /contactUsInfo/list | TableDataInfo | list | hwContactUsInfoService.selectHwContactUsInfoList |
| HwPortalConfigController | POST | /portalConfig | AjaxResult | add | hwPortalConfigService.insertHwPortalConfig |
| HwPortalConfigController | PUT | /portalConfig | AjaxResult | edit | hwPortalConfigService.updateHwPortalConfig |
| HwPortalConfigController | GET | /portalConfig/{portalConfigId} | AjaxResult | getInfo | hwPortalConfigService.selectHwPortalConfigByPortalConfigId |
| HwPortalConfigController | DELETE | /portalConfig/{portalConfigIds} | AjaxResult | remove | hwPortalConfigService.deleteHwPortalConfigByPortalConfigIds |
| HwPortalConfigController | POST | /portalConfig/export | void | export | hwPortalConfigService.selectHwPortalConfigList |
| HwPortalConfigController | GET | /portalConfig/list | TableDataInfo | list | hwPortalConfigService.selectHwPortalConfigJoinList |
| HwPortalConfigController | GET | /portalConfig/portalConfigTypeTree | AjaxResult | portalConfigTypeTree | hwPortalConfigTypeService.selectPortalConfigTypeTreeList |
| HwPortalConfigTypeController | POST | /portalConfigType | AjaxResult | add | hwPortalConfigTypeService.insertHwPortalConfigType |
| HwPortalConfigTypeController | PUT | /portalConfigType | AjaxResult | edit | hwPortalConfigTypeService.updateHwPortalConfigType |
| HwPortalConfigTypeController | GET | /portalConfigType/{configTypeId} | AjaxResult | getInfo | hwPortalConfigTypeService.selectHwPortalConfigTypeByConfigTypeId |
| HwPortalConfigTypeController | DELETE | /portalConfigType/{configTypeIds} | AjaxResult | remove | hwPortalConfigTypeService.deleteHwPortalConfigTypeByConfigTypeIds |
| HwPortalConfigTypeController | POST | /portalConfigType/export | void | export | hwPortalConfigTypeService.selectHwPortalConfigTypeList |
| HwPortalConfigTypeController | GET | /portalConfigType/list | AjaxResult | list | hwPortalConfigTypeService.selectHwPortalConfigTypeList |
| HwPortalController | POST | /portal/addContactUsInfo | AjaxResult | addContactUsInfo | hwContactUsInfoService.insertHwContactUsInfo |
| HwPortalController | GET | /portal/getAboutUsInfo | AjaxResult | getAboutUsInfo | hwAboutUsInfoService.selectHwAboutUsInfoList |
| HwPortalController | GET | /portal/getAboutUsInfoDetails | AjaxResult | getAboutUsInfoDetails | hwAboutUsInfoDetailService.selectHwAboutUsInfoDetailList |
| HwPortalController | GET | /portal/getCaseCenterCaseInfo/{caseInfoId} | AjaxResult | getCaseCenterCaseInfo | hwProductCaseInfoService.selectHwProductCaseInfoByCaseInfoId |
| HwPortalController | GET | /portal/getCaseCenterCaseInfos | AjaxResult | getCaseCenterCaseInfos | hwProductCaseInfoService.selectHwProductCaseInfoList |
| HwPortalController | GET | /portal/getHomeCaseTitleList | TableDataInfo | getHomeCaseTitleList | hwPortalConfigTypeService.selectHwPortalConfigTypeList |
| HwPortalController | GET | /portal/getPortalConfigList | TableDataInfo | getPortalConfigList | hwPortalConfigService.selectHwPortalConfigList |
| HwPortalController | GET | /portal/getPortalConfigTypeList | TableDataInfo | getPortalConfigTypeList | hwPortalConfigTypeService.selectHwPortalConfigTypeList |
| HwPortalController | GET | /portal/getProductCenterProductDetailInfos | AjaxResult | getProductCenterProductDetailInfos | hwProductInfoDetailService.selectHwProductInfoDetailList |
| HwPortalController | GET | /portal/getProductCenterProductInfos | AjaxResult | getProductCenterProductInfos | productInfoService.selectHwProductInfoJoinDetailList |
| HwPortalController | GET | /portal/getTypicalHomeCaseInfo | AjaxResult | getTypicalHomeCaseInfo | hwProductCaseInfoService.getTypicalHomeCaseInfo |
| HwPortalController | GET | /portal/selectConfigTypeList | TableDataInfo | selectConfigTypeList | hwPortalConfigTypeService.selectConfigTypeList |
| HwProductCaseInfoController | POST | /productCaseInfo | AjaxResult | add | hwProductCaseInfoService.insertHwProductCaseInfo |
| HwProductCaseInfoController | PUT | /productCaseInfo | AjaxResult | edit | hwProductCaseInfoService.updateHwProductCaseInfo |
| HwProductCaseInfoController | GET | /productCaseInfo/{caseInfoId} | AjaxResult | getInfo | hwProductCaseInfoService.selectHwProductCaseInfoByCaseInfoId |
| HwProductCaseInfoController | DELETE | /productCaseInfo/{caseInfoIds} | AjaxResult | remove | hwProductCaseInfoService.deleteHwProductCaseInfoByCaseInfoIds |
| HwProductCaseInfoController | POST | /productCaseInfo/export | void | export | hwProductCaseInfoService.selectHwProductCaseInfoList |
| HwProductCaseInfoController | GET | /productCaseInfo/list | TableDataInfo | list | hwProductCaseInfoService.selectHwProductCaseInfoList |
| HwProductCaseInfoController | GET | /productCaseInfo/portalConfigTypeTree | AjaxResult | portalConfigTypeTree | hwPortalConfigTypeService.selectPortalConfigTypeTreeList |
| HwProductInfoController | POST | /productInfo | AjaxResult | add | hwProductInfoService.insertHwProductInfo |
| HwProductInfoController | PUT | /productInfo | AjaxResult | edit | hwProductInfoService.updateHwProductInfo |
| HwProductInfoController | GET | /productInfo/{productInfoId} | AjaxResult | getInfo | hwProductInfoService.selectHwProductInfoByProductInfoId |
| HwProductInfoController | DELETE | /productInfo/{productInfoIds} | AjaxResult | remove | hwProductInfoService.deleteHwProductInfoByProductInfoIds |
| HwProductInfoController | POST | /productInfo/export | void | export | hwProductInfoService.selectHwProductInfoList |
| HwProductInfoController | GET | /productInfo/list | TableDataInfo | list | hwProductInfoService.selectHwProductInfoJoinList |
| HwProductInfoController | GET | /productInfo/portalConfigTypeTree | AjaxResult | portalConfigTypeTree | hwPortalConfigTypeService.selectPortalConfigTypeTreeList |
| HwProductInfoDetailController | POST | /productInfoDetail | AjaxResult | add | hwProductInfoDetailService.insertHwProductInfoDetail |
| HwProductInfoDetailController | PUT | /productInfoDetail | AjaxResult | edit | hwProductInfoDetailService.updateHwProductInfoDetail |
| HwProductInfoDetailController | GET | /productInfoDetail/{productInfoDetailId} | AjaxResult | getInfo | hwProductInfoDetailService.selectHwProductInfoDetailByProductInfoDetailId |
| HwProductInfoDetailController | DELETE | /productInfoDetail/{productInfoDetailIds} | AjaxResult | remove | hwProductInfoDetailService.deleteHwProductInfoDetailByProductInfoDetailIds |
| HwProductInfoDetailController | POST | /productInfoDetail/export | void | export | hwProductInfoDetailService.selectHwProductInfoDetailList |
| HwProductInfoDetailController | GET | /productInfoDetail/list | AjaxResult | list | hwProductInfoDetailService.selectHwProductInfoDetailList |
| HwWebController | POST | /hwWeb | AjaxResult | add | hwWebService.insertHwWeb |
| HwWebController | PUT | /hwWeb | AjaxResult | edit | hwWebService.updateHwWeb |
| HwWebController | GET | /hwWeb/{webCode} | AjaxResult | getInfo | hwWebService.selectHwWebByWebcode |
| HwWebController | DELETE | /hwWeb/{webIds} | AjaxResult | remove | hwWebService.deleteHwWebByWebIds |
| HwWebController | POST | /hwWeb/export | void | export | hwWebService.selectHwWebList |
| HwWebController | GET | /hwWeb/getHwWebList | AjaxResult | getHwWebList | hwWebService.selectHwWebList |
| HwWebController | GET | /hwWeb/list | TableDataInfo | list | hwWebService.selectHwWebList |
| HwWebController1 | POST | /hwWeb1 | AjaxResult | add | hwWebService1.insertHwWeb |
| HwWebController1 | PUT | /hwWeb1 | AjaxResult | edit | hwWebService1.updateHwWeb |
| HwWebController1 | GET | /hwWeb1/{webCode} | AjaxResult | getInfo | hwWebService1.selectHwWebByWebcode |
| HwWebController1 | DELETE | /hwWeb1/{webIds} | AjaxResult | remove | hwWebService1.deleteHwWebByWebIds |
| HwWebController1 | POST | /hwWeb1/export | void | export | hwWebService1.selectHwWebList |
| HwWebController1 | GET | /hwWeb1/getHwWeb1List | AjaxResult | getHwWeb1List | hwWebService1.selectHwWebList |
| HwWebController1 | GET | /hwWeb1/list | TableDataInfo | list | hwWebService1.selectHwWebList |
| HwWebDocumentController | POST | /hwWebDocument | AjaxResult | add | hwWebDocumentService.insertHwWebDocument |
| HwWebDocumentController | PUT | /hwWebDocument | AjaxResult | edit | hwWebDocumentService.updateHwWebDocument |
| HwWebDocumentController | GET | /hwWebDocument/{documentId} | AjaxResult | getInfo | hwWebDocumentService.selectHwWebDocumentByDocumentId |
| HwWebDocumentController | DELETE | /hwWebDocument/{documentIds} | AjaxResult | remove | hwWebDocumentService.deleteHwWebDocumentByDocumentIds |
| HwWebDocumentController | POST | /hwWebDocument/export | void | export | hwWebDocumentService.selectHwWebDocumentList |
| HwWebDocumentController | POST | /hwWebDocument/getSecureDocumentAddress | AjaxResult | getSecureDocumentAddress | hwWebDocumentService.verifyAndGetDocumentAddress |
| HwWebDocumentController | GET | /hwWebDocument/list | TableDataInfo | list | hwWebDocumentService.selectHwWebDocumentList |
| HwWebMenuController | POST | /hwWebMenu | AjaxResult | add | hwWebMenuService.insertHwWebMenu |
| HwWebMenuController | PUT | /hwWebMenu | AjaxResult | edit | hwWebMenuService.updateHwWebMenu |
| HwWebMenuController | GET | /hwWebMenu/{webMenuId} | AjaxResult | getInfo | hwWebMenuService.selectHwWebMenuByWebMenuId |
| HwWebMenuController | DELETE | /hwWebMenu/{webMenuIds} | AjaxResult | remove | hwWebMenuService.deleteHwWebMenuByWebMenuIds |
| HwWebMenuController | POST | /hwWebMenu/export | void | export | hwWebMenuService.selectHwWebMenuList |
| HwWebMenuController | GET | /hwWebMenu/list | AjaxResult | list | hwWebMenuService.selectHwWebMenuList |
| HwWebMenuController | GET | /hwWebMenu/selectMenuTree | AjaxResult | selectMenuTree | hwWebMenuService.selectMenuTree |
| HwWebMenuController1 | POST | /hwWebMenu1 | AjaxResult | add | hwWebMenuService1.insertHwWebMenu |
| HwWebMenuController1 | PUT | /hwWebMenu1 | AjaxResult | edit | hwWebMenuService1.updateHwWebMenu |
| HwWebMenuController1 | GET | /hwWebMenu1/{webMenuId} | AjaxResult | getInfo | hwWebMenuService1.selectHwWebMenuByWebMenuId |
| HwWebMenuController1 | DELETE | /hwWebMenu1/{webMenuIds} | AjaxResult | remove | hwWebMenuService1.deleteHwWebMenuByWebMenuIds |
| HwWebMenuController1 | POST | /hwWebMenu1/export | void | export | hwWebMenuService1.selectHwWebMenuList |
| HwWebMenuController1 | GET | /hwWebMenu1/list | AjaxResult | list | hwWebMenuService1.selectHwWebMenuList |
| HwWebMenuController1 | GET | /hwWebMenu1/selectMenuTree | AjaxResult | selectMenuTree | hwWebMenuService1.selectMenuTree |

## 4. 业务逻辑保持清单（迁移时禁止改动）
- HwWebServiceImpl.updateHwWeb：按 webCode 查询已存在记录 -> 逻辑删除旧记录（is_delete=1）-> 插入新记录并设 isDelete=0。
- HwWebServiceImpl1.updateHwWeb：按 (webCode, typeId, deviceId) 做同样删旧插新逻辑。
- HwWebDocumentServiceImpl.updateHwWebDocument：secretKey == null 时强制置空字符串，依赖 XML 动态 if 触发数据库字段更新。
- HwWebDocumentServiceImpl.verifyAndGetDocumentAddress：密钥为空时直返地址；密钥存在时必须校验 providedKey，错误抛 ServiceException。
- HwWebDocumentController.list/getInfo：返回前清空 secretKey；若 hasSecret=true 则隐藏 documentAddress。
- HwPortalController.addContactUsInfo：写入 userIp（当前请求 IP）后再落库。
- HwPortalConfigServiceImpl.selectHwPortalConfigList：portalConfigType == 2 走 selectHwPortalConfigList2，其余走 selectHwPortalConfigList。
- HwProductCaseInfoServiceImpl.getTypicalHomeCaseInfo：先 homeTypicalFlag=1 过滤；优先返回 typicalFlag=1 的第一条，否则返回列表首条，否则返回空对象。
- HwPortalConfigTypeServiceImpl.selectConfigTypeList：存在 configTypeClassfication 条件时先查全量再补齐全部子孙节点，最后构树。
- HwProductInfoServiceImpl.selectHwProductInfoJoinDetailList：配置模式 13 时将明细列表转换为树结构（两段判定均保留）。
- HwProductInfoDetailServiceImpl.insertHwProductInfoDetail：parentId/ancestors 填充规则必须保持一致，并写入 createBy/createTime。
- HwPortalConfigTypeServiceImpl.insertHwPortalConfigType：parentId/ancestors 与 createBy/createTime 填充规则必须保持一致。

## 5. SpringBoot3/JDK17 兼容改造矩阵（仅改兼容，不改逻辑）
| 旧实现（hw-portal） | 单体目标实现 | 说明 |
|---|---|---|
| javax.servlet.http.HttpServletResponse | jakarta.servlet.http.HttpServletResponse | Spring Boot 3 必改 |
| com.ruoyi.common.core.web.controller.BaseController | com.ruoyi.common.core.controller.BaseController | 包路径调整 |
| com.ruoyi.common.core.web.domain.AjaxResult | com.ruoyi.common.core.domain.AjaxResult | 包路径调整 |
| com.ruoyi.common.core.web.page.TableDataInfo | com.ruoyi.common.core.page.TableDataInfo | 包路径调整 |
| com.ruoyi.common.core.web.domain.BaseEntity | com.ruoyi.common.core.domain.BaseEntity | 包路径调整 |
| com.ruoyi.common.core.web.domain.TreeEntity | com.ruoyi.common.core.domain.TreeEntity | 包路径调整 |
| com.ruoyi.common.core.annotation.Excel | com.ruoyi.common.annotation.Excel | 包路径调整 |
| com.ruoyi.common.core.utils.* | com.ruoyi.common.utils.* | 工具类路径调整 |
| com.ruoyi.common.core.utils.poi.ExcelUtil | com.ruoyi.common.utils.poi.ExcelUtil | 工具类路径调整 |
| com.ruoyi.common.core.exception.ServiceException | com.ruoyi.common.exception.ServiceException | 异常类路径调整 |
| com.ruoyi.common.core.constant.UserConstants | com.ruoyi.common.constant.UserConstants | 常量路径调整 |
| com.ruoyi.common.log.annotation.Log | com.ruoyi.common.annotation.Log | 注解路径调整 |
| com.ruoyi.common.log.enums.BusinessType | com.ruoyi.common.enums.BusinessType | 枚举路径调整 |
| com.ruoyi.common.security.utils.SecurityUtils | com.ruoyi.common.utils.SecurityUtils | 安全工具路径调整 |
| com.ruoyi.common.core.utils.ip.IpUtils | com.ruoyi.common.utils.ip.IpUtils | IP 工具路径调整 |
| @RequiresPermissions（微服务注解） | @PreAuthorize("@ss.hasPermi('xxx')") 或保持注释 | 当前单体默认使用 Spring Security 表达式 |
| @EnableCustomConfig/@EnableRyFeignClients/@EnableCustomSwagger2 | 删除 | 单体不需要微服务启动增强注解 |
| Nacos bootstrap.yml 配置 | 合并到单体 application.yml/按需删除 | 单体本地化配置，不走服务注册发现 |

### 5.1 当前已检测到的 javax 引用
```text
hw-portal/src/main/java/com/ruoyi/portal/controller/HwAboutUsInfoController.java:15:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwContactUsInfoController.java:15:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwPortalConfigTypeController.java:14:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwAboutUsInfoDetailController.java:15:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwPortalConfigController.java:17:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwProductInfoDetailController.java:14:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwWebController.java:5:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwProductInfoController.java:17:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwProductCaseInfoController.java:17:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwWebController1.java:14:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwWebDocumentController.java:5:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwWebMenuController.java:5:import javax.servlet.http.HttpServletResponse;
hw-portal/src/main/java/com/ruoyi/portal/controller/HwWebMenuController1.java:13:import javax.servlet.http.HttpServletResponse;
```

## 6. 模块接入步骤（单体多模块）
1. 新建模块（建议名 ruoyi-portal），将 hw-portal/src/main/java/com/ruoyi/portal/** 与 mapper/portal/*.xml 拷入。
2. 根 pom.xml 的 modules 增加该模块，并在 ruoyi-admin/pom.xml 增加依赖。
3. 保持包名前缀 com.ruoyi.portal，利用现有 SpringBoot 组件扫描和 MapperScan(com.ruoyi.**.mapper) 自动发现。
4. 按上表执行导包替换与 javax->jakarta 替换；删除微服务专属启动注解和无效依赖。
5. Mapper Java 与 Mapper XML 保持方法名和 SQL ID 一一对应，不改 SQL 文本。
6. 对业务逻辑保持清单中的方法做逐项回归（输入/输出/异常文本必须一致）。

## 7. 风险与回归用例
- 风险1：包路径替换不完整导致编译失败（重点：core.web、core.utils、security、log）。
- 风险2：HwWebDocument 密钥字段在更新/查询链路被误改，导致泄露或无法清空。
- 风险3：树结构构建（菜单、配置类型、产品明细）在过滤条件下丢层级。
- 风险4：hw_web/hw_web1 逻辑删除+重插流程被改写，导致唯一性语义变化。
- 风险5：门户聚合接口分页行为（startPage）与返回结构发生漂移。

## 8. 全量源码附录（完整代码）
### C:\D\WORK\NewP\HwWeb\hw-portal\pom.xml
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.ruoyi</groupId>
        <artifactId>ruoyi-modules</artifactId>
        <version>3.6.3</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ruoyi-modules-portal</artifactId>

    <description>
        ruoyi-modules-portal系统模块
    </description>

    <dependencies>

        <!-- SpringCloud Alibaba Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- SpringCloud Alibaba Nacos Config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!-- SpringCloud Alibaba Sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

        <!-- SpringBoot Actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- Swagger UI -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger.fox.version}</version>
        </dependency>

        <!-- Mysql Connector -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>

        <!-- RuoYi Common DataSource -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-datasource</artifactId>
        </dependency>

        <!-- RuoYi Common DataScope -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-datascope</artifactId>
        </dependency>

        <!-- RuoYi Common Log -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-log</artifactId>
        </dependency>

        <!-- RuoYi Common Swagger -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common-swagger</artifactId>
        </dependency>

        <!-- RuoYi Common International Language -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>hw-common-i18n</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>hw-api-basic</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\bootstrap.yml
```yaml
# Tomcat
server:
  port: 9669

# Spring
spring:
  application:
    # 应用名称
    name: hw-portal
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        namespace: hwsaas-xs92
        group: DEFAULT_GROUP
        username: nacos
        password: nacos
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        namespace: hwsaas-xs92
        group: DEFAULT_GROUP
        username: nacos
        password: nacos
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}


## Tomcat
#server:
#  port: 9669
#
## Spring
#spring:
#  application:
#    # 应用名称
#    name: hw-portal
#  profiles:
#    # 环境配置
#    active: dev
#  cloud:
#    nacos:
#      discovery:
#        # 服务注册地址
#        server-addr: 175.27.215.92:8848
#        namespace: hwsaas-xs
#        group: DEFAULT_GROUP
#      config:
#        # 配置中心地址
#        server-addr: 175.27.215.92:8848
#        namespace: hwsaas-xs
#        group: DEFAULT_GROUP
#        # 配置文件格式
#        file-extension: yml
#        # 共享配置
#        shared-configs:
#          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\logback.xml
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径 -->
	<property name="log.path" value="logs/ruoyi-portal" />
   <!-- 日志输出格式 -->
	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

    <!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

    <!-- 系统日志输出 -->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/info.log</file>
        <!-- 循环政策：基于时间创建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
			<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作：接收（记录） -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作：拒绝（不记录） -->
            <onMismatch>DENY</onMismatch>
        </filter>
	</appender>

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/error.log</file>
        <!-- 循环政策：基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
			<!-- 匹配时的操作：接收（记录） -->
            <onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作：拒绝（不记录） -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 系统模块日志级别控制  -->
	<logger name="com.ruoyi" level="info" />
	<!-- Spring日志级别控制  -->
	<logger name="org.springframework" level="warn" />

	<root level="info">
		<appender-ref ref="console" />
	</root>
	
	<!--系统操作日志-->
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>
</configuration>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\banner.txt
```text
Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}
                            _                           _                    
                           (_)                         | |                   
 _ __  _   _   ___   _   _  _  ______  ___  _   _  ___ | |_   ___  _ __ ___  
| '__|| | | | / _ \ | | | || ||______|/ __|| | | |/ __|| __| / _ \| '_ ` _ \ 
| |   | |_| || (_) || |_| || |        \__ \| |_| |\__ \| |_ |  __/| | | | | |
|_|    \__,_| \___/  \__, ||_|        |___/ \__, ||___/ \__| \___||_| |_| |_|
                      __/ |                  __/ |                           
                     |___/                  |___/
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwAboutUsInfoController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwAboutUsInfo;
import com.ruoyi.portal.service.IHwAboutUsInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 关于我们信息Controller
 * 
 * @author xins
 * @date 2024-12-01
 */
@RestController
@RequestMapping("/aboutUsInfo")
public class HwAboutUsInfoController extends BaseController
{
    @Autowired
    private IHwAboutUsInfoService hwAboutUsInfoService;

    /**
     * 查询关于我们信息列表
     */
    //@RequiresPermissions("portalaboutUsInfo:list")
    @GetMapping("/list")
    public TableDataInfo list(HwAboutUsInfo hwAboutUsInfo)
    {
        startPage();
        List<HwAboutUsInfo> list = hwAboutUsInfoService.selectHwAboutUsInfoList(hwAboutUsInfo);
        return getDataTable(list);
    }

    /**
     * 导出关于我们信息列表
     */
    //@RequiresPermissions("portalaboutUsInfo:export")
    //@Log(title = "关于我们信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwAboutUsInfo hwAboutUsInfo)
    {
        List<HwAboutUsInfo> list = hwAboutUsInfoService.selectHwAboutUsInfoList(hwAboutUsInfo);
        ExcelUtil<HwAboutUsInfo> util = new ExcelUtil<HwAboutUsInfo>(HwAboutUsInfo.class);
        util.exportExcel(response, list, "关于我们信息数据");
    }

    /**
     * 获取关于我们信息详细信息
     */
    //@RequiresPermissions("portalaboutUsInfo:query")
    @GetMapping(value = "/{aboutUsInfoId}")
    public AjaxResult getInfo(@PathVariable("aboutUsInfoId") Long aboutUsInfoId)
    {
        return success(hwAboutUsInfoService.selectHwAboutUsInfoByAboutUsInfoId(aboutUsInfoId));
    }

    /**
     * 新增关于我们信息
     */
    //@RequiresPermissions("portalaboutUsInfo:add")
    //@Log(title = "关于我们信息", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwAboutUsInfo hwAboutUsInfo)
    {
        return toAjax(hwAboutUsInfoService.insertHwAboutUsInfo(hwAboutUsInfo));
    }

    /**
     * 修改关于我们信息
     */
    //@RequiresPermissions("portalaboutUsInfo:edit")
    //@Log(title = "关于我们信息", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwAboutUsInfo hwAboutUsInfo)
    {
        return toAjax(hwAboutUsInfoService.updateHwAboutUsInfo(hwAboutUsInfo));
    }

    /**
     * 删除关于我们信息
     */
    //@RequiresPermissions("portalaboutUsInfo:remove")
    //@Log(title = "关于我们信息", businessType = BusinessType.DELETE)
	@DeleteMapping("/{aboutUsInfoIds}")
    public AjaxResult remove(@PathVariable Long[] aboutUsInfoIds)
    {
        return toAjax(hwAboutUsInfoService.deleteHwAboutUsInfoByAboutUsInfoIds(aboutUsInfoIds));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwAboutUsInfoDetailController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwAboutUsInfoDetail;
import com.ruoyi.portal.service.IHwAboutUsInfoDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 关于我们信息明细Controller
 * 
 * @author ruoyi
 * @date 2024-12-01
 */
@RestController
@RequestMapping("/aboutUsInfoDetail")
public class HwAboutUsInfoDetailController extends BaseController
{
    @Autowired
    private IHwAboutUsInfoDetailService hwAboutUsInfoDetailService;

    /**
     * 查询关于我们信息明细列表
     */
    //@RequiresPermissions("portalaboutUsInfoDetail:list")
    @GetMapping("/list")
    public TableDataInfo list(HwAboutUsInfoDetail hwAboutUsInfoDetail)
    {
        startPage();
        List<HwAboutUsInfoDetail> list = hwAboutUsInfoDetailService.selectHwAboutUsInfoDetailList(hwAboutUsInfoDetail);
        return getDataTable(list);
    }

    /**
     * 导出关于我们信息明细列表
     */
    //@RequiresPermissions("portalaboutUsInfoDetail:export")
    //@Log(title = "关于我们信息明细", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwAboutUsInfoDetail hwAboutUsInfoDetail)
    {
        List<HwAboutUsInfoDetail> list = hwAboutUsInfoDetailService.selectHwAboutUsInfoDetailList(hwAboutUsInfoDetail);
        ExcelUtil<HwAboutUsInfoDetail> util = new ExcelUtil<HwAboutUsInfoDetail>(HwAboutUsInfoDetail.class);
        util.exportExcel(response, list, "关于我们信息明细数据");
    }

    /**
     * 获取关于我们信息明细详细信息
     */
    //@RequiresPermissions("portalaboutUsInfoDetail:query")
    @GetMapping(value = "/{usInfoDetailId}")
    public AjaxResult getInfo(@PathVariable("usInfoDetailId") Long usInfoDetailId)
    {
        return success(hwAboutUsInfoDetailService.selectHwAboutUsInfoDetailByUsInfoDetailId(usInfoDetailId));
    }

    /**
     * 新增关于我们信息明细
     */
    //@RequiresPermissions("portalaboutUsInfoDetail:add")
    //@Log(title = "关于我们信息明细", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwAboutUsInfoDetail hwAboutUsInfoDetail)
    {
        return toAjax(hwAboutUsInfoDetailService.insertHwAboutUsInfoDetail(hwAboutUsInfoDetail));
    }

    /**
     * 修改关于我们信息明细
     */
    //@RequiresPermissions("portalaboutUsInfoDetail:edit")
    //@Log(title = "关于我们信息明细", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwAboutUsInfoDetail hwAboutUsInfoDetail)
    {
        return toAjax(hwAboutUsInfoDetailService.updateHwAboutUsInfoDetail(hwAboutUsInfoDetail));
    }

    /**
     * 删除关于我们信息明细
     */
    //@RequiresPermissions("portalaboutUsInfoDetail:remove")
    //@Log(title = "关于我们信息明细", businessType = BusinessType.DELETE)
	@DeleteMapping("/{usInfoDetailIds}")
    public AjaxResult remove(@PathVariable Long[] usInfoDetailIds)
    {
        return toAjax(hwAboutUsInfoDetailService.deleteHwAboutUsInfoDetailByUsInfoDetailIds(usInfoDetailIds));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwContactUsInfoController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwContactUsInfo;
import com.ruoyi.portal.service.IHwContactUsInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 联系我们信息Controller
 * 
 * @author xins
 * @date 2024-12-01
 */
@RestController
@RequestMapping("/contactUsInfo")
public class HwContactUsInfoController extends BaseController
{
    @Autowired
    private IHwContactUsInfoService hwContactUsInfoService;

    /**
     * 查询联系我们信息列表
     */
    //@RequiresPermissions("portalcontactUsInfo:list")
    @GetMapping("/list")
    public TableDataInfo list(HwContactUsInfo hwContactUsInfo)
    {
        startPage();
        List<HwContactUsInfo> list = hwContactUsInfoService.selectHwContactUsInfoList(hwContactUsInfo);
        return getDataTable(list);
    }

    /**
     * 导出联系我们信息列表
     */
    //@RequiresPermissions("portalcontactUsInfo:export")
    //@Log(title = "联系我们信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwContactUsInfo hwContactUsInfo)
    {
        List<HwContactUsInfo> list = hwContactUsInfoService.selectHwContactUsInfoList(hwContactUsInfo);
        ExcelUtil<HwContactUsInfo> util = new ExcelUtil<HwContactUsInfo>(HwContactUsInfo.class);
        util.exportExcel(response, list, "联系我们信息数据");
    }

    /**
     * 获取联系我们信息详细信息
     */
    //@RequiresPermissions("portalcontactUsInfo:query")
    @GetMapping(value = "/{contactUsInfoId}")
    public AjaxResult getInfo(@PathVariable("contactUsInfoId") Long contactUsInfoId)
    {
        return success(hwContactUsInfoService.selectHwContactUsInfoByContactUsInfoId(contactUsInfoId));
    }

    /**
     * 新增联系我们信息
     */
    //@RequiresPermissions("portalcontactUsInfo:add")
    //@Log(title = "联系我们信息", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwContactUsInfo hwContactUsInfo)
    {
        return toAjax(hwContactUsInfoService.insertHwContactUsInfo(hwContactUsInfo));
    }

    /**
     * 修改联系我们信息
     */
    //@RequiresPermissions("portalcontactUsInfo:edit")
    //@Log(title = "联系我们信息", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwContactUsInfo hwContactUsInfo)
    {
        return toAjax(hwContactUsInfoService.updateHwContactUsInfo(hwContactUsInfo));
    }

    /**
     * 删除联系我们信息
     */
    //@RequiresPermissions("portalcontactUsInfo:remove")
    //@Log(title = "联系我们信息", businessType = BusinessType.DELETE)
	@DeleteMapping("/{contactUsInfoIds}")
    public AjaxResult remove(@PathVariable Long[] contactUsInfoIds)
    {
        return toAjax(hwContactUsInfoService.deleteHwContactUsInfoByContactUsInfoIds(contactUsInfoIds));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwPortalConfigController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwPortalConfig;
import com.ruoyi.portal.domain.HwPortalConfigType;
import com.ruoyi.portal.service.IHwPortalConfigService;
import com.ruoyi.portal.service.IHwPortalConfigTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 门户网站配置Controller
 * 
 * @author xins
 * @date 2024-12-01
 */
@RestController
@RequestMapping("/portalConfig")
public class HwPortalConfigController extends BaseController
{
    @Autowired
    private IHwPortalConfigService hwPortalConfigService;

    @Autowired
    private IHwPortalConfigTypeService hwPortalConfigTypeService;

    /**
     * 查询门户网站配置列表
     */
    //@RequiresPermissions("portalportalConfig:list")
    @GetMapping("/list")
    public TableDataInfo list(HwPortalConfig hwPortalConfig)
    {
        startPage();
        List<HwPortalConfig> list = hwPortalConfigService.selectHwPortalConfigJoinList(hwPortalConfig);
        return getDataTable(list);
    }

    /**
     * 导出门户网站配置列表
     */
    //@RequiresPermissions("portalportalConfig:export")
    //@Log(title = "门户网站配置", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwPortalConfig hwPortalConfig)
    {
        List<HwPortalConfig> list = hwPortalConfigService.selectHwPortalConfigList(hwPortalConfig);
        ExcelUtil<HwPortalConfig> util = new ExcelUtil<HwPortalConfig>(HwPortalConfig.class);
        util.exportExcel(response, list, "门户网站配置数据");
    }

    /**
     * 获取门户网站配置详细信息
     */
    //@RequiresPermissions("portalportalConfig:query")
    @GetMapping(value = "/{portalConfigId}")
    public AjaxResult getInfo(@PathVariable("portalConfigId") Long portalConfigId)
    {
        return success(hwPortalConfigService.selectHwPortalConfigByPortalConfigId(portalConfigId));
    }

    /**
     * 新增门户网站配置
     */
    //@RequiresPermissions("portalportalConfig:add")
    //@Log(title = "门户网站配置", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwPortalConfig hwPortalConfig)
    {
        return toAjax(hwPortalConfigService.insertHwPortalConfig(hwPortalConfig));
    }

    /**
     * 修改门户网站配置
     */
    //@RequiresPermissions("portalportalConfig:edit")
    //@Log(title = "门户网站配置", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwPortalConfig hwPortalConfig)
    {
        return toAjax(hwPortalConfigService.updateHwPortalConfig(hwPortalConfig));
    }

    /**
     * 删除门户网站配置
     */
    //@RequiresPermissions("portalportalConfig:remove")
    //@Log(title = "门户网站配置", businessType = BusinessType.DELETE)
	@DeleteMapping("/{portalConfigIds}")
    public AjaxResult remove(@PathVariable Long[] portalConfigIds)
    {
        return toAjax(hwPortalConfigService.deleteHwPortalConfigByPortalConfigIds(portalConfigIds));
    }


    /**
     * 获取门户网站配置树列表
     */
    //@RequiresPermissions("portalportalConfig:list")
    @GetMapping("/portalConfigTypeTree")
    public AjaxResult portalConfigTypeTree(HwPortalConfigType hwPortalConfigType) {

        return success(hwPortalConfigTypeService.selectPortalConfigTypeTreeList(hwPortalConfigType));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwPortalConfigTypeController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwPortalConfigType;
import com.ruoyi.portal.service.IHwPortalConfigTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 门户网站配置类型Controller
 * 
 * @author xins
 * @date 2024-12-11
 */
@RestController
@RequestMapping("/portalConfigType")
public class HwPortalConfigTypeController extends BaseController
{
    @Autowired
    private IHwPortalConfigTypeService hwPortalConfigTypeService;

    /**
     * 查询门户网站配置类型列表
     */
    //@RequiresPermissions("portalportalConfigType:list")
    @GetMapping("/list")
    public AjaxResult list(HwPortalConfigType hwPortalConfigType)
    {
        List<HwPortalConfigType> list = hwPortalConfigTypeService.selectHwPortalConfigTypeList(hwPortalConfigType);
        return success(list);
    }

    /**
     * 导出门户网站配置类型列表
     */
    //@RequiresPermissions("portalportalConfigType:export")
    //@Log(title = "门户网站配置类型", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwPortalConfigType hwPortalConfigType)
    {
        List<HwPortalConfigType> list = hwPortalConfigTypeService.selectHwPortalConfigTypeList(hwPortalConfigType);
        ExcelUtil<HwPortalConfigType> util = new ExcelUtil<HwPortalConfigType>(HwPortalConfigType.class);
        util.exportExcel(response, list, "门户网站配置类型数据");
    }

    /**
     * 获取门户网站配置类型详细信息
     */
    //@RequiresPermissions("portalportalConfigType:query")
    @GetMapping(value = "/{configTypeId}")
    public AjaxResult getInfo(@PathVariable("configTypeId") Long configTypeId)
    {
        return success(hwPortalConfigTypeService.selectHwPortalConfigTypeByConfigTypeId(configTypeId));
    }

    /**
     * 新增门户网站配置类型
     */
    //@RequiresPermissions("portalportalConfigType:add")
    //@Log(title = "门户网站配置类型", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwPortalConfigType hwPortalConfigType)
    {
        return toAjax(hwPortalConfigTypeService.insertHwPortalConfigType(hwPortalConfigType));
    }

    /**
     * 修改门户网站配置类型
     */
    //@RequiresPermissions("portalportalConfigType:edit")
    //@Log(title = "门户网站配置类型", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwPortalConfigType hwPortalConfigType)
    {
        return toAjax(hwPortalConfigTypeService.updateHwPortalConfigType(hwPortalConfigType));
    }

    /**
     * 删除门户网站配置类型
     */
    //@RequiresPermissions("portalportalConfigType:remove")
    //@Log(title = "门户网站配置类型", businessType = BusinessType.DELETE)
	@DeleteMapping("/{configTypeIds}")
    public AjaxResult remove(@PathVariable Long[] configTypeIds)
    {
        return toAjax(hwPortalConfigTypeService.deleteHwPortalConfigTypeByConfigTypeIds(configTypeIds));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwPortalController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.ip.IpUtils;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.portal.domain.*;
import com.ruoyi.portal.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 门户网站前端Controller
 * 
 * @author xins
 * @date 2024-12-12
 */
@RestController
@RequestMapping("/portal")
public class HwPortalController extends BaseController
{
    @Autowired
    private IHwPortalConfigService hwPortalConfigService;

    @Autowired
    private IHwPortalConfigTypeService hwPortalConfigTypeService;

    @Autowired
    private IHwProductCaseInfoService hwProductCaseInfoService;

    @Autowired
    private IHwContactUsInfoService hwContactUsInfoService;

    @Autowired
    private IHwProductInfoService productInfoService;

    @Autowired
    private IHwProductInfoDetailService hwProductInfoDetailService;

    @Autowired
    private IHwAboutUsInfoService hwAboutUsInfoService;

    @Autowired
    private IHwAboutUsInfoDetailService hwAboutUsInfoDetailService;


    /**
     * 查询门户网站配置列表（首页大图，portal_config_type为1;产品中心大图，portal_config_type为2,并且需要根据portalConfigTypeId获取）
     */
    @GetMapping("/getPortalConfigList")
    public TableDataInfo getPortalConfigList(HwPortalConfig hwPortalConfig)
    {
        startPage();
        List<HwPortalConfig> list = hwPortalConfigService.selectHwPortalConfigList(hwPortalConfig);
        return getDataTable(list);
    }


    /**
     * 门户网站配置类型（首页产品中心，config_type_classfication为1，按homeConfigTypeName显示；产品中心页面上面的按configTypeName显示）
     */
    @GetMapping("/getPortalConfigTypeList")
    public TableDataInfo getPortalConfigTypeList(HwPortalConfigType hwPortalConfigType)
    {
        List<HwPortalConfigType> list = hwPortalConfigTypeService.selectHwPortalConfigTypeList(hwPortalConfigType);
        return getDataTable(list);
    }


    /**
     * 门户网站配置类型（首页产品中心，config_type_classfication为1，按homeConfigTypeName显示；产品中心页面上面的按configTypeName显示）
     */
    @GetMapping("/selectConfigTypeList")
    public TableDataInfo selectConfigTypeList(HwPortalConfigType hwPortalConfigType)
    {
        List<HwPortalConfigType> list = hwPortalConfigTypeService.selectConfigTypeList(hwPortalConfigType);
        return getDataTable(list);
    }

    /**
     * 获取首页案例tab title(例如物联网、制造中心和快递物流)
     */
    @GetMapping("/getHomeCaseTitleList")
    public TableDataInfo getHomeCaseTitleList(HwPortalConfigType hwPortalConfigType)
    {
        startPage();
        List<HwPortalConfigType> list = hwPortalConfigTypeService.selectHwPortalConfigTypeList(hwPortalConfigType);
        return getDataTable(list);
    }


    /**
     * 获取首页案例信息
     */
    @GetMapping("/getTypicalHomeCaseInfo")
    public AjaxResult getTypicalHomeCaseInfo(HwProductCaseInfo queryProductCaseInfo)
    {
        HwProductCaseInfo hwProductCaseInfo = hwProductCaseInfoService.getTypicalHomeCaseInfo(queryProductCaseInfo);

        return success(hwProductCaseInfo);
    }



    /**
     * 新增联系我们
     */
    //@Log(title = "联系我们", businessType = BusinessType.INSERT)
    @PostMapping("/addContactUsInfo")
    public AjaxResult addContactUsInfo(@RequestBody HwContactUsInfo hwContactUsInfo)
    {
        hwContactUsInfo.setUserIp(IpUtils.getIpAddr());
        return toAjax(hwContactUsInfoService.insertHwContactUsInfo(hwContactUsInfo));
    }



    /**
     * 获取产品中心产品信息(平台简介,hw_product_info获取，（配置模式2左标题+内容，右图片）读取中文标题和英文标题，下面内容从hw_product_info_detail获取，读取标题，内容和图片)
     */
    @GetMapping("/getProductCenterProductInfos")
    public AjaxResult getProductCenterProductInfos(HwProductInfo hwProductInfo)
    {
//        配置模式(1图标 +文字+内容横铺4个2左标题+内容，右图片；3左图标，右标题+内容，一行2个；4左大图右标题+内容，一行2个；5上标题+下图片，6上标题+内容，下图片；7图标标题内容，一行3个,8左图右列表9上图下内容，一行4个)
        return success(productInfoService.selectHwProductInfoJoinDetailList(hwProductInfo));
    }

    /**
     * 产品中心如果tab的话，根据tab的product_info_detail_id获取children productinfodetail
     * @param hwProductInfoDetail
     * @return
     */
    @GetMapping("/getProductCenterProductDetailInfos")
    public AjaxResult getProductCenterProductDetailInfos(HwProductInfoDetail hwProductInfoDetail)
    {
//       productinfodetail的config_modal 配置模式(1图标 +文字+内容横铺4个2左标题+内容，右图片；3左图标，右标题+内容，一行2个；4左大图右标题+内容，一行2个；5上标题+下图片，6上标题+内容，下图片；7图标标题内容，一行3个,8一张图9上图下内容，一行4个)
        return success(hwProductInfoDetailService.selectHwProductInfoDetailList(hwProductInfoDetail));
    }


    /**
     * 产品中心如果tab的话，根据tab的portalconfigtypeid获取productcaseinfo
     * @param hwProductCaseInfo
     * @return
     */
    @GetMapping("/getCaseCenterCaseInfos")
    public AjaxResult getCaseCenterCaseInfos(HwProductCaseInfo hwProductCaseInfo)
    {
        return success(hwProductCaseInfoService.selectHwProductCaseInfoList(hwProductCaseInfo));
    }

    /**
     * 根据案例ID获取案例详情
     * @param caseInfoId
     * @return
     */
    @GetMapping("/getCaseCenterCaseInfo/{caseInfoId}")
    public AjaxResult getCaseCenterCaseInfo(@PathVariable("caseInfoId") Long caseInfoId)
    {
        return success(hwProductCaseInfoService.selectHwProductCaseInfoByCaseInfoId(caseInfoId));
    }


    /**
     * 获取关于我们信息
     * @param hwAboutUsInfo
     * @return
     */
    @GetMapping("/getAboutUsInfo")
    public AjaxResult getAboutUsInfo(HwAboutUsInfo hwAboutUsInfo)
    {
        return success(hwAboutUsInfoService.selectHwAboutUsInfoList(hwAboutUsInfo));
    }


    /**
     * 获取关于我们信息详情
     * @param hwAboutUsInfoDetail
     * @return
     */
    @GetMapping("/getAboutUsInfoDetails")
    public AjaxResult getAboutUsInfoDetails(HwAboutUsInfoDetail hwAboutUsInfoDetail)
    {
        return success(hwAboutUsInfoDetailService.selectHwAboutUsInfoDetailList(hwAboutUsInfoDetail));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwProductCaseInfoController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwPortalConfigType;
import com.ruoyi.portal.domain.HwProductCaseInfo;
import com.ruoyi.portal.service.IHwPortalConfigTypeService;
import com.ruoyi.portal.service.IHwProductCaseInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 案例内容Controller
 * 
 * @author xins
 * @date 2024-12-01
 */
@RestController
@RequestMapping("/productCaseInfo")
public class HwProductCaseInfoController extends BaseController
{
    @Autowired
    private IHwProductCaseInfoService hwProductCaseInfoService;

    @Autowired
    private IHwPortalConfigTypeService hwPortalConfigTypeService;

    /**
     * 查询案例内容列表
     */
    //@RequiresPermissions("portalproductCaseInfo:list")
    @GetMapping("/list")
    public TableDataInfo list(HwProductCaseInfo hwProductCaseInfo)
    {
        startPage();
        List<HwProductCaseInfo> list = hwProductCaseInfoService.selectHwProductCaseInfoList(hwProductCaseInfo);
        return getDataTable(list);
    }

    /**
     * 导出案例内容列表
     */
    //@RequiresPermissions("portalproductCaseInfo:export")
    //@Log(title = "案例内容", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwProductCaseInfo hwProductCaseInfo)
    {
        List<HwProductCaseInfo> list = hwProductCaseInfoService.selectHwProductCaseInfoList(hwProductCaseInfo);
        ExcelUtil<HwProductCaseInfo> util = new ExcelUtil<HwProductCaseInfo>(HwProductCaseInfo.class);
        util.exportExcel(response, list, "案例内容数据");
    }

    /**
     * 获取案例内容详细信息
     */
    //@RequiresPermissions("portalproductCaseInfo:query")
    @GetMapping(value = "/{caseInfoId}")
    public AjaxResult getInfo(@PathVariable("caseInfoId") Long caseInfoId)
    {
        return success(hwProductCaseInfoService.selectHwProductCaseInfoByCaseInfoId(caseInfoId));
    }

    /**
     * 新增案例内容
     */
    //@RequiresPermissions("portalproductCaseInfo:add")
    //@Log(title = "案例内容", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwProductCaseInfo hwProductCaseInfo)
    {
        return toAjax(hwProductCaseInfoService.insertHwProductCaseInfo(hwProductCaseInfo));
    }

    /**
     * 修改案例内容
     */
    //@RequiresPermissions("portalproductCaseInfo:edit")
    //@Log(title = "案例内容", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwProductCaseInfo hwProductCaseInfo)
    {
        return toAjax(hwProductCaseInfoService.updateHwProductCaseInfo(hwProductCaseInfo));
    }

    /**
     * 删除案例内容
     */
    //@RequiresPermissions("portalproductCaseInfo:remove")
    //@Log(title = "案例内容", businessType = BusinessType.DELETE)
	@DeleteMapping("/{caseInfoIds}")
    public AjaxResult remove(@PathVariable Long[] caseInfoIds)
    {
        return toAjax(hwProductCaseInfoService.deleteHwProductCaseInfoByCaseInfoIds(caseInfoIds));
    }


    /**
     * 查询门户网站配置类型s树列表
     */
    /**
     * 获取门户网站配置树列表
     */
    //@RequiresPermissions("portalproductCaseInfo:list")
    @GetMapping("/portalConfigTypeTree")
    public AjaxResult portalConfigTypeTree(HwPortalConfigType hwPortalConfigType) {

        return success(hwPortalConfigTypeService.selectPortalConfigTypeTreeList(hwPortalConfigType));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwProductInfoController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwPortalConfigType;
import com.ruoyi.portal.domain.HwProductInfo;
import com.ruoyi.portal.service.IHwPortalConfigTypeService;
import com.ruoyi.portal.service.IHwProductInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 产品信息配置Controller
 * 
 * @author xins
 * @date 2024-12-01
 */
@RestController
@RequestMapping("/productInfo")
public class HwProductInfoController extends BaseController
{
    @Autowired
    private IHwProductInfoService hwProductInfoService;

    @Autowired
    private IHwPortalConfigTypeService hwPortalConfigTypeService;


    /**
     * 查询产品信息配置列表
     */
    //@RequiresPermissions("portalproductInfo:list")
    @GetMapping("/list")
    public TableDataInfo list(HwProductInfo hwProductInfo)
    {
        startPage();
        List<HwProductInfo> list = hwProductInfoService.selectHwProductInfoJoinList(hwProductInfo);
        return getDataTable(list);
    }

    /**
     * 导出产品信息配置列表
     */
    //@RequiresPermissions("portalproductInfo:export")
    //@Log(title = "产品信息配置", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwProductInfo hwProductInfo)
    {
        List<HwProductInfo> list = hwProductInfoService.selectHwProductInfoList(hwProductInfo);
        ExcelUtil<HwProductInfo> util = new ExcelUtil<HwProductInfo>(HwProductInfo.class);
        util.exportExcel(response, list, "产品信息配置数据");
    }

    /**
     * 获取产品信息配置详细信息
     */
    //@RequiresPermissions("portalproductInfo:query")
    @GetMapping(value = "/{productInfoId}")
    public AjaxResult getInfo(@PathVariable("productInfoId") Long productInfoId)
    {
        return success(hwProductInfoService.selectHwProductInfoByProductInfoId(productInfoId));
    }

    /**
     * 新增产品信息配置
     */
    //@RequiresPermissions("portalproductInfo:add")
    //@Log(title = "产品信息配置", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwProductInfo hwProductInfo)
    {
        return toAjax(hwProductInfoService.insertHwProductInfo(hwProductInfo));
    }

    /**
     * 修改产品信息配置
     */
    //@RequiresPermissions("portalproductInfo:edit")
    //@Log(title = "产品信息配置", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwProductInfo hwProductInfo)
    {
        return toAjax(hwProductInfoService.updateHwProductInfo(hwProductInfo));
    }

    /**
     * 删除产品信息配置
     */
    //@RequiresPermissions("portalproductInfo:remove")
    //@Log(title = "产品信息配置", businessType = BusinessType.DELETE)
	@DeleteMapping("/{productInfoIds}")
    public AjaxResult remove(@PathVariable Long[] productInfoIds)
    {
        return toAjax(hwProductInfoService.deleteHwProductInfoByProductInfoIds(productInfoIds));
    }


    /**
     * 查询门户网站配置类型s树列表
     */
    /**
     * 获取门户网站配置树列表
     */
    //@RequiresPermissions("portalproductInfo:list")
    @GetMapping("/portalConfigTypeTree")
    public AjaxResult portalConfigTypeTree(HwPortalConfigType hwPortalConfigType) {

        return success(hwPortalConfigTypeService.selectPortalConfigTypeTreeList(hwPortalConfigType));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwProductInfoDetailController.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwProductInfoDetail;
import com.ruoyi.portal.service.IHwProductInfoDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 产品信息明细配置Controller
 * 
 * @author xins
 * @date 2024-12-11
 */
@RestController
@RequestMapping("/productInfoDetail")
public class HwProductInfoDetailController extends BaseController
{
    @Autowired
    private IHwProductInfoDetailService hwProductInfoDetailService;

    /**
     * 查询产品信息明细配置列表
     */
    //@RequiresPermissions("portalproductInfoDetail:list")
    @GetMapping("/list")
    public AjaxResult list(HwProductInfoDetail hwProductInfoDetail)
    {
        List<HwProductInfoDetail> list = hwProductInfoDetailService.selectHwProductInfoDetailList(hwProductInfoDetail);
        return success(list);
    }

    /**
     * 导出产品信息明细配置列表
     */
    //@RequiresPermissions("portalproductInfoDetail:export")
    //@Log(title = "产品信息明细配置", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwProductInfoDetail hwProductInfoDetail)
    {
        List<HwProductInfoDetail> list = hwProductInfoDetailService.selectHwProductInfoDetailList(hwProductInfoDetail);
        ExcelUtil<HwProductInfoDetail> util = new ExcelUtil<HwProductInfoDetail>(HwProductInfoDetail.class);
        util.exportExcel(response, list, "产品信息明细配置数据");
    }

    /**
     * 获取产品信息明细配置详细信息
     */
    //@RequiresPermissions("portalproductInfoDetail:query")
    @GetMapping(value = "/{productInfoDetailId}")
    public AjaxResult getInfo(@PathVariable("productInfoDetailId") Long productInfoDetailId)
    {
        return success(hwProductInfoDetailService.selectHwProductInfoDetailByProductInfoDetailId(productInfoDetailId));
    }

    /**
     * 新增产品信息明细配置
     */
    //@RequiresPermissions("portalproductInfoDetail:add")
    //@Log(title = "产品信息明细配置", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwProductInfoDetail hwProductInfoDetail)
    {
        return toAjax(hwProductInfoDetailService.insertHwProductInfoDetail(hwProductInfoDetail));
    }

    /**
     * 修改产品信息明细配置
     */
    //@RequiresPermissions("portalproductInfoDetail:edit")
    //@Log(title = "产品信息明细配置", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwProductInfoDetail hwProductInfoDetail)
    {
        return toAjax(hwProductInfoDetailService.updateHwProductInfoDetail(hwProductInfoDetail));
    }

    /**
     * 删除产品信息明细配置
     */
    //@RequiresPermissions("portalproductInfoDetail:remove")
    //@Log(title = "产品信息明细配置", businessType = BusinessType.DELETE)
	@DeleteMapping("/{productInfoDetailIds}")
    public AjaxResult remove(@PathVariable Long[] productInfoDetailIds)
    {
        return toAjax(hwProductInfoDetailService.deleteHwProductInfoDetailByProductInfoDetailIds(productInfoDetailIds));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwWebController.java
```java
package com.ruoyi.portal.controller;

import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;

import com.ruoyi.portal.domain.HwWeb1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwWeb;
import com.ruoyi.portal.service.IHwWebService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;

/**
 * haiwei官网jsonController
 * 
 * @author ruoyi
 * @date 2025-08-18
 */
@RestController
@RequestMapping("/hwWeb")
public class HwWebController extends BaseController
{
    @Autowired
    private IHwWebService hwWebService;

    /**
     * 查询haiwei官网json列表
     */
    //@RequiresPermissions("portalhwWeb:list")
    @GetMapping("/list")
    public TableDataInfo list(HwWeb hwWeb)
    {
//        startPage();
        List<HwWeb> list = hwWebService.selectHwWebList(hwWeb);
        return getDataTable(list);
    }

    /**
     * 导出haiwei官网json列表
     */
    //@RequiresPermissions("portalhwWeb:export")
    //@Log(title = "haiwei官网json", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwWeb hwWeb)
    {
        List<HwWeb> list = hwWebService.selectHwWebList(hwWeb);
        ExcelUtil<HwWeb> util = new ExcelUtil<HwWeb>(HwWeb.class);
        util.exportExcel(response, list, "haiwei官网json数据");
    }

    /**
     * 获取haiwei官网json详细信息
     */
    //@RequiresPermissions("portalhwWeb:query")
    @GetMapping(value = "/{webCode}")
    public AjaxResult getInfo(@PathVariable("webCode") Long webCode)
    {
        return success(hwWebService.selectHwWebByWebcode(webCode));
    }

    /**
     * 新增haiwei官网json
     */
    //@RequiresPermissions("portalhwWeb:add")
    //@Log(title = "haiwei官网json", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwWeb hwWeb)
    {
        return toAjax(hwWebService.insertHwWeb(hwWeb));
    }

    /**
     * 修改haiwei官网json
     */
    //@RequiresPermissions("portalhwWeb:edit")
    //@Log(title = "haiwei官网json", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwWeb hwWeb)
    {
        int i = hwWebService.updateHwWeb(hwWeb);
        return toAjax(i);
    }

    /**
     * 删除haiwei官网json
     */
    //@RequiresPermissions("portalhwWeb:remove")
    //@Log(title = "haiwei官网json", businessType = BusinessType.DELETE)
	@DeleteMapping("/{webIds}")
    public AjaxResult remove(@PathVariable Long[] webIds)
    {
        return toAjax(hwWebService.deleteHwWebByWebIds(webIds));
    }

    @GetMapping("/getHwWebList")
    public AjaxResult getHwWebList(HwWeb HwWeb)
    {
        return success(hwWebService.selectHwWebList(HwWeb)) ;
    }

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwWebController1.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.portal.domain.HwWeb1;
import com.ruoyi.portal.service.IHwWebService1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * haiwei官网jsonController
 * 
 * @author ruoyi
 * @date 2025-08-18
 */
@RestController
@RequestMapping("/hwWeb1")
public class HwWebController1 extends BaseController
{

    @Autowired
    private IHwWebService1 hwWebService1;

    /**
     * 查询haiwei官网json列表
     */
    //@RequiresPermissions("portalhwWeb:list")
    @GetMapping("/list")
    public TableDataInfo list(HwWeb1 HwWeb1)
    {
//        startPage();
        List<HwWeb1> list = hwWebService1.selectHwWebList(HwWeb1);
        return getDataTable(list);
    }

    /**
     * 导出haiwei官网json列表
     */
    //@RequiresPermissions("portalhwWeb:export")
    //@Log(title = "haiwei官网json", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwWeb1 HwWeb1)
    {
        List<HwWeb1> list = hwWebService1.selectHwWebList(HwWeb1);
        ExcelUtil<HwWeb1> util = new ExcelUtil<HwWeb1>(HwWeb1.class);
        util.exportExcel(response, list, "haiwei官网json数据");
    }

    /**
     * 获取haiwei官网json详细信息
     */
    //@RequiresPermissions("portalhwWeb:query")
    @GetMapping(value = "/{webCode}")
    public AjaxResult getInfo(@PathVariable("webCode") Long webCode)
    {
        return success(hwWebService1.selectHwWebByWebcode(webCode));
    }

    /**
     * 新增haiwei官网json
     */
    //@RequiresPermissions("portalhwWeb:add")
    //@Log(title = "haiwei官网json", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwWeb1 HwWeb1)
    {
        return toAjax(hwWebService1.insertHwWeb(HwWeb1));
    }

    /**
     * 修改haiwei官网json
     */
    //@RequiresPermissions("portalhwWeb:edit")
    //@Log(title = "haiwei官网json", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwWeb1 HwWeb1)
    {
        int i = hwWebService1.updateHwWeb(HwWeb1);
        return toAjax(i);
    }

    /**
     * 删除haiwei官网json
     */
    //@RequiresPermissions("portalhwWeb:remove")
    //@Log(title = "haiwei官网json", businessType = BusinessType.DELETE)
	@DeleteMapping("/{webIds}")
    public AjaxResult remove(@PathVariable Long[] webIds)
    {
        return toAjax(hwWebService1.deleteHwWebByWebIds(webIds));
    }


    @GetMapping("/getHwWeb1List")
    public AjaxResult getHwWeb1List(HwWeb1 HwWeb1)
    {
        return success(hwWebService1.selectHwWebList(HwWeb1)) ;
    }

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwWebDocumentController.java
```java
package com.ruoyi.portal.controller;

import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;

import com.ruoyi.portal.domain.SecureDocumentRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwWebDocument;
import com.ruoyi.portal.service.IHwWebDocumentService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.page.TableDataInfo;

/**
 * Hw资料文件Controller
 * 
 * @author zch
 * @date 2025-09-22
 */
@RestController
@RequestMapping("/hwWebDocument")
public class HwWebDocumentController extends BaseController
{
    @Autowired
    private IHwWebDocumentService hwWebDocumentService;

    /**
     * 查询Hw资料文件列表
     */
//    @RequiresPermissions("portal:hwWebDocument:list")
    @GetMapping("/list")
    public TableDataInfo list(HwWebDocument hwWebDocument)
    {
        startPage();
        List<HwWebDocument> list = hwWebDocumentService.selectHwWebDocumentList(hwWebDocument);
        for (HwWebDocument doc : list) {
            // 隐藏密钥，若设置了密钥则隐藏文件地址
            doc.setSecretKey(null);
            if (doc.getHasSecret()) {
                doc.setDocumentAddress(null);
            }
        }
        return getDataTable(list);
    }

    /**
     * 导出Hw资料文件列表
     */
//    @RequiresPermissions("portal:hwWebDocument:export")
    //@Log(title = "Hw资料文件", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwWebDocument hwWebDocument)
    {
        List<HwWebDocument> list = hwWebDocumentService.selectHwWebDocumentList(hwWebDocument);
        ExcelUtil<HwWebDocument> util = new ExcelUtil<HwWebDocument>(HwWebDocument.class);
        util.exportExcel(response, list, "Hw资料文件数据");
    }

    /**
     * 获取Hw资料文件详细信息
     */
//    @RequiresPermissions("portal:hwWebDocument:query")
    @GetMapping(value = "/{documentId}")
    public AjaxResult getInfo(@PathVariable("documentId") String documentId)
    {
        HwWebDocument doc = hwWebDocumentService.selectHwWebDocumentByDocumentId(documentId);
        if (doc != null) {
            // 隐藏密钥，若设置了密钥则隐藏文件地址
            doc.setSecretKey(null);
            if (doc.getHasSecret()) {
                doc.setDocumentAddress(null);
            }
        }
        return success(doc);
    }

    /**
     * 新增Hw资料文件
     */
//    @RequiresPermissions("portal:hwWebDocument:add")
    //@Log(title = "Hw资料文件", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwWebDocument hwWebDocument)
    {
        return toAjax(hwWebDocumentService.insertHwWebDocument(hwWebDocument));
    }

    /**
     * 修改Hw资料文件
     */
//    @RequiresPermissions("portal:hwWebDocument:edit")
    //@Log(title = "Hw资料文件", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwWebDocument hwWebDocument)
    {
        System.out.println(hwWebDocument.getSecretKey());
        return toAjax(hwWebDocumentService.updateHwWebDocument(hwWebDocument));
    }

    /**
     * 删除Hw资料文件
     */
//    @RequiresPermissions("portal:hwWebDocument:remove")
    //@Log(title = "Hw资料文件", businessType = BusinessType.DELETE)
	@DeleteMapping("/{documentIds}")
    public AjaxResult remove(@PathVariable String[] documentIds)
    {
        return toAjax(hwWebDocumentService.deleteHwWebDocumentByDocumentIds(documentIds));
    }

        /**
     * 获取安全文件地址
     */
//    @RequiresPermissions("portal:hwWebDocument:query")
    //@Log(title = "获取安全文件地址", businessType = BusinessType.OTHER)
    @PostMapping("/getSecureDocumentAddress")
    public AjaxResult getSecureDocumentAddress(@RequestBody SecureDocumentRequest request)
    {
        try {
            String address = hwWebDocumentService.verifyAndGetDocumentAddress(request.getDocumentId(), request.getProvidedKey());
            return success(address);
        } catch (Exception e) {
            return error(e.getMessage());
        }
    }

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwWebMenuController.java
```java
package com.ruoyi.portal.controller;

import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.portal.domain.HwWebMenu;
import com.ruoyi.portal.service.IHwWebMenuService;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.utils.poi.ExcelUtil;

/**
 * haiwei官网菜单Controller
 *
 * @author zch
 * @date 2025-08-18
 */
@RestController
@RequestMapping("/hwWebMenu")
public class HwWebMenuController extends BaseController
{
    @Autowired
    private IHwWebMenuService hwWebMenuService;

    /**
     * 查询haiwei官网菜单列表
     */
    //@RequiresPermissions("portalhwWebMenu:list")
    @GetMapping("/list")
    public AjaxResult list(HwWebMenu hwWebMenu)
    {
        List<HwWebMenu> list = hwWebMenuService.selectHwWebMenuList(hwWebMenu);
        return success(list);
    }

    /**
     * 导出haiwei官网菜单列表
     */
    //@RequiresPermissions("portalhwWebMenu:export")
    //@Log(title = "haiwei官网菜单", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwWebMenu hwWebMenu)
    {
        List<HwWebMenu> list = hwWebMenuService.selectHwWebMenuList(hwWebMenu);
        ExcelUtil<HwWebMenu> util = new ExcelUtil<HwWebMenu>(HwWebMenu.class);
        util.exportExcel(response, list, "haiwei官网菜单数据");
    }

    /**
     * 获取haiwei官网菜单详细信息
     */
    //@RequiresPermissions("portalhwWebMenu:query")
    @GetMapping(value = "/{webMenuId}")
    public AjaxResult getInfo(@PathVariable("webMenuId") Long webMenuId)
    {
        return success(hwWebMenuService.selectHwWebMenuByWebMenuId(webMenuId));
    }

    /**
     * 新增haiwei官网菜单
     */
    //@RequiresPermissions("portalhwWebMenu:add")
    //@Log(title = "haiwei官网菜单", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwWebMenu hwWebMenu)
    {
        return toAjax(hwWebMenuService.insertHwWebMenu(hwWebMenu));
    }

    /**
     * 修改haiwei官网菜单
     */
    //@RequiresPermissions("portalhwWebMenu:edit")
    //@Log(title = "haiwei官网菜单", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwWebMenu hwWebMenu)
    {
        return toAjax(hwWebMenuService.updateHwWebMenu(hwWebMenu));
    }

    /**
     * 删除haiwei官网菜单
     */
    //@RequiresPermissions("portalhwWebMenu:remove")
    //@Log(title = "haiwei官网菜单", businessType = BusinessType.DELETE)
    @DeleteMapping("/{webMenuIds}")
    public AjaxResult remove(@PathVariable Long[] webMenuIds)
    {
        return toAjax(hwWebMenuService.deleteHwWebMenuByWebMenuIds(webMenuIds));
    }

    /**
     * 获取菜单树列表
     */
    @GetMapping("/selectMenuTree")
    public AjaxResult selectMenuTree(HwWebMenu hwWebMenu){
        return success(hwWebMenuService.selectMenuTree(hwWebMenu));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\controller\HwWebMenuController1.java
```java
package com.ruoyi.portal.controller;

import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.portal.domain.HwWebMenu1;
import com.ruoyi.portal.service.IHwWebMenuService1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * haiwei官网菜单Controller
 *
 * @author zch
 * @date 2025-08-18
 */
@RestController
@RequestMapping("/hwWebMenu1")
public class HwWebMenuController1 extends BaseController
{
    @Autowired
    private IHwWebMenuService1 hwWebMenuService1;

    /**
     * 查询haiwei官网菜单列表
     */
    //@RequiresPermissions("portalhwWebMenu:list")
    @GetMapping("/list")
    public AjaxResult list(HwWebMenu1 hwWebMenu1)
    {
        List<HwWebMenu1> list = hwWebMenuService1.selectHwWebMenuList(hwWebMenu1);
        return success(list);
    }

    /**
     * 导出haiwei官网菜单列表
     */
    //@RequiresPermissions("portalhwWebMenu:export")
    //@Log(title = "haiwei官网菜单", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, HwWebMenu1 hwWebMenu1)
    {
        List<HwWebMenu1> list = hwWebMenuService1.selectHwWebMenuList(hwWebMenu1);
        ExcelUtil<HwWebMenu1> util = new ExcelUtil<HwWebMenu1>(HwWebMenu1.class);
        util.exportExcel(response, list, "haiwei官网菜单数据");
    }

    /**
     * 获取haiwei官网菜单详细信息
     */
    //@RequiresPermissions("portalhwWebMenu:query")
    @GetMapping(value = "/{webMenuId}")
    public AjaxResult getInfo(@PathVariable("webMenuId") Long webMenuId)
    {
        return success(hwWebMenuService1.selectHwWebMenuByWebMenuId(webMenuId));
    }

    /**
     * 新增haiwei官网菜单
     */
    //@RequiresPermissions("portalhwWebMenu:add")
    //@Log(title = "haiwei官网菜单", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody HwWebMenu1 hwWebMenu1)
    {
        return toAjax(hwWebMenuService1.insertHwWebMenu(hwWebMenu1));
    }

    /**
     * 修改haiwei官网菜单
     */
    //@RequiresPermissions("portalhwWebMenu:edit")
    //@Log(title = "haiwei官网菜单", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody HwWebMenu1 hwWebMenu1)
    {
        return toAjax(hwWebMenuService1.updateHwWebMenu(hwWebMenu1));
    }

    /**
     * 删除haiwei官网菜单
     */
    //@RequiresPermissions("portalhwWebMenu:remove")
    //@Log(title = "haiwei官网菜单", businessType = BusinessType.DELETE)
    @DeleteMapping("/{webMenuIds}")
    public AjaxResult remove(@PathVariable Long[] webMenuIds)
    {
        return toAjax(hwWebMenuService1.deleteHwWebMenuByWebMenuIds(webMenuIds));
    }

    /**
     * 获取菜单树列表
     */
    @GetMapping("/selectMenuTree")
    public AjaxResult selectMenuTree(HwWebMenu1 hwWebMenu1){
        return success(hwWebMenuService1.selectMenuTree(hwWebMenu1));
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwAboutUsInfo.java
```java
package com.ruoyi.portal.domain;

import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 关于我们信息对象 hw_about_us_info
 * 
 * @author xins
 * @date 2024-12-01
 */
public class HwAboutUsInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键标识 */
    private Long aboutUsInfoId;

    /** 类型（1关于我们页面上大图2公司简介3企业资质4认证证书5团队风貌） */
    @Excel(name = "类型", readConverterExp = "1=关于我们页面上大图2公司简介3企业资质4认证证书5团队风貌")
    private String aboutUsInfoType;

    /** 英文标题 */
    @Excel(name = "英文标题")
    private String aboutUsInfoEtitle;


    /** 中文标题 */
    @Excel(name = "中文标题")
    private String aboutUsInfoTitle;

    /** 内容 */
    @Excel(name = "内容")
    private String aboutUsInfoDesc;

    /** 顺序 */
    @Excel(name = "顺序")
    private Long aboutUsInfoOrder;

    /** 显示模式 */
    @Excel(name = "显示模式")
    private String displayModal;

    /** 图片地址 */
    @Excel(name = "图片地址")
    private String aboutUsInfoPic;

    public void setAboutUsInfoId(Long aboutUsInfoId) 
    {
        this.aboutUsInfoId = aboutUsInfoId;
    }

    public Long getAboutUsInfoId() 
    {
        return aboutUsInfoId;
    }
    public void setAboutUsInfoType(String aboutUsInfoType) 
    {
        this.aboutUsInfoType = aboutUsInfoType;
    }

    public String getAboutUsInfoType() 
    {
        return aboutUsInfoType;
    }

    public String getAboutUsInfoEtitle() {
        return aboutUsInfoEtitle;
    }

    public void setAboutUsInfoEtitle(String aboutUsInfoEtitle) {
        this.aboutUsInfoEtitle = aboutUsInfoEtitle;
    }

    public void setAboutUsInfoTitle(String aboutUsInfoTitle)
    {
        this.aboutUsInfoTitle = aboutUsInfoTitle;
    }

    public String getAboutUsInfoTitle() 
    {
        return aboutUsInfoTitle;
    }
    public void setAboutUsInfoDesc(String aboutUsInfoDesc) 
    {
        this.aboutUsInfoDesc = aboutUsInfoDesc;
    }

    public String getAboutUsInfoDesc() 
    {
        return aboutUsInfoDesc;
    }
    public void setAboutUsInfoOrder(Long aboutUsInfoOrder) 
    {
        this.aboutUsInfoOrder = aboutUsInfoOrder;
    }

    public Long getAboutUsInfoOrder() 
    {
        return aboutUsInfoOrder;
    }

    public String getDisplayModal() {
        return displayModal;
    }

    public void setDisplayModal(String displayModal) {
        this.displayModal = displayModal;
    }

    public void setAboutUsInfoPic(String aboutUsInfoPic)
    {
        this.aboutUsInfoPic = aboutUsInfoPic;
    }

    public String getAboutUsInfoPic() 
    {
        return aboutUsInfoPic;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("aboutUsInfoId", getAboutUsInfoId())
            .append("aboutUsInfoType", getAboutUsInfoType())
            .append("aboutUsInfoTitle", getAboutUsInfoTitle())
            .append("aboutUsInfoDesc", getAboutUsInfoDesc())
            .append("aboutUsInfoOrder", getAboutUsInfoOrder())
            .append("aboutUsInfoPic", getAboutUsInfoPic())
            .append("createTime", getCreateTime())
            .append("createBy", getCreateBy())
            .append("updateTime", getUpdateTime())
            .append("updateBy", getUpdateBy())
            .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwAboutUsInfoDetail.java
```java
package com.ruoyi.portal.domain;

import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 关于我们信息明细对象 hw_about_us_info_detail
 * 
 * @author ruoyi
 * @date 2024-12-01
 */
public class HwAboutUsInfoDetail extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键标识 */
    private Long usInfoDetailId;

    /** 关于我们信息ID */
    @Excel(name = "关于我们信息ID")
    private Long aboutUsInfoId;

    /** 标题 */
    @Excel(name = "标题")
    private String usInfoDetailTitle;

    /** 内容 */
    @Excel(name = "内容")
    private String usInfoDetailDesc;

    /** 顺序 */
    @Excel(name = "顺序")
    private Long usInfoDetailOrder;

    /** 图片地址 */
    @Excel(name = "图片地址")
    private String usInfoDetailPic;

    public void setUsInfoDetailId(Long usInfoDetailId) 
    {
        this.usInfoDetailId = usInfoDetailId;
    }

    public Long getUsInfoDetailId() 
    {
        return usInfoDetailId;
    }
    public void setAboutUsInfoId(Long aboutUsInfoId) 
    {
        this.aboutUsInfoId = aboutUsInfoId;
    }

    public Long getAboutUsInfoId() 
    {
        return aboutUsInfoId;
    }
    public void setUsInfoDetailTitle(String usInfoDetailTitle) 
    {
        this.usInfoDetailTitle = usInfoDetailTitle;
    }

    public String getUsInfoDetailTitle() 
    {
        return usInfoDetailTitle;
    }
    public void setUsInfoDetailDesc(String usInfoDetailDesc) 
    {
        this.usInfoDetailDesc = usInfoDetailDesc;
    }

    public String getUsInfoDetailDesc() 
    {
        return usInfoDetailDesc;
    }
    public void setUsInfoDetailOrder(Long usInfoDetailOrder) 
    {
        this.usInfoDetailOrder = usInfoDetailOrder;
    }

    public Long getUsInfoDetailOrder() 
    {
        return usInfoDetailOrder;
    }
    public void setUsInfoDetailPic(String usInfoDetailPic) 
    {
        this.usInfoDetailPic = usInfoDetailPic;
    }

    public String getUsInfoDetailPic() 
    {
        return usInfoDetailPic;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("usInfoDetailId", getUsInfoDetailId())
            .append("aboutUsInfoId", getAboutUsInfoId())
            .append("usInfoDetailTitle", getUsInfoDetailTitle())
            .append("usInfoDetailDesc", getUsInfoDetailDesc())
            .append("usInfoDetailOrder", getUsInfoDetailOrder())
            .append("usInfoDetailPic", getUsInfoDetailPic())
            .append("createTime", getCreateTime())
            .append("createBy", getCreateBy())
            .append("updateTime", getUpdateTime())
            .append("updateBy", getUpdateBy())
            .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwContactUsInfo.java
```java
package com.ruoyi.portal.domain;

import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 联系我们信息对象 hw_contact_us_info
 * 
 * @author xins
 * @date 2024-12-01
 */
public class HwContactUsInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键标识 */
    private Long contactUsInfoId;

    /** 用户姓名 */
    @Excel(name = "用户姓名")
    private String userName;

    /** 邮箱 */
    @Excel(name = "邮箱")
    private String userEmail;

    /** 手机号 */
    @Excel(name = "手机号")
    private String userPhone;

    /** IP地址 */
    @Excel(name = "IP地址")
    private String userIp;

    private String remark;

    public void setContactUsInfoId(Long contactUsInfoId) 
    {
        this.contactUsInfoId = contactUsInfoId;
    }

    public Long getContactUsInfoId() 
    {
        return contactUsInfoId;
    }
    public void setUserName(String userName) 
    {
        this.userName = userName;
    }

    public String getUserName() 
    {
        return userName;
    }
    public void setUserEmail(String userEmail) 
    {
        this.userEmail = userEmail;
    }

    public String getUserEmail() 
    {
        return userEmail;
    }
    public void setUserPhone(String userPhone) 
    {
        this.userPhone = userPhone;
    }

    public String getUserPhone() 
    {
        return userPhone;
    }
    public void setUserIp(String userIp) 
    {
        this.userIp = userIp;
    }

    public String getUserIp() 
    {
        return userIp;
    }

    @Override
    public String getRemark() {
        return remark;
    }

    @Override
    public void setRemark(String remark) {
        this.remark = remark;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("contactUsInfoId", getContactUsInfoId())
            .append("userName", getUserName())
            .append("userEmail", getUserEmail())
            .append("userPhone", getUserPhone())
            .append("userIp", getUserIp())
            .append("createTime", getCreateTime())
            .append("createBy", getCreateBy())
            .append("updateTime", getUpdateTime())
            .append("updateBy", getUpdateBy())
            .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwPortalConfig.java
```java
package com.ruoyi.portal.domain;

import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 门户网站配置对象 hw_portal_config
 * 
 * @author xins
 * @date 2024-12-01
 */
public class HwPortalConfig extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键标识 */
    private Long portalConfigId;

    /** 类型(1首页大图 2产品中心大图) */
    @Excel(name = "类型(1首页大图 2产品中心大图)")
    private String portalConfigType;

    /**如果类型是2的，则需要关联hw_portal_config_type*/
    private Long portalConfigTypeId;

    /** 标题 */
    @Excel(name = "标题")
    private String portalConfigTitle;

    /** 顺序 */
    @Excel(name = "顺序")
    private Long portalConfigOrder;

    /** 内容 */
    @Excel(name = "内容")
    private String portalConfigDesc;

    /** 按钮名称 */
    @Excel(name = "按钮名称")
    private String buttonName;

    /** 按钮跳转地址 */
    @Excel(name = "按钮跳转地址")
    private String routerAddress;

    /** 主图地址 */
    @Excel(name = "主图地址")
    private String portalConfigPic;

    private String configTypeName;


    private String homeConfigTypePic;
    private String homeConfigTypeIcon;
    private String homeConfigTypeName;
    private String homeConfigTypeClassfication;
    private Long parentId;
    private String ancestors;

    public void setPortalConfigId(Long portalConfigId) 
    {
        this.portalConfigId = portalConfigId;
    }

    public Long getPortalConfigId() 
    {
        return portalConfigId;
    }
    public void setPortalConfigType(String portalConfigType) 
    {
        this.portalConfigType = portalConfigType;
    }

    public String getPortalConfigType() 
    {
        return portalConfigType;
    }

    public Long getPortalConfigTypeId() {
        return portalConfigTypeId;
    }

    public void setPortalConfigTypeId(Long portalConfigTypeId) {
        this.portalConfigTypeId = portalConfigTypeId;
    }

    public void setPortalConfigTitle(String portalConfigTitle)
    {
        this.portalConfigTitle = portalConfigTitle;
    }

    public String getPortalConfigTitle() 
    {
        return portalConfigTitle;
    }
    public void setPortalConfigOrder(Long portalConfigOrder) 
    {
        this.portalConfigOrder = portalConfigOrder;
    }

    public Long getPortalConfigOrder() 
    {
        return portalConfigOrder;
    }
    public void setPortalConfigDesc(String portalConfigDesc) 
    {
        this.portalConfigDesc = portalConfigDesc;
    }

    public String getPortalConfigDesc() 
    {
        return portalConfigDesc;
    }
    public void setButtonName(String buttonName) 
    {
        this.buttonName = buttonName;
    }

    public String getButtonName() 
    {
        return buttonName;
    }
    public void setRouterAddress(String routerAddress) 
    {
        this.routerAddress = routerAddress;
    }

    public String getRouterAddress() 
    {
        return routerAddress;
    }
    public void setPortalConfigPic(String portalConfigPic) 
    {
        this.portalConfigPic = portalConfigPic;
    }

    public String getPortalConfigPic() 
    {
        return portalConfigPic;
    }

    public String getConfigTypeName() {
        return configTypeName;
    }

    public void setConfigTypeName(String configTypeName) {
        this.configTypeName = configTypeName;
    }


    public String getHomeConfigTypePic() {
        return homeConfigTypePic;
    }

    public void setHomeConfigTypePic(String homeConfigTypePic) {
        this.homeConfigTypePic = homeConfigTypePic;
    }

    public String getHomeConfigTypeIcon() {
        return homeConfigTypeIcon;
    }

    public void setHomeConfigTypeIcon(String homeConfigTypeIcon) {
        this.homeConfigTypeIcon = homeConfigTypeIcon;
    }

    public String getHomeConfigTypeName() {
        return homeConfigTypeName;
    }

    public void setHomeConfigTypeName(String homeConfigTypeName) {
        this.homeConfigTypeName = homeConfigTypeName;
    }

    public String getHomeConfigTypeClassfication() {
        return homeConfigTypeClassfication;
    }

    public void setHomeConfigTypeClassfication(String homeConfigTypeClassfication) {
        this.homeConfigTypeClassfication = homeConfigTypeClassfication;
    }

    public Long getParentId() {
        return parentId;
    }

    public void setParentId(Long parentId) {
        this.parentId = parentId;
    }

    public String getAncestors() {
        return ancestors;
    }

    public void setAncestors(String ancestors) {
        this.ancestors = ancestors;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("portalConfigId", getPortalConfigId())
            .append("portalConfigType", getPortalConfigType())
            .append("portalConfigTitle", getPortalConfigTitle())
            .append("portalConfigOrder", getPortalConfigOrder())
            .append("portalConfigDesc", getPortalConfigDesc())
            .append("buttonName", getButtonName())
            .append("routerAddress", getRouterAddress())
            .append("portalConfigPic", getPortalConfigPic())
            .append("createTime", getCreateTime())
            .append("createBy", getCreateBy())
            .append("updateTime", getUpdateTime())
            .append("updateBy", getUpdateBy())
                .append("configTypeName", getConfigTypeName())
                .append("homeConfigTypePic", getHomeConfigTypePic())
                .append("homeConfigTypeIcon", getHomeConfigTypeIcon())
                .append("homeConfigTypeName", getHomeConfigTypeName())
                .append("homeConfigTypeClassfication", getHomeConfigTypeClassfication())
                .append("parentId", getParentId())
                .append("ancestors", getAncestors())
            .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwPortalConfigType.java
```java
package com.ruoyi.portal.domain;

import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.core.web.domain.TreeEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.ArrayList;
import java.util.List;

/**
 * 门户网站配置类型对象 hw_portal_config_type
 * 
 * @author xins
 * @date 2024-12-11
 */
public class HwPortalConfigType extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键标识 */
    private Long configTypeId;

    /** 大类(1产品中心，2案例) */
    @Excel(name = "大类(1产品中心，2案例)")
    private String configTypeClassfication;

    /** 名称 */
    @Excel(name = "名称")
    private String configTypeName;

    /** 首页名称 */
    @Excel(name = "首页名称")
    private String homeConfigTypeName;

    /** 备注 */
    @Excel(name = "备注")
    private String configTypeDesc;

    /** 图标地址 */
    @Excel(name = "图标地址")
    private String configTypeIcon;

    /** 首页图片地址 */
    @Excel(name = "首页图片地址")
    private String homeConfigTypePic;

    private Long parentId;

    private String ancestors;

    private List<HwProductCaseInfo> hwProductCaseInfoList;

    /** 子类型 */
    private List<HwPortalConfigType> children = new ArrayList<HwPortalConfigType>();

    public void setConfigTypeId(Long configTypeId) 
    {
        this.configTypeId = configTypeId;
    }

    public Long getConfigTypeId() 
    {
        return configTypeId;
    }
    public void setConfigTypeClassfication(String configTypeClassfication) 
    {
        this.configTypeClassfication = configTypeClassfication;
    }

    public String getConfigTypeClassfication() 
    {
        return configTypeClassfication;
    }
    public void setConfigTypeName(String configTypeName) 
    {
        this.configTypeName = configTypeName;
    }

    public String getConfigTypeName() 
    {
        return configTypeName;
    }
    public void setHomeConfigTypeName(String homeConfigTypeName) 
    {
        this.homeConfigTypeName = homeConfigTypeName;
    }

    public String getHomeConfigTypeName() 
    {
        return homeConfigTypeName;
    }
    public void setConfigTypeDesc(String configTypeDesc) 
    {
        this.configTypeDesc = configTypeDesc;
    }

    public String getConfigTypeDesc() 
    {
        return configTypeDesc;
    }
    public void setConfigTypeIcon(String configTypeIcon) 
    {
        this.configTypeIcon = configTypeIcon;
    }

    public String getConfigTypeIcon() 
    {
        return configTypeIcon;
    }
    public void setHomeConfigTypePic(String homeConfigTypePic) 
    {
        this.homeConfigTypePic = homeConfigTypePic;
    }

    public String getHomeConfigTypePic() 
    {
        return homeConfigTypePic;
    }

    public Long getParentId() {
        return parentId;
    }

    public void setParentId(Long parentId) {
        this.parentId = parentId;
    }

    public String getAncestors() {
        return ancestors;
    }

    public void setAncestors(String ancestors) {
        this.ancestors = ancestors;
    }

    public List<HwProductCaseInfo> getHwProductCaseInfoList() {
        return hwProductCaseInfoList;
    }

    public void setHwProductCaseInfoList(List<HwProductCaseInfo> hwProductCaseInfoList) {
        this.hwProductCaseInfoList = hwProductCaseInfoList;
    }

    public List<HwPortalConfigType> getChildren() {
        return children;
    }

    public void setChildren(List<HwPortalConfigType> children) {
        this.children = children;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("configTypeId", getConfigTypeId())
            .append("configTypeClassfication", getConfigTypeClassfication())
            .append("configTypeName", getConfigTypeName())
            .append("homeConfigTypeName", getHomeConfigTypeName())
            .append("configTypeDesc", getConfigTypeDesc())
            .append("configTypeIcon", getConfigTypeIcon())
            .append("homeConfigTypePic", getHomeConfigTypePic())
            .append("parentId", getParentId())
            .append("ancestors", getAncestors())
            .append("createTime", getCreateTime())
            .append("createBy", getCreateBy())
            .append("updateTime", getUpdateTime())
            .append("updateBy", getUpdateBy())
            .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwProductCaseInfo.java
```java
package com.ruoyi.portal.domain;

import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * 案例内容对象 hw_product_case_info
 * 
 * @author xins
 * @date 2024-12-01
 */
public class HwProductCaseInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键标识 */
    private Long caseInfoId;

    /** 案例标题 */
    @Excel(name = "案例标题")
    private String caseInfoTitle;

    /** 配置类型ID */
    @Excel(name = "配置类型ID")
    private Long configTypeId;

    /** 典型案例标识(1是0否) */
    @Excel(name = "典型案例标识(1是0否)")
    private String typicalFlag;

    /** 案例内容 */
    @Excel(name = "案例内容")
    private String caseInfoDesc;

    /** 案例内容图片 */
    @Excel(name = "案例内容图片")
    private String caseInfoPic;

    /** 案例详情 */
    @Excel(name = "案例详情")
    private String caseInfoHtml;

    private String homeTypicalFlag;


    public void setCaseInfoId(Long caseInfoId) 
    {
        this.caseInfoId = caseInfoId;
    }

    public Long getCaseInfoId() 
    {
        return caseInfoId;
    }
    public void setCaseInfoTitle(String caseInfoTitle) 
    {
        this.caseInfoTitle = caseInfoTitle;
    }

    public String getCaseInfoTitle() 
    {
        return caseInfoTitle;
    }

    public Long getConfigTypeId() {
        return configTypeId;
    }

    public void setConfigTypeId(Long configTypeId) {
        this.configTypeId = configTypeId;
    }

    public void setTypicalFlag(String typicalFlag)
    {
        this.typicalFlag = typicalFlag;
    }

    public String getTypicalFlag() 
    {
        return typicalFlag;
    }
    public void setCaseInfoDesc(String caseInfoDesc) 
    {
        this.caseInfoDesc = caseInfoDesc;
    }

    public String getCaseInfoDesc() 
    {
        return caseInfoDesc;
    }
    public void setCaseInfoPic(String caseInfoPic) 
    {
        this.caseInfoPic = caseInfoPic;
    }

    public String getCaseInfoPic() 
    {
        return caseInfoPic;
    }
    public void setCaseInfoHtml(String caseInfoHtml) 
    {
        this.caseInfoHtml = caseInfoHtml;
    }

    public String getCaseInfoHtml() 
    {
        return caseInfoHtml;
    }

    public String getHomeTypicalFlag() {
        return homeTypicalFlag;
    }

    public void setHomeTypicalFlag(String homeTypicalFlag) {
        this.homeTypicalFlag = homeTypicalFlag;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("caseInfoId", getCaseInfoId())
            .append("caseInfoTitle", getCaseInfoTitle())
            .append("configTypeId", getConfigTypeId())
            .append("typicalFlag", getTypicalFlag())
            .append("caseInfoDesc", getCaseInfoDesc())
            .append("caseInfoPic", getCaseInfoPic())
            .append("caseInfoHtml", getCaseInfoHtml())
            .append("createTime", getCreateTime())
            .append("createBy", getCreateBy())
            .append("updateTime", getUpdateTime())
            .append("updateBy", getUpdateBy())
            .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwProductInfo.java
```java
package com.ruoyi.portal.domain;

import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.List;

/**
 * 产品信息配置对象 hw_product_info
 * 
 * @author xins
 * @date 2024-12-01
 */
public class HwProductInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键标识 */
    private Long productInfoId;

    /** 配置类型（例如物联网解决方案下的物联网平台和物联网硬件产品系列） */
    @Excel(name = "配置类型", readConverterExp = "例=如物联网解决方案下的物联网平台和物联网硬件产品系列")
    private String configTypeId;

    /** 是否按tab显示（1是0否） */
    @Excel(name = "是否按tab显示", readConverterExp = "1=是0否")
    private String tabFlag;

    /** 配置模式(1图标 +文字+内容横铺4个2左标题+内容，右图片；3左图标，右标题+内容，一行2个；4左大图右标题+内容，一行2个；5上标题+下图片，6上标题+内容，下图片；7图标标题内容，一行3个,8左图右图9上图下内容，一行4个) */
    @Excel(name = "配置模式(1图标 +文字+内容横铺4个2左标题+内容，右图片；3左图标，右标题+内容，一行2个；4左大图右标题+内容，一行2个；5上标题+下图片，6上标题+内容，下图片；7图标标题内容，一行3个,8左图右图9上图下内容，一行4个)，13为hw官网配置模式")
    private String configModal;

    /** 英文标题 */
    @Excel(name = "英文标题")
    private String productInfoEtitle;

    /** 中文标题 */
    @Excel(name = "中文标题")
    private String productInfoCtitle;

    /** 顺序 */
    @Excel(name = "顺序")
    private Long productInfoOrder;

    /** 产品信息明细配置信息 */
    private List<HwProductInfoDetail> hwProductInfoDetailList;

    private Long parentId;

    private String configTypeName;
    public void setProductInfoId(Long productInfoId) 
    {
        this.productInfoId = productInfoId;
    }

    public Long getProductInfoId() 
    {
        return productInfoId;
    }
    public void setConfigTypeId(String configTypeId) 
    {
        this.configTypeId = configTypeId;
    }

    public String getConfigTypeId() 
    {
        return configTypeId;
    }
    public void setTabFlag(String tabFlag) 
    {
        this.tabFlag = tabFlag;
    }

    public String getTabFlag() 
    {
        return tabFlag;
    }
    public void setConfigModal(String configModal) 
    {
        this.configModal = configModal;
    }

    public String getConfigModal() 
    {
        return configModal;
    }
    public void setProductInfoEtitle(String productInfoEtitle)
    {
        this.productInfoEtitle = productInfoEtitle;
    }

    public String getProductInfoEtitle()
    {
        return productInfoEtitle;
    }
    public void setProductInfoCtitle(String productInfoCtitle) 
    {
        this.productInfoCtitle = productInfoCtitle;
    }

    public String getProductInfoCtitle() 
    {
        return productInfoCtitle;
    }
    public void setProductInfoOrder(Long productInfoOrder) 
    {
        this.productInfoOrder = productInfoOrder;
    }

    public Long getProductInfoOrder() 
    {
        return productInfoOrder;
    }

    public List<HwProductInfoDetail> getHwProductInfoDetailList()
    {
        return hwProductInfoDetailList;
    }

    public void setHwProductInfoDetailList(List<HwProductInfoDetail> hwProductInfoDetailList)
    {
        this.hwProductInfoDetailList = hwProductInfoDetailList;
    }

    public Long getParentId() {
        return parentId;
    }

    public void setParentId(Long parentId) {
        this.parentId = parentId;
    }

    public String getConfigTypeName() {
        return configTypeName;
    }

    public void setConfigTypeName(String configTypeName) {
        this.configTypeName = configTypeName;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("productInfoId", getProductInfoId())
                .append("configTypeId", getConfigTypeId())
                .append("tabFlag", getTabFlag())
                .append("configModal", getConfigModal())
                .append("productInfoEtitle", getProductInfoEtitle())
                .append("productInfoCtitle", getProductInfoCtitle())
                .append("productInfoOrder", getProductInfoOrder())
                .append("createTime", getCreateTime())
                .append("createBy", getCreateBy())
                .append("updateTime", getUpdateTime())
                .append("updateBy", getUpdateBy())
                .append("hwProductInfoDetailList", getHwProductInfoDetailList())
                .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwProductInfoDetail.java
```java
package com.ruoyi.portal.domain;

import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.TreeEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.List;


/**
 * 产品信息明细配置对象 hw_product_info_detail
 * 
 * @author xins
 * @date 2024-12-11
 */
public class HwProductInfoDetail extends TreeEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键标识 */
    private Long productInfoDetailId;

    /** 产品信息配置ID */
    @Excel(name = "产品信息配置ID")
    private Long productInfoId;

    /** 配置模式(1图标 +文字+内容横铺4个2左标题+内容，右图片；3左图标，右标题+内容，一行2个；4左大图右标题+内容，一行2个；5上标题+下图片，6上标题+内容，下图片；7图标标题内容，一行3个,8一张图9上图下内容，一行4个);针对右children时配置的 */
    @Excel(name = "配置模式(1图标 +文字+内容横铺4个2左标题+内容，右图片；3左图标，右标题+内容，一行2个；4左大图右标题+内容，一行2个；5上标题+下图片，6上标题+内容，下图片；7图标标题内容，一行3个,8一张图9上图下内容，一行4个);针对右children时配置的")
    private String configModal;

    /** 配置模式(1图标 +文字+内容横铺4个2左标题+内容，右图片；3左图标，右标题+内容，一行2个；4左大图右标题+内容，一行2个；5上标题+下图片，6上标题+内容，下图片；7图标标题内容，一行3个,8一张图9上图下内容，一行4个);针对右children时配置的 */
    @Excel(name = "配置模式(1图标 +文字+内容横铺4个2左标题+内容，右图片；3左图标，右标题+内容，一行2个；4左大图右标题+内容，一行2个；5上标题+下图片，6上标题+内容，下图片；7图标标题内容，一行3个,8一张图9上图下内容，一行4个);针对右children时配置的")
    private String configModel;

    /** 标题 */
    @Excel(name = "标题")
    private String productInfoDetailTitle;

    /** 内容 */
    @Excel(name = "内容")
    private String productInfoDetailDesc;

    /** 顺序 */
    @Excel(name = "顺序")
    private Long productInfoDetailOrder;

    /** 图片地址 */
    @Excel(name = "图片地址")
    private String productInfoDetailPic;

        /** 产品信息明细配置信息 */
        private List<HwProductInfoDetail> hwProductInfoDetailList;

    public void setProductInfoDetailId(Long productInfoDetailId) 
    {
        this.productInfoDetailId = productInfoDetailId;
    }

    public Long getProductInfoDetailId() 
    {
        return productInfoDetailId;
    }
    public void setProductInfoId(Long productInfoId) 
    {
        this.productInfoId = productInfoId;
    }

    public Long getProductInfoId() 
    {
        return productInfoId;
    }
    public void setConfigModal(String configModal) 
    {
        this.configModal = configModal;
    }

    public String getConfigModal() 
    {
        return configModal;
    }
    public void setProductInfoDetailTitle(String productInfoDetailTitle) 
    {
        this.productInfoDetailTitle = productInfoDetailTitle;
    }

    public String getProductInfoDetailTitle() 
    {
        return productInfoDetailTitle;
    }
    public void setProductInfoDetailDesc(String productInfoDetailDesc) 
    {
        this.productInfoDetailDesc = productInfoDetailDesc;
    }

    public String getProductInfoDetailDesc() 
    {
        return productInfoDetailDesc;
    }
    public void setProductInfoDetailOrder(Long productInfoDetailOrder) 
    {
        this.productInfoDetailOrder = productInfoDetailOrder;
    }

    public Long getProductInfoDetailOrder() 
    {
        return productInfoDetailOrder;
    }
    public void setProductInfoDetailPic(String productInfoDetailPic) 
    {
        this.productInfoDetailPic = productInfoDetailPic;
    }

    public String getProductInfoDetailPic() 
    {
        return productInfoDetailPic;
    }

    public List<HwProductInfoDetail> getHwProductInfoDetailList() {
        return hwProductInfoDetailList;
    }

    public void setHwProductInfoDetailList(List<HwProductInfoDetail> hwProductInfoDetailList) {
        this.hwProductInfoDetailList = hwProductInfoDetailList;
    }

    public String getConfigModel() {
        return configModel;
    }

    public void setConfigModel(String configModel) {
        this.configModel = configModel;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("productInfoDetailId", getProductInfoDetailId())
            .append("parentId", getParentId())
            .append("productInfoId", getProductInfoId())
            .append("configModal", getConfigModal())
            .append("productInfoDetailTitle", getProductInfoDetailTitle())
            .append("productInfoDetailDesc", getProductInfoDetailDesc())
            .append("productInfoDetailOrder", getProductInfoDetailOrder())
            .append("productInfoDetailPic", getProductInfoDetailPic())
            .append("ancestors", getAncestors())
            .append("createTime", getCreateTime())
            .append("createBy", getCreateBy())
            .append("updateTime", getUpdateTime())
            .append("updateBy", getUpdateBy())
            .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwWeb.java
```java
package com.ruoyi.portal.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;

/**
 * haiwei官网json对象 hw_web
 *
 * @author ruoyi
 * @date 2025-08-18
 */
public class HwWeb extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键 */
    private Long webId;

    /** json */
    @Excel(name = "json")
    private String webJson;

    /** json字符串 */
    @Excel(name = "json字符串")
    private String webJsonString;

    /** 页面 */
    @Excel(name = "页面")
    private Long webCode;

    /** 逻辑删除标志：'0'未删除，'1'已删除 */
    private String isDelete;

    /** json字符串 */
    @Excel(name = "字符串")
    private String webJsonEnglish;

    public void setWebId(Long webId)
    {
        this.webId = webId;
    }

    public Long getWebId()
    {
        return webId;
    }
    public void setWebJson(String webJson)
    {
        this.webJson = webJson;
    }

    public String getWebJson()
    {
        return webJson;
    }
    public void setWebJsonString(String webJsonString)
    {
        this.webJsonString = webJsonString;
    }

    public String getWebJsonString()
    {
        return webJsonString;
    }
    public void setWebCode(Long webCode)
    {
        this.webCode = webCode;
    }

    public Long getWebCode()
    {
        return webCode;
    }

    public String getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(String isDelete) {
        this.isDelete = isDelete;
    }

    public String getwebJsonEnglish() {
        return webJsonEnglish;
    }

    public void setwebJsonEnglish(String webJsonEnglish) {
        this.webJsonEnglish = webJsonEnglish;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("webId", getWebId())
                .append("webJson", getWebJson())
                .append("webJsonString", getWebJsonString())
                .append("webCode", getWebCode())
                .append("isDelete", getIsDelete())
                .append("webJsonEnglish", getwebJsonEnglish())
                .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwWeb1.java
```java
package com.ruoyi.portal.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;

/**
 * haiwei官网json对象 hw_web1
 *
 * @author ruoyi
 * @date 2025-08-18
 */
public class HwWeb1 extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键 */
    private Long webId;

    /** json */
    @Excel(name = "json")
    private String webJson;

    /** json字符串 */
    @Excel(name = "json字符串")
    private String webJsonString;

    /** 页面 */
    @Excel(name = "页面")
    private Long webCode;

    private Long deviceId;

    private Long typeId;

    /** 逻辑删除标志：'0'未删除，'1'已删除 */
    private String isDelete;

    /** json字符串 */
    @Excel(name = "字符串")
    private String webJsonEnglish;

    public void setWebId(Long webId)
    {
        this.webId = webId;
    }

    public Long getWebId()
    {
        return webId;
    }
    public void setWebJson(String webJson)
    {
        this.webJson = webJson;
    }

    public String getWebJson()
    {
        return webJson;
    }
    public void setWebJsonString(String webJsonString)
    {
        this.webJsonString = webJsonString;
    }

    public String getWebJsonString()
    {
        return webJsonString;
    }
    public void setWebCode(Long webCode)
    {
        this.webCode = webCode;
    }

    public Long getWebCode()
    {
        return webCode;
    }

    public Long getDeviceId() {
        return deviceId;
    }

    public void setDeviceId(Long deviceId) {
        this.deviceId = deviceId;
    }

    public Long getTypeId() {
        return typeId;
    }

    public void setTypeId(Long typeId) {
        this.typeId = typeId;
    }

    public String getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(String isDelete) {
        this.isDelete = isDelete;
    }

    public String getwebJsonEnglish() {
        return webJsonEnglish;
    }

    public void setwebJsonEnglish(String webJsonEnglish) {
        this.webJsonEnglish = webJsonEnglish;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("webId", getWebId())
                .append("webJson", getWebJson())
                .append("webJsonString", getWebJsonString())
                .append("webCode", getWebCode())
                .append("deviceId", getDeviceId())
                .append("typeId", getTypeId())
                .append("isDelete", getIsDelete())
                .append("webJsonEnglish", getwebJsonEnglish())
                .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwWebDocument.java
```java
package com.ruoyi.portal.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Hw资料文件对象 hw_web_document
 * 
 * @author zch
 * @date 2025-09-22
 */
public class HwWebDocument extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键 */
    private String documentId;

    /** 租户id */
    @Excel(name = "租户id")
    private Long tenantId;

    /** 文件存储地址 */
    @Excel(name = "文件存储地址")
    private String documentAddress;

    /** 页面编码，用来连表查询 */
    @Excel(name = "页面编码，用来连表查询")
    private String webCode;

    /** 密钥 */
    // @Excel(name = "密钥")
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String secretKey;

    /** json */
    private String json;

    /** 文件类型 */
    private String type;

    /** 逻辑删除标志：'0'未删除，'1'已删除 */
    private String isDelete;

    public void setDocumentId(String documentId) 
    {
        this.documentId = documentId;
    }

    public String getDocumentId()
    {
        return documentId;
    }
    public void setTenantId(Long tenantId) 
    {
        this.tenantId = tenantId;
    }

    public Long getTenantId() 
    {
        return tenantId;
    }
    public void setDocumentAddress(String documentAddress) 
    {
        this.documentAddress = documentAddress;
    }

    public String getDocumentAddress() 
    {
        return documentAddress;
    }
    public void setWebCode(String webCode) 
    {
        this.webCode = webCode;
    }

    public String getWebCode() 
    {
        return webCode;
    }
    public void setSecretKey(String secretKey) 
    {
        this.secretKey = secretKey;
    }

    public String getSecretKey() 
    {
        return secretKey;
    }

    public boolean getHasSecret() {
        return secretKey != null && !secretKey.trim().isEmpty();
    }

    public String getJson() {
        return json;
    }

    public void setJson(String json) {
        this.json = json;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(String isDelete) {
        this.isDelete = isDelete;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("documentId", getDocumentId())
            .append("tenantId", getTenantId())
            .append("documentAddress", getDocumentAddress())
            .append("createTime", getCreateTime())
            .append("webCode", getWebCode())
            .append("hasSecret", getHasSecret())
            .append("json", getJson())
            .append("type", getType())
            .append("isDelete", getIsDelete())
            .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwWebMenu.java
```java
package com.ruoyi.portal.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.TreeEntity;

import java.util.List;

/**
 * haiwei官网菜单对象 hw_web_menu
 *
 * @author zch
 * @date 2025-08-18
 */
public class HwWebMenu extends TreeEntity
{
    private static final long serialVersionUID = 1L;

    /** 菜单主键id */
    private Long webMenuId;

    /** 父节点 */
    @Excel(name = "父节点")
    private Long parent;

    /** 状态 */
    @Excel(name = "状态")
    private String status;

    /** 菜单名称 */
    @Excel(name = "菜单名称")
    private String webMenuName;

    /** 租户 */
    @Excel(name = "租户")
    private Long tenantId;

    /** 图片地址 */
    @Excel(name = "图片地址")
    private String webMenuPic;

    /** 官网菜单类型 */
    @Excel(name = "官网菜单类型")
    private Long webMenuType;

    /** 逻辑删除标志：'0'未删除，'1'已删除 */
    private String isDelete;

    private String webMenuNameEnglish;

    public void setWebMenuId(Long webMenuId)
    {
        this.webMenuId = webMenuId;
    }

    public Long getWebMenuId()
    {
        return webMenuId;
    }
    public void setParent(Long parent)
    {
        this.parent = parent;
    }

    public Long getParent()
    {
        return parent;
    }
    public void setStatus(String status)
    {
        this.status = status;
    }

    public String getStatus()
    {
        return status;
    }
    public void setWebMenuName(String webMenuName)
    {
        this.webMenuName = webMenuName;
    }

    public String getWebMenuName()
    {
        return webMenuName;
    }
    public void setTenantId(Long tenantId)
    {
        this.tenantId = tenantId;
    }

    public Long getTenantId()
    {
        return tenantId;
    }
    public void setWebMenuPic(String webMenuPic)
    {
        this.webMenuPic = webMenuPic;
    }

    public String getWebMenuPic()
    {
        return webMenuPic;
    }
    public void setWebMenuType(Long webMenuType)
    {
        this.webMenuType = webMenuType;
    }

    public Long getWebMenuType()
    {
        return webMenuType;
    }

    public String getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(String isDelete) {
        this.isDelete = isDelete;
    }

    public String getWebMenuNameEnglish() {
        return webMenuNameEnglish;
    }

    public void setWebMenuNameEnglish(String webMenuNameEnglish) {
        this.webMenuNameEnglish = webMenuNameEnglish;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("webMenuId", getWebMenuId())
                .append("parent", getParent())
                .append("ancestors", getAncestors())
                .append("status", getStatus())
                .append("webMenuName", getWebMenuName())
                .append("tenantId", getTenantId())
                .append("webMenuPic", getWebMenuPic())
                .append("webMenuType", getWebMenuType())
                .append("isDelete", getIsDelete())
                .append("webMenuNameEnglish", getWebMenuNameEnglish())
                .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\HwWebMenu1.java
```java
package com.ruoyi.portal.domain;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.TreeEntity;

import java.util.List;

/**
 * haiwei官网菜单对象 hw_web_menu1
 *
 * @author zch
 * @date 2025-08-18
 */
public class HwWebMenu1 extends TreeEntity
{
    private static final long serialVersionUID = 1L;

    /** 菜单主键id */
    private Long webMenuId;

    /** 父节点 */
    @Excel(name = "父节点")
    private Long parent;

    /** 状态 */
    @Excel(name = "状态")
    private String status;

    /** 菜单名称 */
    @Excel(name = "菜单名称")
    private String webMenuName;

    /** 租户 */
    @Excel(name = "租户")
    private Long tenantId;

    /** 图片地址 */
    @Excel(name = "图片地址")
    private String webMenuPic;

    /** 官网菜单类型 */
    @Excel(name = "官网菜单类型")
    private Long webMenuType;

    private String valuel;

    /** 逻辑删除标志：'0'未删除，'1'已删除 */
    private String isDelete;

    private String webMenuNameEnglish;

    public void setWebMenuId(Long webMenuId)
    {
        this.webMenuId = webMenuId;
    }

    public Long getWebMenuId()
    {
        return webMenuId;
    }
    public void setParent(Long parent)
    {
        this.parent = parent;
    }

    public Long getParent()
    {
        return parent;
    }
    public void setStatus(String status)
    {
        this.status = status;
    }

    public String getStatus()
    {
        return status;
    }
    public void setWebMenuName(String webMenuName)
    {
        this.webMenuName = webMenuName;
    }

    public String getWebMenuName()
    {
        return webMenuName;
    }
    public void setTenantId(Long tenantId)
    {
        this.tenantId = tenantId;
    }

    public Long getTenantId()
    {
        return tenantId;
    }
    public void setWebMenuPic(String webMenuPic)
    {
        this.webMenuPic = webMenuPic;
    }

    public String getWebMenuPic()
    {
        return webMenuPic;
    }
    public void setWebMenuType(Long webMenuType)
    {
        this.webMenuType = webMenuType;
    }

    public Long getWebMenuType()
    {
        return webMenuType;
    }

    public String getValuel() {
        return valuel;
    }
    public void setValuel(String valuel) {
        this.valuel = valuel;
    }

    public String getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(String isDelete) {
        this.isDelete = isDelete;
    }

    public String getWebMenuNameEnglish() {
        return webMenuNameEnglish;
    }

    public void setWebMenuNameEnglish(String webMenuNameEnglish) {
        this.webMenuNameEnglish = webMenuNameEnglish;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("webMenuId", getWebMenuId())
                .append("parent", getParent())
                .append("ancestors", getAncestors())
                .append("status", getStatus())
                .append("webMenuName", getWebMenuName())
                .append("tenantId", getTenantId())
                .append("webMenuPic", getWebMenuPic())
                .append("webMenuType", getWebMenuType())
                .append("valuel", getValuel())
                .append("isDelete", getIsDelete())
                .append("webMenuNameEnglish", getWebMenuNameEnglish())
                .toString();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\SecureDocumentRequest.java
```java
package com.ruoyi.portal.domain;

import lombok.Data;

@Data
public class SecureDocumentRequest {
    private String documentId;
    private String providedKey;
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\domain\vo\TreeSelect.java
```java
package com.ruoyi.portal.domain.vo;

import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ruoyi.portal.domain.HwPortalConfigType;

/**
 * Treeselect树结构实体类
 * 
 * @author ruoyi
 */
public class TreeSelect implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 节点ID */
    private Long id;

    /** 节点名称 */
    private String label;

    /** 子节点 */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<TreeSelect> children;

    public TreeSelect()
    {

    }

    public TreeSelect(HwPortalConfigType portalConfigType)
    {
        this.id = portalConfigType.getConfigTypeId();
        this.label = portalConfigType.getConfigTypeName();
        this.children = portalConfigType.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getLabel()
    {
        return label;
    }

    public void setLabel(String label)
    {
        this.label = label;
    }

    public List<TreeSelect> getChildren()
    {
        return children;
    }

    public void setChildren(List<TreeSelect> children)
    {
        this.children = children;
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwAboutUsInfoDetailMapper.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwAboutUsInfoDetail;

import java.util.List;

/**
 * 关于我们信息明细Mapper接口
 * 
 * @author ruoyi
 * @date 2024-12-01
 */
public interface HwAboutUsInfoDetailMapper 
{
    /**
     * 查询关于我们信息明细
     * 
     * @param usInfoDetailId 关于我们信息明细主键
     * @return 关于我们信息明细
     */
    public HwAboutUsInfoDetail selectHwAboutUsInfoDetailByUsInfoDetailId(Long usInfoDetailId);

    /**
     * 查询关于我们信息明细列表
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 关于我们信息明细集合
     */
    public List<HwAboutUsInfoDetail> selectHwAboutUsInfoDetailList(HwAboutUsInfoDetail hwAboutUsInfoDetail);

    /**
     * 新增关于我们信息明细
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 结果
     */
    public int insertHwAboutUsInfoDetail(HwAboutUsInfoDetail hwAboutUsInfoDetail);

    /**
     * 修改关于我们信息明细
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 结果
     */
    public int updateHwAboutUsInfoDetail(HwAboutUsInfoDetail hwAboutUsInfoDetail);

    /**
     * 删除关于我们信息明细
     * 
     * @param usInfoDetailId 关于我们信息明细主键
     * @return 结果
     */
    public int deleteHwAboutUsInfoDetailByUsInfoDetailId(Long usInfoDetailId);

    /**
     * 批量删除关于我们信息明细
     * 
     * @param usInfoDetailIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwAboutUsInfoDetailByUsInfoDetailIds(Long[] usInfoDetailIds);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwAboutUsInfoMapper.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwAboutUsInfo;

import java.util.List;

/**
 * 关于我们信息Mapper接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface HwAboutUsInfoMapper 
{
    /**
     * 查询关于我们信息
     * 
     * @param aboutUsInfoId 关于我们信息主键
     * @return 关于我们信息
     */
    public HwAboutUsInfo selectHwAboutUsInfoByAboutUsInfoId(Long aboutUsInfoId);

    /**
     * 查询关于我们信息列表
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 关于我们信息集合
     */
    public List<HwAboutUsInfo> selectHwAboutUsInfoList(HwAboutUsInfo hwAboutUsInfo);

    /**
     * 新增关于我们信息
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 结果
     */
    public int insertHwAboutUsInfo(HwAboutUsInfo hwAboutUsInfo);

    /**
     * 修改关于我们信息
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 结果
     */
    public int updateHwAboutUsInfo(HwAboutUsInfo hwAboutUsInfo);

    /**
     * 删除关于我们信息
     * 
     * @param aboutUsInfoId 关于我们信息主键
     * @return 结果
     */
    public int deleteHwAboutUsInfoByAboutUsInfoId(Long aboutUsInfoId);

    /**
     * 批量删除关于我们信息
     * 
     * @param aboutUsInfoIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwAboutUsInfoByAboutUsInfoIds(Long[] aboutUsInfoIds);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwContactUsInfoMapper.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwContactUsInfo;

import java.util.List;

/**
 * 联系我们信息Mapper接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface HwContactUsInfoMapper 
{
    /**
     * 查询联系我们信息
     * 
     * @param contactUsInfoId 联系我们信息主键
     * @return 联系我们信息
     */
    public HwContactUsInfo selectHwContactUsInfoByContactUsInfoId(Long contactUsInfoId);

    /**
     * 查询联系我们信息列表
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 联系我们信息集合
     */
    public List<HwContactUsInfo> selectHwContactUsInfoList(HwContactUsInfo hwContactUsInfo);

    /**
     * 新增联系我们信息
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 结果
     */
    public int insertHwContactUsInfo(HwContactUsInfo hwContactUsInfo);

    /**
     * 修改联系我们信息
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 结果
     */
    public int updateHwContactUsInfo(HwContactUsInfo hwContactUsInfo);

    /**
     * 删除联系我们信息
     * 
     * @param contactUsInfoId 联系我们信息主键
     * @return 结果
     */
    public int deleteHwContactUsInfoByContactUsInfoId(Long contactUsInfoId);

    /**
     * 批量删除联系我们信息
     * 
     * @param contactUsInfoIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwContactUsInfoByContactUsInfoIds(Long[] contactUsInfoIds);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwPortalConfigMapper.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwPortalConfig;

import java.util.List;

/**
 * 门户网站配置Mapper接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface HwPortalConfigMapper 
{
    /**
     * 查询门户网站配置
     * 
     * @param portalConfigId 门户网站配置主键
     * @return 门户网站配置
     */
    public HwPortalConfig selectHwPortalConfigByPortalConfigId(Long portalConfigId);

    /**
     * 查询门户网站配置列表
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 门户网站配置集合
     */
    public List<HwPortalConfig> selectHwPortalConfigList(HwPortalConfig hwPortalConfig);

    /**
     * 新增门户网站配置
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 结果
     */
    public int insertHwPortalConfig(HwPortalConfig hwPortalConfig);

    /**
     * 修改门户网站配置
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 结果
     */
    public int updateHwPortalConfig(HwPortalConfig hwPortalConfig);

    /**
     * 删除门户网站配置
     * 
     * @param portalConfigId 门户网站配置主键
     * @return 结果
     */
    public int deleteHwPortalConfigByPortalConfigId(Long portalConfigId);

    /**
     * 批量删除门户网站配置
     * 
     * @param portalConfigIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwPortalConfigByPortalConfigIds(Long[] portalConfigIds);

    /**
     * 查询门户网站配置列表,join hw_portal_config_type
     *
     * @param hwPortalConfig 门户网站配置
     * @return 门户网站配置集合
     */
    public List<HwPortalConfig> selectHwPortalConfigJoinList(HwPortalConfig hwPortalConfig);


    /**
     * 查询门户网站配置列表
     *
     * @param hwPortalConfig 门户网站配置
     * @return 门户网站配置集合
     */
    public List<HwPortalConfig> selectHwPortalConfigList2(HwPortalConfig hwPortalConfig);


}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwPortalConfigTypeMapper.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwPortalConfigType;

import java.util.List;

/**
 * 门户网站配置类型Mapper接口
 * 
 * @author xins
 * @date 2024-12-11
 */
public interface HwPortalConfigTypeMapper 
{
    /**
     * 查询门户网站配置类型
     * 
     * @param configTypeId 门户网站配置类型主键
     * @return 门户网站配置类型
     */
    public HwPortalConfigType selectHwPortalConfigTypeByConfigTypeId(Long configTypeId);

    /**
     * 查询门户网站配置类型列表
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 门户网站配置类型集合
     */
    public List<HwPortalConfigType> selectHwPortalConfigTypeList(HwPortalConfigType hwPortalConfigType);

    /**
     * 新增门户网站配置类型
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 结果
     */
    public int insertHwPortalConfigType(HwPortalConfigType hwPortalConfigType);

    /**
     * 修改门户网站配置类型
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 结果
     */
    public int updateHwPortalConfigType(HwPortalConfigType hwPortalConfigType);

    /**
     * 删除门户网站配置类型
     * 
     * @param configTypeId 门户网站配置类型主键
     * @return 结果
     */
    public int deleteHwPortalConfigTypeByConfigTypeId(Long configTypeId);

    /**
     * 批量删除门户网站配置类型
     * 
     * @param configTypeIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwPortalConfigTypeByConfigTypeIds(Long[] configTypeIds);


}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwProductCaseInfoMapper.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwProductCaseInfo;

import java.util.List;

/**
 * 案例内容Mapper接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface HwProductCaseInfoMapper 
{
    /**
     * 查询案例内容
     * 
     * @param caseInfoId 案例内容主键
     * @return 案例内容
     */
    public HwProductCaseInfo selectHwProductCaseInfoByCaseInfoId(Long caseInfoId);

    /**
     * 查询案例内容列表
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 案例内容集合
     */
    public List<HwProductCaseInfo> selectHwProductCaseInfoList(HwProductCaseInfo hwProductCaseInfo);

    /**
     * 新增案例内容
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 结果
     */
    public int insertHwProductCaseInfo(HwProductCaseInfo hwProductCaseInfo);

    /**
     * 修改案例内容
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 结果
     */
    public int updateHwProductCaseInfo(HwProductCaseInfo hwProductCaseInfo);

    /**
     * 删除案例内容
     * 
     * @param caseInfoId 案例内容主键
     * @return 结果
     */
    public int deleteHwProductCaseInfoByCaseInfoId(Long caseInfoId);

    /**
     * 批量删除案例内容
     * 
     * @param caseInfoIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwProductCaseInfoByCaseInfoIds(Long[] caseInfoIds);

    /**
     * 查询案例内容列表,Join portalConfigType
     *
     * @param hwProductCaseInfo 案例内容
     * @return 案例内容集合
     */
    public List<HwProductCaseInfo> selectHwProductCaseInfoJoinList(HwProductCaseInfo hwProductCaseInfo);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwProductInfoDetailMapper.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwProductInfoDetail;

import java.util.List;

/**
 * 产品信息明细配置Mapper接口
 * 
 * @author xins
 * @date 2024-12-11
 */
public interface HwProductInfoDetailMapper 
{
    /**
     * 查询产品信息明细配置
     * 
     * @param productInfoDetailId 产品信息明细配置主键
     * @return 产品信息明细配置
     */
    public HwProductInfoDetail selectHwProductInfoDetailByProductInfoDetailId(Long productInfoDetailId);

    /**
     * 查询产品信息明细配置列表
     * 
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 产品信息明细配置集合
     */
    public List<HwProductInfoDetail> selectHwProductInfoDetailList(HwProductInfoDetail hwProductInfoDetail);

    /**
     * 新增产品信息明细配置
     * 
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 结果
     */
    public int insertHwProductInfoDetail(HwProductInfoDetail hwProductInfoDetail);

    /**
     * 修改产品信息明细配置
     * 
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 结果
     */
    public int updateHwProductInfoDetail(HwProductInfoDetail hwProductInfoDetail);

    /**
     * 删除产品信息明细配置
     * 
     * @param productInfoDetailId 产品信息明细配置主键
     * @return 结果
     */
    public int deleteHwProductInfoDetailByProductInfoDetailId(Long productInfoDetailId);

    /**
     * 批量删除产品信息明细配置
     * 
     * @param productInfoDetailIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwProductInfoDetailByProductInfoDetailIds(Long[] productInfoDetailIds);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwProductInfoMapper.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwProductInfo;

import java.util.List;

/**
 * 产品信息配置Mapper接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface HwProductInfoMapper 
{
    /**
     * 查询产品信息配置
     * 
     * @param productInfoId 产品信息配置主键
     * @return 产品信息配置
     */
    public HwProductInfo selectHwProductInfoByProductInfoId(Long productInfoId);

    /**
     * 查询产品信息配置列表
     * 
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置集合
     */
    public List<HwProductInfo> selectHwProductInfoList(HwProductInfo hwProductInfo);

    /**
     * 新增产品信息配置
     * 
     * @param hwProductInfo 产品信息配置
     * @return 结果
     */
    public int insertHwProductInfo(HwProductInfo hwProductInfo);

    /**
     * 修改产品信息配置
     * 
     * @param hwProductInfo 产品信息配置
     * @return 结果
     */
    public int updateHwProductInfo(HwProductInfo hwProductInfo);

    /**
     * 删除产品信息配置
     * 
     * @param productInfoId 产品信息配置主键
     * @return 结果
     */
    public int deleteHwProductInfoByProductInfoId(Long productInfoId);

    /**
     * 批量删除产品信息配置
     * 
     * @param productInfoIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwProductInfoByProductInfoIds(Long[] productInfoIds);

    /**
     * 查询产品信息配置列表,join product info detail
     *
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置集合
     */
    public List<HwProductInfo> selectHwProductInfoJoinDetailList(HwProductInfo hwProductInfo);

    /**
     * 查询产品信息配置列表,join portalConfigType门户网站配置类型
     *
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置集合
     */
    public List<HwProductInfo> selectHwProductInfoJoinList(HwProductInfo hwProductInfo);

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwWebDocumentMapper.java
```java
package com.ruoyi.portal.mapper;

import java.util.List;
import com.ruoyi.portal.domain.HwWebDocument;

/**
 * Hw资料文件Mapper接口
 * 
 * @author zch
 * @date 2025-09-22
 */
public interface HwWebDocumentMapper 
{
    /**
     * 查询Hw资料文件
     * 
     * @param documentId Hw资料文件主键
     * @return Hw资料文件
     */
    public HwWebDocument selectHwWebDocumentByDocumentId(String documentId);

    /**
     * 查询Hw资料文件列表
     * 
     * @param hwWebDocument Hw资料文件
     * @return Hw资料文件集合
     */
    public List<HwWebDocument> selectHwWebDocumentList(HwWebDocument hwWebDocument);

    /**
     * 新增Hw资料文件
     * 
     * @param hwWebDocument Hw资料文件
     * @return 结果
     */
    public int insertHwWebDocument(HwWebDocument hwWebDocument);

    /**
     * 修改Hw资料文件
     * 
     * @param hwWebDocument Hw资料文件
     * @return 结果
     */
    public int updateHwWebDocument(HwWebDocument hwWebDocument);

    /**
     * 删除Hw资料文件
     * 
     * @param documentId Hw资料文件主键
     * @return 结果
     */
    public int deleteHwWebDocumentByDocumentId(String documentId);

    /**
     * 批量删除Hw资料文件
     * 
     * @param documentIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwWebDocumentByDocumentIds(String[] documentIds);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwWebMapper.java
```java
package com.ruoyi.portal.mapper;

import java.util.List;
import com.ruoyi.portal.domain.HwWeb;

/**
 * haiwei官网jsonMapper接口
 * 
 * @author ruoyi
 * @date 2025-08-18
 */
public interface HwWebMapper 
{
    /**
     * 查询haiwei官网json
     * 
     * @param webId haiwei官网json主键
     * @return haiwei官网json
     */
    public HwWeb selectHwWebByWebcode(Long webCode);

    /**
     * 查询haiwei官网json列表
     * 
     * @param hwWeb haiwei官网json
     * @return haiwei官网json集合
     */
    public List<HwWeb> selectHwWebList(HwWeb hwWeb);

    /**
     * 新增haiwei官网json
     * 
     * @param hwWeb haiwei官网json
     * @return 结果
     */
    public int insertHwWeb(HwWeb hwWeb);

    /**
     * 修改haiwei官网json
     * 
     * @param hwWeb haiwei官网json
     * @return 结果
     */
    public int updateHwWeb(HwWeb hwWeb);

    /**
     * 删除haiwei官网json
     * 
     * @param webId haiwei官网json主键
     * @return 结果
     */
    public int deleteHwWebByWebId(Long webId);

    /**
     * 批量删除haiwei官网json
     * 
     * @param webIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwWebByWebIds(Long[] webIds);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwWebMapper1.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwWeb1;

import java.util.List;

/**
 * haiwei官网jsonMapper接口
 * 
 * @author ruoyi
 * @date 2025-08-18
 */
public interface HwWebMapper1
{
    /**
     * 查询haiwei官网json
     * 
     * @param webId haiwei官网json主键
     * @return haiwei官网json
     */
    public HwWeb1 selectHwWebByWebcode(Long webCode);

    /**
     * 查询haiwei官网json列表
     *
     * @param HwWeb1 haiwei官网json
     * @return haiwei官网json集合
     */
    public HwWeb1 selectHwWebOne(HwWeb1 hwWeb1);

    /**
     * 查询haiwei官网json列表
     * 
     * @param HwWeb1 haiwei官网json
     * @return haiwei官网json集合
     */
    public List<HwWeb1> selectHwWebList(HwWeb1 hwWeb1);

    /**
     * 新增haiwei官网json
     * 
     * @param HwWeb1 haiwei官网json
     * @return 结果
     */
    public int insertHwWeb(HwWeb1 hwWeb1);

    /**
     * 修改haiwei官网json
     * 
     * @param HwWeb1 haiwei官网json
     * @return 结果
     */
    public int updateHwWeb(HwWeb1 hwWeb1);

    /**
     * 删除haiwei官网json
     * 
     * @param webId haiwei官网json主键
     * @return 结果
     */
    public int deleteHwWebByWebId(Long webId);

    /**
     * 批量删除haiwei官网json
     * 
     * @param webIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwWebByWebIds(Long[] webIds);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwWebMenuMapper.java
```java
package com.ruoyi.portal.mapper;

import java.util.List;
import com.ruoyi.portal.domain.HwWebMenu;

/**
 * haiwei官网菜单Mapper接口
 * 
 * @author zch
 * @date 2025-08-18
 */
public interface HwWebMenuMapper 
{
    /**
     * 查询haiwei官网菜单
     * 
     * @param webMenuId haiwei官网菜单主键
     * @return haiwei官网菜单
     */
    public HwWebMenu selectHwWebMenuByWebMenuId(Long webMenuId);

    /**
     * 查询haiwei官网菜单列表
     * 
     * @param hwWebMenu haiwei官网菜单
     * @return haiwei官网菜单集合
     */
    public List<HwWebMenu> selectHwWebMenuList(HwWebMenu hwWebMenu);

    /**
     * 新增haiwei官网菜单
     * 
     * @param hwWebMenu haiwei官网菜单
     * @return 结果
     */
    public int insertHwWebMenu(HwWebMenu hwWebMenu);

    /**
     * 修改haiwei官网菜单
     * 
     * @param hwWebMenu haiwei官网菜单
     * @return 结果
     */
    public int updateHwWebMenu(HwWebMenu hwWebMenu);

    /**
     * 删除haiwei官网菜单
     * 
     * @param webMenuId haiwei官网菜单主键
     * @return 结果
     */
    public int deleteHwWebMenuByWebMenuId(Long webMenuId);

    /**
     * 批量删除haiwei官网菜单
     * 
     * @param webMenuIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwWebMenuByWebMenuIds(Long[] webMenuIds);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\mapper\HwWebMenuMapper1.java
```java
package com.ruoyi.portal.mapper;

import com.ruoyi.portal.domain.HwWebMenu;
import com.ruoyi.portal.domain.HwWebMenu1;
import com.ruoyi.portal.domain.HwWebMenu1;

import java.util.List;

/**
 * haiwei官网菜单Mapper接口
 * 
 * @author zch
 * @date 2025-08-18
 */
public interface HwWebMenuMapper1
{
    /**
     * 查询haiwei官网菜单
     * 
     * @param webMenuId haiwei官网菜单主键
     * @return haiwei官网菜单
     */
    public HwWebMenu1 selectHwWebMenuByWebMenuId(Long webMenuId);

    /**
     * 查询haiwei官网菜单列表
     * 
     * @param HwWebMenu1 haiwei官网菜单
     * @return haiwei官网菜单集合
     */
    public List<HwWebMenu1> selectHwWebMenuList(HwWebMenu1 HwWebMenu1);

    /**
     * 新增haiwei官网菜单
     * 
     * @param HwWebMenu1 haiwei官网菜单
     * @return 结果
     */
    public int insertHwWebMenu(HwWebMenu1 HwWebMenu1);

    /**
     * 修改haiwei官网菜单
     * 
     * @param HwWebMenu1 haiwei官网菜单
     * @return 结果
     */
    public int updateHwWebMenu(HwWebMenu1 HwWebMenu1);

    /**
     * 删除haiwei官网菜单
     * 
     * @param webMenuId haiwei官网菜单主键
     * @return 结果
     */
    public int deleteHwWebMenuByWebMenuId(Long webMenuId);

    /**
     * 批量删除haiwei官网菜单
     * 
     * @param webMenuIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHwWebMenuByWebMenuIds(Long[] webMenuIds);


    /**
     * 获取菜单树列表
     */
    public List<HwWebMenu1> selectMenuTree(HwWebMenu1 hwWebMenu);

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\RuoYiPortalApplication.java
```java
package com.ruoyi.portal;

import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 系统模块
 * 
 * @author ruoyi
 */
@EnableCustomConfig
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
public class RuoYiPortalApplication
{
//    @Value("${spring.nacos.config.server-addr}")
//    public static String dd;
    public static void main(String[] args)
    {

        SpringApplication.run(RuoYiPortalApplication.class, args);
        System.out.println("(♥◠‿◠)ﾉﾞ  门户模块启动成功   ლ(´ڡ`ლ)ﾞ  \n" +
                " .-------.       ____     __        \n" +
                " |  _ _   \\      \\   \\   /  /    \n" +
                " | ( ' )  |       \\  _. /  '       \n" +
                " |(_ o _) /        _( )_ .'         \n" +
                " | (_,_).' __  ___(_ o _)'          \n" +
                " |  |\\ \\  |  ||   |(_,_)'         \n" +
                " |  | \\ `'   /|   `-'  /           \n" +
                " |  |  \\    /  \\      /           \n" +
                " ''-'   `'-'    `-..-'              ");
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwAboutUsInfoDetailService.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwAboutUsInfoDetail;

import java.util.List;

/**
 * 关于我们信息明细Service接口
 * 
 * @author ruoyi
 * @date 2024-12-01
 */
public interface IHwAboutUsInfoDetailService 
{
    /**
     * 查询关于我们信息明细
     * 
     * @param usInfoDetailId 关于我们信息明细主键
     * @return 关于我们信息明细
     */
    public HwAboutUsInfoDetail selectHwAboutUsInfoDetailByUsInfoDetailId(Long usInfoDetailId);

    /**
     * 查询关于我们信息明细列表
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 关于我们信息明细集合
     */
    public List<HwAboutUsInfoDetail> selectHwAboutUsInfoDetailList(HwAboutUsInfoDetail hwAboutUsInfoDetail);

    /**
     * 新增关于我们信息明细
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 结果
     */
    public int insertHwAboutUsInfoDetail(HwAboutUsInfoDetail hwAboutUsInfoDetail);

    /**
     * 修改关于我们信息明细
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 结果
     */
    public int updateHwAboutUsInfoDetail(HwAboutUsInfoDetail hwAboutUsInfoDetail);

    /**
     * 批量删除关于我们信息明细
     * 
     * @param usInfoDetailIds 需要删除的关于我们信息明细主键集合
     * @return 结果
     */
    public int deleteHwAboutUsInfoDetailByUsInfoDetailIds(Long[] usInfoDetailIds);

    /**
     * 删除关于我们信息明细信息
     * 
     * @param usInfoDetailId 关于我们信息明细主键
     * @return 结果
     */
    public int deleteHwAboutUsInfoDetailByUsInfoDetailId(Long usInfoDetailId);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwAboutUsInfoService.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwAboutUsInfo;

import java.util.List;

/**
 * 关于我们信息Service接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface IHwAboutUsInfoService 
{
    /**
     * 查询关于我们信息
     * 
     * @param aboutUsInfoId 关于我们信息主键
     * @return 关于我们信息
     */
    public HwAboutUsInfo selectHwAboutUsInfoByAboutUsInfoId(Long aboutUsInfoId);

    /**
     * 查询关于我们信息列表
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 关于我们信息集合
     */
    public List<HwAboutUsInfo> selectHwAboutUsInfoList(HwAboutUsInfo hwAboutUsInfo);

    /**
     * 新增关于我们信息
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 结果
     */
    public int insertHwAboutUsInfo(HwAboutUsInfo hwAboutUsInfo);

    /**
     * 修改关于我们信息
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 结果
     */
    public int updateHwAboutUsInfo(HwAboutUsInfo hwAboutUsInfo);

    /**
     * 批量删除关于我们信息
     * 
     * @param aboutUsInfoIds 需要删除的关于我们信息主键集合
     * @return 结果
     */
    public int deleteHwAboutUsInfoByAboutUsInfoIds(Long[] aboutUsInfoIds);

    /**
     * 删除关于我们信息信息
     * 
     * @param aboutUsInfoId 关于我们信息主键
     * @return 结果
     */
    public int deleteHwAboutUsInfoByAboutUsInfoId(Long aboutUsInfoId);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwContactUsInfoService.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwContactUsInfo;

import java.util.List;

/**
 * 联系我们信息Service接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface IHwContactUsInfoService 
{
    /**
     * 查询联系我们信息
     * 
     * @param contactUsInfoId 联系我们信息主键
     * @return 联系我们信息
     */
    public HwContactUsInfo selectHwContactUsInfoByContactUsInfoId(Long contactUsInfoId);

    /**
     * 查询联系我们信息列表
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 联系我们信息集合
     */
    public List<HwContactUsInfo> selectHwContactUsInfoList(HwContactUsInfo hwContactUsInfo);

    /**
     * 新增联系我们信息
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 结果
     */
    public int insertHwContactUsInfo(HwContactUsInfo hwContactUsInfo);

    /**
     * 修改联系我们信息
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 结果
     */
    public int updateHwContactUsInfo(HwContactUsInfo hwContactUsInfo);

    /**
     * 批量删除联系我们信息
     * 
     * @param contactUsInfoIds 需要删除的联系我们信息主键集合
     * @return 结果
     */
    public int deleteHwContactUsInfoByContactUsInfoIds(Long[] contactUsInfoIds);

    /**
     * 删除联系我们信息信息
     * 
     * @param contactUsInfoId 联系我们信息主键
     * @return 结果
     */
    public int deleteHwContactUsInfoByContactUsInfoId(Long contactUsInfoId);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwPortalConfigService.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwPortalConfig;

import java.util.List;

/**
 * 门户网站配置Service接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface IHwPortalConfigService 
{
    /**
     * 查询门户网站配置
     * 
     * @param portalConfigId 门户网站配置主键
     * @return 门户网站配置
     */
    public HwPortalConfig selectHwPortalConfigByPortalConfigId(Long portalConfigId);

    /**
     * 查询门户网站配置列表
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 门户网站配置集合
     */
    public List<HwPortalConfig> selectHwPortalConfigList(HwPortalConfig hwPortalConfig);

    /**
     * 新增门户网站配置
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 结果
     */
    public int insertHwPortalConfig(HwPortalConfig hwPortalConfig);

    /**
     * 修改门户网站配置
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 结果
     */
    public int updateHwPortalConfig(HwPortalConfig hwPortalConfig);

    /**
     * 批量删除门户网站配置
     * 
     * @param portalConfigIds 需要删除的门户网站配置主键集合
     * @return 结果
     */
    public int deleteHwPortalConfigByPortalConfigIds(Long[] portalConfigIds);

    /**
     * 删除门户网站配置信息
     * 
     * @param portalConfigId 门户网站配置主键
     * @return 结果
     */
    public int deleteHwPortalConfigByPortalConfigId(Long portalConfigId);

    /**
     * 查询门户网站配置列表,Join hw_portal_config_type
     *
     * @param hwPortalConfig 门户网站配置
     * @return 门户网站配置
     */
    public List<HwPortalConfig> selectHwPortalConfigJoinList(HwPortalConfig hwPortalConfig);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwPortalConfigTypeService.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwPortalConfigType;
import com.ruoyi.portal.domain.vo.TreeSelect;

import java.util.List;

/**
 * 门户网站配置类型Service接口
 * 
 * @author xins
 * @date 2024-12-11
 */
public interface IHwPortalConfigTypeService 
{
    /**
     * 查询门户网站配置类型
     * 
     * @param configTypeId 门户网站配置类型主键
     * @return 门户网站配置类型
     */
    public HwPortalConfigType selectHwPortalConfigTypeByConfigTypeId(Long configTypeId);

    /**
     * 查询门户网站配置类型列表
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 门户网站配置类型集合
     */
    public List<HwPortalConfigType> selectHwPortalConfigTypeList(HwPortalConfigType hwPortalConfigType);


    /**
     * 查询门户网站配置类型列表
     *
     * @param hwPortalConfigType 门户网站配置类型
     * @return 门户网站配置类型集合
     */
    public List<HwPortalConfigType> selectConfigTypeList(HwPortalConfigType hwPortalConfigType);

    /**
     * 新增门户网站配置类型
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 结果
     */
    public int insertHwPortalConfigType(HwPortalConfigType hwPortalConfigType);

    /**
     * 修改门户网站配置类型
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 结果
     */
    public int updateHwPortalConfigType(HwPortalConfigType hwPortalConfigType);

    /**
     * 批量删除门户网站配置类型
     * 
     * @param configTypeIds 需要删除的门户网站配置类型主键集合
     * @return 结果
     */
    public int deleteHwPortalConfigTypeByConfigTypeIds(Long[] configTypeIds);

    /**
     * 删除门户网站配置类型信息
     * 
     * @param configTypeId 门户网站配置类型主键
     * @return 结果
     */
    public int deleteHwPortalConfigTypeByConfigTypeId(Long configTypeId);

    /**
     * 查询门户网站配置类型树结构信息
     *
     * @param portalConfigType 门户网站配置类型信息
     * @return 门户网站配置类型树信息集合
     */
    public List<TreeSelect> selectPortalConfigTypeTreeList(HwPortalConfigType portalConfigType);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param portalConfigTypes 门户网站配置类型列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildPortalConfigTypeTreeSelect(List<HwPortalConfigType> portalConfigTypes);
    /**
     * 构建前端所需要树结构
     *
     * @param portalConfigTypes 门户网站配置类型列表
     * @return 树结构列表
     */
    public List<HwPortalConfigType> buildPortalConfigTypeTree(List<HwPortalConfigType> portalConfigTypes);

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwProductCaseInfoService.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwProductCaseInfo;

import java.util.List;

/**
 * 案例内容Service接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface IHwProductCaseInfoService 
{
    /**
     * 查询案例内容
     * 
     * @param caseInfoId 案例内容主键
     * @return 案例内容
     */
    public HwProductCaseInfo selectHwProductCaseInfoByCaseInfoId(Long caseInfoId);

    /**
     * 查询案例内容列表
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 案例内容集合
     */
    public List<HwProductCaseInfo> selectHwProductCaseInfoList(HwProductCaseInfo hwProductCaseInfo);

    /**
     * 新增案例内容
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 结果
     */
    public int insertHwProductCaseInfo(HwProductCaseInfo hwProductCaseInfo);

    /**
     * 修改案例内容
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 结果
     */
    public int updateHwProductCaseInfo(HwProductCaseInfo hwProductCaseInfo);

    /**
     * 批量删除案例内容
     * 
     * @param caseInfoIds 需要删除的案例内容主键集合
     * @return 结果
     */
    public int deleteHwProductCaseInfoByCaseInfoIds(Long[] caseInfoIds);

    /**
     * 删除案例内容信息
     * 
     * @param caseInfoId 案例内容主键
     * @return 结果
     */
    public int deleteHwProductCaseInfoByCaseInfoId(Long caseInfoId);

    /**
     * 根据configTypeId获取首页典型案例
     * @param hwProductCaseInfo
     * @return
     */
    public HwProductCaseInfo getTypicalHomeCaseInfo(HwProductCaseInfo hwProductCaseInfo);

    /**
     * 查询案例内容列表,join portalConfigType
     *
     * @param hwProductCaseInfo 案例内容
     * @return 案例内容
     */
    public List<HwProductCaseInfo> selectHwProductCaseInfoJoinList(HwProductCaseInfo hwProductCaseInfo);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwProductInfoDetailService.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwProductInfoDetail;

import java.util.List;

/**
 * 产品信息明细配置Service接口
 * 
 * @author xins
 * @date 2024-12-11
 */
public interface IHwProductInfoDetailService 
{
    /**
     * 查询产品信息明细配置
     * 
     * @param productInfoDetailId 产品信息明细配置主键
     * @return 产品信息明细配置
     */
    public HwProductInfoDetail selectHwProductInfoDetailByProductInfoDetailId(Long productInfoDetailId);

    /**
     * 查询产品信息明细配置列表
     * 
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 产品信息明细配置集合
     */
    public List<HwProductInfoDetail> selectHwProductInfoDetailList(HwProductInfoDetail hwProductInfoDetail);

    /**
     * 新增产品信息明细配置
     * 
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 结果
     */
    public int insertHwProductInfoDetail(HwProductInfoDetail hwProductInfoDetail);

    /**
     * 修改产品信息明细配置
     * 
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 结果
     */
    public int updateHwProductInfoDetail(HwProductInfoDetail hwProductInfoDetail);

    /**
     * 批量删除产品信息明细配置
     * 
     * @param productInfoDetailIds 需要删除的产品信息明细配置主键集合
     * @return 结果
     */
    public int deleteHwProductInfoDetailByProductInfoDetailIds(Long[] productInfoDetailIds);

    /**
     * 删除产品信息明细配置信息
     * 
     * @param productInfoDetailId 产品信息明细配置主键
     * @return 结果
     */
    public int deleteHwProductInfoDetailByProductInfoDetailId(Long productInfoDetailId);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwProductInfoService.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwProductInfo;

import java.util.List;

/**
 * 产品信息配置Service接口
 * 
 * @author xins
 * @date 2024-12-01
 */
public interface IHwProductInfoService 
{
    /**
     * 查询产品信息配置
     * 
     * @param productInfoId 产品信息配置主键
     * @return 产品信息配置
     */
    public HwProductInfo selectHwProductInfoByProductInfoId(Long productInfoId);

    /**
     * 查询产品信息配置列表
     * 
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置集合
     */
    public List<HwProductInfo> selectHwProductInfoList(HwProductInfo hwProductInfo);

    /**
     * 新增产品信息配置
     * 
     * @param hwProductInfo 产品信息配置
     * @return 结果
     */
    public int insertHwProductInfo(HwProductInfo hwProductInfo);

    /**
     * 修改产品信息配置
     * 
     * @param hwProductInfo 产品信息配置
     * @return 结果
     */
    public int updateHwProductInfo(HwProductInfo hwProductInfo);

    /**
     * 批量删除产品信息配置
     * 
     * @param productInfoIds 需要删除的产品信息配置主键集合
     * @return 结果
     */
    public int deleteHwProductInfoByProductInfoIds(Long[] productInfoIds);

    /**
     * 删除产品信息配置信息
     * 
     * @param productInfoId 产品信息配置主键
     * @return 结果
     */
    public int deleteHwProductInfoByProductInfoId(Long productInfoId);

    /**
     * 获取产品中心产品信息(平台简介,hw_product_info获取，（配置模式2左标题+内容，右图片）读取中文标题和英文标题，下面内容从hw_product_info_detail获取，读取标题，内容和图片)
     *
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置
     */
    public List<HwProductInfo> selectHwProductInfoJoinDetailList(HwProductInfo hwProductInfo);

    /**
     * 查询产品信息配置列表,join portalConfigType
     *
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置
     */
    public List<HwProductInfo> selectHwProductInfoJoinList(HwProductInfo hwProductInfo);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwWebDocumentService.java
```java
package com.ruoyi.portal.service;

import java.util.List;
import com.ruoyi.portal.domain.HwWebDocument;

/**
 * Hw资料文件Service接口
 * 
 * @author zch
 * @date 2025-09-22
 */
public interface IHwWebDocumentService 
{
    /**
     * 查询Hw资料文件
     * 
     * @param documentId Hw资料文件主键
     * @return Hw资料文件
     */
    public HwWebDocument selectHwWebDocumentByDocumentId(String documentId);

    /**
     * 查询Hw资料文件列表
     * 
     * @param hwWebDocument Hw资料文件
     * @return Hw资料文件集合
     */
    public List<HwWebDocument> selectHwWebDocumentList(HwWebDocument hwWebDocument);

    /**
     * 新增Hw资料文件
     * 
     * @param hwWebDocument Hw资料文件
     * @return 结果
     */
    public int insertHwWebDocument(HwWebDocument hwWebDocument);

    /**
     * 修改Hw资料文件
     * 
     * @param hwWebDocument Hw资料文件
     * @return 结果
     */
    public int updateHwWebDocument(HwWebDocument hwWebDocument);

    /**
     * 批量删除Hw资料文件
     * 
     * @param documentIds 需要删除的Hw资料文件主键集合
     * @return 结果
     */
    public int deleteHwWebDocumentByDocumentIds(String[] documentIds);

    /**
     * 删除Hw资料文件信息
     * 
     * @param documentId Hw资料文件主键
     * @return 结果
     */
    public int deleteHwWebDocumentByDocumentId(String documentId);

        /**
     * 验证密钥并获取文件地址
     * @param documentId 文件ID
     * @param providedKey 提供的密钥
     * @return 文件地址
     * @throws Exception 如果密钥不匹配
     */
    String verifyAndGetDocumentAddress(String documentId, String providedKey) throws Exception;

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwWebMenuService.java
```java
package com.ruoyi.portal.service;

import java.util.List;
import com.ruoyi.portal.domain.HwWebMenu;

/**
 * haiwei官网菜单Service接口
 * 
 * @author zch
 * @date 2025-08-18
 */
public interface IHwWebMenuService 
{
    /**
     * 查询haiwei官网菜单
     * 
     * @param webMenuId haiwei官网菜单主键
     * @return haiwei官网菜单
     */
    public HwWebMenu selectHwWebMenuByWebMenuId(Long webMenuId);

    /**
     * 查询haiwei官网菜单列表
     * 
     * @param hwWebMenu haiwei官网菜单
     * @return haiwei官网菜单集合
     */
    public List<HwWebMenu> selectHwWebMenuList(HwWebMenu hwWebMenu);

    /**
     * 新增haiwei官网菜单
     * 
     * @param hwWebMenu haiwei官网菜单
     * @return 结果
     */
    public int insertHwWebMenu(HwWebMenu hwWebMenu);

    /**
     * 修改haiwei官网菜单
     * 
     * @param hwWebMenu haiwei官网菜单
     * @return 结果
     */
    public int updateHwWebMenu(HwWebMenu hwWebMenu);

    /**
     * 批量删除haiwei官网菜单
     * 
     * @param webMenuIds 需要删除的haiwei官网菜单主键集合
     * @return 结果
     */
    public int deleteHwWebMenuByWebMenuIds(Long[] webMenuIds);

    /**
     * 删除haiwei官网菜单信息
     * 
     * @param webMenuId haiwei官网菜单主键
     * @return 结果
     */
    public int deleteHwWebMenuByWebMenuId(Long webMenuId);


    /**
     * 获取菜单树列表
     */
    public List<HwWebMenu> selectMenuTree(HwWebMenu hwWebMenu);

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwWebMenuService1.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwWebMenu1;
import com.ruoyi.portal.domain.HwWebMenu1;

import java.util.List;

/**
 * haiwei官网菜单Service接口
 * 
 * @author zch
 * @date 2025-08-18
 */
public interface IHwWebMenuService1
{
    /**
     * 查询haiwei官网菜单
     * 
     * @param webMenuId haiwei官网菜单主键
     * @return haiwei官网菜单
     */
    public HwWebMenu1 selectHwWebMenuByWebMenuId(Long webMenuId);

    /**
     * 查询haiwei官网菜单列表
     * 
     * @param HwWebMenu1 haiwei官网菜单
     * @return haiwei官网菜单集合
     */
    public List<HwWebMenu1> selectHwWebMenuList(HwWebMenu1 HwWebMenu1);

    /**
     * 新增haiwei官网菜单
     * 
     * @param HwWebMenu1 haiwei官网菜单
     * @return 结果
     */
    public int insertHwWebMenu(HwWebMenu1 HwWebMenu1);

    /**
     * 修改haiwei官网菜单
     * 
     * @param HwWebMenu1 haiwei官网菜单
     * @return 结果
     */
    public int updateHwWebMenu(HwWebMenu1 HwWebMenu1);

    /**
     * 批量删除haiwei官网菜单
     * 
     * @param webMenuIds 需要删除的haiwei官网菜单主键集合
     * @return 结果
     */
    public int deleteHwWebMenuByWebMenuIds(Long[] webMenuIds);

    /**
     * 删除haiwei官网菜单信息
     * 
     * @param webMenuId haiwei官网菜单主键
     * @return 结果
     */
    public int deleteHwWebMenuByWebMenuId(Long webMenuId);


    /**
     * 获取菜单树列表
     */
    public List<HwWebMenu1> selectMenuTree(HwWebMenu1 HwWebMenu1);

}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwWebService.java
```java
package com.ruoyi.portal.service;

import java.util.List;
import com.ruoyi.portal.domain.HwWeb;

/**
 * haiwei官网jsonService接口
 * 
 * @author ruoyi
 * @date 2025-08-18
 */
public interface IHwWebService 
{
    /**
     * 查询haiwei官网json
     * 
     * @param webId haiwei官网json主键
     * @return haiwei官网json
     */
    public HwWeb selectHwWebByWebcode(Long webCode);

    /**
     * 查询haiwei官网json列表
     * 
     * @param hwWeb haiwei官网json
     * @return haiwei官网json集合
     */
    public List<HwWeb> selectHwWebList(HwWeb hwWeb);

    /**
     * 新增haiwei官网json
     * 
     * @param hwWeb haiwei官网json
     * @return 结果
     */
    public int insertHwWeb(HwWeb hwWeb);

    /**
     * 修改haiwei官网json
     * 
     * @param hwWeb haiwei官网json
     * @return 结果
     */
    public int updateHwWeb(HwWeb hwWeb);

    /**
     * 批量删除haiwei官网json
     * 
     * @param webIds 需要删除的haiwei官网json主键集合
     * @return 结果
     */
    public int deleteHwWebByWebIds(Long[] webIds);

    /**
     * 删除haiwei官网json信息
     * 
     * @param webId haiwei官网json主键
     * @return 结果
     */
    public int deleteHwWebByWebId(Long webId);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\IHwWebService1.java
```java
package com.ruoyi.portal.service;

import com.ruoyi.portal.domain.HwWeb1;
import java.util.List;

/**
 * haiwei官网jsonService接口
 * 
 * @author ruoyi
 * @date 2025-08-18
 */
public interface IHwWebService1
{
    /**
     * 查询haiwei官网json
     * 
     * @param webId haiwei官网json主键
     * @return haiwei官网json
     */
    public HwWeb1 selectHwWebByWebcode(Long webCode);

    public HwWeb1 selectHwWebOne(HwWeb1 hwWeb1);

    /**
     * 查询haiwei官网json列表
     * 
     * @param HwWeb1 haiwei官网json
     * @return haiwei官网json集合
     */
    public List<HwWeb1> selectHwWebList(HwWeb1 hwWeb1);

    /**
     * 新增haiwei官网json
     * 
     * @param HwWeb1 haiwei官网json
     * @return 结果
     */
    public int insertHwWeb(HwWeb1 hwWeb1);

    /**
     * 修改haiwei官网json
     * 
     * @param HwWeb1 haiwei官网json
     * @return 结果
     */
    public int updateHwWeb(HwWeb1 hwWeb1);

    /**
     * 批量删除haiwei官网json
     * 
     * @param webIds 需要删除的haiwei官网json主键集合
     * @return 结果
     */
    public int deleteHwWebByWebIds(Long[] webIds);

    /**
     * 删除haiwei官网json信息
     * 
     * @param webId haiwei官网json主键
     * @return 结果
     */
    public int deleteHwWebByWebId(Long webId);
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwAboutUsInfoDetailServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.portal.domain.HwAboutUsInfoDetail;
import com.ruoyi.portal.mapper.HwAboutUsInfoDetailMapper;
import com.ruoyi.portal.service.IHwAboutUsInfoDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 关于我们信息明细Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-12-01
 */
@Service
public class HwAboutUsInfoDetailServiceImpl implements IHwAboutUsInfoDetailService 
{
    @Autowired
    private HwAboutUsInfoDetailMapper hwAboutUsInfoDetailMapper;

    /**
     * 查询关于我们信息明细
     * 
     * @param usInfoDetailId 关于我们信息明细主键
     * @return 关于我们信息明细
     */
    @Override
    public HwAboutUsInfoDetail selectHwAboutUsInfoDetailByUsInfoDetailId(Long usInfoDetailId)
    {
        return hwAboutUsInfoDetailMapper.selectHwAboutUsInfoDetailByUsInfoDetailId(usInfoDetailId);
    }

    /**
     * 查询关于我们信息明细列表
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 关于我们信息明细
     */
    @Override
    public List<HwAboutUsInfoDetail> selectHwAboutUsInfoDetailList(HwAboutUsInfoDetail hwAboutUsInfoDetail)
    {
        return hwAboutUsInfoDetailMapper.selectHwAboutUsInfoDetailList(hwAboutUsInfoDetail);
    }

    /**
     * 新增关于我们信息明细
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 结果
     */
    @Override
    public int insertHwAboutUsInfoDetail(HwAboutUsInfoDetail hwAboutUsInfoDetail)
    {
        hwAboutUsInfoDetail.setCreateTime(DateUtils.getNowDate());
        return hwAboutUsInfoDetailMapper.insertHwAboutUsInfoDetail(hwAboutUsInfoDetail);
    }

    /**
     * 修改关于我们信息明细
     * 
     * @param hwAboutUsInfoDetail 关于我们信息明细
     * @return 结果
     */
    @Override
    public int updateHwAboutUsInfoDetail(HwAboutUsInfoDetail hwAboutUsInfoDetail)
    {
        hwAboutUsInfoDetail.setUpdateTime(DateUtils.getNowDate());
        return hwAboutUsInfoDetailMapper.updateHwAboutUsInfoDetail(hwAboutUsInfoDetail);
    }

    /**
     * 批量删除关于我们信息明细
     * 
     * @param usInfoDetailIds 需要删除的关于我们信息明细主键
     * @return 结果
     */
    @Override
    public int deleteHwAboutUsInfoDetailByUsInfoDetailIds(Long[] usInfoDetailIds)
    {
        return hwAboutUsInfoDetailMapper.deleteHwAboutUsInfoDetailByUsInfoDetailIds(usInfoDetailIds);
    }

    /**
     * 删除关于我们信息明细信息
     * 
     * @param usInfoDetailId 关于我们信息明细主键
     * @return 结果
     */
    @Override
    public int deleteHwAboutUsInfoDetailByUsInfoDetailId(Long usInfoDetailId)
    {
        return hwAboutUsInfoDetailMapper.deleteHwAboutUsInfoDetailByUsInfoDetailId(usInfoDetailId);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwAboutUsInfoServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.portal.domain.HwAboutUsInfo;
import com.ruoyi.portal.mapper.HwAboutUsInfoMapper;
import com.ruoyi.portal.service.IHwAboutUsInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 关于我们信息Service业务层处理
 * 
 * @author xins
 * @date 2024-12-01
 */
@Service
public class HwAboutUsInfoServiceImpl implements IHwAboutUsInfoService 
{
    @Autowired
    private HwAboutUsInfoMapper hwAboutUsInfoMapper;

    /**
     * 查询关于我们信息
     * 
     * @param aboutUsInfoId 关于我们信息主键
     * @return 关于我们信息
     */
    @Override
    public HwAboutUsInfo selectHwAboutUsInfoByAboutUsInfoId(Long aboutUsInfoId)
    {
        return hwAboutUsInfoMapper.selectHwAboutUsInfoByAboutUsInfoId(aboutUsInfoId);
    }

    /**
     * 查询关于我们信息列表
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 关于我们信息
     */
    @Override
    public List<HwAboutUsInfo> selectHwAboutUsInfoList(HwAboutUsInfo hwAboutUsInfo)
    {
        return hwAboutUsInfoMapper.selectHwAboutUsInfoList(hwAboutUsInfo);
    }

    /**
     * 新增关于我们信息
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 结果
     */
    @Override
    public int insertHwAboutUsInfo(HwAboutUsInfo hwAboutUsInfo)
    {
        hwAboutUsInfo.setCreateTime(DateUtils.getNowDate());
        return hwAboutUsInfoMapper.insertHwAboutUsInfo(hwAboutUsInfo);
    }

    /**
     * 修改关于我们信息
     * 
     * @param hwAboutUsInfo 关于我们信息
     * @return 结果
     */
    @Override
    public int updateHwAboutUsInfo(HwAboutUsInfo hwAboutUsInfo)
    {
        hwAboutUsInfo.setUpdateTime(DateUtils.getNowDate());
        return hwAboutUsInfoMapper.updateHwAboutUsInfo(hwAboutUsInfo);
    }

    /**
     * 批量删除关于我们信息
     * 
     * @param aboutUsInfoIds 需要删除的关于我们信息主键
     * @return 结果
     */
    @Override
    public int deleteHwAboutUsInfoByAboutUsInfoIds(Long[] aboutUsInfoIds)
    {
        return hwAboutUsInfoMapper.deleteHwAboutUsInfoByAboutUsInfoIds(aboutUsInfoIds);
    }

    /**
     * 删除关于我们信息信息
     * 
     * @param aboutUsInfoId 关于我们信息主键
     * @return 结果
     */
    @Override
    public int deleteHwAboutUsInfoByAboutUsInfoId(Long aboutUsInfoId)
    {
        return hwAboutUsInfoMapper.deleteHwAboutUsInfoByAboutUsInfoId(aboutUsInfoId);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwContactUsInfoServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.portal.domain.HwContactUsInfo;
import com.ruoyi.portal.mapper.HwContactUsInfoMapper;
import com.ruoyi.portal.service.IHwContactUsInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 联系我们信息Service业务层处理
 * 
 * @author xins
 * @date 2024-12-01
 */
@Service
public class HwContactUsInfoServiceImpl implements IHwContactUsInfoService 
{
    @Autowired
    private HwContactUsInfoMapper hwContactUsInfoMapper;

    /**
     * 查询联系我们信息
     * 
     * @param contactUsInfoId 联系我们信息主键
     * @return 联系我们信息
     */
    @Override
    public HwContactUsInfo selectHwContactUsInfoByContactUsInfoId(Long contactUsInfoId)
    {
        return hwContactUsInfoMapper.selectHwContactUsInfoByContactUsInfoId(contactUsInfoId);
    }

    /**
     * 查询联系我们信息列表
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 联系我们信息
     */
    @Override
    public List<HwContactUsInfo> selectHwContactUsInfoList(HwContactUsInfo hwContactUsInfo)
    {
        return hwContactUsInfoMapper.selectHwContactUsInfoList(hwContactUsInfo);
    }

    /**
     * 新增联系我们信息
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 结果
     */
    @Override
    public int insertHwContactUsInfo(HwContactUsInfo hwContactUsInfo)
    {

        hwContactUsInfo.setCreateTime(DateUtils.getNowDate());
        return hwContactUsInfoMapper.insertHwContactUsInfo(hwContactUsInfo);
    }

    /**
     * 修改联系我们信息
     * 
     * @param hwContactUsInfo 联系我们信息
     * @return 结果
     */
    @Override
    public int updateHwContactUsInfo(HwContactUsInfo hwContactUsInfo)
    {
        hwContactUsInfo.setUpdateTime(DateUtils.getNowDate());
        return hwContactUsInfoMapper.updateHwContactUsInfo(hwContactUsInfo);
    }

    /**
     * 批量删除联系我们信息
     * 
     * @param contactUsInfoIds 需要删除的联系我们信息主键
     * @return 结果
     */
    @Override
    public int deleteHwContactUsInfoByContactUsInfoIds(Long[] contactUsInfoIds)
    {
        return hwContactUsInfoMapper.deleteHwContactUsInfoByContactUsInfoIds(contactUsInfoIds);
    }

    /**
     * 删除联系我们信息信息
     * 
     * @param contactUsInfoId 联系我们信息主键
     * @return 结果
     */
    @Override
    public int deleteHwContactUsInfoByContactUsInfoId(Long contactUsInfoId)
    {
        return hwContactUsInfoMapper.deleteHwContactUsInfoByContactUsInfoId(contactUsInfoId);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwPortalConfigServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.portal.domain.HwPortalConfig;
import com.ruoyi.portal.mapper.HwPortalConfigMapper;
import com.ruoyi.portal.service.IHwPortalConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 门户网站配置Service业务层处理
 * 
 * @author xins
 * @date 2024-12-01
 */
@Service
public class HwPortalConfigServiceImpl implements IHwPortalConfigService 
{
    @Autowired
    private HwPortalConfigMapper hwPortalConfigMapper;

    /**
     * 查询门户网站配置
     * 
     * @param portalConfigId 门户网站配置主键
     * @return 门户网站配置
     */
    @Override
    public HwPortalConfig selectHwPortalConfigByPortalConfigId(Long portalConfigId)
    {
        return hwPortalConfigMapper.selectHwPortalConfigByPortalConfigId(portalConfigId);
    }

    /**
     * 查询门户网站配置列表
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 门户网站配置
     */
    @Override
    public List<HwPortalConfig> selectHwPortalConfigList(HwPortalConfig hwPortalConfig)
    {
        if("2".equals(hwPortalConfig.getPortalConfigType())){
            List<HwPortalConfig> hwPortalConfigs = hwPortalConfigMapper.selectHwPortalConfigList2(hwPortalConfig);
            return hwPortalConfigs;
        }
        return hwPortalConfigMapper.selectHwPortalConfigList(hwPortalConfig);
    }

    /**
     * 新增门户网站配置
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 结果
     */
    @Override
    public int insertHwPortalConfig(HwPortalConfig hwPortalConfig)
    {
        hwPortalConfig.setCreateTime(DateUtils.getNowDate());
        return hwPortalConfigMapper.insertHwPortalConfig(hwPortalConfig);
    }

    /**
     * 修改门户网站配置
     * 
     * @param hwPortalConfig 门户网站配置
     * @return 结果
     */
    @Override
    public int updateHwPortalConfig(HwPortalConfig hwPortalConfig)
    {
        hwPortalConfig.setUpdateTime(DateUtils.getNowDate());
        return hwPortalConfigMapper.updateHwPortalConfig(hwPortalConfig);
    }

    /**
     * 批量删除门户网站配置
     * 
     * @param portalConfigIds 需要删除的门户网站配置主键
     * @return 结果
     */
    @Override
    public int deleteHwPortalConfigByPortalConfigIds(Long[] portalConfigIds)
    {
        return hwPortalConfigMapper.deleteHwPortalConfigByPortalConfigIds(portalConfigIds);
    }

    /**
     * 删除门户网站配置信息
     * 
     * @param portalConfigId 门户网站配置主键
     * @return 结果
     */
    @Override
    public int deleteHwPortalConfigByPortalConfigId(Long portalConfigId)
    {
        return hwPortalConfigMapper.deleteHwPortalConfigByPortalConfigId(portalConfigId);
    }



    /**
     * 查询门户网站配置列表,Join hw_portal_config_type
     *
     * @param hwPortalConfig 门户网站配置
     * @return 门户网站配置
     */
    @Override
    public List<HwPortalConfig> selectHwPortalConfigJoinList(HwPortalConfig hwPortalConfig)
    {
        return hwPortalConfigMapper.selectHwPortalConfigJoinList(hwPortalConfig);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwPortalConfigTypeServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.portal.domain.HwPortalConfigType;
import com.ruoyi.portal.domain.vo.TreeSelect;
import com.ruoyi.portal.mapper.HwPortalConfigTypeMapper;
import com.ruoyi.portal.service.IHwPortalConfigTypeService;
import com.ruoyi.system.api.domain.SysDept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 门户网站配置类型Service业务层处理
 * 
 * @author xins
 * @date 2024-12-11
 */
@Service
public class HwPortalConfigTypeServiceImpl implements IHwPortalConfigTypeService 
{
    @Autowired
    private HwPortalConfigTypeMapper hwPortalConfigTypeMapper;

    /**
     * 查询门户网站配置类型
     * 
     * @param configTypeId 门户网站配置类型主键
     * @return 门户网站配置类型
     */
    @Override
    public HwPortalConfigType selectHwPortalConfigTypeByConfigTypeId(Long configTypeId)
    {
        return hwPortalConfigTypeMapper.selectHwPortalConfigTypeByConfigTypeId(configTypeId);
    }

    /**
     * 查询门户网站配置类型列表
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 门户网站配置类型
     */
     @Override
     public List<HwPortalConfigType> selectHwPortalConfigTypeList(HwPortalConfigType hwPortalConfigType)
     {
         return hwPortalConfigTypeMapper.selectHwPortalConfigTypeList(hwPortalConfigType);
     }


    /**
     * 查询门户网站配置类型列表
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 门户网站配置类型
     */
    @Override
    public List<HwPortalConfigType> selectConfigTypeList(HwPortalConfigType hwPortalConfigType)
    {
        // 如果有 configTypeClassfication 条件，需要特殊处理以确保树形结构完整
        if (StringUtils.isNotEmpty(hwPortalConfigType.getConfigTypeClassfication())) {
            // 查询所有数据
            List<HwPortalConfigType> allList = hwPortalConfigTypeMapper.selectHwPortalConfigTypeList(new HwPortalConfigType());
            
            // 找出指定分类的顶级节点
            List<HwPortalConfigType> topLevelNodes = allList.stream()
                .filter(item -> hwPortalConfigType.getConfigTypeClassfication().equals(item.getConfigTypeClassfication()) 
                              && (item.getParentId() == null || item.getParentId() == 0L))
                .collect(Collectors.toList());
            
            // 构建包含所有子孙节点的完整列表
            List<HwPortalConfigType> completeList = new ArrayList<>();
            for (HwPortalConfigType topNode : topLevelNodes) {
                completeList.add(topNode);
                addAllDescendants(allList, topNode, completeList);
            }
            
            return buildPortalConfigTypeTree(completeList);
        } else {
            // 没有特定过滤条件时，直接查询并构建树形结构
            List<HwPortalConfigType> list = hwPortalConfigTypeMapper.selectHwPortalConfigTypeList(hwPortalConfigType);
            return buildPortalConfigTypeTree(list);
        }
    }

    /**
     * 递归添加所有子孙节点
     */
    private void addAllDescendants(List<HwPortalConfigType> allList, HwPortalConfigType parentNode, List<HwPortalConfigType> resultList) {
        for (HwPortalConfigType item : allList) {
            if (item.getParentId() != null && item.getParentId().equals(parentNode.getConfigTypeId())) {
                resultList.add(item);
                addAllDescendants(allList, item, resultList); // 递归添加子节点的子节点
            }
        }
    }

    /**
     * 新增门户网站配置类型
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 结果
     */
    @Override
    public int insertHwPortalConfigType(HwPortalConfigType hwPortalConfigType)
    {
        if (hwPortalConfigType.getParentId() == null) {
            hwPortalConfigType.setParentId(0L);
            hwPortalConfigType.setAncestors("0");
        } else {
            HwPortalConfigType info = hwPortalConfigTypeMapper.selectHwPortalConfigTypeByConfigTypeId(hwPortalConfigType.getParentId());

            hwPortalConfigType.setAncestors(info.getAncestors() + "," + hwPortalConfigType.getParentId());
        }

        hwPortalConfigType.setCreateTime(DateUtils.getNowDate());
        hwPortalConfigType.setCreateBy(SecurityUtils.getUsername());
        return hwPortalConfigTypeMapper.insertHwPortalConfigType(hwPortalConfigType);
    }

    /**
     * 修改门户网站配置类型
     * 
     * @param hwPortalConfigType 门户网站配置类型
     * @return 结果
     */
    @Override
    public int updateHwPortalConfigType(HwPortalConfigType hwPortalConfigType)
    {
        hwPortalConfigType.setUpdateTime(DateUtils.getNowDate());
        return hwPortalConfigTypeMapper.updateHwPortalConfigType(hwPortalConfigType);
    }

    /**
     * 批量删除门户网站配置类型
     * 
     * @param configTypeIds 需要删除的门户网站配置类型主键
     * @return 结果
     */
    @Override
    public int deleteHwPortalConfigTypeByConfigTypeIds(Long[] configTypeIds)
    {
        return hwPortalConfigTypeMapper.deleteHwPortalConfigTypeByConfigTypeIds(configTypeIds);
    }

    /**
     * 删除门户网站配置类型信息
     * 
     * @param configTypeId 门户网站配置类型主键
     * @return 结果
     */
    @Override
    public int deleteHwPortalConfigTypeByConfigTypeId(Long configTypeId)
    {
        return hwPortalConfigTypeMapper.deleteHwPortalConfigTypeByConfigTypeId(configTypeId);
    }


    /**
     * 查询门户网站配置类型树结构信息
     *
     * @param portalConfigType 门户网站配置类型信息
     * @return 门户网站配置类型树信息集合
     */
    @Override
    public List<TreeSelect> selectPortalConfigTypeTreeList(HwPortalConfigType portalConfigType) {
        List<HwPortalConfigType> portalConfigTypes = this.selectHwPortalConfigTypeList(portalConfigType);
        return buildPortalConfigTypeTreeSelect(portalConfigTypes);
    }

    /**
     * 构建前端所需要下拉树结构
     *
     * @param portalConfigTypes 门户网站配置类型列表
     * @return 下拉树结构列表
     */
    @Override
    public List<TreeSelect> buildPortalConfigTypeTreeSelect(List<HwPortalConfigType> portalConfigTypes) {
        List<HwPortalConfigType> deptTrees = buildPortalConfigTypeTree(portalConfigTypes);
        return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
    }


    /**
     * 构建前端所需要树结构
     *
     * @param portalConfigTypes 门户网站配置类型列表
     * @return 树结构列表
     */
    @Override
    public List<HwPortalConfigType> buildPortalConfigTypeTree(List<HwPortalConfigType> portalConfigTypes) {
        List<HwPortalConfigType> returnList = new ArrayList<HwPortalConfigType>();
        List<Long> tempList = portalConfigTypes.stream().map(HwPortalConfigType::getConfigTypeId).collect(Collectors.toList());
        for (HwPortalConfigType portalConfigType : portalConfigTypes) {
            // 如果是顶级节点, 遍历该父节点的所有子节点
            if (!tempList.contains(portalConfigType.getParentId())) {
                recursionFn(portalConfigTypes, portalConfigType);
                returnList.add(portalConfigType);
            }
        }
        if (returnList.isEmpty()) {
            returnList = portalConfigTypes;
        }
        return returnList;
    }


    /**
     * 递归列表
     */
    private void recursionFn(List<HwPortalConfigType> list, HwPortalConfigType t) {
        // 得到子节点列表
        List<HwPortalConfigType> childList = getChildList(list, t);
        t.setChildren(childList);
        for (HwPortalConfigType tChild : childList) {
            if (hasChild(list, tChild)) {
                recursionFn(list, tChild);
            }
        }
    }

    /**
     * 得到子节点列表
     */
    private List<HwPortalConfigType> getChildList(List<HwPortalConfigType> list, HwPortalConfigType t) {
        List<HwPortalConfigType> tlist = new ArrayList<HwPortalConfigType>();
        Iterator<HwPortalConfigType> it = list.iterator();
        while (it.hasNext()) {
            HwPortalConfigType n = (HwPortalConfigType) it.next();
            if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getConfigTypeId().longValue()) {
                tlist.add(n);
            }
        }
        return tlist;
    }

    /**
     * 判断是否有子节点
     */
    private boolean hasChild(List<HwPortalConfigType> list, HwPortalConfigType t) {
        return getChildList(list, t).size() > 0 ? true : false;
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwProductCaseInfoServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.portal.domain.HwProductCaseInfo;
import com.ruoyi.portal.mapper.HwProductCaseInfoMapper;
import com.ruoyi.portal.service.IHwProductCaseInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 案例内容Service业务层处理
 * 
 * @author xins
 * @date 2024-12-01
 */
@Service
public class HwProductCaseInfoServiceImpl implements IHwProductCaseInfoService 
{
    @Autowired
    private HwProductCaseInfoMapper hwProductCaseInfoMapper;

    /**
     * 查询案例内容
     * 
     * @param caseInfoId 案例内容主键
     * @return 案例内容
     */
    @Override
    public HwProductCaseInfo selectHwProductCaseInfoByCaseInfoId(Long caseInfoId)
    {
        return hwProductCaseInfoMapper.selectHwProductCaseInfoByCaseInfoId(caseInfoId);
    }

    /**
     * 查询案例内容列表
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 案例内容
     */
    @Override
    public List<HwProductCaseInfo> selectHwProductCaseInfoList(HwProductCaseInfo hwProductCaseInfo)
    {
        return hwProductCaseInfoMapper.selectHwProductCaseInfoList(hwProductCaseInfo);
    }

    /**
     * 新增案例内容
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 结果
     */
    @Override
    public int insertHwProductCaseInfo(HwProductCaseInfo hwProductCaseInfo)
    {
        hwProductCaseInfo.setCreateTime(DateUtils.getNowDate());
        return hwProductCaseInfoMapper.insertHwProductCaseInfo(hwProductCaseInfo);
    }

    /**
     * 修改案例内容
     * 
     * @param hwProductCaseInfo 案例内容
     * @return 结果
     */
    @Override
    public int updateHwProductCaseInfo(HwProductCaseInfo hwProductCaseInfo)
    {
        hwProductCaseInfo.setUpdateTime(DateUtils.getNowDate());
        return hwProductCaseInfoMapper.updateHwProductCaseInfo(hwProductCaseInfo);
    }

    /**
     * 批量删除案例内容
     * 
     * @param caseInfoIds 需要删除的案例内容主键
     * @return 结果
     */
    @Override
    public int deleteHwProductCaseInfoByCaseInfoIds(Long[] caseInfoIds)
    {
        return hwProductCaseInfoMapper.deleteHwProductCaseInfoByCaseInfoIds(caseInfoIds);
    }

    /**
     * 删除案例内容信息
     * 
     * @param caseInfoId 案例内容主键
     * @return 结果
     */
    @Override
    public int deleteHwProductCaseInfoByCaseInfoId(Long caseInfoId)
    {
        return hwProductCaseInfoMapper.deleteHwProductCaseInfoByCaseInfoId(caseInfoId);
    }

    /**
     * 根据configTypeId获取首页典型案例
     * @param hwProductCaseInfo
     * @return
     */
    @Override
    public HwProductCaseInfo getTypicalHomeCaseInfo(HwProductCaseInfo hwProductCaseInfo){
        hwProductCaseInfo.setHomeTypicalFlag("1");
        List<HwProductCaseInfo> productCaseInfoList = hwProductCaseInfoMapper.selectHwProductCaseInfoList(hwProductCaseInfo);
        List<HwProductCaseInfo> typicalProductCaseInfoList = productCaseInfoList.stream().filter(pci -> pci.getTypicalFlag().equals("1")).collect(Collectors.toList());
        if(typicalProductCaseInfoList!=null && ! typicalProductCaseInfoList.isEmpty()){
            return typicalProductCaseInfoList.get(0);
        }else if (productCaseInfoList!=null && !productCaseInfoList.isEmpty()){
            return productCaseInfoList.get(0);
        }
        return new HwProductCaseInfo();
    }


    /**
     * 查询案例内容列表,join portalConfigType
     *
     * @param hwProductCaseInfo 案例内容
     * @return 案例内容
     */
    @Override
    public List<HwProductCaseInfo> selectHwProductCaseInfoJoinList(HwProductCaseInfo hwProductCaseInfo)
    {
        return hwProductCaseInfoMapper.selectHwProductCaseInfoJoinList(hwProductCaseInfo);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwProductInfoDetailServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.portal.domain.HwPortalConfigType;
import com.ruoyi.portal.domain.HwProductInfoDetail;
import com.ruoyi.portal.mapper.HwProductInfoDetailMapper;
import com.ruoyi.portal.service.IHwProductInfoDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 产品信息明细配置Service业务层处理
 * 
 * @author xins
 * @date 2024-12-11
 */
@Service
public class HwProductInfoDetailServiceImpl implements IHwProductInfoDetailService 
{
    @Autowired
    private HwProductInfoDetailMapper hwProductInfoDetailMapper;

    /**
     * 查询产品信息明细配置
     * 
     * @param productInfoDetailId 产品信息明细配置主键
     * @return 产品信息明细配置
     */
    @Override
    public HwProductInfoDetail selectHwProductInfoDetailByProductInfoDetailId(Long productInfoDetailId)
    {
        return hwProductInfoDetailMapper.selectHwProductInfoDetailByProductInfoDetailId(productInfoDetailId);
    }

    /**
     * 查询产品信息明细配置列表
     * 
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 产品信息明细配置
     */
    @Override
    public List<HwProductInfoDetail> selectHwProductInfoDetailList(HwProductInfoDetail hwProductInfoDetail)
    {
        return hwProductInfoDetailMapper.selectHwProductInfoDetailList(hwProductInfoDetail);
    }

    /**
     * 新增产品信息明细配置
     *
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 结果
     */
    @Override
    public int insertHwProductInfoDetail(HwProductInfoDetail hwProductInfoDetail)
    {
        if (hwProductInfoDetail.getParentId() == null) {
            hwProductInfoDetail.setParentId(0L);
            hwProductInfoDetail.setAncestors("0");
        }else if(hwProductInfoDetail.getParentId() == 0L) {
            hwProductInfoDetail.setParentId(0L);
            hwProductInfoDetail.setAncestors("0");
        } else {
            HwProductInfoDetail info = hwProductInfoDetailMapper.selectHwProductInfoDetailByProductInfoDetailId(hwProductInfoDetail.getParentId());

            hwProductInfoDetail.setAncestors(info.getAncestors() + "," + hwProductInfoDetail.getParentId());
        }

        hwProductInfoDetail.setCreateTime(DateUtils.getNowDate());
        hwProductInfoDetail.setCreateBy(SecurityUtils.getUsername());

        return hwProductInfoDetailMapper.insertHwProductInfoDetail(hwProductInfoDetail);
    }

    /**
     * 修改产品信息明细配置
     * 
     * @param hwProductInfoDetail 产品信息明细配置
     * @return 结果
     */
    @Override
    public int updateHwProductInfoDetail(HwProductInfoDetail hwProductInfoDetail)
    {
        hwProductInfoDetail.setUpdateTime(DateUtils.getNowDate());
        return hwProductInfoDetailMapper.updateHwProductInfoDetail(hwProductInfoDetail);
    }

    /**
     * 批量删除产品信息明细配置
     * 
     * @param productInfoDetailIds 需要删除的产品信息明细配置主键
     * @return 结果
     */
    @Override
    public int deleteHwProductInfoDetailByProductInfoDetailIds(Long[] productInfoDetailIds)
    {
        return hwProductInfoDetailMapper.deleteHwProductInfoDetailByProductInfoDetailIds(productInfoDetailIds);
    }

    /**
     * 删除产品信息明细配置信息
     * 
     * @param productInfoDetailId 产品信息明细配置主键
     * @return 结果
     */
    @Override
    public int deleteHwProductInfoDetailByProductInfoDetailId(Long productInfoDetailId)
    {
        return hwProductInfoDetailMapper.deleteHwProductInfoDetailByProductInfoDetailId(productInfoDetailId);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwProductInfoServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.constant.HwPortalConstants;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.portal.domain.HwProductInfo;
import com.ruoyi.portal.domain.HwProductInfoDetail;
import com.ruoyi.portal.mapper.HwProductInfoMapper;
import com.ruoyi.portal.service.IHwProductInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 产品信息配置Service业务层处理
 * 
 * @author xins
 * @date 2024-12-01
 */
@Service
public class HwProductInfoServiceImpl implements IHwProductInfoService 
{
    @Autowired
    private HwProductInfoMapper hwProductInfoMapper;

    /**
     * 查询产品信息配置
     * 
     * @param productInfoId 产品信息配置主键
     * @return 产品信息配置
     */
    @Override
    public HwProductInfo selectHwProductInfoByProductInfoId(Long productInfoId)
    {
        return hwProductInfoMapper.selectHwProductInfoByProductInfoId(productInfoId);
    }

    /**
     * 查询产品信息配置列表
     * 
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置
     */
    @Override
    public List<HwProductInfo> selectHwProductInfoList(HwProductInfo hwProductInfo)
    {
        return hwProductInfoMapper.selectHwProductInfoList(hwProductInfo);
    }

    /**
     * 新增产品信息配置
     * 
     * @param hwProductInfo 产品信息配置
     * @return 结果
     */
    @Override
    public int insertHwProductInfo(HwProductInfo hwProductInfo)
    {
        hwProductInfo.setCreateTime(DateUtils.getNowDate());
        return hwProductInfoMapper.insertHwProductInfo(hwProductInfo);
    }

    /**
     * 修改产品信息配置
     * 
     * @param hwProductInfo 产品信息配置
     * @return 结果
     */
    @Override
    public int updateHwProductInfo(HwProductInfo hwProductInfo)
    {
        hwProductInfo.setUpdateTime(DateUtils.getNowDate());
        return hwProductInfoMapper.updateHwProductInfo(hwProductInfo);
    }

    /**
     * 批量删除产品信息配置
     * 
     * @param productInfoIds 需要删除的产品信息配置主键
     * @return 结果
     */
    @Override
    public int deleteHwProductInfoByProductInfoIds(Long[] productInfoIds)
    {
        return hwProductInfoMapper.deleteHwProductInfoByProductInfoIds(productInfoIds);
    }

    /**
     * 删除产品信息配置信息
     * 
     * @param productInfoId 产品信息配置主键
     * @return 结果
     */
    @Override
    public int deleteHwProductInfoByProductInfoId(Long productInfoId)
    {
        return hwProductInfoMapper.deleteHwProductInfoByProductInfoId(productInfoId);
    }


    /**
     * 获取产品中心产品信息(平台简介,hw_product_info获取，（配置模式2左标题+内容，右图片）读取中文标题和英文标题，下面内容从hw_product_info_detail获取，读取标题，内容和图片)
     *
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置
     */
    @Override
    public List<HwProductInfo> selectHwProductInfoJoinDetailList(HwProductInfo hwProductInfo)
    {
        List<HwProductInfo> hwProductInfoJoinDetailList =  hwProductInfoMapper.selectHwProductInfoJoinDetailList(hwProductInfo);
        
        // 若配置模式configModal为13，hwProductInfoDetailList应该变为树形结构
        if ("13".equals(hwProductInfo.getConfigModal())) {
            for (HwProductInfo productInfo : hwProductInfoJoinDetailList) {
                if (productInfo.getHwProductInfoDetailList() != null && !productInfo.getHwProductInfoDetailList().isEmpty()) {
                    // 将每个产品信息的明细列表转换为树形结构
                    List<HwProductInfoDetail> treeStructureList = buildProductInfoDetailTree(productInfo.getHwProductInfoDetailList());
                    productInfo.setHwProductInfoDetailList(treeStructureList);
                }
            }
        }

        for (HwProductInfo productInfo : hwProductInfoJoinDetailList) {
            List<HwProductInfoDetail> hwProductInfoDetailList = productInfo.getHwProductInfoDetailList();
            for (HwProductInfoDetail hwProductInfoDetail : hwProductInfoDetailList) {
                if ("13".equals(hwProductInfoDetail.getConfigModel())){
                    // 将每个产品信息的明细列表转换为树形结构
                    List<HwProductInfoDetail> treeStructureList = buildProductInfoDetailTree(productInfo.getHwProductInfoDetailList());
                    productInfo.setHwProductInfoDetailList(treeStructureList);
                }
            }
        }
        
        return hwProductInfoJoinDetailList;
    }



    /**
     * 构建前端所需要树结构
     *
     * @param productInfoDetails 产品明细列表
     * @return 树结构列表
     */
    public List<HwProductInfoDetail> buildProductInfoDetailTree(List<HwProductInfoDetail> productInfoDetails) {
        List<HwProductInfoDetail> returnList = new ArrayList<>();
        List<Long> tempList = productInfoDetails.stream().map(HwProductInfoDetail::getProductInfoDetailId).collect(Collectors.toList());
        for (HwProductInfoDetail hwProductInfoDetail : productInfoDetails) {
/*            // 如果是顶级节点, 遍历该父节点的所有子节点
            if (!tempList.contains(hwProductInfoDetail.getParentId())) {*/
            // 如果是顶级节点(parentId为null、0或者不在当前列表中), 遍历该父节点的所有子节点
            if (hwProductInfoDetail.getParentId() == null || hwProductInfoDetail.getParentId() == 0L || !tempList.contains(hwProductInfoDetail.getParentId())) {
                recursionFn(productInfoDetails, hwProductInfoDetail);
                returnList.add(hwProductInfoDetail);
            }
        }
        if (returnList.isEmpty()) {
            returnList = productInfoDetails;
        }
        return returnList;
    }

    /**
     * 递归列表
     */
    private void recursionFn(List<HwProductInfoDetail> list, HwProductInfoDetail t) {
        // 得到子节点列表
        List<HwProductInfoDetail> childList = getChildList(list, t);
        // 设置TreeEntity的children字段
        t.setChildren(childList);
        // 设置HwProductInfoDetail的hwProductInfoDetailList字段
        t.setHwProductInfoDetailList(childList);
        
        for (HwProductInfoDetail tChild : childList) {
            if (hasChild(list, tChild)) {
                recursionFn(list, tChild);
            }
        }
    }


    /**
     * 得到子节点列表
     */
    private List<HwProductInfoDetail> getChildList(List<HwProductInfoDetail> list, HwProductInfoDetail t) {
        List<HwProductInfoDetail> tlist = new ArrayList<HwProductInfoDetail>();
        Iterator<HwProductInfoDetail> it = list.iterator();
        while (it.hasNext()) {
            HwProductInfoDetail n = (HwProductInfoDetail) it.next();
            if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getProductInfoDetailId().longValue()) {
                tlist.add(n);
            }
        }
        return tlist;
    }

    /**
     * 判断是否有子节点
     */
    private boolean hasChild(List<HwProductInfoDetail> list, HwProductInfoDetail t) {
        return getChildList(list, t).size() > 0 ? true : false;
    }


    /**
     * 查询产品信息配置列表,join portalConfigType
     *
     * @param hwProductInfo 产品信息配置
     * @return 产品信息配置
     */
    @Override
    public List<HwProductInfo> selectHwProductInfoJoinList(HwProductInfo hwProductInfo)
    {
        return hwProductInfoMapper.selectHwProductInfoJoinList(hwProductInfo);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwWebDocumentServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import java.util.List;

import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.portal.mapper.HwWebDocumentMapper;
import com.ruoyi.portal.domain.HwWebDocument;
import com.ruoyi.portal.service.IHwWebDocumentService;

/**
 * Hw资料文件Service业务层处理
 * 
 * @author zch
 * @date 2025-09-22
 */
@Service
public class HwWebDocumentServiceImpl implements IHwWebDocumentService 
{
    @Autowired
    private HwWebDocumentMapper hwWebDocumentMapper;

    /**
     * 查询Hw资料文件
     * 
     * @param documentId Hw资料文件主键
     * @return Hw资料文件
     */
    @Override
    public HwWebDocument selectHwWebDocumentByDocumentId(String documentId)
    {
        return hwWebDocumentMapper.selectHwWebDocumentByDocumentId(documentId);
    }

    /**
     * 查询Hw资料文件列表
     * 
     * @param hwWebDocument Hw资料文件
     * @return Hw资料文件
     */
    @Override
    public List<HwWebDocument> selectHwWebDocumentList(HwWebDocument hwWebDocument)
    {
        return hwWebDocumentMapper.selectHwWebDocumentList(hwWebDocument);
    }

    /**
     * 新增Hw资料文件
     * 
     * @param hwWebDocument Hw资料文件
     * @return 结果
     */
    @Override
    public int insertHwWebDocument(HwWebDocument hwWebDocument)
    {
        hwWebDocument.setCreateTime(DateUtils.getNowDate());
        return hwWebDocumentMapper.insertHwWebDocument(hwWebDocument);
    }

    /**
     * 修改Hw资料文件
     * 
     * @param hwWebDocument Hw资料文件
     * @return 结果
     */
    @Override
    public int updateHwWebDocument(HwWebDocument hwWebDocument)
    {
        // 特殊处理 secretKey：前端不传或传 null 时清空数据库密钥
        // 将 null 转换为空字符串，触发 Mapper 更新条件
        if (hwWebDocument.getSecretKey() == null) {
            hwWebDocument.setSecretKey("");
        }
        
        return hwWebDocumentMapper.updateHwWebDocument(hwWebDocument);
    }

    /**
     * 批量删除Hw资料文件
     * 
     * @param documentIds 需要删除的Hw资料文件主键
     * @return 结果
     */
    @Override
    public int deleteHwWebDocumentByDocumentIds(String[] documentIds)
    {
        return hwWebDocumentMapper.deleteHwWebDocumentByDocumentIds(documentIds);
    }

    /**
     * 删除Hw资料文件信息
     * 
     * @param documentId Hw资料文件主键
     * @return 结果
     */
    @Override
    public int deleteHwWebDocumentByDocumentId(String documentId)
    {
        return hwWebDocumentMapper.deleteHwWebDocumentByDocumentId(documentId);
    }

    @Override
    public String verifyAndGetDocumentAddress(String documentId, String providedKey) throws Exception {
        HwWebDocument document = selectHwWebDocumentByDocumentId(documentId);
        if (document == null) {
            throw new ServiceException("文件不存在");
        }
        String secretKey = document.getSecretKey();
        String address = document.getDocumentAddress();
        
        // 若数据库密钥为空，则直接返回文件地址
        if (secretKey == null || secretKey.trim().isEmpty()) {
            return address;
        }
        
        // 若密钥不为空，则需要验证提供的密钥是否相等
        String trimmedProvided = providedKey == null ? null : providedKey.trim();
        if (trimmedProvided == null || trimmedProvided.isEmpty()) {
            throw new ServiceException("密钥不能为空");
        }
        
        if (secretKey.trim().equals(trimmedProvided)) {
            return address;
        } else {
            throw new ServiceException("密钥错误");
        }
    }


}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwWebMenuServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;

import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.portal.domain.HwProductInfoDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.portal.mapper.HwWebMenuMapper;
import com.ruoyi.portal.domain.HwWebMenu;
import com.ruoyi.portal.service.IHwWebMenuService;

/**
 * haiwei官网菜单Service业务层处理
 *
 * @author zch
 * @date 2025-08-18
 */
@Service
public class HwWebMenuServiceImpl implements IHwWebMenuService
{
    @Autowired
    private HwWebMenuMapper hwWebMenuMapper;

    /**
     * 查询haiwei官网菜单
     *
     * @param webMenuId haiwei官网菜单主键
     * @return haiwei官网菜单
     */
    @Override
    public HwWebMenu selectHwWebMenuByWebMenuId(Long webMenuId)
    {
        return hwWebMenuMapper.selectHwWebMenuByWebMenuId(webMenuId);
    }

    /**
     * 查询haiwei官网菜单列表
     *
     * @param hwWebMenu haiwei官网菜单
     * @return haiwei官网菜单
     */
    @Override
    public List<HwWebMenu> selectHwWebMenuList(HwWebMenu hwWebMenu)
    {
        List<HwWebMenu> hwWebMenus = hwWebMenuMapper.selectHwWebMenuList(hwWebMenu);
        return hwWebMenus;
    }

    /**
     * 获取菜单树列表
     */
    @Override
    public List<HwWebMenu> selectMenuTree(HwWebMenu hwWebMenu)
    {
        List<HwWebMenu> hwWebMenus = hwWebMenuMapper.selectHwWebMenuList(hwWebMenu);
        return buildWebMenuTree(hwWebMenus);
    }

    /**
     * 新增haiwei官网菜单
     *
     * @param hwWebMenu haiwei官网菜单
     * @return 结果
     */
    @Override
    public int insertHwWebMenu(HwWebMenu hwWebMenu)
    {
        return hwWebMenuMapper.insertHwWebMenu(hwWebMenu);
    }

    /**
     * 修改haiwei官网菜单
     *
     * @param hwWebMenu haiwei官网菜单
     * @return 结果
     */
    @Override
    public int updateHwWebMenu(HwWebMenu hwWebMenu)
    {
        return hwWebMenuMapper.updateHwWebMenu(hwWebMenu);
    }

    /**
     * 批量删除haiwei官网菜单
     *
     * @param webMenuIds 需要删除的haiwei官网菜单主键
     * @return 结果
     */
    @Override
    public int deleteHwWebMenuByWebMenuIds(Long[] webMenuIds)
    {
        return hwWebMenuMapper.deleteHwWebMenuByWebMenuIds(webMenuIds);
    }

    /**
     * 删除haiwei官网菜单信息
     *
     * @param webMenuId haiwei官网菜单主键
     * @return 结果
     */
    @Override
    public int deleteHwWebMenuByWebMenuId(Long webMenuId)
    {
        return hwWebMenuMapper.deleteHwWebMenuByWebMenuId(webMenuId);
    }

/**
     * 构建前端所需要树结构（根据传入的平铺菜单列表构造树）
     *
     * @param menus 菜单列表
     * @return 树结构列表
     */
    public List<HwWebMenu> buildWebMenuTree(List<HwWebMenu> menus) {
        List<HwWebMenu> returnList = new ArrayList<>();
        List<Long> tempList = menus.stream().map(HwWebMenu::getWebMenuId).collect(Collectors.toList());
        for (HwWebMenu menu : menus) {
            // 如果是顶级节点(parent为null、0或者不在当前列表中), 遍历该父节点的所有子节点
            if (menu.getParent() == null || menu.getParent() == 0L || !tempList.contains(menu.getParent())) {
                recursionFn(menus, menu);
                returnList.add(menu);
            }
        }
        if (returnList.isEmpty()) {
            returnList = menus;
        }
        return returnList;
    }

    /**
     * 递归设置子节点
     */
    private void recursionFn(List<HwWebMenu> list, HwWebMenu t) {
        // 得到子节点列表
        List<HwWebMenu> childList = getChildList(list, t);
        t.setChildren(childList);
        for (HwWebMenu tChild : childList) {
            if (hasChild(list, tChild)) {
                recursionFn(list, tChild);
            }
        }
    }

    /**
     * 得到子节点列表
     */
    private List<HwWebMenu> getChildList(List<HwWebMenu> list, HwWebMenu t) {
        List<HwWebMenu> tlist = new ArrayList<HwWebMenu>();
        Iterator<HwWebMenu> it = list.iterator();
        while (it.hasNext()) {
            HwWebMenu n = it.next();
            if (StringUtils.isNotNull(n.getParent()) && n.getParent().longValue() == t.getWebMenuId().longValue()) {
                tlist.add(n);
            }
        }
        return tlist;
    }

    /**
     * 判断是否有子节点
     */
    private boolean hasChild(List<HwWebMenu> list, HwWebMenu t) {
        return !getChildList(list, t).isEmpty();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwWebMenuServiceImpl1.java
```java
package com.ruoyi.portal.service.impl;

import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.portal.domain.HwWebMenu1;
import com.ruoyi.portal.mapper.HwWebMenuMapper1;
import com.ruoyi.portal.service.IHwWebMenuService1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * haiwei官网菜单Service业务层处理
 *
 * @author zch
 * @date 2025-08-18
 */
@Service
public class HwWebMenuServiceImpl1 implements IHwWebMenuService1
{
    @Autowired
    private HwWebMenuMapper1 HwWebMenuMapper1;

    /**
     * 查询haiwei官网菜单
     *
     * @param webMenuId haiwei官网菜单主键
     * @return haiwei官网菜单
     */
    @Override
    public HwWebMenu1 selectHwWebMenuByWebMenuId(Long webMenuId)
    {
        return HwWebMenuMapper1.selectHwWebMenuByWebMenuId(webMenuId);
    }

    /**
     * 查询haiwei官网菜单列表
     *
     * @param HwWebMenu1 haiwei官网菜单
     * @return haiwei官网菜单
     */
    @Override
    public List<HwWebMenu1> selectHwWebMenuList(HwWebMenu1 HwWebMenu1)
    {
        List<HwWebMenu1> hwWebMenus = HwWebMenuMapper1.selectHwWebMenuList(HwWebMenu1);
        return hwWebMenus;
    }

    /**
     * 获取菜单树列表
     */
    @Override
    public List<HwWebMenu1> selectMenuTree(HwWebMenu1 HwWebMenu1)
    {
        List<HwWebMenu1> hwWebMenus = HwWebMenuMapper1.selectHwWebMenuList(HwWebMenu1);
        return buildWebMenuTree(hwWebMenus);
    }

    /**
     * 新增haiwei官网菜单
     *
     * @param HwWebMenu1 haiwei官网菜单
     * @return 结果
     */
    @Override
    public int insertHwWebMenu(HwWebMenu1 HwWebMenu1)
    {
        return HwWebMenuMapper1.insertHwWebMenu(HwWebMenu1);
    }

    /**
     * 修改haiwei官网菜单
     *
     * @param HwWebMenu1 haiwei官网菜单
     * @return 结果
     */
    @Override
    public int updateHwWebMenu(HwWebMenu1 HwWebMenu1)
    {
        return HwWebMenuMapper1.updateHwWebMenu(HwWebMenu1);
    }

    /**
     * 批量删除haiwei官网菜单
     *
     * @param webMenuIds 需要删除的haiwei官网菜单主键
     * @return 结果
     */
    @Override
    public int deleteHwWebMenuByWebMenuIds(Long[] webMenuIds)
    {
        return HwWebMenuMapper1.deleteHwWebMenuByWebMenuIds(webMenuIds);
    }

    /**
     * 删除haiwei官网菜单信息
     *
     * @param webMenuId haiwei官网菜单主键
     * @return 结果
     */
    @Override
    public int deleteHwWebMenuByWebMenuId(Long webMenuId)
    {
        return HwWebMenuMapper1.deleteHwWebMenuByWebMenuId(webMenuId);
    }

/**
     * 构建前端所需要树结构（根据传入的平铺菜单列表构造树）
     *
     * @param menus 菜单列表
     * @return 树结构列表
     */
    public List<HwWebMenu1> buildWebMenuTree(List<HwWebMenu1> menus) {
        List<HwWebMenu1> returnList = new ArrayList<>();
        List<Long> tempList = menus.stream().map(HwWebMenu1::getWebMenuId).collect(Collectors.toList());
        for (HwWebMenu1 menu : menus) {
            // 如果是顶级节点(parent为null、0或者不在当前列表中), 遍历该父节点的所有子节点
            if (menu.getParent() == null || menu.getParent() == 0L || !tempList.contains(menu.getParent())) {
                recursionFn(menus, menu);
                returnList.add(menu);
            }
        }
        if (returnList.isEmpty()) {
            returnList = menus;
        }
        return returnList;
    }

    /**
     * 递归设置子节点
     */
    private void recursionFn(List<HwWebMenu1> list, HwWebMenu1 t) {
        // 得到子节点列表
        List<HwWebMenu1> childList = getChildList(list, t);
        t.setChildren(childList);
        for (HwWebMenu1 tChild : childList) {
            if (hasChild(list, tChild)) {
                recursionFn(list, tChild);
            }
        }
    }

    /**
     * 得到子节点列表
     */
    private List<HwWebMenu1> getChildList(List<HwWebMenu1> list, HwWebMenu1 t) {
        List<HwWebMenu1> tlist = new ArrayList<HwWebMenu1>();
        Iterator<HwWebMenu1> it = list.iterator();
        while (it.hasNext()) {
            HwWebMenu1 n = it.next();
            if (StringUtils.isNotNull(n.getParent()) && n.getParent().longValue() == t.getWebMenuId().longValue()) {
                tlist.add(n);
            }
        }
        return tlist;
    }

    /**
     * 判断是否有子节点
     */
    private boolean hasChild(List<HwWebMenu1> list, HwWebMenu1 t) {
        return !getChildList(list, t).isEmpty();
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwWebServiceImpl.java
```java
package com.ruoyi.portal.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.portal.mapper.HwWebMapper;
import com.ruoyi.portal.domain.HwWeb;
import com.ruoyi.portal.service.IHwWebService;
import org.springframework.transaction.annotation.Transactional;

/**
 * haiwei官网jsonService业务层处理
 * 
 * @author ruoyi
 * @date 2025-08-18
 */
@Service
public class HwWebServiceImpl implements IHwWebService 
{
    @Autowired
    private HwWebMapper hwWebMapper;

    /**
     * 查询haiwei官网json
     * 
     * @param webId haiwei官网json主键
     * @return haiwei官网json
     */
    @Override
    public HwWeb selectHwWebByWebcode(Long webCode)
    {
        HwWeb hwWeb = hwWebMapper.selectHwWebByWebcode(webCode);
        return hwWeb;
    }


    /**
     * 查询haiwei官网json列表
     * 
     * @param hwWeb haiwei官网json
     * @return haiwei官网json
     */
    @Override
    public List<HwWeb> selectHwWebList(HwWeb hwWeb)
    {
        return hwWebMapper.selectHwWebList(hwWeb);
    }

    /**
     * 新增haiwei官网json
     * 
     * @param hwWeb haiwei官网json
     * @return 结果
     */
    @Override
    public int insertHwWeb(HwWeb hwWeb)
    {
        return hwWebMapper.insertHwWeb(hwWeb);
    }

    /**
     * 修改haiwei官网json
     * 
     * @param hwWeb haiwei官网json
     * @return 结果
     */
    @Override
    @Transactional( rollbackFor = Exception.class )
    public int updateHwWeb(HwWeb hwWeb)
    {
        HwWeb codeWeb = new HwWeb();
        //编号唯一
        codeWeb.setWebCode(hwWeb.getWebCode());
        List<HwWeb> exists = hwWebMapper.selectHwWebList(codeWeb);
        if (!exists.isEmpty()) {
            Long[] webIds = exists.stream().map(HwWeb::getWebId).toArray(Long[]::new);
            //逻辑删除旧纪录
            hwWebMapper.deleteHwWebByWebIds(webIds);
        }
        // 插入新记录，避免复用旧主键
        // hwWeb.setWebId(null);
        hwWeb.setIsDelete("0");
        return hwWebMapper.insertHwWeb(hwWeb);
    }

    /**
     * 批量删除haiwei官网json
     * 
     * @param webIds 需要删除的haiwei官网json主键
     * @return 结果
     */
    @Override
    public int deleteHwWebByWebIds(Long[] webIds)
    {
        return hwWebMapper.deleteHwWebByWebIds(webIds);
    }

    /**
     * 删除haiwei官网json信息
     * 
     * @param webId haiwei官网json主键
     * @return 结果
     */
    @Override
    public int deleteHwWebByWebId(Long webId)
    {
        return hwWebMapper.deleteHwWebByWebId(webId);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\java\com\ruoyi\portal\service\impl\HwWebServiceImpl1.java
```java
package com.ruoyi.portal.service.impl;


import com.ruoyi.portal.mapper.HwWebMapper1;
import com.ruoyi.portal.service.IHwWebService1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import com.ruoyi.portal.domain.HwWeb1;
import com.ruoyi.portal.domain.HwWeb;
import org.springframework.transaction.annotation.Transactional;

/**
 * haiwei官网jsonService业务层处理
 * 
 * @author ruoyi
 * @date 2025-08-18
 */
@Service
public class HwWebServiceImpl1 implements IHwWebService1
{
    @Autowired
    private HwWebMapper1 hwWebMapper1;

    /**
     * 查询haiwei官网json
     * 
     * @param webId haiwei官网json主键
     * @return haiwei官网json
     */
    @Override
    public HwWeb1 selectHwWebByWebcode(Long webCode)
    {
        return hwWebMapper1.selectHwWebByWebcode(webCode);
    }

    @Override
    public HwWeb1 selectHwWebOne(HwWeb1 hwWeb1)
    {
        return hwWebMapper1.selectHwWebOne(hwWeb1);
    }


    /**
     * 查询haiwei官网json列表
     * 
     * @param HwWeb1 haiwei官网json
     * @return haiwei官网json
     */
    @Override
    public List<HwWeb1> selectHwWebList(HwWeb1 hwWeb1)
    {
        return hwWebMapper1.selectHwWebList(hwWeb1);
    }

    /**
     * 新增haiwei官网json
     * 
     * @param HwWeb1 haiwei官网json
     * @return 结果
     */
    @Override
    public int insertHwWeb(HwWeb1 hwWeb1)
    {
        return hwWebMapper1.insertHwWeb(hwWeb1);
    }

    /**
     * 修改haiwei官网json
     * 
     * @param HwWeb1 haiwei官网json
     * @return 结果
     */
    @Override
    @Transactional( rollbackFor = Exception.class )
    public int updateHwWeb(HwWeb1 hwWeb1)
    {
        HwWeb1 codeWeb = new HwWeb1();
        // 编号、typeid、deviceID保证唯一
        codeWeb.setWebCode(hwWeb1.getWebCode());
        codeWeb.setTypeId(hwWeb1.getTypeId());
        codeWeb.setDeviceId(hwWeb1.getDeviceId());
        List<HwWeb1> exists = hwWebMapper1.selectHwWebList(codeWeb);
        if (!exists.isEmpty()) {
            Long[] webIds = exists.stream().map(HwWeb1::getWebId).toArray(Long[]::new);
            //逻辑删除旧纪录
            hwWebMapper1.deleteHwWebByWebIds(webIds);
        }
        // 插入新记录，避免复用旧主键
        // hwWeb1.setWebId(null);
        hwWeb1.setIsDelete("0");
        return hwWebMapper1.insertHwWeb(hwWeb1);
    }

    /**
     * 批量删除haiwei官网json
     * 
     * @param webIds 需要删除的haiwei官网json主键
     * @return 结果
     */
    @Override
    public int deleteHwWebByWebIds(Long[] webIds)
    {
        return hwWebMapper1.deleteHwWebByWebIds(webIds);
    }

    /**
     * 删除haiwei官网json信息
     * 
     * @param webId haiwei官网json主键
     * @return 结果
     */
    @Override
    public int deleteHwWebByWebId(Long webId)
    {
        return hwWebMapper1.deleteHwWebByWebId(webId);
    }
}
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwAboutUsInfoDetailMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwAboutUsInfoDetailMapper">
    
    <resultMap type="HwAboutUsInfoDetail" id="HwAboutUsInfoDetailResult">
        <result property="usInfoDetailId"    column="us_info_detail_id"    />
        <result property="aboutUsInfoId"    column="about_us_info_id"    />
        <result property="usInfoDetailTitle"    column="us_info_detail_title"    />
        <result property="usInfoDetailDesc"    column="us_info_detail_desc"    />
        <result property="usInfoDetailOrder"    column="us_info_detail_order"    />
        <result property="usInfoDetailPic"    column="us_info_detail_pic"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
    </resultMap>

    <sql id="selectHwAboutUsInfoDetailVo">
        select us_info_detail_id, about_us_info_id, us_info_detail_title, us_info_detail_desc, us_info_detail_order, us_info_detail_pic, create_time, create_by, update_time, update_by from hw_about_us_info_detail
    </sql>

    <select id="selectHwAboutUsInfoDetailList" parameterType="HwAboutUsInfoDetail" resultMap="HwAboutUsInfoDetailResult">
        <include refid="selectHwAboutUsInfoDetailVo"/>
        <where>  
            <if test="aboutUsInfoId != null "> and about_us_info_id = #{aboutUsInfoId}</if>
            <if test="usInfoDetailTitle != null  and usInfoDetailTitle != ''"> and us_info_detail_title like concat('%', #{usInfoDetailTitle}, '%')</if>
            <if test="usInfoDetailDesc != null  and usInfoDetailDesc != ''"> and us_info_detail_desc like concat('%', #{usInfoDetailDesc}, '%')</if>
            <if test="usInfoDetailOrder != null "> and us_info_detail_order = #{usInfoDetailOrder}</if>
            <if test="usInfoDetailPic != null  and usInfoDetailPic != ''"> and us_info_detail_pic = #{usInfoDetailPic}</if>
        </where>
    </select>
    
    <select id="selectHwAboutUsInfoDetailByUsInfoDetailId" parameterType="Long" resultMap="HwAboutUsInfoDetailResult">
        <include refid="selectHwAboutUsInfoDetailVo"/>
        where us_info_detail_id = #{usInfoDetailId}
    </select>
        
    <insert id="insertHwAboutUsInfoDetail" parameterType="HwAboutUsInfoDetail" useGeneratedKeys="true" keyProperty="usInfoDetailId">
        insert into hw_about_us_info_detail
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="aboutUsInfoId != null">about_us_info_id,</if>
            <if test="usInfoDetailTitle != null">us_info_detail_title,</if>
            <if test="usInfoDetailDesc != null">us_info_detail_desc,</if>
            <if test="usInfoDetailOrder != null">us_info_detail_order,</if>
            <if test="usInfoDetailPic != null">us_info_detail_pic,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="aboutUsInfoId != null">#{aboutUsInfoId},</if>
            <if test="usInfoDetailTitle != null">#{usInfoDetailTitle},</if>
            <if test="usInfoDetailDesc != null">#{usInfoDetailDesc},</if>
            <if test="usInfoDetailOrder != null">#{usInfoDetailOrder},</if>
            <if test="usInfoDetailPic != null">#{usInfoDetailPic},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
         </trim>
    </insert>

    <update id="updateHwAboutUsInfoDetail" parameterType="HwAboutUsInfoDetail">
        update hw_about_us_info_detail
        <trim prefix="SET" suffixOverrides=",">
            <if test="aboutUsInfoId != null">about_us_info_id = #{aboutUsInfoId},</if>
            <if test="usInfoDetailTitle != null">us_info_detail_title = #{usInfoDetailTitle},</if>
            <if test="usInfoDetailDesc != null">us_info_detail_desc = #{usInfoDetailDesc},</if>
            <if test="usInfoDetailOrder != null">us_info_detail_order = #{usInfoDetailOrder},</if>
            <if test="usInfoDetailPic != null">us_info_detail_pic = #{usInfoDetailPic},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
        </trim>
        where us_info_detail_id = #{usInfoDetailId}
    </update>

    <delete id="deleteHwAboutUsInfoDetailByUsInfoDetailId" parameterType="Long">
        delete from hw_about_us_info_detail where us_info_detail_id = #{usInfoDetailId}
    </delete>

    <delete id="deleteHwAboutUsInfoDetailByUsInfoDetailIds" parameterType="String">
        delete from hw_about_us_info_detail where us_info_detail_id in 
        <foreach item="usInfoDetailId" collection="array" open="(" separator="," close=")">
            #{usInfoDetailId}
        </foreach>
    </delete>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwAboutUsInfoMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwAboutUsInfoMapper">
    
    <resultMap type="HwAboutUsInfo" id="HwAboutUsInfoResult">
        <result property="aboutUsInfoId"    column="about_us_info_id"    />
        <result property="aboutUsInfoType"    column="about_us_info_type"    />
        <result property="aboutUsInfoEtitle"    column="about_us_info_etitle"    />
        <result property="aboutUsInfoTitle"    column="about_us_info_title"    />
        <result property="aboutUsInfoDesc"    column="about_us_info_desc"    />
        <result property="aboutUsInfoOrder"    column="about_us_info_order"    />
        <result property="displayModal"    column="display_modal"    />
        <result property="aboutUsInfoPic"    column="about_us_info_pic"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
    </resultMap>

    <sql id="selectHwAboutUsInfoVo">
        select about_us_info_id, about_us_info_type, about_us_info_title, about_us_info_etitle,about_us_info_desc, about_us_info_order,display_modal, about_us_info_pic, create_time, create_by, update_time, update_by from hw_about_us_info
    </sql>

    <select id="selectHwAboutUsInfoList" parameterType="HwAboutUsInfo" resultMap="HwAboutUsInfoResult">
        <include refid="selectHwAboutUsInfoVo"/>
        <where>  
            <if test="aboutUsInfoType != null  and aboutUsInfoType != ''"> and about_us_info_type = #{aboutUsInfoType}</if>
            <if test="aboutUsInfoTitle != null  and aboutUsInfoTitle != ''"> and about_us_info_title like concat('%', #{aboutUsInfoTitle }, '%') </if>
            <if test="aboutUsInfoDesc != null  and aboutUsInfoDesc != ''"> and about_us_info_desc like concat('%', #{aboutUsInfoDesc}, '%')</if>
            <if test="aboutUsInfoOrder != null "> and about_us_info_order = #{aboutUsInfoOrder}</if>
            <if test="aboutUsInfoPic != null  and aboutUsInfoPic != ''"> and about_us_info_pic = #{aboutUsInfoPic}</if>
        </where>
    </select>
    
    <select id="selectHwAboutUsInfoByAboutUsInfoId" parameterType="Long" resultMap="HwAboutUsInfoResult">
        <include refid="selectHwAboutUsInfoVo"/>
        where about_us_info_id = #{aboutUsInfoId}
    </select>
        
    <insert id="insertHwAboutUsInfo" parameterType="HwAboutUsInfo" useGeneratedKeys="true" keyProperty="aboutUsInfoId">
        insert into hw_about_us_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="aboutUsInfoType != null">about_us_info_type,</if>
            <if test="aboutUsInfoEtitle != null and aboutUsInfoEtitle != ''">about_us_info_etitle,</if>
            <if test="aboutUsInfoTitle != null and aboutUsInfoTitle != ''">about_us_info_title,</if>
            <if test="aboutUsInfoDesc != null and aboutUsInfoDesc != ''">about_us_info_desc,</if>
            <if test="aboutUsInfoOrder != null">about_us_info_order,</if>
            <if test="displayModal != null and displayModal != ''">display_modal,</if>
            <if test="aboutUsInfoPic != null">about_us_info_pic,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="aboutUsInfoType != null">#{aboutUsInfoType},</if>
            <if test="aboutUsInfoEtitle != null and aboutUsInfoEtitle != ''">#{aboutUsInfoEtitle},</if>
            <if test="aboutUsInfoTitle != null and aboutUsInfoTitle != ''">#{aboutUsInfoTitle},</if>
            <if test="aboutUsInfoDesc != null and aboutUsInfoDesc != ''">#{aboutUsInfoDesc},</if>
            <if test="aboutUsInfoOrder != null">#{aboutUsInfoOrder},</if>
            <if test="displayModal != null and displayModal != ''">#{displayModal},</if>
            <if test="aboutUsInfoPic != null">#{aboutUsInfoPic},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
         </trim>
    </insert>

    <update id="updateHwAboutUsInfo" parameterType="HwAboutUsInfo">
        update hw_about_us_info
        <trim prefix="SET" suffixOverrides=",">
            <if test="aboutUsInfoType != null">about_us_info_type = #{aboutUsInfoType},</if>
            <if test="aboutUsInfoEtitle != null and aboutUsInfoEtitle != ''">about_us_info_etitle = #{aboutUsInfoEtitle},</if>
            <if test="aboutUsInfoTitle != null and aboutUsInfoTitle != ''">about_us_info_title = #{aboutUsInfoTitle},</if>
            <if test="aboutUsInfoDesc != null and aboutUsInfoDesc != ''">about_us_info_desc = #{aboutUsInfoDesc},</if>
            <if test="aboutUsInfoOrder != null">about_us_info_order = #{aboutUsInfoOrder},</if>
            <if test="displayModal != null and displayModal != ''">display_modal = #{displayModal},</if>
            <if test="aboutUsInfoPic != null">about_us_info_pic = #{aboutUsInfoPic},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
        </trim>
        where about_us_info_id = #{aboutUsInfoId}
    </update>

    <delete id="deleteHwAboutUsInfoByAboutUsInfoId" parameterType="Long">
        delete from hw_about_us_info where about_us_info_id = #{aboutUsInfoId}
    </delete>

    <delete id="deleteHwAboutUsInfoByAboutUsInfoIds" parameterType="String">
        delete from hw_about_us_info where about_us_info_id in 
        <foreach item="aboutUsInfoId" collection="array" open="(" separator="," close=")">
            #{aboutUsInfoId}
        </foreach>
    </delete>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwContactUsInfoMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwContactUsInfoMapper">
    
    <resultMap type="HwContactUsInfo" id="HwContactUsInfoResult">
        <result property="contactUsInfoId"    column="contact_us_info_id"    />
        <result property="userName"    column="user_name"    />
        <result property="userEmail"    column="user_email"    />
        <result property="userPhone"    column="user_phone"    />
        <result property="userIp"    column="user_ip"    />
        <result property="remark"    column="remark"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
    </resultMap>

    <sql id="selectHwContactUsInfoVo">
        select contact_us_info_id, user_name, user_email, user_phone, user_ip, remark,create_time, create_by, update_time, update_by from hw_contact_us_info
    </sql>

    <select id="selectHwContactUsInfoList" parameterType="HwContactUsInfo" resultMap="HwContactUsInfoResult">
        <include refid="selectHwContactUsInfoVo"/>
        <where>  
            <if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
            <if test="userEmail != null  and userEmail != ''"> and user_email like concat('%', #{userEmail}, '%')</if>
            <if test="userPhone != null  and userPhone != ''"> and user_phone like concat('%', #{userPhone}, '%')</if>
            <if test="userIp != null  and userIp != ''"> and user_ip like concat('%', #{userIp}, '%')</if>
        </where>
    </select>
    
    <select id="selectHwContactUsInfoByContactUsInfoId" parameterType="Long" resultMap="HwContactUsInfoResult">
        <include refid="selectHwContactUsInfoVo"/>
        where contact_us_info_id = #{contactUsInfoId}
    </select>
        
    <insert id="insertHwContactUsInfo" parameterType="HwContactUsInfo" useGeneratedKeys="true" keyProperty="contactUsInfoId">
        insert into hw_contact_us_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="userName != null and userName != ''">user_name,</if>
            <if test="userEmail != null">user_email,</if>
            <if test="userPhone != null">user_phone,</if>
            <if test="userIp != null">user_ip,</if>
            <if test="remark != null">remark,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="userName != null and userName != ''">#{userName},</if>
            <if test="userEmail != null">#{userEmail},</if>
            <if test="userPhone != null">#{userPhone},</if>
            <if test="userIp != null">#{userIp},</if>
            <if test="remark != null">#{remark},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
         </trim>
    </insert>

    <update id="updateHwContactUsInfo" parameterType="HwContactUsInfo">
        update hw_contact_us_info
        <trim prefix="SET" suffixOverrides=",">
            <if test="userName != null and userName != ''">user_name = #{userName},</if>
            <if test="userEmail != null">user_email = #{userEmail},</if>
            <if test="userPhone != null">user_phone = #{userPhone},</if>
            <if test="userIp != null">user_ip = #{userIp},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
        </trim>
        where contact_us_info_id = #{contactUsInfoId}
    </update>

    <delete id="deleteHwContactUsInfoByContactUsInfoId" parameterType="Long">
        delete from hw_contact_us_info where contact_us_info_id = #{contactUsInfoId}
    </delete>

    <delete id="deleteHwContactUsInfoByContactUsInfoIds" parameterType="String">
        delete from hw_contact_us_info where contact_us_info_id in 
        <foreach item="contactUsInfoId" collection="array" open="(" separator="," close=")">
            #{contactUsInfoId}
        </foreach>
    </delete>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwPortalConfigMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwPortalConfigMapper">
    
    <resultMap type="HwPortalConfig" id="HwPortalConfigResult">
        <result property="portalConfigId"    column="portal_config_id"    />
        <result property="portalConfigType"    column="portal_config_type"    />
        <result property="portalConfigTypeId"    column="portal_config_type_id"    />
        <result property="portalConfigTitle"    column="portal_config_title"    />
        <result property="portalConfigOrder"    column="portal_config_order"    />
        <result property="portalConfigDesc"    column="portal_config_desc"    />
        <result property="buttonName"    column="button_name"    />
        <result property="routerAddress"    column="router_address"    />
        <result property="portalConfigPic"    column="portal_config_pic"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="configTypeName"    column="config_type_name"    />
    </resultMap>

    <resultMap type="HwPortalConfig" id="HwPortalConfigResult2">
        <result property="portalConfigId"    column="portal_config_id"    />
        <result property="portalConfigType"    column="portal_config_type"    />
        <result property="portalConfigTypeId"    column="portal_config_type_id"    />
        <result property="portalConfigTitle"    column="portal_config_title"    />
        <result property="portalConfigOrder"    column="portal_config_order"    />
        <result property="portalConfigDesc"    column="portal_config_desc"    />
        <result property="buttonName"    column="button_name"    />
        <result property="routerAddress"    column="router_address"    />
        <result property="portalConfigPic"    column="portal_config_pic"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="configTypeName"    column="config_type_name"    />

        <result property="homeConfigTypePic"    column="home_config_type_pic"    />
        <result property="homeConfigTypeIcon"    column="home_config_type_icon"    />
        <result property="homeConfigTypeName"    column="home_config_type_name"    />
        <result property="homeConfigTypeClassfication"    column="config_type_classfication"    />
        <result property="parentId"    column="parent_id"    />
        <result property="ancestors"    column="ancestors"    />
    </resultMap>

    <sql id="selectHwPortalConfigVo">
        select portal_config_id, portal_config_type,portal_config_type_id,  portal_config_title, portal_config_order,
               portal_config_desc, button_name, router_address, portal_config_pic, create_time, create_by, update_time,
               update_by
        from hw_portal_config
    </sql>

    <sql id="selectHwPortalConfigVo2">
        select hpc.portal_config_id, hpc.portal_config_type,hpc.portal_config_type_id,  hpc.portal_config_title, hpc.portal_config_order,
               hpc.portal_config_desc, hpc.button_name, hpc.router_address, hpc.portal_config_pic, hpc.create_time, hpc.create_by, hpc.update_time,
               hpc.update_by,
               hpct.config_type_name,
               hpct.home_config_type_pic,
               hpct.config_type_icon,
               hpct.home_config_type_name,
               hpct.config_type_classfication,
               hpct.parent_id,
               hpct.ancestors
        from hw_portal_config hpc
                 left join hw_portal_config_type hpct on hpc.portal_config_type_id = hpct.config_type_id
    </sql>

    <select id="selectHwPortalConfigList" parameterType="HwPortalConfig" resultMap="HwPortalConfigResult">
        <include refid="selectHwPortalConfigVo"/>
        <where>  
            <if test="portalConfigType != null  and portalConfigType != ''"> and portal_config_type = #{portalConfigType}</if>
            <if test="portalConfigTypeId != null "> and portal_config_type_id = #{portalConfigTypeId}</if>
            <if test="portalConfigTitle != null  and portalConfigTitle != ''"> and portal_config_title like concat('%', #{portalConfigTitle}, '%')</if>
            <if test="portalConfigOrder != null "> and portal_config_order = #{portalConfigOrder}</if>
            <if test="portalConfigDesc != null  and portalConfigDesc != ''"> and portal_config_desc = #{portalConfigDesc}</if>
            <if test="buttonName != null  and buttonName != ''"> and button_name like concat('%', #{buttonName}, '%')</if>
            <if test="routerAddress != null  and routerAddress != ''"> and router_address = #{routerAddress}</if>
            <if test="portalConfigPic != null  and portalConfigPic != ''"> and portal_config_pic = #{portalConfigPic}</if>
        </where>
    </select>

    <select id="selectHwPortalConfigList2" parameterType="HwPortalConfig" resultMap="HwPortalConfigResult2">
        <include refid="selectHwPortalConfigVo2"/>
        <where>
            <if test="portalConfigType != null  and portalConfigType != ''"> and portal_config_type = #{portalConfigType}</if>
            <if test="portalConfigTypeId != null "> and portal_config_type_id = #{portalConfigTypeId}</if>
            <if test="portalConfigTitle != null  and portalConfigTitle != ''"> and portal_config_title like concat('%', #{portalConfigTitle}, '%')</if>
            <if test="portalConfigOrder != null "> and portal_config_order = #{portalConfigOrder}</if>
            <if test="portalConfigDesc != null  and portalConfigDesc != ''"> and portal_config_desc = #{portalConfigDesc}</if>
            <if test="buttonName != null  and buttonName != ''"> and button_name like concat('%', #{buttonName}, '%')</if>
            <if test="routerAddress != null  and routerAddress != ''"> and router_address = #{routerAddress}</if>
            <if test="portalConfigPic != null  and portalConfigPic != ''"> and portal_config_pic = #{portalConfigPic}</if>
        </where>
    </select>
    
    <select id="selectHwPortalConfigByPortalConfigId" parameterType="Long" resultMap="HwPortalConfigResult">
        <include refid="selectHwPortalConfigVo"/>
        where portal_config_id = #{portalConfigId}
    </select>
        
    <insert id="insertHwPortalConfig" parameterType="HwPortalConfig" useGeneratedKeys="true" keyProperty="portalConfigId">
        insert into hw_portal_config
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="portalConfigType != null and portalConfigType != ''">portal_config_type,</if>
            <if test="portalConfigTypeId != null">portal_config_type_id,</if>
            <if test="portalConfigTitle != null and portalConfigTitle != ''">portal_config_title,</if>
            <if test="portalConfigOrder != null">portal_config_order,</if>
            <if test="portalConfigDesc != null">portal_config_desc,</if>
            <if test="buttonName != null">button_name,</if>
            <if test="routerAddress != null">router_address,</if>
            <if test="portalConfigPic != null and portalConfigPic != ''">portal_config_pic,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="portalConfigType != null and portalConfigType != ''">#{portalConfigType},</if>
            <if test="portalConfigTypeId != null">#{portalConfigTypeId},</if>
            <if test="portalConfigTitle != null and portalConfigTitle != ''">#{portalConfigTitle},</if>
            <if test="portalConfigOrder != null">#{portalConfigOrder},</if>
            <if test="portalConfigDesc != null">#{portalConfigDesc},</if>
            <if test="buttonName != null">#{buttonName},</if>
            <if test="routerAddress != null">#{routerAddress},</if>
            <if test="portalConfigPic != null and portalConfigPic != ''">#{portalConfigPic},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
         </trim>
    </insert>

    <update id="updateHwPortalConfig" parameterType="HwPortalConfig">
        update hw_portal_config
        <trim prefix="SET" suffixOverrides=",">
            <if test="portalConfigType != null and portalConfigType != ''">portal_config_type = #{portalConfigType},</if>
            <if test="portalConfigTypeId != null">portal_config_type_id = #{portalConfigTypeId},</if>
            <if test="portalConfigTitle != null and portalConfigTitle != ''">portal_config_title = #{portalConfigTitle},</if>
            <if test="portalConfigOrder != null">portal_config_order = #{portalConfigOrder},</if>
            <if test="portalConfigDesc != null">portal_config_desc = #{portalConfigDesc},</if>
            <if test="buttonName != null">button_name = #{buttonName},</if>
            <if test="routerAddress != null">router_address = #{routerAddress},</if>
            <if test="portalConfigPic != null and portalConfigPic != ''">portal_config_pic = #{portalConfigPic},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
        </trim>
        where portal_config_id = #{portalConfigId}
    </update>

    <delete id="deleteHwPortalConfigByPortalConfigId" parameterType="Long">
        delete from hw_portal_config where portal_config_id = #{portalConfigId}
    </delete>

    <delete id="deleteHwPortalConfigByPortalConfigIds" parameterType="String">
        delete from hw_portal_config where portal_config_id in 
        <foreach item="portalConfigId" collection="array" open="(" separator="," close=")">
            #{portalConfigId}
        </foreach>
    </delete>



    <sql id="selectHwPortalConfigJoinVo">
        select hpc.portal_config_id, hpc.portal_config_type,hpc.portal_config_type_id,
               hpc.portal_config_title, hpc.portal_config_order, hpc.portal_config_desc,
               hpc.button_name, hpc.router_address, hpc.portal_config_pic,
               hpc.create_time, hpc.create_by, hpc.update_time, hpc.update_by,hpct.config_type_name from hw_portal_config hpc
                   left join hw_portal_config_type hpct on hpc.portal_config_type_id =  hpct.config_type_id
    </sql>

    <select id="selectHwPortalConfigJoinList" parameterType="HwPortalConfig" resultMap="HwPortalConfigResult">
        <include refid="selectHwPortalConfigJoinVo"/>
        <where>
            <if test="portalConfigType != null  and portalConfigType != ''"> and hpc.portal_config_type = #{portalConfigType}</if>
            <if test="portalConfigTypeId != null "> and hpc.portal_config_type_id = #{portalConfigTypeId}</if>
            <if test="portalConfigTitle != null  and portalConfigTitle != ''"> and hpc.portal_config_title like concat('%', #{portalConfigTitle}, '%')</if>
            <if test="portalConfigOrder != null "> and hpc.portal_config_order = #{portalConfigOrder}</if>
            <if test="portalConfigDesc != null  and portalConfigDesc != ''"> and hpc.portal_config_desc = #{portalConfigDesc}</if>
            <if test="buttonName != null  and buttonName != ''"> and hpc.button_name like concat('%', #{buttonName}, '%')</if>
            <if test="routerAddress != null  and routerAddress != ''"> and hpc.router_address = #{routerAddress}</if>
            <if test="portalConfigPic != null  and portalConfigPic != ''"> and hpc.portal_config_pic = #{portalConfigPic}</if>
        </where>
    </select>

</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwPortalConfigTypeMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwPortalConfigTypeMapper">
    
    <resultMap type="HwPortalConfigType" id="HwPortalConfigTypeResult">
        <result property="configTypeId"    column="config_type_id"    />
        <result property="configTypeClassfication"    column="config_type_classfication"    />
        <result property="configTypeName"    column="config_type_name"    />
        <result property="homeConfigTypeName"    column="home_config_type_name"    />
        <result property="configTypeDesc"    column="config_type_desc"    />
        <result property="configTypeIcon"    column="config_type_icon"    />
        <result property="homeConfigTypePic"    column="home_config_type_pic"    />
        <result property="parentId"    column="parent_id"    />
        <result property="ancestors"    column="ancestors"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
    </resultMap>

    <sql id="selectHwPortalConfigTypeVo">
        select config_type_id, config_type_classfication, config_type_name, home_config_type_name, config_type_desc, config_type_icon, home_config_type_pic, parent_id, ancestors, create_time, create_by, update_time, update_by
        from hw_portal_config_type
    </sql>

    <select id="selectHwPortalConfigTypeList" parameterType="HwPortalConfigType" resultMap="HwPortalConfigTypeResult">
        <include refid="selectHwPortalConfigTypeVo"/>
        <where>  
            <if test="configTypeClassfication != null  and configTypeClassfication != ''"> and config_type_classfication = #{configTypeClassfication}</if>
            <if test="configTypeName != null  and configTypeName != ''"> and config_type_name like concat('%', #{configTypeName}, '%')</if>
            <if test="homeConfigTypeName != null  and homeConfigTypeName != ''"> and home_config_type_name like concat('%', #{homeConfigTypeName}, '%')</if>
            <if test="configTypeDesc != null  and configTypeDesc != ''"> and config_type_desc = #{configTypeDesc}</if>
            <if test="configTypeIcon != null  and configTypeIcon != ''"> and config_type_icon = #{configTypeIcon}</if>
            <if test="homeConfigTypePic != null  and homeConfigTypePic != ''"> and home_config_type_pic = #{homeConfigTypePic}</if>
            <if test="parentId != null "> and parent_id = #{parentId}</if>
            <if test="ancestors != null  and ancestors != ''"> and ancestors = #{ancestors}</if>
        </where>
    </select>
    
    <select id="selectHwPortalConfigTypeByConfigTypeId" parameterType="Long" resultMap="HwPortalConfigTypeResult">
        <include refid="selectHwPortalConfigTypeVo"/>
        where config_type_id = #{configTypeId}
    </select>
        
    <insert id="insertHwPortalConfigType" parameterType="HwPortalConfigType" useGeneratedKeys="true" keyProperty="configTypeId">
        insert into hw_portal_config_type
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="configTypeClassfication != null and configTypeClassfication != ''">config_type_classfication,</if>
            <if test="configTypeName != null and configTypeName != ''">config_type_name,</if>
            <if test="homeConfigTypeName != null">home_config_type_name,</if>
            <if test="configTypeDesc != null">config_type_desc,</if>
            <if test="configTypeIcon != null">config_type_icon,</if>
            <if test="homeConfigTypePic != null">home_config_type_pic,</if>
            <if test="parentId != null">parent_id,</if>
            <if test="ancestors != null">ancestors,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="configTypeClassfication != null and configTypeClassfication != ''">#{configTypeClassfication},</if>
            <if test="configTypeName != null and configTypeName != ''">#{configTypeName},</if>
            <if test="homeConfigTypeName != null">#{homeConfigTypeName},</if>
            <if test="configTypeDesc != null">#{configTypeDesc},</if>
            <if test="configTypeIcon != null">#{configTypeIcon},</if>
            <if test="homeConfigTypePic != null">#{homeConfigTypePic},</if>
            <if test="parentId != null">#{parentId},</if>
            <if test="ancestors != null">#{ancestors},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
         </trim>
    </insert>

    <update id="updateHwPortalConfigType" parameterType="HwPortalConfigType">
        update hw_portal_config_type
        <trim prefix="SET" suffixOverrides=",">
            <if test="configTypeClassfication != null and configTypeClassfication != ''">config_type_classfication = #{configTypeClassfication},</if>
            <if test="configTypeName != null and configTypeName != ''">config_type_name = #{configTypeName},</if>
            <if test="homeConfigTypeName != null">home_config_type_name = #{homeConfigTypeName},</if>
            <if test="configTypeDesc != null">config_type_desc = #{configTypeDesc},</if>
            <if test="configTypeIcon != null">config_type_icon = #{configTypeIcon},</if>
            <if test="homeConfigTypePic != null">home_config_type_pic = #{homeConfigTypePic},</if>
            <if test="parentId != null">parent_id = #{parentId},</if>
            <if test="ancestors != null">ancestors = #{ancestors},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
        </trim>
        where config_type_id = #{configTypeId}
    </update>

    <delete id="deleteHwPortalConfigTypeByConfigTypeId" parameterType="Long">
        delete from hw_portal_config_type where config_type_id = #{configTypeId}
    </delete>

    <delete id="deleteHwPortalConfigTypeByConfigTypeIds" parameterType="String">
        delete from hw_portal_config_type where config_type_id in 
        <foreach item="configTypeId" collection="array" open="(" separator="," close=")">
            #{configTypeId}
        </foreach>
    </delete>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwProductCaseInfoMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwProductCaseInfoMapper">
    
    <resultMap type="HwProductCaseInfo" id="HwProductCaseInfoResult">
        <result property="caseInfoId"    column="case_info_id"    />
        <result property="caseInfoTitle"    column="case_info_title"    />
        <result property="configTypeId"    column="config_type_id"    />
        <result property="typicalFlag"    column="typical_flag"    />
        <result property="caseInfoDesc"    column="case_info_desc"    />
        <result property="caseInfoPic"    column="case_info_pic"    />
        <result property="caseInfoHtml"    column="case_info_html"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
    </resultMap>

    <sql id="selectHwProductCaseInfoWithHtmlVo">
        select case_info_id, case_info_title, config_type_id, typical_flag, case_info_desc, case_info_pic, case_info_html, create_time, create_by, update_time, update_by from hw_product_case_info hpci
    </sql>

    <sql id="selectHwProductCaseInfoVo">
        select case_info_id, case_info_title, config_type_id, typical_flag, case_info_desc, case_info_pic, create_time, create_by, update_time, update_by from hw_product_case_info hpci
    </sql>


    <select id="selectHwProductCaseInfoList" parameterType="HwProductCaseInfo" resultMap="HwProductCaseInfoResult">
        <include refid="selectHwProductCaseInfoVo"/>
        <where>  
            <if test="caseInfoTitle != null  and caseInfoTitle != ''"> and case_info_title = #{caseInfoTitle}</if>

            <if test="typicalFlag != null  and typicalFlag != ''"> and typical_flag = #{typicalFlag}</if>
            <if test="caseInfoDesc != null  and caseInfoDesc != ''"> and case_info_desc = #{caseInfoDesc}</if>
            <if test="caseInfoPic != null  and caseInfoPic != ''"> and case_info_pic = #{caseInfoPic}</if>
            <if test="caseInfoHtml != null  and caseInfoHtml != ''"> and case_info_html = #{caseInfoHtml}</if>
            <if test="homeTypicalFlag != null  and homeTypicalFlag != '' and configTypeId!=null"> and exists (select 1 from hw_portal_config_type hpct where hpct.parent_id=#{configTypeId} and hpct.config_type_id =hpci.config_type_id)</if>
            <if test='(homeTypicalFlag == null  or homeTypicalFlag == "") and configTypeId != null '> and config_type_id = #{configTypeId}</if>

        </where>
    </select>
    
    <select id="selectHwProductCaseInfoByCaseInfoId" parameterType="Long" resultMap="HwProductCaseInfoResult">
        <include refid="selectHwProductCaseInfoWithHtmlVo"/>
        where case_info_id = #{caseInfoId}
    </select>
        
    <insert id="insertHwProductCaseInfo" parameterType="HwProductCaseInfo" useGeneratedKeys="true" keyProperty="caseInfoId">
        insert into hw_product_case_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="caseInfoTitle != null and caseInfoTitle != ''">case_info_title,</if>
            <if test="configTypeId != null">config_type_id,</if>
            <if test="typicalFlag != null and typicalFlag != ''">typical_flag,</if>
            <if test="caseInfoDesc != null and caseInfoDesc != ''">case_info_desc,</if>
            <if test="caseInfoPic != null and caseInfoPic != ''">case_info_pic,</if>
            <if test="caseInfoHtml != null and caseInfoHtml != ''">case_info_html,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="caseInfoTitle != null and caseInfoTitle != ''">#{caseInfoTitle},</if>
            <if test="configTypeId != null">#{configTypeId},</if>
            <if test="typicalFlag != null and typicalFlag != ''">#{typicalFlag},</if>
            <if test="caseInfoDesc != null and caseInfoDesc != ''">#{caseInfoDesc},</if>
            <if test="caseInfoPic != null and caseInfoPic != ''">#{caseInfoPic},</if>
            <if test="caseInfoHtml != null and caseInfoHtml != ''">#{caseInfoHtml},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
         </trim>
    </insert>

    <update id="updateHwProductCaseInfo" parameterType="HwProductCaseInfo">
        update hw_product_case_info
        <trim prefix="SET" suffixOverrides=",">
            <if test="caseInfoTitle != null and caseInfoTitle != ''">case_info_title = #{caseInfoTitle},</if>
            <if test="configTypeId != null">config_type_id = #{configTypeId},</if>
            <if test="typicalFlag != null and typicalFlag != ''">typical_flag = #{typicalFlag},</if>
            <if test="caseInfoDesc != null and caseInfoDesc != ''">case_info_desc = #{caseInfoDesc},</if>
            <if test="caseInfoPic != null and caseInfoPic != ''">case_info_pic = #{caseInfoPic},</if>
            <if test="caseInfoHtml != null and caseInfoHtml != ''">case_info_html = #{caseInfoHtml},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
        </trim>
        where case_info_id = #{caseInfoId}
    </update>

    <delete id="deleteHwProductCaseInfoByCaseInfoId" parameterType="Long">
        delete from hw_product_case_info where case_info_id = #{caseInfoId}
    </delete>

    <delete id="deleteHwProductCaseInfoByCaseInfoIds" parameterType="String">
        delete from hw_product_case_info where case_info_id in 
        <foreach item="caseInfoId" collection="array" open="(" separator="," close=")">
            #{caseInfoId}
        </foreach>
    </delete>



    <sql id="selectHwProductCaseInfoJoinVo">
        select hpci.case_info_id, hpci.case_info_title, hpci.config_type_id, hpci.typical_flag, hpci.case_info_desc, hpci.case_info_pic, hpci.create_time,
               hpci.create_by, hpci.update_time, hpci.update_by,hpct.config_type_name from hw_product_case_info hpci left join hw_portal_config_type hpct on hpci.config_type_id=hpct.config_type_id
    </sql>


    <select id="selectHwProductCaseInfoJoinList" parameterType="HwProductCaseInfo" resultMap="HwProductCaseInfoResult">
        <include refid="selectHwProductCaseInfoJoinVo"/>
        <where>
            <if test="caseInfoTitle != null  and caseInfoTitle != ''"> and hpci.case_info_title like concat('%', #{caseInfoTitle}, '%')</if>
            <if test="configTypeId != null  and configTypeId != ''"> and hpci.config_type_id = #{configTypeId}</if>
            <if test="typicalFlag != null  and typicalFlag != ''"> and hpci.typical_flag = #{typicalFlag}</if>
            <if test="caseInfoDesc != null  and caseInfoDesc != ''"> and case_info_desc = #{caseInfoDesc}</if>
            <if test="caseInfoPic != null  and caseInfoPic != ''"> and case_info_pic = #{caseInfoPic}</if>
            <if test="caseInfoHtml != null  and caseInfoHtml != ''"> and case_info_html = #{caseInfoHtml}</if>
            <if test="homeTypicalFlag != null  and homeTypicalFlag != '' and configTypeId!=null"> and exists (select 1 from hw_portal_config_type hpct where hpct.parent_id=#{configTypeId} and hpct.config_type_id =hpci.config_type_id)</if>
            <if test='(homeTypicalFlag == null  or homeTypicalFlag == "") and configTypeId != null '> and config_type_id = #{configTypeId}</if>

        </where>
    </select>

</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwProductInfoDetailMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwProductInfoDetailMapper">
    
    <resultMap type="HwProductInfoDetail" id="HwProductInfoDetailResult">
        <result property="productInfoDetailId"    column="product_info_detail_id"    />
        <result property="parentId"    column="parent_id"    />
        <result property="productInfoId"    column="product_info_id"    />
        <result property="configModal"    column="config_modal"    />
        <result property="productInfoDetailTitle"    column="product_info_detail_title"    />
        <result property="productInfoDetailDesc"    column="product_info_detail_desc"    />
        <result property="productInfoDetailOrder"    column="product_info_detail_order"    />
        <result property="productInfoDetailPic"    column="product_info_detail_pic"    />
        <result property="ancestors"    column="ancestors"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />
    </resultMap>

    <sql id="selectHwProductInfoDetailVo">
        select product_info_detail_id, parent_id, product_info_id, config_modal, product_info_detail_title, product_info_detail_desc, product_info_detail_order, product_info_detail_pic, ancestors, create_time, create_by, update_time, update_by
        from hw_product_info_detail
    </sql>

    <select id="selectHwProductInfoDetailList" parameterType="HwProductInfoDetail" resultMap="HwProductInfoDetailResult">
        <include refid="selectHwProductInfoDetailVo"/>
        <where>  
            <if test="parentId != null  and parentId != ''"> and parent_id = #{parentId}</if>
            <if test="productInfoId != null "> and product_info_id = #{productInfoId}</if>
            <if test="configModal != null  and configModal != ''"> and config_modal = #{configModal}</if>
            <if test="productInfoDetailTitle != null  and productInfoDetailTitle != ''"> and product_info_detail_title like concat('%', #{productInfoDetailTitle}, '%')</if>
            <if test="productInfoDetailDesc != null  and productInfoDetailDesc != ''"> and product_info_detail_desc like concat('%', #{productInfoDetailDesc}, '%')</if>
            <if test="productInfoDetailOrder != null "> and product_info_detail_order = #{productInfoDetailOrder}</if>
            <if test="productInfoDetailPic != null  and productInfoDetailPic != ''"> and product_info_detail_pic = #{productInfoDetailPic}</if>
            <if test="ancestors != null  and ancestors != ''"> and ancestors = #{ancestors}</if>
        </where>
    </select>
    
    <select id="selectHwProductInfoDetailByProductInfoDetailId" parameterType="Long" resultMap="HwProductInfoDetailResult">
        <include refid="selectHwProductInfoDetailVo"/>
        where product_info_detail_id = #{productInfoDetailId}
    </select>
        
    <insert id="insertHwProductInfoDetail" parameterType="HwProductInfoDetail" useGeneratedKeys="true" keyProperty="productInfoDetailId">
        insert into hw_product_info_detail
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="parentId != null">parent_id,</if>
            <if test="productInfoId != null">product_info_id,</if>
            <if test="configModal != null">config_modal,</if>
            <if test="productInfoDetailTitle != null and productInfoDetailTitle != ''">product_info_detail_title,</if>
            <if test="productInfoDetailDesc != null and productInfoDetailDesc != ''">product_info_detail_desc,</if>
            <if test="productInfoDetailOrder != null">product_info_detail_order,</if>
            <if test="productInfoDetailPic != null">product_info_detail_pic,</if>
            <if test="ancestors != null and ancestors != ''">ancestors,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="parentId != null">#{parentId},</if>
            <if test="productInfoId != null">#{productInfoId},</if>
            <if test="configModal != null">#{configModal},</if>
            <if test="productInfoDetailTitle != null and productInfoDetailTitle != ''">#{productInfoDetailTitle},</if>
            <if test="productInfoDetailDesc != null and productInfoDetailDesc != ''">#{productInfoDetailDesc},</if>
            <if test="productInfoDetailOrder != null">#{productInfoDetailOrder},</if>
            <if test="productInfoDetailPic != null">#{productInfoDetailPic},</if>
            <if test="ancestors != null and ancestors != ''">#{ancestors},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
         </trim>
    </insert>

    <update id="updateHwProductInfoDetail" parameterType="HwProductInfoDetail">
        update hw_product_info_detail
        <trim prefix="SET" suffixOverrides=",">
            <if test="parentId != null">parent_id = #{parentId},</if>
            <if test="productInfoId != null">product_info_id = #{productInfoId},</if>
            <if test="configModal != null">config_modal = #{configModal},</if>
            <if test="productInfoDetailTitle != null and productInfoDetailTitle != ''">product_info_detail_title = #{productInfoDetailTitle},</if>
            <if test="productInfoDetailDesc != null and productInfoDetailDesc != ''">product_info_detail_desc = #{productInfoDetailDesc},</if>
            <if test="productInfoDetailOrder != null">product_info_detail_order = #{productInfoDetailOrder},</if>
            <if test="productInfoDetailPic != null">product_info_detail_pic = #{productInfoDetailPic},</if>
            <if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
        </trim>
        where product_info_detail_id = #{productInfoDetailId}
    </update>

    <delete id="deleteHwProductInfoDetailByProductInfoDetailId" parameterType="Long">
        delete from hw_product_info_detail where product_info_detail_id = #{productInfoDetailId}
    </delete>

    <delete id="deleteHwProductInfoDetailByProductInfoDetailIds" parameterType="String">
        delete from hw_product_info_detail where product_info_detail_id in 
        <foreach item="productInfoDetailId" collection="array" open="(" separator="," close=")">
            #{productInfoDetailId}
        </foreach>
    </delete>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwProductInfoMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwProductInfoMapper">
    
    <resultMap type="HwProductInfo" id="HwProductInfoResult">
        <result property="productInfoId"    column="product_info_id"    />
        <result property="configTypeId"    column="config_type_id"    />
        <result property="tabFlag"    column="tab_flag"    />
        <result property="configModal"    column="config_modal"    />
        <result property="productInfoEtitle"    column="product_info_etitle"    />
        <result property="productInfoCtitle"    column="product_info_ctitle"    />
        <result property="productInfoOrder"    column="product_info_order"    />
        <result property="createTime"    column="create_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="updateBy"    column="update_by"    />

        <result property="parentId"    column="parent_id"    />
        <result property="configTypeName"    column="config_type_name"    />


    </resultMap>

    <resultMap id="HwProductInfoHwProductInfoDetailResult" type="HwProductInfo" extends="HwProductInfoResult">
        <collection property="hwProductInfoDetailList" notNullColumn="sub_product_info_detail_id" javaType="java.util.List" resultMap="HwProductInfoDetailResult" />
    </resultMap>

    <resultMap type="HwProductInfoDetail" id="HwProductInfoDetailResult">
        <result property="productInfoDetailId"    column="sub_product_info_detail_id"    />
        <result property="parentId"    column="sub_parent_id"    />
        <result property="productInfoId"    column="sub_product_info_id"    />
        <result property="productInfoDetailTitle"    column="sub_product_info_detail_title"    />
        <result property="productInfoDetailDesc"    column="sub_product_info_detail_desc"    />
        <result property="productInfoDetailOrder"    column="sub_product_info_detail_order"    />
        <result property="productInfoDetailPic"    column="sub_product_info_detail_pic"    />
        <result property="ancestors"    column="sub_ancestors"    />
        <result property="createTime"    column="sub_create_time"    />
        <result property="createBy"    column="sub_create_by"    />
        <result property="updateTime"    column="sub_update_time"    />
        <result property="updateBy"    column="sub_update_by"    />
        <result property="configModel"    column="config_model"    />
    </resultMap>

    <sql id="selectHwProductInfoVo">
        select product_info_id, config_type_id, tab_flag, config_modal, product_info_etitle, product_info_ctitle, product_info_order, create_time, create_by, update_time, update_by from hw_product_info
    </sql>

    <select id="selectHwProductInfoList" parameterType="HwProductInfo" resultMap="HwProductInfoResult">
        <include refid="selectHwProductInfoVo"/>
        <where>  
            <if test="configTypeId != null  and configTypeId != ''"> and config_type_id = #{configTypeId}</if>
            <if test="tabFlag != null  and tabFlag != ''"> and tab_flag = #{tabFlag}</if>
            <if test="configModal != null  and configModal != ''"> and config_modal = #{configModal}</if>
            <if test="productInfoEtitle != null "> and product_info_etitle like concat('%', #{productInfoEtitle}, '%')</if>
            <if test="productInfoCtitle != null  and productInfoCtitle != ''"> and product_info_ctitle like concat('%', #{productInfoCtitle}, '%')</if>
            <if test="productInfoOrder != null "> and product_info_order = #{productInfoOrder}</if>
        </where>
    </select>
    
    <select id="selectHwProductInfoByProductInfoId" parameterType="Long" resultMap="HwProductInfoResult">
        <include refid="selectHwProductInfoVo"/>
        where product_info_id = #{productInfoId}
    </select>
        
    <insert id="insertHwProductInfo" parameterType="HwProductInfo" useGeneratedKeys="true" keyProperty="productInfoId">
        insert into hw_product_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="configTypeId != null and configTypeId != ''">config_type_id,</if>
            <if test="tabFlag != null and tabFlag != ''">tab_flag,</if>
            <if test="configModal != null and configModal != ''">config_modal,</if>
            <if test="productInfoEtitle != null">product_info_etitle,</if>
            <if test="productInfoCtitle != null and productInfoCtitle != ''">product_info_ctitle,</if>
            <if test="productInfoOrder != null">product_info_order,</if>
            <if test="createTime != null">create_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="updateBy != null">update_by,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="configTypeId != null and configTypeId != ''">#{configTypeId},</if>
            <if test="tabFlag != null and tabFlag != ''">#{tabFlag},</if>
            <if test="configModal != null and configModal != ''">#{configModal},</if>
            <if test="productInfoEtitle != null">#{productInfoEtitle},</if>
            <if test="productInfoCtitle != null and productInfoCtitle != ''">#{productInfoCtitle},</if>
            <if test="productInfoOrder != null">#{productInfoOrder},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
         </trim>
    </insert>

    <update id="updateHwProductInfo" parameterType="HwProductInfo">
        update hw_product_info
        <trim prefix="SET" suffixOverrides=",">
            <if test="configTypeId != null and configTypeId != ''">config_type_id = #{configTypeId},</if>
            <if test="tabFlag != null and tabFlag != ''">tab_flag = #{tabFlag},</if>
            <if test="configModal != null and configModal != ''">config_modal = #{configModal},</if>
            <if test="productInfoEtitle != null">product_info_etitle = #{productInfoEtitle},</if>
            <if test="productInfoCtitle != null and productInfoCtitle != ''">product_info_ctitle = #{productInfoCtitle},</if>
            <if test="productInfoOrder != null">product_info_order = #{productInfoOrder},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
        </trim>
        where product_info_id = #{productInfoId}
    </update>

    <delete id="deleteHwProductInfoByProductInfoId" parameterType="Long">
        delete from hw_product_info where product_info_id = #{productInfoId}
    </delete>

    <delete id="deleteHwProductInfoByProductInfoIds" parameterType="String">
        delete from hw_product_info where product_info_id in 
        <foreach item="productInfoId" collection="array" open="(" separator="," close=")">
            #{productInfoId}
        </foreach>
    </delete>




    <select id="selectHwProductInfoJoinDetailList" parameterType="HwProductInfo" resultMap="HwProductInfoHwProductInfoDetailResult">
        select a.product_info_id, a.config_type_id, a.tab_flag, a.config_modal, a.product_info_etitle, a.product_info_ctitle, a.product_info_order, a.create_time, a.create_by, a.update_time, a.update_by,
        b.product_info_detail_id as sub_product_info_detail_id, b.parent_id as sub_parent_id, b.product_info_id as sub_product_info_id, b.product_info_detail_title as sub_product_info_detail_title, b.product_info_detail_desc as sub_product_info_detail_desc, b.product_info_detail_order as sub_product_info_detail_order, b.product_info_detail_pic as sub_product_info_detail_pic, b.ancestors as sub_ancestors, b.create_time as sub_create_time, b.create_by as sub_create_by, b.update_time as sub_update_time, b.update_by as sub_update_by,
        b.config_modal AS config_model
        from hw_product_info a
        left join hw_product_info_detail b on b.product_info_id = a.product_info_id
        <where>
            <if test="configTypeId != null  and configTypeId != ''"> and a.config_type_id = #{configTypeId}</if>
            <if test="tabFlag != null  and tabFlag != ''"> and a.tab_flag = #{tabFlag}</if>
            <if test="configModal != null  and configModal != ''"> and a.config_modal = #{configModal}</if>
            <if test="productInfoEtitle != null "> and a.product_info_etitle = #{productInfoEtitle}</if>
            <if test="productInfoCtitle != null  and productInfoCtitle != ''"> and a.product_info_ctitle = #{productInfoCtitle}</if>
            <if test="productInfoOrder != null "> and a.product_info_order = #{productInfoOrder}</if>
            <if test="parentId != null"> and b.parent_id = #{parentId}</if>
        </where>
    </select>




    <sql id="selectHwProductInfoJoinVo">
        select hpi.product_info_id, hpi.config_type_id, hpi.tab_flag, hpi.config_modal, hpi.product_info_etitle, hpi.product_info_ctitle, hpi.product_info_order,
               hpi.create_time, hpi.create_by, hpi.update_time, hpi.update_by,hpct.config_type_name from hw_product_info hpi left join hw_portal_config_type hpct on hpi.config_type_id=hpct.config_type_id
    </sql>

    <select id="selectHwProductInfoJoinList" parameterType="HwProductInfo" resultMap="HwProductInfoResult">
        <include refid="selectHwProductInfoJoinVo"/>
        <where>
            <if test="configTypeId != null  and configTypeId != ''"> and hpi.config_type_id = #{configTypeId}</if>
            <if test="tabFlag != null  and tabFlag != ''"> and hpi.tab_flag = #{tabFlag}</if>
            <if test="configModal != null  and configModal != ''"> and hpi.config_modal = #{configModal}</if>
            <if test="productInfoEtitle != null "> and hpi.product_info_etitle like concat('%', #{productInfoEtitle}, '%')</if>
            <if test="productInfoCtitle != null  and productInfoCtitle != ''"> and hpi.product_info_ctitle like concat('%', #{productInfoCtitle}, '%')</if>
            <if test="productInfoOrder != null "> and hpi.product_info_order = #{productInfoOrder}</if>
        </where>
    </select>

</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwWebDocumentMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwWebDocumentMapper">
    
    <resultMap type="HwWebDocument" id="HwWebDocumentResult">
        <result property="documentId"    column="document_id"    />
        <result property="tenantId"    column="tenant_id"    />
        <result property="documentAddress"    column="document_address"    />
        <result property="createTime"    column="create_time"    />
        <result property="webCode"    column="web_code"    />
        <result property="secretKey"    column="secretKey"    />
        <result property="json"    column="json"    />
        <result property="type"    column="type"    />
        <result property="isDelete" column="is_delete" />
    </resultMap>

    <sql id="selectHwWebDocumentVo">
        select document_id, tenant_id, document_address, create_time, web_code, secretKey ,
               json, type,
                is_delete
        from hw_web_document
    </sql>

    <select id="selectHwWebDocumentList" parameterType="HwWebDocument" resultMap="HwWebDocumentResult">
        <include refid="selectHwWebDocumentVo"/>
        <where>
            and is_delete = '0'
            <if test="documentId != null "> and document_id = #{documentId}</if>
            <if test="tenantId != null "> and tenant_id = #{tenantId}</if>
            <if test="documentAddress != null  and documentAddress != ''"> and document_address = #{documentAddress}</if>
            <if test="webCode != null  and webCode != ''"> and web_code = #{webCode}</if>
            <if test="secretKey != null  and secretKey != ''"> and secretKey = #{secretKey}</if>
             <if test="json != null  and json != ''"> and json = #{json}</if>
              <if test="type != null  and type != ''"> and type = #{type}</if>
        </where>
    </select>
    
    <select id="selectHwWebDocumentByDocumentId" parameterType="String" resultMap="HwWebDocumentResult">
        <include refid="selectHwWebDocumentVo"/>
        where is_delete = '0' and document_id = #{documentId}
    </select>
        
    <insert id="insertHwWebDocument" parameterType="HwWebDocument" useGeneratedKeys="true" keyProperty="documentId">
        insert into hw_web_document
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="documentId != null">document_id,</if>
            <if test="tenantId != null">tenant_id,</if>
            <if test="documentAddress != null">document_address,</if>
            <if test="createTime != null">create_time,</if>
            <if test="webCode != null">web_code,</if>
            <if test="secretKey != null">secretKey,</if>
            <if test="json != null">json,</if>
            <if test="type != null">type,</if>
            is_delete,
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="documentId != null">#{documentId},</if>
            <if test="tenantId != null">#{tenantId},</if>
            <if test="documentAddress != null">#{documentAddress},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="webCode != null">#{webCode},</if>
            <if test="secretKey != null">#{secretKey},</if>
            <if test="json != null">#{json},</if>
            <if test="type != null">#{type},</if>
            <choose>
                <when test="isDelete != null and isDelete != ''">#{isDelete},</when>
                <otherwise>'0',</otherwise>
            </choose>
         </trim>
    </insert>

    <update id="updateHwWebDocument" parameterType="HwWebDocument">
        update hw_web_document
        <trim prefix="SET" suffixOverrides=",">
            <if test="documentId != null">document_id = #{documentId},</if>
            <if test="tenantId != null">tenant_id = #{tenantId},</if>
            <if test="documentAddress != null">document_address = #{documentAddress},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="webCode != null">web_code = #{webCode},</if>
            <if test="secretKey != null">
                secretKey = <choose>
                    <when test="secretKey == ''">NULL</when>
                    <otherwise>#{secretKey}</otherwise>
                </choose>,
            </if>
            <if test="json != null">json = #{json},</if>
            <if test="type != null">type = #{type},</if>
        </trim>
        where document_id = #{documentId}
    </update>

    <update id="deleteHwWebDocumentByDocumentId" parameterType="String">
        update hw_web_document set is_delete = '1' where document_id = #{documentId}
    </update>

    <update id="deleteHwWebDocumentByDocumentIds" parameterType="String">
        update hw_web_document set is_delete = '1' where document_id in 
        <foreach item="documentId" collection="array" open="(" separator="," close=")">
            #{documentId}
        </foreach>
    </update>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwWebMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwWebMapper">

    <resultMap type="HwWeb" id="HwWebResult">
        <result property="webId"    column="web_id"    />
        <result property="webJson"    column="web_json"    />
        <result property="webJsonString"    column="web_json_string"    />
        <result property="webCode"    column="web_code"    />
        <result property="isDelete" column="is_delete" />
        <result property="webJsonEnglish" column="web_json_english" />
    </resultMap>

    <sql id="selectHwWebVo">
        select web_id, web_json, web_json_string, web_code,
               web_json_english,
        is_delete 
        from hw_web
    </sql>

    <select id="selectHwWebList" parameterType="HwWeb" resultMap="HwWebResult">
        <include refid="selectHwWebVo"/>
        <where>
            and is_delete = '0'
            <if test="webId != null "> and web_id = #{webId}</if>
            <if test="webJson != null  and webJson != ''"> and web_json = #{webJson}</if>
            <if test="webJsonString != null  and webJsonString != ''"> and web_json_string = #{webJsonString}</if>
            <if test="webCode != null "> and web_code = #{webCode}</if>
             <if test="webJsonEnglish != null"> and web_json_english = #{webJsonEnglish}</if>
        </where>
    </select>

    <select id="selectHwWebByWebcode" parameterType="Long" resultMap="HwWebResult">
        <include refid="selectHwWebVo"/>
        where is_delete = '0' and web_code = #{webCode}
    </select>

    <insert id="insertHwWeb" parameterType="HwWeb" useGeneratedKeys="true" keyProperty="webId">
        insert into hw_web
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="webJson != null">web_json,</if>
            <if test="webJsonString != null">web_json_string,</if>
            <if test="webCode != null">web_code,</if>
            <if test="webJsonEnglish != null">web_json_english,</if>
            is_delete,
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="webJson != null">#{webJson},</if>
            <if test="webJsonString != null">#{webJsonString},</if>
            <if test="webCode != null">#{webCode},</if>
            <if test="webJsonEnglish != null">#{webJsonEnglish},</if>
            <choose>
                <when test="isDelete != null and isDelete != ''">#{isDelete},</when>
                <otherwise>'0',</otherwise>
            </choose>
        </trim>
    </insert>

    <update id="updateHwWeb" parameterType="HwWeb">
        update hw_web
        <trim prefix="SET" suffixOverrides=",">
            <if test="webJson != null">web_json = #{webJson},</if>
            <if test="webJsonString != null">web_json_string = #{webJsonString},</if>
<!--            <if test="webCode != null">web_code = #{webCode},</if>-->
            <if test="webJsonEnglish != null">web_json_english = #{webJsonEnglish},</if>
        </trim>
        where web_code = #{webCode}
    </update>

    <update id="deleteHwWebByWebId" parameterType="Long">
        update hw_web set is_delete = '1' where web_id = #{webId}
    </update>

    <update id="deleteHwWebByWebIds" parameterType="String">
        update hw_web set is_delete = '1' where web_id in
        <foreach item="webId" collection="array" open="(" separator="," close=")">
            #{webId}
        </foreach>
    </update>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwWebMapper1.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwWebMapper1">

    <resultMap type="HwWeb1" id="HwWebResult1">
        <result property="webId"    column="web_id"    />
        <result property="webJson"    column="web_json"    />
        <result property="webJsonString"    column="web_json_string"    />
        <result property="webCode"    column="web_code"    />
        <result property="deviceId"    column="device_id"    />
        <result property="typeId"    column="typeId"    />
        <result property="isDelete" column="is_delete" />
        <result property="webJsonEnglish" column="web_json_english" />
    </resultMap>

    <sql id="selectHwWebVo">
        select web_id, web_json, web_json_string, web_code,
            device_id, typeId, web_json_english,
            is_delete
         from hw_web1
    </sql>

    <select id="selectHwWebList" parameterType="HwWeb1" resultMap="HwWebResult1">
        <include refid="selectHwWebVo"/>
        <where>
            and is_delete = '0'
            <if test="webId != null "> and web_id = #{webId}</if>
            <if test="webJson != null  and webJson != ''"> and web_json = #{webJson}</if>
            <if test="webJsonString != null  and webJsonString != ''"> and web_json_string = #{webJsonString}</if>
            <if test="webCode != null "> and web_code = #{webCode}</if>
            <if test="deviceId != null "> and device_id = #{deviceId}</if>
             <if test="typeId != null "> and typeId = #{typeId}</if>
              <if test="webJsonEnglish != null "> and web_json_english = #{webJsonEnglish}</if>
        </where>
    </select>

    <select id="selectHwWebByWebcode" parameterType="Long" resultMap="HwWebResult1">
        <include refid="selectHwWebVo"/>
        where is_delete = '0' and web_code = #{webCode}
    </select>

    <select id="selectHwWebOne" parameterType="HwWeb1" resultMap="HwWebResult1">
        <include refid="selectHwWebVo"/>
        where is_delete = '0' and web_code = #{webCode}
        and device_id = #{deviceId}
        and typeId = #{typeId}
    </select>

    <insert id="insertHwWeb" parameterType="HwWeb1" useGeneratedKeys="true" keyProperty="webId">
        insert into hw_web1
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="webJson != null">web_json,</if>
            <if test="webJsonString != null">web_json_string,</if>
            <if test="webCode != null">web_code,</if>
            <if test="deviceId != null">device_id,</if>
            <if test="typeId != null">typeId,</if>
            <if test="webJsonEnglish != null">web_json_english,</if>
            is_delete,
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="webJson != null">#{webJson},</if>
            <if test="webJsonString != null">#{webJsonString},</if>
            <if test="webCode != null">#{webCode},</if>
            <if test="deviceId != null">#{deviceId},</if>
            <if test="typeId != null">#{typeId},</if>
            <if test="webJsonEnglish != null">#{webJsonEnglish},</if>
            <choose>
                <when test="isDelete != null and isDelete != ''">#{isDelete},</when>
                <otherwise>'0',</otherwise>
            </choose>
        </trim>
    </insert>

    <update id="updateHwWeb" parameterType="HwWeb1">
        update hw_web1
        <trim prefix="SET" suffixOverrides=",">
            <if test="webJson != null">web_json = #{webJson},</if>
            <if test="webJsonString != null">web_json_string = #{webJsonString},</if>
<!--            <if test="webCode != null">web_code = #{webCode},</if>-->
<!--            <if test="deviceId != null">device_id = #{deviceId},</if>-->
<!--            <if test="typeId != null">typeId = #{typeId},</if>-->
            <if test="webJsonEnglish != null">web_json_english = #{webJsonEnglish},</if>
        </trim>
        where web_code = #{webCode}
        and device_id = #{deviceId}
        and typeId = #{typeId}
    </update>

    <update id="deleteHwWebByWebId" parameterType="Long">
        update hw_web1 set is_delete = '1' where web_id = #{webId}
    </update>

    <update id="deleteHwWebByWebIds" parameterType="String">
        update hw_web1 set is_delete = '1' where web_id in
        <foreach item="webId" collection="array" open="(" separator="," close=")">
            #{webId}
        </foreach>
    </update>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwWebMenuMapper.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwWebMenuMapper">

    <resultMap type="HwWebMenu" id="HwWebMenuResult">
        <result property="webMenuId"    column="web_menu_id"    />
        <result property="parent"    column="parent"    />
        <result property="ancestors"    column="ancestors"    />
        <result property="status"    column="status"    />
        <result property="webMenuName"    column="web_menu_name"    />
        <result property="tenantId"    column="tenant_id"    />
        <result property="webMenuPic"    column="web_menu__pic"    />
        <result property="webMenuType"    column="web_menu_type"    />
        <result property="isDelete" column="is_delete" />
        <result property="webMenuNameEnglish" column="web_menu_name_english" />
    </resultMap>

    <sql id="selectHwWebMenuVo">
        select web_menu_id, parent, ancestors, status, web_menu_name, tenant_id, web_menu__pic, web_menu_type,
               web_menu_name_english,
        is_delete 
        from hw_web_menu
    </sql>

    <select id="selectHwWebMenuList" parameterType="HwWebMenu" resultMap="HwWebMenuResult">
        <include refid="selectHwWebMenuVo"/>
        <where>
            and is_delete = '0'
            <if test="parent != null "> and parent = #{parent}</if>
            <if test="ancestors != null  and ancestors != ''"> and ancestors = #{ancestors}</if>
            <if test="status != null  and status != ''"> and status = #{status}</if>
            <if test="webMenuName != null  and webMenuName != ''"> and web_menu_name like concat('%', #{webMenuName}, '%')</if>
            <if test="tenantId != null "> and tenant_id = #{tenantId}</if>
            <if test="webMenuPic != null  and webMenuPic != ''"> and web_menu__pic = #{webMenuPic}</if>
            <if test="webMenuType != null "> and web_menu_type = #{webMenuType}</if>
             <if test="webMenuNameEnglish != null  and webMenuNameEnglish != ''"> and web_menu_name_english = #{webMenuNameEnglish}</if>
        </where>
    </select>

    <select id="selectHwWebMenuByWebMenuId" parameterType="Long" resultMap="HwWebMenuResult">
        <include refid="selectHwWebMenuVo"/>
        where is_delete = '0' and web_menu_id = #{webMenuId}
    </select>

    <insert id="insertHwWebMenu" parameterType="HwWebMenu">
        insert into hw_web_menu
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="webMenuId != null">web_menu_id,</if>
            <if test="parent != null">parent,</if>
            <if test="ancestors != null">ancestors,</if>
            <if test="status != null">status,</if>
            <if test="webMenuName != null">web_menu_name,</if>
            <if test="tenantId != null">tenant_id,</if>
            <if test="webMenuPic != null">web_menu__pic,</if>
            <if test="webMenuType != null">web_menu_type,</if>
            <if test="webMenuNameEnglish != null">web_menu_name_english,</if>
            is_delete,
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="webMenuId != null">#{webMenuId},</if>
            <if test="parent != null">#{parent},</if>
            <if test="ancestors != null">#{ancestors},</if>
            <if test="status != null">#{status},</if>
            <if test="webMenuName != null">#{webMenuName},</if>
            <if test="tenantId != null">#{tenantId},</if>
            <if test="webMenuPic != null">#{webMenuPic},</if>
            <if test="webMenuType != null">#{webMenuType},</if>
            <if test="webMenuNameEnglish != null">#{webMenuNameEnglish},</if>
            <choose>
                <when test="isDelete != null and isDelete != ''">#{isDelete},</when>
                <otherwise>'0',</otherwise>
            </choose>
        </trim>
    </insert>

    <update id="updateHwWebMenu" parameterType="HwWebMenu">
        update hw_web_menu
        <trim prefix="SET" suffixOverrides=",">
            <if test="parent != null">parent = #{parent},</if>
            <if test="ancestors != null">ancestors = #{ancestors},</if>
            <if test="status != null">status = #{status},</if>
            <if test="webMenuName != null">web_menu_name = #{webMenuName},</if>
            <if test="tenantId != null">tenant_id = #{tenantId},</if>
            <if test="webMenuPic != null">web_menu__pic = #{webMenuPic},</if>
            <if test="webMenuType != null">web_menu_type = #{webMenuType},</if>
            <if test="webMenuNameEnglish != null">web_menu_name_english = #{webMenuNameEnglish},</if>
        </trim>
        where web_menu_id = #{webMenuId}
    </update>

    <update id="deleteHwWebMenuByWebMenuId" parameterType="Long">
        update hw_web_menu set is_delete = '1' where web_menu_id = #{webMenuId}
    </update>

    <update id="deleteHwWebMenuByWebMenuIds" parameterType="String">
        update hw_web_menu set is_delete = '1' where web_menu_id in
        <foreach item="webMenuId" collection="array" open="(" separator="," close=")">
            #{webMenuId}
        </foreach>
    </update>
</mapper>
```

### C:\D\WORK\NewP\HwWeb\hw-portal\src\main\resources\mapper\portal\HwWebMenuMapper1.xml
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.portal.mapper.HwWebMenuMapper1">

    <resultMap type="HwWebMenu1" id="HwWebMenuResult1">
        <result property="webMenuId"    column="web_menu_id"    />
        <result property="parent"    column="parent"    />
        <result property="ancestors"    column="ancestors"    />
        <result property="status"    column="status"    />
        <result property="webMenuName"    column="web_menu_name"    />
        <result property="tenantId"    column="tenant_id"    />
        <result property="webMenuPic"    column="web_menu__pic"    />
        <result property="webMenuType"    column="web_menu_type"    />
        <result property="value" column="value" />
        <result property="isDelete" column="is_delete" />
        <result property="webMenuNameEnglish" column="web_menu_name_english" />
    </resultMap>

    <sql id="selectHwWebMenuVo">
        select web_menu_id, parent, ancestors, status, web_menu_name, tenant_id, web_menu__pic,
               value,
               web_menu_type,
               web_menu_name_english,
               is_delete 
               from hw_web_menu1
    </sql>

    <select id="selectHwWebMenuList" parameterType="HwWebMenu1" resultMap="HwWebMenuResult1">
        <include refid="selectHwWebMenuVo"/>
        <where>
            and is_delete = '0'
            <if test="parent != null "> and parent = #{parent}</if>
            <if test="ancestors != null  and ancestors != ''"> and ancestors = #{ancestors}</if>
            <if test="status != null  and status != ''"> and status = #{status}</if>
            <if test="webMenuName != null  and webMenuName != ''"> and web_menu_name like concat('%', #{webMenuName}, '%')</if>
            <if test="tenantId != null "> and tenant_id = #{tenantId}</if>
            <if test="webMenuPic != null  and webMenuPic != ''"> and web_menu__pic = #{webMenuPic}</if>
            <if test="webMenuType != null "> and web_menu_type = #{webMenuType}</if>
             <if test="value != null  and value != ''"> and value like concat('%', #{value}, '%')</if>
              <if test="webMenuNameEnglish != null  and webMenuNameEnglish != ''"> and web_menu_name_english like concat('%', #{webMenuNameEnglish}, '%')</if>
        </where>
    </select>

    <select id="selectHwWebMenuByWebMenuId" parameterType="Long" resultMap="HwWebMenuResult1">
        <include refid="selectHwWebMenuVo"/>
        where is_delete = '0' and web_menu_id = #{webMenuId}
    </select>

    <insert id="insertHwWebMenu" parameterType="HwWebMenu1">
        insert into hw_web_menu1
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="webMenuId != null">web_menu_id,</if>
            <if test="parent != null">parent,</if>
            <if test="ancestors != null">ancestors,</if>
            <if test="status != null">status,</if>
            <if test="webMenuName != null">web_menu_name,</if>
            <if test="tenantId != null">tenant_id,</if>
            <if test="webMenuPic != null">web_menu__pic,</if>
            <if test="webMenuType != null">web_menu_type,</if>
            <if test="value != null">value,</if>
            <if test="webMenuNameEnglish != null">web_menu_name_english,</if>
            is_delete,
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="webMenuId != null">#{webMenuId},</if>
            <if test="parent != null">#{parent},</if>
            <if test="ancestors != null">#{ancestors},</if>
            <if test="status != null">#{status},</if>
            <if test="webMenuName != null">#{webMenuName},</if>
            <if test="tenantId != null">#{tenantId},</if>
            <if test="webMenuPic != null">#{webMenuPic},</if>
            <if test="webMenuType != null">#{webMenuType},</if>
            <if test="value != null">#{value},</if>
            <if test="webMenuNameEnglish != null">#{webMenuNameEnglish},</if>
            <choose>
                <when test="isDelete != null and isDelete != ''">#{isDelete},</when>
                <otherwise>'0',</otherwise>
            </choose>
        </trim>
    </insert>

    <update id="updateHwWebMenu" parameterType="HwWebMenu1">
        update hw_web_menu1
        <trim prefix="SET" suffixOverrides=",">
            <if test="parent != null">parent = #{parent},</if>
            <if test="ancestors != null">ancestors = #{ancestors},</if>
            <if test="status != null">status = #{status},</if>
            <if test="webMenuName != null">web_menu_name = #{webMenuName},</if>
            <if test="tenantId != null">tenant_id = #{tenantId},</if>
            <if test="webMenuPic != null">web_menu__pic = #{webMenuPic},</if>
            <if test="webMenuType != null">web_menu_type = #{webMenuType},</if>
            <if test="value != null">value = #{value},</if>
            <if test="webMenuNameEnglish != null">web_menu_name_english = #{webMenuNameEnglish},</if>
        </trim>
        where web_menu_id = #{webMenuId}
    </update>

    <update id="deleteHwWebMenuByWebMenuId" parameterType="Long">
        update hw_web_menu1 set is_delete = '1' where web_menu_id = #{webMenuId}
    </update>

    <update id="deleteHwWebMenuByWebMenuIds" parameterType="String">
        update hw_web_menu1 set is_delete = '1' where web_menu_id in
        <foreach item="webMenuId" collection="array" open="(" separator="," close=")">
            #{webMenuId}
        </foreach>
    </update>
</mapper>
```


