Control PWM motor running time with millis

It looks like you're setting pump_tim_cur_millis every time loop() is run. And then immediately you check to see if 2000 milliseconds have passed. I don't think this is the right place to set pump_tim_cur_millis.

It looks like pump_tim_cur_millis is a time stamp that is supposed to contain the time that the pump was turned on. Maybe you should move that line to the place where you turn on the pump.