Пример #1
0
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
	}
}
Пример #2
0
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
	}
}
Пример #3
0
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
	}
}
Пример #4
0
//司机提现限制小于余额-冻结金额,订单未完成,金额冻结
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")
	}
}