func PassengerCancelOrder(uidPassenger int64, oid int64, drid int64) (string, error) { err := IsUserExist(uidPassenger) if err != nil { return "", err } var txerr error txerr = nil t := time.Now() unixTime := t.Unix() tx, err := Db.Begin() recordTxErr(&txerr, &err) //乘客订单置为无效 _, err = dbutil.DbUpdate2(tx, "UPDATE tb_order_route SET isEnable=? WHERE uid=? and oid=? and isEnable=true", false, uidPassenger, oid) recordTxErr(&txerr, &err) //找出订单的价钱 prices := []float64{} err = dbutil.DbQueryS2(tx, &prices, "SELECT price FROM tb_order NATURAL JOIN tb_order_route WHERE oid =?", oid) if len(prices) > 0 { //乘客加回钱 _, err := dbutil.DbUpdate2(tx, "UPDATE tb_user SET balance=balance+? WHERE uid=?", prices[0], uidPassenger) recordTxErr(&txerr, &err) //创建交易记录 _, err = dbutil.DbInsert2(tx, "INSERT INTO tb_deal (uid,oid,dealTime,dealPrice) VALUES (?,?,?,?)", uidPassenger, oid, unixTime, prices[0]) recordTxErr(&txerr, &err) //找出司机 tmps := []tmpOrderBean{} err = dbutil.DbQueryS2(tx, &tmps, "SELECT duid, price,oid FROM tb_order NATURAL JOIN tb_order_route WHERE drid =?", drid) recordTxErr(&txerr, &err) //司机减钱 if len(tmps) > 0 { _, err := dbutil.DbUpdate2(tx, "UPDATE tb_user SET balance=balance-? WHERE uid=?", prices[0], tmps[0].uid) recordTxErr(&txerr, &err) //创建交易记录 _, err = dbutil.DbInsert2(tx, "INSERT INTO tb_deal (uid,oid,dealTime,dealPrice) VALUES (?,?,?,?)", tmps[0].uid, tmps[0].oid, unixTime, -prices[0]) recordTxErr(&txerr, &err) } else { e := errors.New("can not find the driver") recordTxErr(&txerr, &e) } } if txerr != nil { tx.Rollback() return "", errors.New("database PassengerCancelRoute error") } else { tx.Commit() return "success", nil } }
func DriverCancelOrder(uidDriver int64, oid int64, drid int64) (string, error) { err := IsUserExist(uidDriver) if err != nil { return "", err } var txerr error txerr = nil t := time.Now() unixTime := t.Unix() tx, err := Db.Begin() recordTxErr(&txerr, &err) //司机订单置为无效 _, err = dbutil.DbUpdate2(tx, "UPDATE tb_order_route SET isEnable=? WHERE duid=? and oid=? and isEnable=true", false, uidDriver, oid) recordTxErr(&txerr, &err) //司机路线置为无效 _, err = dbutil.DbUpdate2(tx, "UPDATE tb_driver_route SET isEnable=? WHERE drid=?", false, drid) recordTxErr(&txerr, &err) //找出受到影响的乘客 effectedUser := []tmpOrderBean{} err = dbutil.DbQueryS2(tx, &effectedUser, "SELECT uid, price,oid FROM tb_order NATURAL JOIN tb_order_route WHERE drid =? and uid !=?", drid, uidDriver) recordTxErr(&txerr, &err) if len(effectedUser) > 0 { //司机减钱 _, err := dbutil.DbUpdate2(tx, "UPDATE tb_user SET balance=balance-? WHERE uid=?", effectedUser[0].price*float64(len(effectedUser)), uidDriver) recordTxErr(&txerr, &err) _, err = dbutil.DbInsert2(tx, "INSERT INTO tb_deal (uid,oid,dealTime,dealPrice) VALUES (?,?,?,?)", uidDriver, oid, unixTime, -effectedUser[0].price*float64(len(effectedUser))) recordTxErr(&txerr, &err) for _, bean := range effectedUser { //推送给用户告知订单被司机取消 //乘客订单置为无效并退回钱 _, err = dbutil.DbUpdate2(tx, "UPDATE tb_order_route SET isEnable=? WHERE uid=? and oid=?", false, bean.uid, oid) recordTxErr(&txerr, &err) _, err = dbutil.DbUpdate2(tx, "UPDATE tb_user SET balance=balance+? WHERE uid=?", bean.price, bean.uid) recordTxErr(&txerr, &err) //创建交易记录 _, err = dbutil.DbInsert2(tx, "INSERT INTO tb_deal (uid,oid,dealTime,dealPrice) VALUES (?,?,?,?)", bean.uid, bean.oid, unixTime, bean.price) recordTxErr(&txerr, &err) } } if txerr != nil { tx.Rollback() return "", errors.New("database DriverCancelRoute error") } else { tx.Commit() return "success", nil } }
func GetDriverOrderList(uid int64, page int64, pageCount int64) ([]bean.DriverOrderResponse, error) { response := []bean.DriverOrderResponse{} err := IsUserExist(uid) if err != nil { return response, err } var txerr error txerr = nil tx, err := Db.Begin() recordTxErr(&txerr, &err) err = dbutil.DbQueryS2(tx, &response, "SELECT oid,price,orderTime,orderNo,drid,isEnable"+ "FROM tb_order NATURAL JOIN tb_order_route "+ "WHERE tb_order_route.duid = ? LIMIT ?,?", uid, (page-1)*pageCount, pageCount) recordTxErr(&txerr, &err) for _, r := range response { data := []bean.DriverOrderData{} err = dbutil.DbQueryS2(tx, &data, "SELECT uid,userName,mobile,head,gender"+ "FROM tb_user NATURAL JOIN tb_order_route "+ "WHERE tb_order_route.drid = ?", r.Drid) recordTxErr(&txerr, &err) r.Passengers = append(r.Passengers, data...) } if txerr != nil { tx.Rollback() return response, errors.New("GetDriverOrderList error") } else { tx.Commit() return response, nil } }
//司机提现限制小于余额-冻结金额,订单未完成,金额冻结 func WithDrawBalance(uid int64, money float64) (string, error) { //检查用户是否存在 err := IsUserExist(uid) if err != nil { return "", err } var txerr error txerr = nil t := time.Now() unixTime := t.Unix() //查出所有进行的订单的总额 priceSlice := []float64{} err = dbutil.DbQueryS(Db, &priceSlice, "SELECT sum(price) FROM tb_order JOIN tb_order_route ON tb_order.oid = tb_order_route.oid WHERE tb_order.uid=? and tb_order_route.duid !=?, orderTime>?", uid, uid, unixTime) if err != nil || len(priceSlice) == 0 { return "", err } icePrice := priceSlice[0] tx, err := Db.Begin() recordTxErr(&txerr, &err) slice := []float64{} err = dbutil.DbQueryS2(tx, &slice, "SELECT balance FROM tb_user WHERE uid=?", uid) recordTxErr(&txerr, &err) if len(slice) > 0 { if slice[0]-icePrice < money { return "no enough money", errors.New("no enough money to withdraw or some order had not finished") } else { _, err := dbutil.DbUpdate2(tx, "UPDATE tb_user SET balance=balance-? WHERE uid=?", money, uid) recordTxErr(&txerr, &err) if txerr != nil { tx.Rollback() return "", txerr } else { tx.Commit() return "success", nil } } } else { tx.Rollback() return "", errors.New("WithDrawBalance error") } }