fix: 修复配送点地址保存后不显示

This commit is contained in:
czl231
2026-08-10 11:54:21 +08:00
parent 8e95a63503
commit b7ca0b4aca
3 changed files with 139 additions and 9 deletions

View File

@@ -9,11 +9,11 @@ import (
"git.apinb.com/heqiapp/platforms/backend/api/internal/logic/common"
"git.apinb.com/heqiapp/platforms/backend/api/internal/models"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
// ListDeliveryBasic 查询配送点分页列表。
func ListDeliveryBasic(ctx *gin.Context) {
page, size := common.PageSize(ctx)
gasIdentities := strings.Split(strings.TrimSpace(ctx.Query("gas_basic_identities")), ",")
if len(gasIdentities) == 1 && gasIdentities[0] == "" {
gasIdentities = nil
@@ -22,20 +22,69 @@ func ListDeliveryBasic(ctx *gin.Context) {
infra.Response.Error(ctx, errcode.ErrInvalidArgument)
return
}
common.ListPageFiltered[models.DeliveryBasic](ctx, func(query *gorm.DB) *gorm.DB {
if len(gasIdentities) == 0 {
return query
}
return query.Where(
var list []models.DeliveryBasic
var total int64
query := common.ApplyKeywordFilter(ctx, common.ActiveRecords(impl.DBService.Model(&models.DeliveryBasic{})), &models.DeliveryBasic{})
if len(gasIdentities) > 0 {
query = query.Where(
"gas_basic_id IN (SELECT id FROM gas_basic WHERE identity IN ? AND status <> ?)",
gasIdentities,
common.StatusArchived,
)
})
}
if err := query.Count(&total).Error; err != nil {
infra.Response.Error(ctx, err)
return
}
if err := query.Order("created_at desc").Offset((page - 1) * size).Limit(size).Find(&list).Error; err != nil {
infra.Response.Error(ctx, err)
return
}
response, err := common.PublicResourceResponse(list)
if err != nil {
infra.Response.Error(ctx, err)
return
}
// 配送点地址属于平台组织主数据;仅在本资源的受保护接口中按记录恢复,避免放宽全局敏感字段规则。
protected := common.ProtectPreciseLocation(ctx, &models.DeliveryBasic{}, response)
infra.Response.Success(ctx, gin.H{"total": total, "list": restoreDeliveryBasicAddresses(protected, list)})
}
// GetDeliveryBasic 查询一个配送点。
func GetDeliveryBasic(ctx *gin.Context) { common.GetByIdentity[models.DeliveryBasic](ctx) }
// GetDeliveryBasic 查询一个配送点,并返回编辑表单需要的组织地址
func GetDeliveryBasic(ctx *gin.Context) {
var delivery models.DeliveryBasic
if err := common.ActiveRecords(impl.DBService).Where("identity = ?", ctx.Param("identity")).First(&delivery).Error; err != nil {
common.RespondRecordError(ctx, err)
return
}
response, err := common.PublicResourceResponse(delivery)
if err != nil {
infra.Response.Error(ctx, err)
return
}
protected := common.ProtectPreciseLocation(ctx, &models.DeliveryBasic{}, response)
infra.Response.Success(ctx, restoreDeliveryBasicAddresses(protected, []models.DeliveryBasic{delivery}))
}
// restoreDeliveryBasicAddresses 将已鉴权配送点记录的地址恢复到安全响应中。
func restoreDeliveryBasicAddresses(response any, deliveries []models.DeliveryBasic) any {
switch data := response.(type) {
case []any:
for index, item := range data {
if index >= len(deliveries) {
break
}
if record, ok := item.(map[string]any); ok {
record["address"] = deliveries[index].Address
}
}
case map[string]any:
if len(deliveries) > 0 {
data["address"] = deliveries[0].Address
}
}
return response
}
// CreateDeliveryBasic 创建配送点档案。
func CreateDeliveryBasic(ctx *gin.Context) {

View File

@@ -0,0 +1,38 @@
package delivery
import (
"testing"
"git.apinb.com/heqiapp/platforms/backend/api/internal/models"
)
// TestRestoreDeliveryBasicAddresses 验证配送点列表按原顺序恢复组织地址。
func TestRestoreDeliveryBasicAddresses(t *testing.T) {
response := []any{
map[string]any{"identity": "delivery-1"},
map[string]any{"identity": "delivery-2"},
}
deliveries := []models.DeliveryBasic{
{Address: "上海市配送路 1 号"},
{Address: "上海市配送路 2 号"},
}
restored := restoreDeliveryBasicAddresses(response, deliveries).([]any)
if restored[0].(map[string]any)["address"] != deliveries[0].Address {
t.Fatalf("第一条配送点地址未正确恢复:%#v", restored[0])
}
if restored[1].(map[string]any)["address"] != deliveries[1].Address {
t.Fatalf("第二条配送点地址未正确恢复:%#v", restored[1])
}
}
// TestRestoreDeliveryBasicAddress 验证配送点详情恢复编辑所需地址。
func TestRestoreDeliveryBasicAddress(t *testing.T) {
response := map[string]any{"identity": "delivery-1"}
delivery := models.DeliveryBasic{Address: "上海市配送路 18 号"}
restored := restoreDeliveryBasicAddresses(response, []models.DeliveryBasic{delivery}).(map[string]any)
if restored["address"] != delivery.Address {
t.Fatalf("配送点详情地址未正确恢复:%#v", restored)
}
}