service.xpcool.com/internal/service/house/community/community.go
夏犀麟 4b3c00270f
Some checks failed
Build and Deploy (service.xpcool.com) / build-and-deploy (push) Failing after 31s
feat(i18n): 中文化校验提示与服务层错误信息
将 api 层校验规则提示语、service 层 gerror.Wrap 与 response.Error
错误信息、panic 未注册提示统一改为中文,并同步中文化 cmd 路由注释
与变更记录。仅涉及注释、文档与字符串改动,无业务逻辑变更。
2026-09-13 23:22:46 +08:00

114 lines
3.4 KiB
Go

// Package house_community 提供楼盘/小区领域服务。
package house_community
import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"service.xpcool.com/internal/dao"
"service.xpcool.com/internal/model/do"
"service.xpcool.com/internal/model/dto"
"service.xpcool.com/internal/model/entity"
)
// ICommunity 小区/楼盘领域服务接口。
type ICommunity interface {
List(context.Context, int, int, string, string) ([]entity.HouseCommunity, int, error)
Create(context.Context, dto.HouseCommunityInput) (uint64, error)
Update(context.Context, dto.HouseCommunityInput) error
Delete(context.Context, uint64) error
}
type community struct{}
var localCommunity ICommunity
func NewCommunity() ICommunity { return &community{} }
// Community 返回已注册的小区服务实现。
func Community() ICommunity {
if localCommunity == nil {
panic("Community 实现未注册")
}
return localCommunity
}
// RegisterCommunity 注册小区服务实现。
func RegisterCommunity(i ICommunity) { localCommunity = i }
// List 分页查询小区,支持关键字(名称)与区域过滤。
func (s *community) List(ctx context.Context, page, size int, keyword, region string) ([]entity.HouseCommunity, int, error) {
m := dao.HouseCommunity.Ctx(ctx)
if keyword != "" {
m = m.WhereLike("name", "%"+keyword+"%")
}
if region != "" {
m = m.Where("region", region)
}
total, err := m.Clone().Count()
if err != nil {
return nil, 0, gerror.Wrap(err, "统计小区总数失败")
}
var list []entity.HouseCommunity
if err = m.Clone().Page(page, size).OrderDesc("id").Scan(&list); err != nil {
return nil, 0, gerror.Wrap(err, "查询小区列表失败")
}
return list, total, nil
}
// Create 新增小区。
func (s *community) Create(ctx context.Context, in dto.HouseCommunityInput) (uint64, error) {
id, err := dao.HouseCommunity.Ctx(ctx).Data(do.HouseCommunity{
Name: in.Name,
Region: in.Region,
BusinessDistrict: in.BusinessDistrict,
Address: in.Address,
Lng: in.Lng,
Lat: in.Lat,
BuildYear: in.BuildYear,
Households: in.Households,
PlotRatio: in.PlotRatio,
GreenRate: in.GreenRate,
PropertyCompany: in.PropertyCompany,
PropertyFee: in.PropertyFee,
Developer: in.Developer,
Source: in.Source,
}).InsertAndGetId()
if err != nil {
return 0, gerror.Wrap(err, "新增小区失败")
}
return uint64(id), nil
}
// Update 更新小区。
func (s *community) Update(ctx context.Context, in dto.HouseCommunityInput) error {
_, err := dao.HouseCommunity.Ctx(ctx).Where(do.HouseCommunity{Id: in.Id}).Data(do.HouseCommunity{
Name: in.Name,
Region: in.Region,
BusinessDistrict: in.BusinessDistrict,
Address: in.Address,
Lng: in.Lng,
Lat: in.Lat,
BuildYear: in.BuildYear,
Households: in.Households,
PlotRatio: in.PlotRatio,
GreenRate: in.GreenRate,
PropertyCompany: in.PropertyCompany,
PropertyFee: in.PropertyFee,
Developer: in.Developer,
}).Update()
if err != nil {
return gerror.Wrap(err, "更新小区失败")
}
return nil
}
// Delete 软删除小区。
func (s *community) Delete(ctx context.Context, id uint64) error {
if _, err := dao.HouseCommunity.Ctx(ctx).Where(do.HouseCommunity{Id: id}).Delete(); err != nil {
return gerror.Wrap(err, "删除小区失败")
}
return nil
}