Some checks failed
Build and Deploy (service.xpcool.com) / build-and-deploy (push) Failing after 35s
- 新增新房预售证表 house_presale 存储预售许可信息 - 为 house_community 表添加 avg_price 字段存储小区参考均价 - 增强服务器操作审计日志功能,新增管理员账号、IP归属地、错误信息、UA等字段 - 实现纯Go版IP归属地离线解析器,无外部依赖,支持二分查找 - 优化看房列表查询逻辑,修复Fields设置位置导致的SQL语法错误 - 集成招聘模块,添加独立数据库配置和Bark推送服务支持 - 重构日志查询接口,支持多维度筛选和综合分页列表展示 - 更新DAO实体结构同步数据库表结构调整
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
// Package house_presale 提供新房预售证领域服务。
|
|
package house_presale
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
|
|
"service.xpcool.com/internal/dao"
|
|
"service.xpcool.com/internal/model/dto"
|
|
)
|
|
|
|
// IPresale 新房预售证领域服务接口。
|
|
type IPresale interface {
|
|
List(context.Context, int, int, string, string, string) ([]dto.HousePresaleVO, int, error)
|
|
}
|
|
|
|
type presale struct{}
|
|
|
|
var localPresale IPresale
|
|
|
|
func NewPresale() IPresale { return &presale{} }
|
|
|
|
// Presale 返回已注册的预售证服务实现。
|
|
func Presale() IPresale {
|
|
if localPresale == nil {
|
|
panic("Presale implementation not registered")
|
|
}
|
|
return localPresale
|
|
}
|
|
|
|
// RegisterPresale 注册预售证服务实现。
|
|
func RegisterPresale(i IPresale) { localPresale = i }
|
|
|
|
// List 分页查询新房预售证,按 id 倒序(最新发证在前)。
|
|
func (s *presale) List(ctx context.Context, page, size int, region, keyword, purpose string) ([]dto.HousePresaleVO, int, error) {
|
|
m := dao.HousePresale.Ctx(ctx)
|
|
if region != "" {
|
|
m = m.Where("region", region)
|
|
}
|
|
if purpose != "" {
|
|
m = m.Where("purpose", purpose)
|
|
}
|
|
if keyword != "" {
|
|
m = m.Where("community_name LIKE ? OR developer LIKE ? OR presale_no LIKE ?",
|
|
"%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
|
|
}
|
|
total, err := m.Clone().Count()
|
|
if err != nil {
|
|
return nil, 0, gerror.Wrap(err, "count presale")
|
|
}
|
|
var list []dto.HousePresaleVO
|
|
if err = m.Clone().Page(page, size).OrderDesc("id").Scan(&list); err != nil {
|
|
return nil, 0, gerror.Wrap(err, "query presale list")
|
|
}
|
|
return list, total, nil
|
|
}
|