This commit is contained in:
2026-07-04 11:10:52 +05:30
parent bd6427f5db
commit c8adaf7815
18 changed files with 1140 additions and 92 deletions

View File

@@ -82,7 +82,7 @@ func tryCustomerAssign(bookingID int) (bool, error) {
return false, fmt.Errorf("booking %d has no pickup coordinates", bookingID)
}
// Step 1 — Find the best nearby miler (shared GEO logic from crm_assignment.go).
// Step 1 — Find the best nearby miler via AI decision engine (GEORADIUS unchanged).
nearby, err := queryNearbyMilers(booking.Pickuplatitude, booking.Pickuplongitude)
if err != nil {
utils.Warn("B2CAssignment: GEO query failed", "booking_id", bookingID, "error", err)
@@ -92,7 +92,7 @@ func tryCustomerAssign(bookingID int) (bool, error) {
return false, nil
}
miler, found := pickBestMiler(nearby)
miler, agentDecisionID, found := selectMilerWithAI(&booking, nearby)
if !found {
return false, nil
}
@@ -113,11 +113,11 @@ func tryCustomerAssign(bookingID int) (bool, error) {
provider = providerResult{company: "Doormile"}
}
// Step 6 — ETA based on miler-to-pickup distance.
// Step 3 — ETA based on miler-to-pickup distance.
etaMinutes := calculateETA(miler.distanceKm)
// Steps 35 — Commit to DB and publish to NATS.
if err := commitCustomerAssignment(&booking, miler, provider, etaMinutes); err != nil {
// Steps 46 — Commit to DB and publish to NATS.
if err := commitCustomerAssignment(&booking, miler, provider, etaMinutes, agentDecisionID); err != nil {
return false, fmt.Errorf("commit: %w", err)
}
@@ -203,6 +203,7 @@ func commitCustomerAssignment(
miler *milerCandidate,
provider providerResult,
etaMinutes float64,
agentDecisionID *uint64,
) error {
milerUserID := miler.profile.Userid
@@ -213,6 +214,7 @@ func commitCustomerAssignment(
Mileruserid: milerUserID,
Assignmentstatus: constants.AssignmentAssigned,
Assignedat: time.Now(),
AgentDecisionID: agentDecisionID,
}
if err := tx.Create(&ba).Error; err != nil {
tx.Rollback()
@@ -249,6 +251,7 @@ func commitCustomerAssignment(
"estimated_price", provider.estimatedPrice,
"eta_minutes", etaMinutes,
"miler_distance_km", miler.distanceKm,
"agent_decision_id", agentDecisionID,
)
publishCustomerAssignment(booking, milerUserID, provider, etaMinutes)