// 功能描述:向用户本人提供供气订单的配送人员、配送点、资质与交付状态;版本:1.0.0。 package user import ( "time" "git.apinb.com/bsm-sdk/core/infra" "git.apinb.com/heqiapp/platforms/backend/api/internal/impl" common "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/common" "git.apinb.com/heqiapp/platforms/backend/api/internal/models" "github.com/gin-gonic/gin" ) // GetGasOrderDelivery 先按当前用户限定订单,再读取关联履约事实;不下发员工手机号或内部账号。 func GetGasOrderDelivery(ctx *gin.Context) { account, ok := common.UserAccount(ctx) if !ok { return } var order models.GasorderBasic if err := impl.DBService.Where("identity = ? AND user_account_id = ? AND status <> ?", ctx.Param("identity"), account.ID, common.StatusArchived).First(&order).Error; err != nil { gasDetailError(ctx, err) return } var station models.GasBasic if order.GasBasicID != 0 { if err := impl.DBService.Where("id = ? AND status = ?", order.GasBasicID, common.StatusEnable).Find(&station).Error; err != nil { gasDetailError(ctx, err) return } } var delivery models.DeliveryBasic if order.DeliveryBasicID != 0 { if err := impl.DBService.Where("id = ? AND status = ?", order.DeliveryBasicID, common.StatusEnable).Find(&delivery).Error; err != nil { gasDetailError(ctx, err) return } } var staff models.StaffAccount if order.StaffAccountID != 0 { if err := impl.DBService.Where("id = ? AND role_code = ? AND status = ?", order.StaffAccountID, "delivery", common.StatusEnable).Find(&staff).Error; err != nil { gasDetailError(ctx, err) return } } var credential models.StaffCredential if staff.ID != 0 { if err := impl.DBService.Where("staff_account_id = ? AND status = ? AND (expired_at IS NULL OR expired_at > ?)", staff.ID, common.StatusEnable, time.Now()).Order("expired_at desc nulls first, id desc").Limit(1).Find(&credential).Error; err != nil { gasDetailError(ctx, err) return } } var track models.GasorderTrack if err := impl.DBService.Where("gasorder_basic_id = ? AND status <> ?", order.ID, common.StatusArchived).Order("attempt_no desc, id desc").Limit(1).Find(&track).Error; err != nil { gasDetailError(ctx, err) return } var items []models.GasorderItem if err := impl.DBService.Where("gasorder_basic_id = ?", order.ID).Order("created_at, id").Find(&items).Error; err != nil { gasDetailError(ctx, err) return } products := make([]gin.H, 0, len(items)) for _, item := range items { products = append(products, gin.H{"name": item.ProductTypeName, "quantity": 1}) } response := gin.H{ "identity": order.Identity, "order_no": order.OrderNo, "status_code": order.OrderStatus, "status_name": gasOrderStatusName(order.OrderStatus), "status_message": deliveryStatusMessage(order.OrderStatus), "appointment_at": order.AppointmentAt, "address": order.Address, "contact_name": order.ContactName, "contact_phone_masked": common.MaskPhone(order.ContactPhone), "station_name": station.Name, "delivery_name": delivery.Name, "delivery_address": delivery.Address, "staff_name": staff.Name, "staff_avatar": "", "staff_assigned": staff.ID != 0, "staff_avatar_available": staff.Avatar != "", "credential_verified": credential.ID != 0, "credential_type": credential.CredentialType, "track_available": track.ID != 0, "track_started_at": nullableTrackTime(track.ID != 0, track.StartedAt), "track_updated_at": nullableTrackTime(track.ID != 0, track.UpdatedAt), "products": products, "controlled_call_available": false, "message_available": false, "vehicle_configured": false, } infra.Response.Success(ctx, response) } // deliveryStatusMessage 只解释已有订单状态,不推断实时位置或预计到达时间。 func deliveryStatusMessage(status int) string { switch status { case 18, 19, 20, 35: return "订单正在准备配送" case 33: return "配送员正在履约,请留意订单状态更新" case 34: return "商品已到达,请核对后确认签收" case 23: return "本次配送已完成" case 21: return "配送出现异常,请联系平台处理" default: return "当前订单尚未进入配送阶段" } } func nullableTrackTime(available bool, value time.Time) any { if !available || value.IsZero() { return nil } return value }