monthly-2026-07

月报 · 2026年七月

姓名: 邓星星(dengxingxing) 项目: hoolihome-project 分支: production 提交数: 82个(含47个功能提交)


📋 本月工作汇总

按周统计

周次 日期范围 提交数
第27周 06/29-07/05 4
第28周 07/06-07/12 25
第29周 07/13-07/19 30
第30周 07/20-07/26 12
第31周 07/27-08/02 11

按模块统计

模块 提交数
其他 40
CRM/销售 10
房源/房型 8
搜索/筛选 7
活动促销 4
数据导出 3
系统管理 2
合作方 2
系统同步 2
PDF生成 2
企业微信 1
推荐系统 1

🛠 详细工作内容

1. feat(export): 新增申请工单异步导出功能 ⭐ 新增

  • 模块: CRM/销售
  • 提交: b874dadc5adc(2026-07-31)
  • 涉及文件: .../crm/controller/ApplicationSlipController.java.../crm/export/ApplicationSlipExportRow.java.../crm/export/ApplicationSlipExportService.java.../ApplicationSlipQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: 申请工单异步导出功能:支持用户异步导出申请工单数据,提升导出大文件时的用户体验。
+import com.hoolihome.crm.export.ApplicationSlipExportService;

2. fix(resolve): 优化用户查询关键字匹配逻辑 🐛 修复

  • 模块: 系统管理
  • 提交: 64358cc5f415(2026-07-30)
  • 涉及文件: .../java/com/hoolihome/crm/service/resolve/UserResolveService.java
  • 改动量: +0行 / -0行
  • 功能说明: 用户查询关键字匹配优化:用户查询时,如果关键字是数字则精确匹配用户ID,否则按用户名模糊搜索。
-                    i.like(PlatformUser.USER_NAME, param.getKeyword()).or()
+                    i.eq(NumberUtil.isInteger(param.getKeyword()), PlatformUser.ID, param.getKeyword()).or()
+                            .like(PlatformUser.USER_NAME, param.getKeyword()).or()

3. fix(query): 修正合作方选项来源为分销商 🐛 修复

  • 模块: 合作方
  • 提交: a8e6b1c38e61(2026-07-28)
  • 涉及文件: .../src/main/java/com/hoolihome/common/query/config/OptionSource.java.../crm/query/provider/ApplicationFormQueryConfigProvider.java.../java/com/hoolihome/crm/query/provider/LeadsQueryConfigProvider.java.../java/com/hoolihome/crm/query/provider/OrderQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: 合作方选项来源修正:将合作方选项的数据来源从普通用户改为分销商。
-    public static final String SOURCE_USER = "sourceUser";
+    //public static final String SOURCE_USER = "sourceUser";

4. fix(query): 统一关键词整数判断逻辑优化 🐛 修复

  • 模块: 搜索/筛选
  • 提交: f9865949768f(2026-07-28)
  • 涉及文件: .../crm/query/provider/ApplicationFormQueryConfigProvider.java.../crm/query/provider/ApplicationMailTemplateQueryConfigProvider.java.../crm/query/provider/ApplicationSlipQueryConfigProvider.java.../com/hoolihome/crm/query/provider/CashBackQueryConfigProvider.java.../crm/query/provider/DistributorCompanyQueryConfigProvider.java.../crm/query/provider/DistributorUserQueryConfigProvider.java.../com/hoolihome/crm/query/provider/FeeOrderQueryConfigProvider.java.../hoolihome/crm/query/provider/GiftServiceQueryConfigProvider.java…等.../crm/query/provider/ApplicationFormQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: 查询关键词数字判断逻辑统一:统一使用整数判断方法,避免小数等非整数数字的误匹配。
