To solve this problem, we first need to define the variables and the objective function. Let's denote the number of bottles of black milk tea as $B$ and the number of bottles of green milk tea as $G$. The objective is to maximize profit, which can be calculated as $2.5B + 7G$.

The constraints are:
1. The total amount of milk used does not exceed 50000 ml. Since a bottle of black milk tea contains 300 ml of milk and a bottle of green milk tea contains 200 ml of milk, we have $300B + 200G \leq 50000$.
2. The shop needs to make at least three times the number of bottles of black milk tea than green milk tea, so $B \geq 3G$.
3. The shop needs to make at least 10 bottles of green milk tea, so $G \geq 10$.

All variables are non-negative since they represent quantities of items.

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Milk_Tea_Optimization")

# Define the variables
B = m.addVar(name='Black_Milk_Tea', vtype=GRB.INTEGER, lb=0)
G = m.addVar(name='Green_Milk_Tea', vtype=GRB.INTEGER, lb=10)

# Set the objective function
m.setObjective(2.5*B + 7*G, GRB.MAXIMIZE)

# Add constraints
m.addConstr(300*B + 200*G <= 50000, name='Milk_Constraint')
m.addConstr(B >= 3*G, name='Black_vs_Green_Constraint')

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print('Optimal solution found:')
    print(f'Number of Black Milk Tea bottles: {B.x}')
    print(f'Number of Green Milk Tea bottles: {G.x}')
    print(f'Total profit: ${2.5*B.x + 7*G.x:.2f}')
else:
    print('No optimal solution found')
```