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.sql、docs/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.sql、docs/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