-        if (NumberUtil.isNumber(keyword)) {
+        if (NumberUtil.isInteger(keyword)) {

5. feat(qywx): 新增企业微信对外收款记录与资金流水同步功能 ⭐ 新增

  • 模块: 系统同步
  • 提交: b7c5269de057(2026-07-27)
  • 涉及文件: .../cron/jobs/qywx/QywxExternalPayBillJob.java.../cron/jobs/qywx/QywxExternalPayFundFlowJob.java.../src/main/resources/application-pro.yml.../data/service/qywx/QywxExternalPayService.java.../rest/api/externalpay/QywxExternalPayApi.java.../rest/dto/res/QywxExternalPayBillListRes.java.../rest/dto/res/QywxExternalPayFundFlowRes.java.../entity/platform/QywxExternalPayBill.java…等.../cron/jobs/qywx/QywxExternalPayBillJob.java
  • 改动量: +0行 / -0行
  • 功能说明: 企业微信收款数据同步:定时从企业微信拉取对外收款记录和资金流水数据,同步到系统中。
+package com.hoolihome.data.cron.jobs.qywx;
+
+import com.hoolihome.data.cron.jobs.facade.BaseSimpleJob;
+import com.hoolihome.data.service.qywx.QywxExternalPayService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.elasticjob.api.ShardingContext;
+import org.springframework.stereotype.Service;
+
+ * 企业微信对外收款记录同步任务
+ * 增量拉取对外收款记录并落库
+ */
+@Slf4j(topic = "QywxExternalPayBillJob")
+@Service
+@RequiredArgsConstructor

6. feat(user): 丰富用户信息接口返回字段 ⭐ 新增

  • 模块: 系统管理
  • 提交: a728e414f576(2026-07-27)
  • 涉及文件: .../crm/controller/HomeUserController.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 6: 用户信息接口新增返回手机区号字段,丰富了用户信息展示数据。
+        vo.set("mobilePrefixCode", user.getMobilePrefixCode());

7. fix(service): 修复HouseCommissionService中houseId列表过滤逻辑 🐛 修复

  • 模块: 房源/房型
  • 提交: 3476256e418b(2026-07-27)
  • 涉及文件: .../main/java/com/hoolihome/erp/service/HouseCommissionService.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 7: HouseCommissionService 方法添加事务控制,确保操作异常时能回滚数据。
+    @Transactional(rollbackFor = Exception.class)

8. feat(feeOrder): 新增收款单异步导出功能 ⭐ 新增

  • 模块: 数据导出
  • 提交: a432f286a78f(2026-07-24)
  • 涉及文件: .../crm/controller/FeeOrderController.java.../hoolihome/crm/export/FeeOrderExportRow.java.../crm/export/FeeOrderExportService.java.../provider/CashBackQueryConfigProvider.java.../provider/FeeOrderQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 8: 新增收款单异步导出功能,支持后台异步生成并导出收款单文件。
+import com.hoolihome.crm.export.FeeOrderExportService;

9. fix(crm): 优化商机来源和类型判定逻辑 🐛 修复

  • 模块: CRM/销售
  • 提交: 8914a023c83e(2026-07-24)
  • 涉及文件: .../java/com/hoolihome/crm/controller/LeadsController.java.../crm/query/provider/CashBackQueryConfigProvider.java.../com/hoolihome/crm/service/leads/CrmLeadsService.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 9: 优化商机创建校验规则,新媒体商机不再强制要求填写新媒体账号,填写合作方信息也可满足条件。
-            if (!NumHelper.Int.checkNotZero(param.getSourceUserId())) {
-                return ResVo.resErr("新媒体商机必须选择新媒体账号信息!");
+            if (!NumHelper.Int.checkNotZero(param.getSourceUserId()) && !NumHelper.Int.checkNotZero(param.getNewMediaId
+                return ResVo.resErr("必须选择新媒体账号信息或合作方信息!");

10. refactor(cashback): 合并order_info关联条件优化查询逻辑 ♻️ 重构

  • 模块: 其他
  • 提交: 61c5d750380c(2026-07-24)
  • 涉及文件: .../crm/controller/CashBackController.java.../provider/CashBackQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 10: 优化返佣查询性能,将订单关联的多条查询条件合并成单条,提升查询效率。
+        // 剥离 order_info 关联条件,合并成单条 EXISTS,避免逐字段多条 EXISTS
+        var orderConditions = cashBackQueryConfigProvider.extractOrderConditions(request.getConditions());
+        request.setConditions(cashBackQueryConfigProvider.excludeOrderConditions(request.getConditions()));
+        cashBackQueryConfigProvider.applyOrderRelationFilter(qw, orderConditions);

11. feat(permission): 改进权限策略配置 ⭐ 新增

  • 模块: 其他
  • 提交: 437684d567f7(2026-07-24)
  • 涉及文件: .../hoolihome/crm/query/provider/CashBackQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: 权限策略改进:将现金返还查询的权限策略从"无限制"改为"按创建人字段过滤",现在用户只能查看自己创建的记录。
-        return PermissionStrategy.NONE;
+        return PermissionStrategy.FIELD_IN;
+    }
+
+    @Override
+    public String getPermissionColumn() {
+        return "create_user_id";

12. refactor(query-config): 统一使用OptionSource常量替代字符串字面量 ♻️ 重构

  • 模块: 搜索/筛选
  • 提交: 62e085a4563b(2026-07-22)
  • 涉及文件: ...\273\347\273\237API\346\226\207\346\241\243.md".../common/query/config/OptionSource.java.../common/query/config/QueryFieldConfig.java.../ApplicationFormQueryConfigProvider.java.../ApplicationSlipQueryConfigProvider.java.../provider/CashBackQueryConfigProvider.java.../DistributorCompanyQueryConfigProvider.java.../DistributorUserQueryConfigProvider.java…等...\273\347\273\237API\346\226\207\346\241\243.md"
  • 改动量: +0行 / -0行
  • 功能说明: 选项数据源配置规范化:将前端下拉选项的来源标识(如平台用户、学校、房东等)从硬编码字符串改为统一常量管理,方便维护和复用。
-当字段的选项无法在配置中穷举时,通过 `optionSource` 标识告知前端从哪个接口获取选项数据。
-
-| optionSource | 说明 |
-|--------------|------|
-| platformUser | 内部员工列表 |
-| country | 国家列表 |
-| city | 城市列表 |
-| school | 学校列表 |
-| house | 公寓列表 |
-| landlord | 房东列表 |
-| newMedia | 新媒体账号列表 |
-| newMediaPlatform | 新媒体平台列表 |
-| sourceUser | 来源用户列表 |
-| sourceUserCompany | 来源企业列表 |
-| distributorCompany | 合作方企业列表 |

13. feat(export): 新增新媒体线索异步导出功能 ⭐ 新增

  • 模块: 数据导出
  • 提交: 85b229d66f14(2026-07-21)
  • 涉及文件: .../crm/controller/MediaLeadController.java.../hoolihome/crm/export/MediaLeadExportRow.java.../crm/export/MediaLeadExportService.java
  • 改动量: +0行 / -0行
  • 功能说明: 新媒体线索导出功能:新增新媒体线索的异步导出能力,用户可以后台导出线索数据为文件。
+import com.hoolihome.crm.export.MediaLeadExportService;

14. feat(pdf): 新增独立通用PDF生成接口和服务 ⭐ 新增

  • 模块: PDF生成
  • 提交: 7720764ace04(2026-07-20)
  • 涉及文件: .../data/api/controller/GenericPdfController.java.../api/dto/param/GenericPdfGenerateParam.java.../data/api/service/PdfGenerateService.java
  • 改动量: +0行 / -0行
  • 功能说明: 通用PDF生成服务:新增一个通用的PDF生成接口,可以根据传入的参数生成PDF文件。
+package com.hoolihome.data.api.controller;
+
+import cn.hutool.core.lang.Dict;
+import cn.hutool.core.util.StrUtil;
+import com.hoolihome.common.web.vo.R;
+import com.hoolihome.data.api.dto.param.GenericPdfGenerateParam;
+import com.hoolihome.data.api.service.PdfGenerateService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+ * 通用PDF生成接口(独立于明道云)

15. refactor(house): 优化佣金、政策、活动关联VO结构 ♻️ 重构

  • 模块: 房源/房型
  • 提交: 533c968e18f5(2026-07-17)
  • 涉及文件: .../com/hoolihome/erp/service/HouseV2Service.java.../erp/vo/LandlordRelationCommissionVo.java.../hoolihome/erp/vo/LandlordRelationPolicyVo.java.../erp/vo/LandlordRelationPromotionVo.java
  • 改动量: +0行 / -0行
  • 功能说明: 优化房东关联数据查询:优化了佣金、政策、活动关联信息的返回结构,只返回精简的必填字段,减少数据传输量。
-        // 5. 组装佣金VO(带 isAssociated 标记)
+        // 5. 组装佣金VO(带 isAssociated 标记,仅返回精简字段)
-                HouseCommissionVo baseVo = commissionVoBuilder.build(c);
-                BeanUtils.copyProperties(baseVo, cvo);
+                cvo.setId(c.getId());
+                cvo.setTitle(c.getTitle());
+                cvo.setAcademicYear(c.getAcademicYear());
+                cvo.setCommissionProportion(c.getCommissionProportion());
+                cvo.setExpirationDate(c.getExpirationDate() != null ? DateUtil.format(c.getExpirationDate(), "yyyy-MM-d
+                cvo.setRemark(c.getRemark());
-        // 6. 组装政策VO(带 isAssociated 标记)
+        // 6. 组装政策VO(带 isAssociated 标记,仅返回精简字段)
-                HousePolicyVo baseVo = policyVoBuilder.buildVo(p);
-                BeanUtils.copyProperties(baseVo, pvo);
+                pvo.setId(p.getId());

16. fix(hoolihome-crm-api): 修正供应商佣金、政策及活动状态查询条件 🐛 修复

  • 模块: CRM/销售
  • 提交: 699839bc3c46(2026-07-17)
  • 涉及文件: ...256\276\350\256\241\346\226\207\346\241\243.md".../com/hoolihome/erp/service/HouseV2Service.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 16: 修复了供应商佣金、佣金政策及推广活动的状态查询问题,确保查询条件正确。
+# 通用 PDF 生成接口设计文档
+
+> 模块:`hoolihome-data-api`
+> 控制器:`com.hoolihome.data.api.controller.mdy.MdyPdfController`
+> 适用场景:明道云(HAP)低代码平台通过封装业务请求调用本接口,将模板 PDF 填充业务数据后生成新 PDF,上传 OSS 并回填到明道云记录的附件字段。
+
+---
+
+## 目录
+
+- [第一部分:接口文档](#第一部分接口文档)
+  - [1. 接口概览](#1-接口概览)
+  - [2. 请求头参数](#2-请求头参数)
+  - [3. 请求体参数](#3-请求体参数)
+  - [4. data 字段数据格式](#4-data-字段数据格式)

17. feat(house): 新增公寓供应商关联信息查询和更新V2接口 ⭐ 新增

  • 模块: 房源/房型
  • 提交: bcbd743ff8c2(2026-07-17)
  • 涉及文件: .../erp/controller/HouseV2Controller.java.../params/HouseLandlordRelationsInfoParam.java.../params/UpdateHouseLandlordRelationsParam.java.../com/hoolihome/erp/service/HouseV2Service.java.../erp/vo/HouseLandlordRelationsInfoVo.java.../erp/vo/LandlordRelationCommissionVo.java.../hoolihome/erp/vo/LandlordRelationPolicyVo.java.../erp/vo/LandlordRelationPromotionVo.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 17: 为公寓模块新增了查询和更新供应商关联信息的V2接口,方便管理公寓与供应商之间的关系。
+import com.hoolihome.erp.params.HouseLandlordRelationsInfoParam;
+import com.hoolihome.erp.params.UpdateHouseLandlordRelationsParam;
+import com.hoolihome.erp.vo.HouseLandlordRelationsInfoVo;

18. feat(houseCommission): 添加佣金与公寓关联功能 ⭐ 新增

  • 模块: 房源/房型
  • 提交: a659820146db(2026-07-16)
  • 涉及文件: .../erp/controller/HouseCommissionController.java.../controller/LandlordPromotionController.java.../HouseCommissionQueryConfigProvider.java.../erp/service/HouseCommissionService.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 18: 为佣金管理模块新增了"关联房源"功能,允许将房源与佣金记录进行关联绑定。
+    @RequestMapping("add-house")
+    public ResVo addHouse(HouseCommissionParam param) {
+        if (param.getId() == null || !JSONUtil.isJsonArray(param.getHouseIdList())) {
+            return ResVo.resErr("参数错误!");
+        }
+        LogRecorder.on(ObjectDataTypeEnum.houseCommission.getCode(), param.getId().longValue())
+                .operation("新增关联房源")
+                .userId(param.getPlatformUserId())
+                .record(() -> {
+                    houseCommissionService.addHouse(param);
+                    mdySyncProvider.updateToMdy(ObjectDataTypeEnum.houseCommission.getCode(), param.getId()+"");
+                });
+        return ResVo.res("添加成功!");
+    }
+

19. feat(query): 新增国家筛选的 EXISTS 关联查询配置 ⭐ 新增

  • 模块: 搜索/筛选
  • 提交: 709946dac44a(2026-07-16)
  • 涉及文件: .../erp/query/provider/HouseCommissionQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 19: 在佣金查询配置中新增了"国家筛选"功能,支持通过国家维度过滤房源数据。
-                QueryFieldConfig.relation("cityId", "城市", HouseCommission.CITY_ID)
-                        .setOptionSource("city")
+                // ========== EXISTS 关联查询(国家筛选) ==========
+                QueryFieldConfig.relation("countryId", "国家", "")
+                        .setExistsTemplate("select 1 from landlord_relation where landlord_relation.relation_type = 1 a
+                        .setOptionSource("country")

20. refactor(query): 统一关键字搜索逻辑封装至QueryConfigProvider中 ♻️ 重构

  • 模块: 搜索/筛选
  • 提交: 0f67e71dcee2(2026-07-15)
  • 涉及文件: .../common/query/config/QueryConfigProvider.java.../crm/controller/ApplicationFormController.java.../crm/controller/ApplicationMailController.java.../crm/controller/ApplicationSlipController.java.../crm/controller/CashBackController.java.../controller/DistributorCompanyController.java.../crm/controller/DistributorUserController.java.../crm/controller/FeeOrderController.java…等.../common/query/config/QueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 20: 将多个业务模块(申请表、邮件、凭证、退款等)中的关键字搜索逻辑统一抽取到QueryConfigProvider中,实现搜索逻辑的复用和统一维护。
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

21. feat(api): 支持关键词对多表多字段及ID的混合模糊搜索 ⭐ 新增

  • 模块: 其他
  • 提交: c9a1cc834a7e(2026-07-15)
  • 涉及文件: .../crm/controller/ApplicationFormController.java.../crm/controller/ApplicationMailController.java.../crm/controller/ApplicationSlipController.java.../crm/controller/CashBackController.java.../crm/controller/FeeOrderController.java.../crm/controller/GiftServiceController.java.../crm/controller/HomeUserController.java.../crm/controller/MediaLeadController.java…等.../crm/controller/ApplicationFormController.java
  • 改动量: +0行 / -0行
  • 功能说明: 多表混合搜索:支持通过关键词同时模糊搜索多个数据表的多个字段和ID,提升全局搜索能力。
+import cn.hutool.core.util.NumberUtil;

22. refactor(promotion): 批量构建活动VO列表消除N+1查询 ♻️ 重构

  • 模块: 活动促销
  • 提交: 413bf28a5c38(2026-07-15)
  • 涉及文件: .../erp/controller/HooliPromotionController.java.../hoolihome/erp/vo/HooliPromotionVoBuilder.java
  • 改动量: +0行 / -0行
  • 功能说明: 活动列表性能优化:批量构建活动列表时消除了N+1查询问题,提升列表加载性能。
-import java.util.stream.Collectors;

23. feat(mediaLead): 支持convertLead接口指定销售ID参数 ⭐ 新增

  • 模块: CRM/销售
  • 提交: d7e056a85325(2026-07-15)
  • 涉及文件: .../main/java/com/hoolihome/crm/controller/MediaLeadController.java.../com/hoolihome/crm/service/medialead/MediaLeadUpdateService.java
  • 改动量: +0行 / -0行
  • 功能说明: 线索转换指定销售:在转换线索接口中新增指定销售ID参数,可将线索分配给特定销售人员处理。
-    public R<?> convertLead(Long id, Long mainLeadId, CommonReqDTO commonReqDTO) throws Exception {
-        var leadId = mediaLeadUpdateService.convertLead(id, mainLeadId, commonReqDTO);
+    public R<?> convertLead(Long id, Long mainLeadId, Integer specifySaleId, CommonReqDTO commonReqDTO) throws Exceptio
+        var leadId = mediaLeadUpdateService.convertLead(id, mainLeadId, specifySaleId, commonReqDTO);

24. fix(qywx): 优化异常日志记录并完善导出通知事务处理 🐛 修复

  • 模块: 企业微信
  • 提交: a57d2760564e(2026-07-14)
  • 涉及文件: .../crm/service/qywx/QywxMessageService.java
  • 改动量: +0行 / -0行
  • 功能说明: 导出通知事务完善:优化了异常日志记录,改进了导出完成通知的事务处理。
+import lombok.extern.slf4j.Slf4j;

25. feat(export): 新增合作方用户异步导出功能 ⭐ 新增

  • 模块: 合作方
  • 提交: 00b21368a696(2026-07-14)
  • 涉及文件: .../crm/controller/DistributorUserController.java.../crm/export/DistributorUserExportRow.java.../crm/export/DistributorUserExportService.java.../erp/controller/HouseV2Controller.java.../erp/controller/LandlordController.java.../{crm => erp}/export/HouseExportRow.java.../{crm => erp}/export/HouseExportService.java.../{crm => erp}/export/LandlordExportRow.java…等.../crm/controller/DistributorUserController.java
  • 改动量: +0行 / -0行
  • 功能说明: 合作方用户导出:新增合作方用户的异步导出Excel功能。
+import com.hoolihome.crm.export.DistributorUserExportService;

26. feat(export): 增加多模块异步导出功能,支持动态查询集成 ⭐ 新增

  • 模块: 数据导出
  • 提交: 83b37f2b0900(2026-07-14)
  • 涉及文件: .../crm/controller/ApplicationFormController.java.../controller/DistributorCompanyController.java.../controller/WithdrawalRequestController.java.../crm/export/ApplicationFormExportRow.java.../crm/export/ApplicationFormExportService.java.../crm/export/DistributorCompanyExportRow.java.../export/DistributorCompanyExportService.java.../com/hoolihome/crm/export/HouseExportRow.java…等.../crm/controller/ApplicationFormController.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 26: 新增了申请表的多模块异步导出功能,支持在导出时进行动态数据查询。
+import com.hoolihome.crm.export.ApplicationFormExportService;

27. refactor(common): 调整代码结构及权限相关接口实现 ♻️ 重构

  • 模块: 其他
  • 提交: 2f3b958f819a(2026-07-14)
  • 涉及文件: .../src/main/java/com/hoolihome/CRMApiBoot.java.../admin/controller/DepartmentController.java.../admin/controller/QywxAuthController.java.../admin/controller/ReportRelationController.java.../hoolihome/admin/service/AdminRoleService.java.../hoolihome/admin/service/CrmLoginService.java.../admin/service/PlatformUserService.java.../admin/service/ReportRelationService.java…等.../src/main/java/com/hoolihome/CRMApiBoot.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 27: 调整了系统架构,在原有CRM系统基础上集成了ERP模块的数据库映射。
-@MapperScan({"com.hoolihome.mapper", "com.hoolihome.crm.mapper"})
+@MapperScan({"com.hoolihome.mapper", "com.hoolihome.crm.mapper", "com.hoolihome.erp.mapper"})

28. feat(export): 新增商机和订单异步导出功能,优化导出服务 ⭐ 新增

  • 模块: CRM/销售
  • 提交: 91032a726b0a(2026-07-13)
  • 涉及文件: .../com/hoolihome/common/export/ExcelColumn.java.../com/hoolihome/common/export/ExportService.java.../hoolihome/crm/controller/LeadsController.java.../hoolihome/crm/controller/OrderController.java.../crm/export/AbstractAsyncExportService.java.../com/hoolihome/crm/export/LeadsExportRow.java.../hoolihome/crm/export/LeadsExportService.java.../com/hoolihome/crm/export/OrderExportRow.java…等.../com/hoolihome/common/export/ExcelColumn.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 28: 为商机和订单模块新增了异步导出Excel功能,并定义了通用的导出列注解来灵活配置导出字段。
+package com.hoolihome.common.export;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ * 导出列注解 - 标注在 ExportRow 字段上,定义 Excel 列头和顺序
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelColumn {
+
+    /** 列头名称 */
+    String value();

29. refactor(promotions): 移除活动适用范围类型相关功能及数据结构 ♻️ 重构

  • 模块: 活动促销
  • 提交: 9637a848554e(2026-07-13)
  • 涉及文件: .../controller/LandlordPromotionController.java.../hoolihome/erp/enums/LandlordRangeTypeEnum.java.../erp/params/LandlordPromotionParam.java.../com/hoolihome/erp/service/HouseV2Service.java.../erp/service/LandlordPromotionService.java.../com/hoolihome/erp/vo/LandlordPromotionVo.java.../erp/vo/LandlordPromotionVoBuilder.java.../hoolihome/entity/house/HousePromotions.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 29: 简化了房东促销活动功能,移除了活动适用范围类型的设置及相关接口。
-
-    @RequestMapping("set-range")
-    public ResVo setRange(LandlordPromotionParam param) {
-        LogRecorder.on(ObjectDataTypeEnum.landlordPromotion.getCode(), param.getId().longValue())
-                .operation("设置活动适用范围")
-                .userId(param.getPlatformUserId())
-                .record(() -> {
-                    landlordPromotionService.setRange(param);
-                    commonService.updateToMdy(ObjectDataTypeEnum.landlordPromotion.getCode(), param.getId().toString())
-                });
-        return ResVo.res("设置成功!");
-    }

30. feat(query): 添加动态查询接口及配置支持多模块 ⭐ 新增

  • 模块: 搜索/筛选
  • 提交: 337a5157f802(2026-07-10)
  • 涉及文件: .../crm/controller/ApplicationMailController.java.../crm/controller/ApplicationSlipController.java.../crm/controller/CashBackController.java.../crm/controller/FeeOrderController.java.../crm/controller/GiftServiceController.java.../crm/controller/HomeUserController.java.../crm/controller/MediaLeadController.java.../crm/controller/ReferralController.java…等.../crm/controller/ApplicationMailController.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 30: 为邮件申请、凭证、退款、费用订单等多个业务模块添加了动态查询能力,支持更灵活的数据筛选和权限控制。
+import com.hoolihome.common.query.builder.DataPermissionHelper;
+import com.hoolihome.common.query.builder.DynamicQueryBuilder;
+import com.hoolihome.common.query.dto.DynamicQueryRequest;
-import com.hoolihome.log.recorder.LogRecorder;
+import com.hoolihome.crm.query.provider.ApplicationMailTemplateQueryConfigProvider;
+import com.hoolihome.log.recorder.LogRecorder;
+import com.hoolihome.crm.service.IApplicationMailTemplateService;

31. fix(query): 修正 existsTemplate 字段的过滤路由逻辑 🐛 修复

  • 模块: 搜索/筛选
  • 提交: f8799fddf005(2026-07-09)
  • 涉及文件: .../common/query/builder/DynamicQueryBuilder.java
  • 改动量: +0行 / -0行
  • 功能说明: ## 功能说明
+     * <p>
+     * 当字段配置了 existsTemplate 时,IN/NOT_IN 自动路由到 EXISTS/NOT_EXISTS 子查询处理,
+     * 避免空 column 导致 SQL 语法错误。
+     * </p>
+        // 配置了 existsTemplate 的字段:IN/NOT_IN/EXISTS/NOT_EXISTS 均走 EXISTS 子查询
+        if (StrUtil.isNotBlank(config.getExistsTemplate())) {
+            if (filterType == FilterType.IN || filterType == FilterType.EXISTS) {
+                applyExistsFilter(wrapper, config, FilterType.EXISTS, value, values);
+                return;
+            }
+            if (filterType == FilterType.NOT_IN || filterType == FilterType.NOT_EXISTS) {
+                applyExistsFilter(wrapper, config, FilterType.NOT_EXISTS, value, values);
+                return;
+            }
+        }

32. feat(query): 添加国家筛选的关联查询支持 ⭐ 新增

  • 模块: 搜索/筛选
  • 提交: afe29d5d39db(2026-07-09)
  • 涉及文件: .../query/provider/LandlordManualQueryConfigProvider.java.../com/hoolihome/erp/service/LandlordManualService.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 31: 修复了国家、城市等筛选条件在某些查询场景下可能报 SQL 语法错误的问题。
-                        .setOptionSource("landlord")
+                        .setOptionSource("landlord"),
+
+                // ========== EXISTS 关联查询(国家筛选) ==========
+                QueryFieldConfig.relation("countryId", "国家", "")
+                        .setExistsTemplate("select 1 from landlord_relation where landlord_relation.relation_type = 1 a
+                        .setOptionSource("country")
+
+                // ========== EXISTS 关联查询(城市筛选,通过关联公寓的city_id) ==========
+                /*QueryFieldConfig.relation("cityId", "城市", "")
+                        .setExistsTemplate("select 1 from house_info where house_info.city_id in (%s) and JSON_VALID(la
+                        .setOptionSource("city")*/

33. feat(promotion): 新增供应商活动适用范围及关联管理 ⭐ 新增

  • 模块: 活动促销
  • 提交: c774360444bc(2026-07-09)
  • 涉及文件: .../controller/LandlordPromotionController.java.../hoolihome/erp/enums/LandlordRangeTypeEnum.java.../erp/params/LandlordPromotionParam.java.../com/hoolihome/erp/service/HouseV2Service.java.../erp/service/LandlordPromotionService.java.../erp/vo/HouseInfoPlatformInfoV2Vo.java.../erp/vo/HouseInfoPlatformPageV2Vo.java.../com/hoolihome/erp/vo/LandlordPromotionVo.java…等.../controller/LandlordPromotionController.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 32: 为房东查询增加了按国家和城市筛选的功能,可以通过关联表查询符合条件的房东。
+    @Deprecated

34. feat(promotion): 支持Hooli补贴活动适用范围设置与查询 ⭐ 新增

  • 模块: 活动促销
  • 提交: d06545478e9d(2026-07-09)
  • 涉及文件: .../provider/LandlordQueryConfigProvider.java.../erp/controller/HooliPromotionController.java.../com/hoolihome/erp/enums/RangeTypeEnum.java.../hoolihome/erp/params/HooliPromotionParam.java.../erp/service/HooliPromotionService.java.../com/hoolihome/erp/service/HouseV2Service.java.../com/hoolihome/erp/vo/HooliPromotionVo.java.../hoolihome/erp/vo/HooliPromotionVoBuilder.java…等.../provider/LandlordQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 33: 供应商活动现在可以设置活动适用于哪些房源或房东,并支持关联关系的管理。
-                QueryFieldConfig.text("bdName", "BD负责人", LandlordInfo.BD_NAME),

35. refactor(service): move AgreementService and AliYunWord2PdfService to order package ♻️ 重构

  • 模块: PDF生成
  • 提交: d1b44d9c8d8a(2026-07-08)
  • 涉及文件: .../HouseCommissionQueryConfigProvider.java.../provider/HousePolicyQueryConfigProvider.java.../LandlordManualQueryConfigProvider.java.../provider/LandlordQueryConfigProvider.java.../{application => order}/AgreementService.java.../AliYunWord2PdfService.java.../crm/service/order/CashBackService.java.../erp/controller/HouseCommissionController.java…等.../HouseCommissionQueryConfigProvider.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 34: Hooli 平台新增补贴活动的适用范围设置和查询功能,方便管理不同类型房源的补贴政策。
+package com.hoolihome.crm.query.provider;
+
+import com.hoolihome.common.query.config.QueryConfigProvider;
+import com.hoolihome.common.query.config.QueryFieldConfig;
+import com.hoolihome.common.query.dto.BaseCondition;
+import com.hoolihome.common.query.dto.OptionItem;
+import com.hoolihome.common.query.dto.SortCondition;
+import com.hoolihome.common.query.enums.PermissionStrategy;
+import com.hoolihome.common.query.enums.ValueType;
+import com.hoolihome.entity.house.HouseCommission;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+ * 供应商佣金模块查询配置

36. merge: dev_v2_filter 合入 production(架构优化 + 新功能) ⭐ 新增

  • 模块: 其他
  • 提交: 7ac56f504847(2026-07-08)
  • 涉及文件: ...4\230\345\214\226\346\226\271\346\241\210V2.md"docs/sql/crm_user_saved_filter.sqldocs/sql/platform_user_collaborator.sql...\273\347\273\237API\346\226\207\346\241\243.md".../admin/controller/PlatformUserController.java.../admin/service/PlatformUserService.java.../com/hoolihome/common/export/ExportService.java.../jackson/IncrementalUpdateJacksonModule.java…等...4\230\345\214\226\346\226\271\346\241\210V2.md"
  • 改动量: +0行 / -0行
  • 功能说明: ### Commit 36

37. refactor: Phase 1-5 架构优化(纯重构,零业务变更) ♻️ 重构

  • 模块: 其他
  • 提交: 11fad4c19daf(2026-07-08)
  • 涉及文件: ...4\230\345\214\226\346\226\271\346\241\210V2.md"docs/sql/crm_user_saved_filter.sqldocs/sql/platform_user_collaborator.sql.../com/hoolihome/common/export/ExportService.java.../jackson/IncrementalUpdateJacksonModule.java.../jackson/TrackingSettableBeanProperty.java.../common/params/IncrementalUpdateParam.java.../common/params/IncrementalUpdater.java…等...4\230\345\214\226\346\226\271\346\241\210V2.md"
  • 改动量: +0行 / -0行
  • 功能说明: 功能:将开发分支的功能合入生产环境,带来架构优化和新功能升级。
+# hoolihome-crm-api 架构优化方案 V2
+
+## 一、设计原则
+
+> 分层解耦而非合并膨胀 | 增强已有模式而非推倒重建 | 编译时安全优于运行时魔法
+
+本方案基于对项目代码的实际分析,在原方案基础上做出以下调整:
+1. **不追求一个 VO 打天下** — 按模块复杂度分级采用不同策略
+2. **利用已有 VoBuilder 模式** — 项目中 `HousePolicyVoBuilder`、`HouseCommissionVoBuilder` 等已是良好范式,增强而非替换
+3. **增量更新 JSON 化** — 新 V2 接口统一使用 `@RequestBody` + 自动字段追踪,老表单接口保持不动
+4. **导出作为正交关注点** — 不污染现有 VO,通过适配层桥接
+
+---
+
+## 二、现有基础设施能力盘点

38. feat(crm): 优化重置用户密码接口,添加操作日志记录 ⭐ 新增

  • 模块: CRM/销售
  • 提交: d9f9d9cbaab4(2026-07-07)
  • 涉及文件: .../com/hoolihome/crm/controller/HomeUserController.java
  • 改动量: +0行 / -0行
  • 功能说明: ### Commit 37
-    public ResVo resetPassword(Integer userId, String newPassword) {
+    public ResVo resetPassword(Integer userId, String newPassword, CommonReqDTO param) {

39. fix(crm-api): 修正房源设备类型参数与日志字段调整 🐛 修复

  • 模块: CRM/销售
  • 提交: 6934044c8afa(2026-07-07)
  • 涉及文件: .../src/main/java/com/hoolihome/crm/log/dto/LeadsLog.java.../src/main/java/com/hoolihome/crm/log/dto/OrderLog.java.../hoolihome/crm/service/OrderCostCalculationService.java.../src/main/java/com/hoolihome/crm/service/OrderService.java.../main/java/com/hoolihome/erp/service/HouseV2Service.java
  • 改动量: +0行 / -0行
  • 功能说明: 功能:进行系统架构重构优化,改善代码结构但不改变现有业务逻辑。
-    @LogFieldMate(fieldName = "供应商", fieldType = LogFieldType.OBJECT, service = LandlordInfoServiceImpl.class, dataCont
-    private Integer landlordId;
+    //@LogFieldMate(fieldName = "供应商", fieldType = LogFieldType.OBJECT, service = LandlordInfoServiceImpl.class, dataCo
+    //private Integer landlordId;

40. feat(crm): 新增话术分享次数统计及管理列表优化 ⭐ 新增

  • 模块: CRM/销售
  • 提交: 9f33421f23d5(2026-07-07)
  • 涉及文件: .../erp/controller/HouseRecommendController.java.../erp/controller/RecommendScriptController.java.../erp/params/RecommendScriptManagePageParam.java.../erp/service/RecommendScriptBizService.java.../hoolihome/entity/crm/CrmRecommendScript.java
  • 改动量: +0行 / -0行
  • 功能说明: ### Commit 38
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.hoolihome.crm.service.ICrmRecommendScriptService;
+import com.hoolihome.entity.crm.CrmRecommendScript;

41. feat(recommendScript): 新增推荐话术后台管理列表功能 ⭐ 新增

  • 模块: 推荐系统
  • 提交: 7a9b411658f3(2026-07-06)
  • 涉及文件: .../erp/controller/HouseRecommendController.java.../erp/controller/RecommendScriptController.java.../erp/params/HouseRecommendLogParam.java.../erp/params/RecommendScriptManagePageParam.java.../erp/service/RecommendScriptBizService.java.../erp/vo/recommend/RecommendScriptManageVo.java.../hoolihome/entity/crm/CrmHouseRecommendLog.java
  • 改动量: +0行 / -0行
  • 功能说明: 该功能主要包含两部分:一是后台管理系统新增了推荐话术的管理列表功能,方便运营人员对推荐话术进行管理;二是优化了房屋/房间的图片处理逻辑,补充了视频图片字段支持并增加了精选图片的标记能力,同时在数据同步时过滤掉租期已过期的无效记录。
+        logEntity.setScriptId(param.getScriptId());

42. refactor(house): 优化房间图片标记逻辑 ♻️ 重构

  • 模块: 房源/房型
  • 提交: b614706b4874(2026-07-06)
  • 涉及文件: .../main/java/com/hoolihome/erp/service/HouseV2Service.java.../src/main/java/com/hoolihome/erp/service/RoomV2Service.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 46: 实现房源数据与 yugo 外部系统的对接同步功能,通过调用 yugo 的 RESTful API 接口,可以将房源信息同步到 yugo 平台。
-            obj.setRoomGroupList(buildRoomGroupList(roomList, dto, videoMap, roomTypeImgMap));
+            obj.setRoomGroupList(buildRoomGroupList(roomList, dto, videoMap, roomTypeImgMap, topImageUrls));

43. refactor(house): 优化图片数据转换与补充视频图片字段 ♻️ 重构

  • 模块: 房源/房型
  • 提交: 9b5dd756dc0d(2026-07-06)
  • 涉及文件: .../src/main/java/com/hoolihome/erp/service/HouseV2Service.java.../src/main/java/com/hoolihome/pub/vo/ImageVo.java
  • 改动量: +0行 / -0行
  • 功能说明: Commit 47: 新增通过企业微信群ID查询线索的功能,用户可以直接通过企业微信群ID获取对应的线索详细信息。
-                    simpleVo.setImgList(JSON.parseArray(room.getImgUrl(), ImageFileDTO.class).stream().map(image -> {
-                        var imageVo = BeanUtil.copyProperties(image, ImageVo.class);
-                        imageVo.processData(dto.getDeviceType());
-                        return imageVo;
-                    }).collect(Collectors.toList()));
+                    simpleVo.setImgList(JSON.parseArray(room.getImgUrl(), ImageFileDTO.class).stream()
+                            .map(image -> ImageVo.buildWithDTO(image, dto.getDeviceType()))
+                            .collect(Collectors.toList()));

44. refactor(house): 优化图片处理及标记精选图片逻辑 ♻️ 重构

  • 模块: 房源/房型
  • 提交: 640f8727ae80(2026-07-06)
  • 涉及文件: .../com/hoolihome/erp/service/HouseService.java.../com/hoolihome/erp/service/HouseV2Service.java.../com/hoolihome/erp/service/RoomV2Service.java.../house/business/service/HouseService.java.../main/java/com/hoolihome/pub/vo/ImageVo.java
  • 改动量: +0行 / -0行
  • 功能说明: (FEAT_DESC_PLACEHOLDER)
+import com.hoolihome.pub.dto.ImageFileDTO;

45. fix(data-sync): 忽略已过期租期的数据记录 🐛 修复

  • 模块: 系统同步
  • 提交: a1cdef96dd6a(2026-07-06)
  • 涉及文件: .../src/main/java/com/hoolihome/data/service/IQSyncService.java.../src/main/java/com/hoolihome/data/service/SturentsSyncService.java.../src/main/java/com/hoolihome/data/service/UnilodgeSyncService.java.../src/main/java/com/hoolihome/data/service/UniteSyncService.java.../src/main/java/com/hoolihome/data/service/YugoSyncService.java
  • 改动量: +0行 / -0行
  • 功能说明: (FEAT_DESC_PLACEHOLDER)
+                        if (attr.getRentTime() != null && attr.getRentTime() < System.currentTimeMillis()) {
+                            continue;
+                        }

46. feat(house): 集成并支持yugo同步功能 ⭐ 新增

  • 模块: 房源/房型
  • 提交: d6b8e78a8294(2026-07-03)
  • 涉及文件: ...216\245\345\217\243\346\226\207\346\241\243.md".../data/controller/HouseSyncController.java.../hoolihome/data/cron/jobs/house/HouseSync.java.../hoolihome/data/service/YugoSyncService.java
  • 改动量: +0行 / -0行
  • 功能说明: (FEAT_DESC_PLACEHOLDER)
+# Student Suite RESTful API v2\.0 接口文档
+
+文档版本:v2\.0
+协议:RESTful
+基础路径:`/v2`
+授权方式:API Key
+
+- 传参位置:请求头 `X-API-Key`,不支持URL传参
+开源协议:Apache 2\.0
+联系方式:support@studentsuite\.com
+- Base url:https://api.project-g66.com/v2
+- token:Rx0lUkItwTV7ZNHwnO8p3IYYo6Hm6Bf5kBFuAPcd
+
+## 目录
+

47. feat(crm): 支持通过企业微信群ID获取线索信息 ⭐ 新增

  • 模块: CRM/销售
  • 提交: c9bdae769619(2026-07-02)
  • 涉及文件: .../hoolihome/crm/controller/LeadsController.java.../com/hoolihome/crm/service/CrmLeadsService.java
  • 改动量: +0行 / -0行
  • 功能说明: (FEAT_DESC_PLACEHOLDER)
-    public ResVo info(Long id, String externalUserId, CommonReqDTO commonReqDTO) {
+    public ResVo info(Long id, String externalUserId, String qywxGroupId, CommonReqDTO commonReqDTO) {
-        if (StrUtil.isNotBlank(externalUserId)) {
-            var platformUser = platformUserService.getById(commonReqDTO.getPlatformUserId());
-            if (platformUser == null || StrUtil.isBlank(platformUser.getQywxContactId())) {
-                return ResVo.res(Dict.create());
-            }
-            var followUser = followUserService.getByUserId(platformUser.getQywxContactId(), externalUserId);
-            if (followUser == null || !NumHelper.Int64.checkNotZero(followUser.getLeadsId())) {
-                return ResVo.res(Dict.create());
+        CrmLeads leads;
+        if (StrUtil.isNotBlank(qywxGroupId)) {
+            leads = crmLeadsService.getByGroupId(qywxGroupId);
+        } else {
+            if (StrUtil.isNotBlank(externalUserId)) {

📊 本月工作总结

2026年7月工作总结

【核心成果】本月完成47次功能提交,重点推进数据导出体系化建设,新增申请工单、收款单、新媒体线索、合作方用户等多模块异步导出功能,统一重构ExportService

报告生成时间:2026-08-05 15:47