完善配送订单创建联动

This commit is contained in:
czl231
2026-08-23 11:30:52 +08:00
parent c07c9ea6f2
commit 59a01192c0
15 changed files with 935 additions and 163 deletions

View File

@@ -1,7 +1,10 @@
// 功能描述:实现配送点范围内的用户、服务关系和收货地址管理。
// 版本v1.1.0。
package delivery
import (
"errors"
"strings"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/infra"
@@ -231,16 +234,35 @@ func ArchiveUser(ctx *gin.Context) {
}
func addressQuery(pointID uint64) *gorm.DB {
return common.ActiveRecords(db().Model(&models.UserAddress{})).
return addressQueryWithDatabase(db(), pointID)
}
// addressQueryWithDatabase 构造配送点有效服务用户的地址范围,便于独立验证查询约束。
func addressQueryWithDatabase(database *gorm.DB, pointID uint64) *gorm.DB {
return common.ActiveRecords(database.Model(&models.UserAddress{})).
Joins("JOIN user_service_relation ON user_service_relation.user_account_id = user_address.user_account_id AND user_service_relation.status <> ?",
common.StatusArchived).Where("user_service_relation.delivery_basic_id = ?", pointID)
}
// addressQueryForContract 将当前配送点地址进一步限定为合同签约用户。
func addressQueryForContract(query *gorm.DB, userAccountID uint64) *gorm.DB {
return query.Where("user_address.user_account_id = ?", userAccountID)
}
func ListAddress(ctx *gin.Context) {
point, _, ok := currentScope(ctx)
if ok {
listScoped(ctx, &models.UserAddress{}, addressQuery(point.ID), "user_address.created_at desc")
if !ok {
return
}
query := addressQuery(point.ID)
if contractIdentity := strings.TrimSpace(ctx.Query("gasorder_contract_identity")); contractIdentity != "" {
contract, valid := scopedContract(ctx, contractIdentity, point.ID)
if !valid {
return
}
query = addressQueryForContract(query, contract.UserAccountID)
}
listScoped(ctx, &models.UserAddress{}, query, "user_address.is_default desc, user_address.created_at desc")
}
func GetAddress(ctx *gin.Context) {